CI/CD セキュリティ:CI/CD パイプラインのセキュリティ確保

SHARE:

CI/CD(継続的インテグレーション/継続的デリバリーまたはデプロイメント)パイプラインは、すべての DevOps プロセスを構築する基盤です。そのため、パイプラインを構成するすべての段階、およびすべてのツールと環境において CI/CD パイプラインのセキュリティを確保することは、DevOps を導入するあらゆる組織にとって優先事項であるべきです。

CI/CD セキュリティが重要な理由と、パイプライン全体のセキュリティを強化するためのベストプラクティスについて、このホワイトペーパーでご説明します。

CI/CDセキュリティ

学ぶ内容

  • CI/CDセキュリティとは?

  • CI/CD パイプラインに対する脅威の一般的な例

  • パイプラインの各段階でリスクを検出および管理するためのベストプラクティス

CI/CD セキュリティとは?

CI/CD セキュリティは、CI/CD パイプラインのすべての段階でセキュリティリスクを特定し、軽減することを目的とした多段階のプロセスです。


CI/CD セキュリティの詳細は、各チームの CI/CD 運用の特性に応じて、チームごとに異なります。すべての CI/CD パイプラインには、ソースコードの管理、ビルド、テスト、デプロイメントといった少なくともいくつかのコア段階が含まれていますが、パイプラインに複雑さとセキュリティリスクを追加する機能ブランチがあるものもあります。同様に、複数の生産環境(Windows サーバーや Linux サーバーなど)をターゲットとする CI/CD パイプラインは、1 種類の環境だけにアプリケーションをプッシュするパイプラインよりも複雑で、セキュリティリスクも大きくなります。


したがって、CI/CDセキュリティへのアプローチ方法は、CI/CDプロセスが具体的にどのようなものか、およびそれらを実行するために使用するツールによって異なります。ただし、CI/CDパイプラインのセキュリティを確保する際の核心的な焦点は、コードがパイプラインを下る際にどの経路を通っても、すべての段階で潜在的なリスクを軽減することです。

CI/CD のセキュリティ脅威

パイプラインの仕組みを理解するだけでなく、CI/CD 運用に影響を与える可能性のあるさまざまな種類のセキュリティ脅威を認識し、それぞれに対して防御策を講じる必要があります。

CI/CD セキュリティリスクのすべての種類を、発生前に特定することは不可能ですが、一般的な例としては、次のようなものがあります。

  • オープンソースプロジェクトなどのサードパーティソースから CI/CD パイプラインにインポートされた、セキュリティが脆弱なコード。
  • ソースコードリポジトリやビルドツールへの不正アクセス。これにより、攻撃者はアプリケーションに悪意のあるコードを注入することができます。
  • 開発/テスト環境の侵害。攻撃者が重要なセキュリティテストを無効にし、パイプラインのテスト段階でチームがセキュリティ侵害を検出できなくします。
  • IaCテンプレートにパスワードをハードコーディングするなどの慣行による、パイプライン内の不適切なシークレット管理。この情報にアクセスした攻撃者は、それを悪用して侵害を実行する可能性があります。

ソフトウェアサプライチェーンのセキュリティに関するセキュリティプラクティス

ソフトウェアサプライチェーンセキュリティの基礎を学び、その複雑さを理解し、セキュリティを確保するための役立つヒントとベストプラクティスを提供します。

CI/CD パイプラインのセキュリティを確保する方法

CI/CD の脅威は、パイプラインのさまざまな段階やソフトウェアスタックのさまざまな層に影響を与えるため、CI/CD パイプラインのセキュリティには多面的なアプローチが必要です。さまざまな脅威を検知できるツールとプロセスを導入する必要があります。


以下は、CI/CD のセキュリティリスクの検知と管理に役立つツールの主なカテゴリとベストプラクティスです。

ソースコンポジション解析

ソースコンポジション解析(SCA)とは、ソースコードをスキャンして、オープンソースプロジェクトからインポートされたものなど、サードパーティのモジュールやライブラリに由来する脆弱性を特定する手法です。SCA ツールは、CI/CD パイプラインの開始時にソースリポジトリをスキャンし、対処しないまま放置すると本番アプリケーションにセキュリティの脆弱性をもたらす可能性のある依存関係を警告します。

静的アプリケーションセキュリティテスト

静的アプリケーションセキュリティテスト(SAST)は、SCA を補完し、ご自身で作成したソースコードに潜在的な脆弱性がないかを評価します。つまり、SCA は既知の脆弱性データベースに基づいてサードパーティのコードの脆弱性を特定できますが、SAST はカスタムコードを独自に分析して、不適切な入力検証などの潜在的なセキュリティ問題を検出します。


したがって、CI/CDパイプラインの初期段階でSCAに加えてSASTを実施することで、ソースコード内のリスクに対する追加の防御層を獲得できます。

CI/CD アクセス制御

CI/CD パイプライン内で、どのツールやリソースに誰がアクセスできるかをアクセス制御で管理することは、脅威アクターが開発環境に悪意のあるコードを注入する攻撃を防ぐために不可欠です。これは、2020 年に発表された悪名高い SolarWinds 侵害で用いられた攻撃手法です。

このようなリスクを管理するため、CI/CD パイプライン内の各ツールは、パスワード、アクセスキー、またはその他のアクセス制御で保護し、アクセスは、それを必要とするチームメンバーにのみ、細分化された権限に基づいて付与する必要があります。すべての開発者やエンジニアにすべての CI/CD リソースへのアクセス権を付与したくなるかもしれませんが、これはベストプラクティスではありません。これは最小権限の原則に反し、アカウントが侵害された場合に、攻撃者がチームの CI/CD 領域全体の鍵を手に入れる可能性を最大限に高めてしまいます。

機密情報の管理と CI/CD

パスワードやアクセスキーなどの秘密情報は、CI/CD プロセスの複数の段階で、コードの統合や構築、テストや本番環境へのアプリケーションのデプロイなどに必要となることがよくあります。


通常、これらの秘密情報を共有する最も簡単な方法は、CI/CD 構成ファイルや、チームがアプリケーション環境のプロビジョニングに使用する IaC テンプレートにハードコードすることです。しかし、ここでもまた、簡単な方法は安全な方法ではありません。ハードコーディングされた機密情報は、構成ファイルやIaCテンプレートを閲覧できる誰でも簡単にアクセスできてしまいます。これにより、重大なセキュリティリスクが生じます。


より良い実践方法は、機密情報を安全に保管し、CI/CDオペレーション中に必要に応じて共有するためのセキュアな機密情報管理ツールを使用することです。

レジストリスキャン

CI/CD パイプラインがコンテナを使用してアプリケーションをデプロイする場合、レジストリに入力されるコンテナイメージを自動的にスキャンすることで、保護をさらに強化することができます。レジストリスキャンは、コンテナの脆弱性をチェックし、CI/CD パイプラインの初期段階で実行したセキュリティテストで検出されなかった悪意のあるコードをチームが検出できるようにします。

レジストリスキャンは、一部の脆弱性がパイプラインのソースコード段階ではなく、後にコンテナに組み込まれる依存関係の一部として導入される可能性があるため、特に重要です。その結果、ソースコードのみをスキャンするSCA(ソフトウェアコンポーネント分析)やSAST(ソースコード分析)ツールでは、これらの脆弱性を検出できません。レジストリスキャンは、ほとんどのケースで検出可能です。

ランタイムセキュリティ

ランタイムセキュリティとは、稼働中のアプリケーション環境におけるアクティブな脅威を検知する機能で、CI/CD パイプラインの最終段階である本番環境へのデプロイメントにおける脅威の管理に役立ちます。また、「シフト・レフト」セキュリティ戦略の一環として、開発/テスト環境にもランタイムセキュリティを適用することができます。

ランタイムセキュリティは、アプリケーションログ、ネットワークメトリクス、監査ログなど、さまざまなツールやデータソースに依存しています。ランタイムセキュリティへのアプローチは、コンテナの使用の有無、使用するオーケストレーターなど、ランタイム環境の構成によって異なりますが、その基本的な目標は、ライブの脅威がエスカレートする前にそれを検出することです。

不安全なCI/CDパイプラインは、必然的に不安全なアプリケーションにつながります。アクセス制御、シークレット管理、レジストリスキャンなどの実践を通じてパイプラインのすべての段階でセキュリティリスクを管理することで、不安全なコードがパイプラインに流れ込むリスクを最小限に抑えることができます。