NCCの研究者によると、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインは、ソフトウェアサプライチェーンにおいて攻撃対象となり得る最も危険な領域だという。
NCCの発表は、先週のセキュリティカンファレンス「Black Hat」でNCCのIain Smart氏とViktor Gazdag氏が行った「RCE-as-a-Service:実世界のCI/CDパイプライン侵害5年間から得た教訓」と題するもので、これまでの研究を基にしている。
CI/CDパイプラインは本質的にリモートコード実行(RCE)であり、企業の規模にかかわらず、侵害に至る経路は数多く存在する。
組織はパイプラインを過度に信頼しているため、こうした経路を侵害することはハッカーにとって通常、有効な攻撃手段となる。重要なデータへの不正アクセスを得られる可能性が高く、さらなる攻撃を行うために権限を昇格させることさえできるからだ。
こちらも参照:最適なサードパーティーリスク管理(TPRM)ツール
CIのアプローチがリスクを生む
CIは「継続的インテグレーション」を、CDは「継続的デリバリー」を意味する。この2つの慣行を組み合わせることで、ライフサイクル全体を通じた開発の自動化と監視が可能になる。
継続的インテグレーションでは、コードが変更された際のプロセスを開発者が自動化できる。通常、プロジェクトの特定のブランチに変更がマージされるとスクリプトが実行され、コードのテスト、ビルド、デプロイが行われる。
その目的は、すべての環境に新しいコードをデプロイするために必要な作業を減らすことだ。これは開発者だけでなく、ビジネスチームにも影響する。デプロイの強化は、現代的なSaaSアプリを支える原則群である12-Factor Appの一環であり、CI/CDのようなアプローチによってプロセスのリスクを下げることが期待されている。
オープンソースの自動化サーバーであるJenkinsは、例えば市場で最も人気のあるソリューションの1つだ。大手企業を含む多くの企業が、DevOpsの運用に利用している。研究者らはテスト中、S3バケットや環境自体の設定ミスを悪用し、さまざまな方法でJenkins環境を侵害することに成功した。
実際、組織はプロセスを高速化するためにJenkinsのようなサードパーティー製ソリューションを利用するが、権限を過剰に付与する設定は、最終的に権限昇格を招く。
こちらも参照:ハッカーがソフトウェアサプライチェーンを侵害する方法
サードパーティー製ソリューションがCI/CDパイプラインを脆弱にする
研究者らは、次のように高度なCI/CD機能を提供する人気プラットフォームに攻撃経路を発見した。GitLabなどだ。GitLab Runnerの機密性の高い機能を悪用して権限を昇格させ、秘密情報を取得した。
ここでも、権限を過剰に付与した設定では、コードをコミットする権利を持つユーザーなら誰でも、パスワードや秘密情報にアクセスできてしまう。例えば、データが環境変数に平文で保存されている場合だ。
研究者らは、特権プロセスやコンテナ(DockerやKubernetesなど)も悪用した。これらは例えばrootとして実行される一方、一部のソリューションはroot権限なしのビルドをサポートしている。
こうした攻撃はかなり典型的なものに見えるかもしれず、堅牢な設定を施せばこのような権限昇格は防げる。しかし現実には、多くの組織で適切な運用が行われておらず、セキュリティより利便性が優先されている。追加のセキュリティ設定が存在することを知らないチームや、納期のためにその設定を適用できないチームさえある。
研究者らは10のシナリオで興味深い結果を報告した。最後のシナリオは、 「開発者のノートPCを侵害した」と仮定するものだった。いくつかのエクスプロイトを連鎖させた結果、Jenkinsのマスターノードにアクセスしてすべての変数をダンプすることに成功した。デプロイメントパイプラインに過剰な権限が与えられていたため、最終的には本番環境への完全なアクセスを手に入れた。
こちらも参照:サプライチェーン攻撃を対象とする新たなオープンソースセキュリティーイニシアチブ
CI/CDパイプラインを安全にする方法
CI/CDパイプラインは、機会さえあればハッカーが攻撃する重要な環境だ。適切な設定が複雑で時間もかかるため、多くのチームは、本来そこまで多くの権限を持つべきではないサードパーティー製ツールに完全な権限を与えている。
実践的なセキュリティ対策を以下に示す。
- ここでは、最小権限の原則をチェーン全体に適用するのが正しい方向性だ。人とサードパーティー製ツールには、必要最小限の権限を割り当てる。設定には確かに時間がかかり、テストなどでバグを引き起こす可能性もあるが、それだけの価値はある。
- 可能な限り、特に管理者アカウントでは、2要素認証(2FA)と多要素認証(MFA)を有効にする。
- 認証情報に環境変数を絶対に使わない。少なくとも暗号化する。
- 追加のセキュリティ対策が必要な、パイプライン内の最も脆弱な箇所を特定する。
- 特にコミッターを対象として、セキュリティーチェックを実装する。
- 強固なベンダーポリシーを策定する。継続的デプロイでは、チームが管理していないコードを本番環境に投入するため、サプライチェーン攻撃はハッカーにとって魅力的な選択肢となる。
セットアップ段階は極めて重要だ。プロジェクトの初期段階では特に警戒する必要がある。権限昇格につながる設定ミスが見つかるのは、通常この段階だからだ。
最小権限、すなわちゼロトラストの原則はSmart氏とGazdag氏の研究で大きく取り上げられているが、両氏はネットワークのセグメンテーションやパッチ管理など、追加の制御も推奨している。
さらに読む:





