CICD-SEC-6

定義

不十分な認証情報衛生のリスクでは認証情報に関するアクセス制御に関連する欠陥、セキュアでないシークレット管理、過度に寛容な認証情報により、パイプライン全体に広がるさまざまなシークレットやトークンを取得して使用する攻撃者の能力に対処します。

解説

CI/CD 環境は相互に通信および認証を行う複数のシステムで構築されており、認証情報が存在するコンテキストが多種多様であるため、認証情報を保護するうえで大きな課題となっています。

アプリケーション認証情報は実行時にアプリケーションで使用され、本番システムへの認証情報はインフラストラクチャ、アーティファクト、アプリを本番環境にデプロイするパイプラインで使用され、エンジニアはテスト環境の一部として、およびコードとアーティファクトの中で使用します。

このような多様なコンテキストは、それらを保存および使用する大量の手法および技法と相まって、認証情報が安全に使用されない可能性が大きくなります。認証情報衛生 (credential hygiene) に影響を与えるいくつかの主要な欠陥は以下のとおりです。

  • 認証情報を含むコードが SCM リポジトリのブランチの一つにプッシュされている: これは誤って (コード内にシークレットの存在に気付かすに) 、または故意に (そのリスクを理解せずに) 行われた可能性があります。その瞬間から、認証情報はリポジトリへの読み取りアクセスを持つすべての人に開示され、プッシュしたブランチから削除してもコミット履歴には残り続け、リポジトリにアクセスできる人であれば誰でも閲覧できます。

  • ビルドおよびデプロイプロセス内で安全に使用されない認証情報: これらの認証情報はコードリポジトリへのアクセス、アーティファクトリポジトリへの読み書き、本番環境へのリソースとアーティファクトのデプロイに使用されます。大量のパイプラインとターゲットシステムにアクセスする必要があるため、以下のことを理解することが不可欠です。

    • どのコンテキストで、そのような手法で、各認証情報セットが使用されているか?

    • 各パイプラインはその目的を達成するために必要な認証情報にのみアクセスできるか?

    • パイプラインを流れるレビューされていないコードから認証情報にアクセスできるか?

    • これらの認証情報がどのように呼び出されビルドに注入されるのか?これらの認証情報は実行時のみ、または必要とされるコンテキストからのみアクセス可能か?

  • コンテナイメージレイヤの認証情報: イメージをビルドするためにのみ必要な認証情報がイメージレイヤの一つに依然として存在し、イメージをダウンロードできる人であれば誰でも利用できます。

  • コンソール出力に表示される認証情報: パイプラインで使用される認証情報は故意にせよ不注意にせよ、コンソール出力に表示されることがよくあります。このため認証情報はログに平文で開示されたままとなり、ビルド結果にアクセスできる人であれば誰でも閲覧できてしまう可能性があります。これらのログはログ管理システムに流れる可能性があり、開示領域が拡大することになります。

  • ローテーションされない認証情報: 認証情報はエンジニアリングエコシステム全体に広がっているため、多数の従業員や請負業者に開示されています。認証情報をローテーションしないと有効な認証情報を持つ人やアーティファクトが絶えず増加していきます。これは特にパイプラインで使用される認証情報 (例えばデプロイキー) に当てはまります。パイプラインでは「壊れていなければ修正しない」という方針で管理されていることがよくあり、有効な認証情報が長年にわたりローテーションされないままになっています。

影響

認証情報は、価値の高いリソースにアクセスしたり、悪意のあるコードやアーティファクトをデプロイするために使用しようとする攻撃者が最も求めるオブジェクトです。このコンテキストでは、エンジニアリング環境は攻撃者が認証情報を取得する複数の手段を提供します。潜在的にヒューマンエラーの可能性が大きいこと、安全な認証情報管理に関する知識の不足、認証情報ローテーションによるプロセス中断の懸念が相まって、多くの組織の価値の高いリソースが認証情報の漏洩による侵害のリスクにさらされています。

推奨事項

  • コードからデプロイメントまで、エンジニアリングエコシステム内のさまざまなシステムで見つかった認証情報を継続的にマップする手順を確立します。各認証情報セットが最小権限の原則に従っていること、およびそれを使用するサービスに必要となる正確なパーミッションセットを付与していることを確認します。

  • 複数のコンテキストにわたって同じ認証情報セットを共有することは避けます。これは最小権限の原則を達成するための複雑さを増大させるとともに、説明責任に悪影響を及ぼします。

  • 静的な認証情報よりも一時的な認証情報を使用することを選択します。静的な認証情報を使用する必要があるケースでは、すべての静的な認証情報を定期的にローテーションし、古くなった認証情報を検出する手順を確立します。

  • 認証情報の使用を事前に定義された条件 (特定のソース IP や ID へスコープするなど) に限定するように構成し、侵害された場合でも、流出した認証情報が環境外で使用できないようにします。

  • コードリポジトリにプッシュされて保存されているシークレットを検出します。IDE プラグインなどのコントロールを使用して、ローカルの変更で使用されるシークレットを特定し、コードをプッシュするごとに自動スキャンし、リポジトリとその過去のコミットを定期的にスキャンします。

  • CI/CD システムで使用されるシークレットは各パイプラインやステップが必要とするシークレットのみにアクセスできるようにスコープされていることを確認します。

  • ビルトインのベンダーオプションまたはサードパーティツールを使用して、シークレットが今後のビルドのコンソール出力に表示されないようにします。既存のすべての出力にシークレットが含まれていないことを確認します。

  • コンテナイメージ、バイナリ、Helm チャートのレイヤーなど、あらゆる種類のアーティファクトからシークレットが削除されていることを検証します。

参考情報

  1. CI で使用される一般的なコードカバレッジツールである Codecov を侵害することにより、環境変数に保存されている数千の認証情報が攻撃者によって窃取されました。

    https://about.codecov.io/security-update/

  2. Travis CI はパブリックリポジトリの安全な環境変数をプルリクエストビルドに注入したため、匿名ユーザーがパブリックリポジトリに対してプルリクエストを発行することで侵害を受ける可能性がありました。

    https://travis-ci.community/t/security-bulletin/12081

  3. 攻撃者は Stack Overflow の TeamCity ビルドサーバーを侵害し、それらの安全でない保管方法が原因でシークレットを窃取できました。

    https://stackoverflow.blog/2021/01/25/a-deeper-dive-into-our-may-2019-security-incident/

  4. Samsung はパブリック GitLab リポジトリでシークレットを過度に寛容に開示していました。

    https://techcrunch.com/2019/05/08/samsung-source-code-leak/

  5. 攻撃者は、寛容な共有 AWS トークンを含む Uber のプライベート GitHub リポジトリにアクセスし、数百万人のドライバーと乗客のデータ流出につながりました。

    https://www.ftc.gov/system/files/documents/federal_register_notices/2018/04/152_3054_uber_revised_consent_analysis_pub_frn.pdf

  6. Eric Holmes による Homebrew への書き込みアクセスの獲得。Homebrew Jenkins インスタンスは実行されたビルドの環境変数を漏洩していました。これには攻撃者が Homebrew プロジェクト自体に悪意のある変更を加えることを可能にする GitHub トークンが含まれていました。

    https://medium.com/@vesirin/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab

Last updated