ソフトウェア開発者に とって、 アプリケーションの セキュリティを 確保する ことは 最重要課題です。 その 重要な 取り組みの 一つが、 シークレットの 管理と シークレット検出ツールの 活用です。 ここで いう シークレットとは、 APIキー、 データベースの 認証情報、 暗号化キーなど、 機密性の 高い 情報を 指します。 これらに 不正に アクセスされたり、 漏えいしたりすると、 データ侵害や 深刻な 事業損失など、 壊滅的な 結果を 招く 恐れが あります。
開発現場では、 シークレットの ハードコードが よく 見られます。 アクセス制御が 必要な 外部サービスや データベース、 その 他の コンポーネントを 手早く 簡単に 認証できる ためです。 たとえば、 特に 開発の 初期段階では、 APIキーや データベースの 認証情報が アプリケーションに 直接ハードコードされている ことは 珍しく ありません。
この 方法は 時間の 節約に なるように 思えるかもしれませんが、 シークレット検出を 利用すれば 簡単に 回避できる さまざまな セキュリティリスクを 招きます。
開発の 早い 段階で シークレットを 検出できれば、 データ侵害を 防げるとしたら どうでしょうか。 以下は、 Snyk IntelliJ IDE拡張機能が、 JavaScriptアプリケーション内で ハードコードされた シークレットや その 他の データベース認証情報を 検出している 画面です。
開発者、 DevOps担当者、 セキュリティ担当者は、 シークレットの ライフサイクル全体を 通して、 適切に 保護、 管理、 監視されるよう 継続的に 取り組んでいます。 しかし、 アプリケーションアーキテクチャが 複雑化、 分散化するにつれ、 シークレットを 安全かつ 効率的に 管理する ことは 大きな 課題と なっています。
ソフトウェア開発におけるシークレットとは? ソフトウェア開発に おける 「シークレット」とは、 漏えいすると システムや データへの 不正アクセスや 悪用に つながる 恐れの ある 機密情報を 指します。 次のような 情報が 含まれます。
パスワード:ユーザー認証で 本人確認を 行ったり、 リソースへの アクセスを 得たりする ために 使われる 秘密の フレーズや 文字列です。
APIキー:APIキーは、 APIに 対して ユーザー、 開発者、 または 呼び出し元 プログラムを 認証する ために 使われる 一意の 識別子です。
トークン:トークンは サーバーに よって 作成される データで、 ユーザーの 識別情報、 トークンの 有効性、 発行時刻などを 含む 場合が あります。 JSON Web Token (JWT)が その 代表例です。
開発者がシークレットの取り扱いでよく犯すミス 開発者は シークレットを 扱う 際に、 さまざまな ミスを 犯しが ちです。 よく ある 例を いくつか 紹介します。
シークレットの ハードコード :開発者は シークレットを アプリケーションの ソースコードに 直接 記述しが ちです。 コードベースに アクセスできる 人なら 誰でも シークレットを 取得できる 可能性が ある ため、 これは 非常に 危険な 行為です。
シークレットの 不適切な 保管 :シークレットを 暗号化せずに、 プレーンテキストファイルや 設定ファイル、 データベースに 保管する ことも よく ある ミスです。
シークレットの ローテーション不足 :シークレットを 定期的に 変更、 ローテーションする ことは、 優れた セキュリティ対策です。 しかし、 多くの 開発者は これを 見落とし、 同じ シークレットを 長期間 使い続けています。
不適切なシークレット管理がもたらす影響 不適切な シークレット管理は 広範囲に 及ぶ 深刻な 結果を 招く 可能性が あり、 ソフトウェア開発ライフサイクルに シークレット検出の 仕組みを 導入する 重要性を 示しています。
データ侵害 : 不適切な シークレット管理が もたらす 最も 差し迫った 危険な 結果は、 データ侵害の 可能性です。 漏えいした シークレットを 攻撃者が 入手すれば、 システムに 容易に 侵入し、 機密データに アクセスしたり、 インフラ全体を 掌握したりする 恐れが あります。 たとえば、 APIキーを 使って アプリケーションに なりすましたり、 データベースの 認証情報を 使って データを 盗んだり 改ざんしたり、 証明書を 使って 既存の 暗号化を 破ったりできます。 データ侵害は、 大きな 経済的損失や 評判の 低下、 法的 責任に つながる 可能性が あります。
規制への 不適合 :データプライバシーや セキュリティに 関する 規制が ますます 厳しくなるなか、 不適切な シークレット管理は コンプライアンス違反に つながる 恐れが あります。 GDPR、 CCPA、 HIPAAなどの 規制に 違反すると、 高額な 罰金や 法的 制裁を 科される 可能性が あります。
ビジネス競争力の 低下 :シークレットに よって、 独自の アルゴリズムや ビジネスロジック、 戦略的データに アクセスできる 場合が あります。 これらが 漏えいすると、 競争優位性の 喪失や 知的財産の 盗難に つながる 恐れが あります。
Gitリポジトリから シークレットが 簡単に 漏えいする 例を 紹介します。
2回目の コミットで シークレットを 削除しても、 リポジトリの 履歴には 残っており、 アクセスできる 人なら 誰でも 取得できます。
こうした 影響を 回避し、 アプリケーションの セキュリティ態勢を 強化するには、 シークレット検出と 管理の ソリューションを 活用する ことが 不可欠です。 Snykなどの ツールを 使えば、 開発者が Snyk IDE extension を インストールした 際に 開発の 早い 段階で コードベース内の 漏えいした シークレットを 見つけたり、 Snykの シークレット検出機能 を CI/CDパイプラインに 統合して 検出したりできます。
シークレット検出の仕組み シークレット検出とは、 コードベース内で 漏えいする 可能性の ある APIキー、 パスワード、 トークンなどの 機密情報、 つまり 「シークレット」を 特定する プロセスです。 こうした シークレットが 漏えいしたり 悪用されたりすると、 不正アクセスや データ侵害に つながる 恐れが あります。
シークレット検出は、 悪用される 前に 漏えいの 可能性が ある シークレットを 特定して 警告する ことで、 データ侵害の 防止に 役立ちます。 たとえば、 誤って 公開リポジトリに コミットされた シークレットを、 悪意ある 攻撃者に 見つかる 前に 検出して 削除できます。 シークレットを 効果的に 検出するには、 コードベースを 自動スキャンして 潜在的な シークレットを 探し、 警告する ツールを 使う ことが 重要です。 その 方法の 一つが、 正規表現 (regex) や 既知の パターンを 使って、 シークレットの 可能性が ある 情報を 特定する ことです。
たとえば、 次のような パターンで APIキーを 検出できます。
これは 単純な 例ですが、 基本的な 考え方は 同じです。 既知の パターンを 検索する ことで、 コード内の シークレットの 可能性が ある 情報を 特定できます。 実際の 環境では、 Snyk などの シークレット検出ツールが、 はるかに 高度な 手法で シークレットを 検出します。
CI/CDパイプラインへのシークレット検出の統合 シークレット検出の メリットを 最大限に 活用するには、 継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインに 統合する 必要が あります。 これに より、 開発プロセスの 最も 早い 段階で シークレットの 可能性が ある 情報を 検出できます。
たとえば、 新しい コミットが プッシュされる たびに シークレット検出スキャンを 実行するよう、 CI/CDパイプラインを 設定できます。 シークレットが 検出された 場合に パイプラインを 失敗させ、 チームに 問題を 通知する ことも 可能です。
この 例では、 snyk code testコマンドが パイプラインの 最初の ステップと して シークレット検出スキャンを 実行します。 シークレットが 検出されると パイプラインは 失敗し、 ビルドと デプロイの ステップは 実行されません。
Snykでシークレット検出を実装する データ侵害は、 評判や 顧客からの 信頼を 損ない、 金銭的な 制裁に つながる 恐れも ある 深刻な 事態です。 APIキー、 トークン、 パスワードなどの シークレットが 漏えいすると、 悪意ある 攻撃者に システムへの 侵入経路を 与えてしまいます。 これを 防ぐ 効果的な 方法の 一つは、 開発パイプラインに シークレット検出を 導入する ことです。 この 章では、 Snykの SAST を 活用して シークレットの コミットを 回避し、 データ侵害を 防ぐ 方法を 説明します。
Snykのシークレット検出機能の概要 Snykは、 包括的な アプリケーションセキュリティソリューションの 一環と して、 高精度な シークレット検出機能を 提供しています。 コードリポジトリを スキャンして シークレットの 可能性が ある 情報を 見つけ、 安全に 通知できます。 この 機能は、 コーディング中に リアルタイムの フィードバックや 提案を 提供する Snyk Code 製品に 組み込まれています。
Snykの シークレット検出機能は、 高度な パターンと ヒューリスティックを 用いて、 攻撃者に 悪用される 恐れの ある コード内の シークレットを 特定します。
リアルタイムのシークレット検出に向けたSnyk IDE拡張機能の設定 Snykの シークレット検出機能を 使うには、 Snyk IDE拡張機能を 設定する 必要が あります。 この 拡張機能は Snykの 機能を 開発環境に 直接 統合し、 コーディング中に リアルタイムの フィードバックや 提案を 提供します。
IDE拡張機能を 設定する 手順 :
IDE (Visual Studio Code、 IntelliJなど)の 拡張機能セクションを 開きます
「Snyk」を 検索します
Snyk拡張機能を インストールします
プラグインを 起動するか、 IDEを 再起動します
Snyk拡張機能を インストールすると、 開発中に コードを 自動的に スキャンし、 シークレットの 可能性が ある 情報を 検出します。
Snykでシークレットのコミットを防ぐためのベストプラクティス Snykで シークレットを 検出する 際は、 いくつかの ベストプラクティスに 従うことが 重要です。
シークレットを コードリポジトリに コミットしないでください。 プライベートリポジトリを 使っていても、 漏えいの リスクは 常に あります。 Snykが シークレットを 検出した 場合は、 コードから 削除し、 可能であれば その シークレットを 無効化してください。
シークレットの 保管には 環境変数を 使用してください。 シークレットを コードに ハードコードするのではなく、 環境変数を 使用しましょう。 シークレットを 管理しやすくなり、 コードリポジトリに コミットされる リスクを 低減できます。
Snykで コードリポジトリを 定期的に スキャンしてください。 定期的な スキャンに より、 シークレットの 見落としを 防げます。 Snykで 自動スキャンを 設定すれば、 簡単に 実施できます。
シークレット管理の 重要性を チームに 周知してください。 チーム全員が、 シークレットを コミットする リスクと Snykの シークレット検出機能を 使う 重要性を 理解する 必要が あります。
これらの ベストプラクティスに 従い、 Snykを 活用する ことで、 シークレットの 漏えいや データ侵害の リスクを 大幅に 低減できます。 セキュリティは 一度きりの 作業ではなく、 継続的な 取り組みです。 Snykに こちら から 登録して、 セキュリティ強化への 第一歩を 踏み出しましょう。
Snykの 学習リソースで、 シークレット管理、 ツール、 ベストプラクティス の 詳細を ご覧ください。
シークレット管理の高度な戦略 アプリケーションセキュリティと ソフトウェア開発に おいて、 APIキー、 パスワード、 証明書などの シークレット管理は 重要な 課題です。 適切な シークレット管理は、 コンプライアンスの 強化や データ侵害の 防止に つながります。 ここでは、 シークレット管理を 強化する ための 高度な 戦略を 紹介します。
環境変数を活用したシークレット管理 シークレットを 安全に 管理する 方法の 一つは、 環境変数を 使う ことです。 環境変数は 多くの プログラミング言語で 利用でき、 シークレットを コードベースから 分離できます。 特に オープンソースプロジェクトでは、 シークレットの 偶発的な 漏えいを 防ぐうえで 重要です。
Pythonでの 例を 見てみましょう。
この 例では、 SECRET_KEYは シークレットキーを 保管する 環境変数です。 os.environ.get()関数は 環境変数の 値を 取得します。 環境変数が 見つからない 場合は、 Noneを 返します。
シークレット管理ツールとサービスの活用 シークレット管理ツールや サービスを 活用する ことで、 シークレットの セキュリティを 大幅に 強化できます。 HashiCorp Vault などの ツールや、 AWS Secrets Manager 、Azure Key Vault などの クラウドサービスは、 シークレットを 安全に 保管し、 アクセスを 厳格に 制御するのに 役立ちます。
AWS SDK for Pythonを 使って AWS Secrets Managerから シークレットを 取得する 例を 紹介します。
この 例では、 my_secretは AWS Secrets Managerに 保存された シークレットの 名前です。 get_secret_value()関数で シークレットを 取得します。
シークレットのローテーションを自動化する シークレットの ローテーションを 自動化する ことは、 シークレット管理に おいて 重要な 要素です。 定期的に シークレットを 変更する ことで、 攻撃者が 古い シークレットを 使って 不正アクセスする リスクを 防げます。
AWS Secrets Managerなどの シークレット管理サービスを 利用すれば、 自動化できます。 AWS Secrets Managerは、 Amazon RDS、 Amazon DocumentDB、 Amazon Redshiftの シークレットの 自動ローテーションに 対応しています。
AWS Secrets Managerで シークレットの 自動ローテーションを 設定する 方法を、 以下の 例で 説明します。
この 例では、 my_secretは ローテーション対象の シークレット名、 my_lambda_functionは ローテーションを 実行する AWS Lambda関数、 AutomaticallyAfterDaysは ローテーションの 間 隔 (日数)です。
アプリケーションの セキュリティを 強化するには、 Snyk のような セキュリティ製品の 利用を ご検討ください。 Snykの シークレット検出機能は、 コードベース内の シークレットを 特定し、 公開を 防ぎます。 こちら から Snykに 登録できます。
ここで 紹介した 方法は、 シークレット管理を 強化する 数多くの 手段の 一部です。 これらを ほかの 予防的な セキュリティ対策と 組み合わせる ことで、 脅威に 対する アプリケーションの 防御力を 大幅に 高め、 ソフトウェア開発と コンプライアンスへの 取り組みを 安全かつ 効果的に 進められます。
シークレットの漏えいによる過去のデータ侵害 データ侵害は、 アプリケーションセキュリティと ソフトウェア開発の 分野で 長年に わたり 問題と なっています。 よく ある 原因の 一つが、 シークレット (認証情報)の 漏えいです。 不正アクセスや データ流出に つながります。 この セクションでは、 シークレットの 漏えいが 原因で 発生した 過去の データ侵害を 取り上げ、 そこから 得られた 教訓と シークレット検出の 重要性に ついて 説明します。
Uberのデータ侵害:認証情報の漏えいが招いた結果 201 6年、 Uberで 大規模な データ侵害が 発生し、 5,700万人の 顧客と ドライバーの データが 漏えいしました。 原因は、 開発者が 使用していた 非公開の GitHubリポジトリに AWS認証情報が 露出していた ことでした。 攻撃者は その 認証情報を 入手して Uberの AWSアカウントに アクセスし、 大量の 機密データを ダウンロードしました。
この インシデントは、 認証情報を 安全に 保管する ことの 重要性と、 非公開の リポジトリであっても、 コードリポジトリに シークレットを 保存する リスクを 浮き彫りに しています。
Cloudflare:盗まれたOkta認証トークンの影響 201 9年、 Cloudflareは 大規模な データ侵害の 被害に 遭いました。 Cloudflareの 従業員から 盗まれた Oktaの 認証トークンが GitHub上に あったことが 原因です。 攻撃者は この トークンを 使って Cloudflareの 社内システムに アクセスし、 顧客の 機密データを 漏えいさせました。
この インシデントは、 認証トークンなどの 秘密鍵を、たとえ安全だと 考えられていても コードリポジトリに 保存する ことに、 潜在的な リスクが あると 示しています。
Codecov:ハードコードされたシークレットが大規模な侵害につながった経緯 202 1年、 コードカバレッジレポートを 開発者向けに 提供する プラットフォームCodecovで、 大規模な データ侵害が 発生しました。 攻撃者は Dockerイメージの 作成プロセスに あった バグを 悪用し、 ハードコードされた シークレットを 露出させました。 攻撃者は これらの シークレットを 使って Codecovの Bash Uploaderスクリプトを 改変し、 ユーザー環境から 機密データを 外部に 送信できるようにしました。
この インシデントから 得られる 教訓は 何でしょうか。 ハードコードされた シークレットは 重大な リスクと なります。 こうした リスクを 軽減するには、 シークレットの 検出と 管理に Snykのような ツールを 活用するのが 最善です。
Sumo Logic:得られた教訓 クラウドベースの ログ管理企業Sumo Logicは 202 3年、 AWSアカウントの 侵害を 伴う セキュリティ侵害を 発表しました。 この 侵害は 202 3年11月3日に 検出されました。 認証情報が 侵害され、 不正アクセスが 発生した ものの、 同社は ネットワークと システムに 影響は なく、 顧客データも 安全に 暗号化されている ことを 確認しました。 これを 受け、 Sumo Logicは 影響を 受けた インフラを 保護し、 漏えいした 可能性の ある 認証情報を 更新しました。
GitHub:非公開SSH秘密鍵の漏えい事例 皮肉な ことに、 コードホスティングで 広く 利用されている GitHubでも、 SSH秘密鍵の 漏えいに よる データ侵害が 発生しました。 この 鍵は 誤って 公開リポジトリに コミットされ、 不正ユーザーが GitHubの 社内システムに アクセスする ために 使われました。
この インシデントも、 ここまでに 取り上げた 多くの 事例と 同様に、 データ侵害を 防ぐうえで、 シークレットを 適切に 管理・検出する ことが 重要だと 示しています。