OSSに悪性コードが混入するソフトウェアサプライチェーン攻撃が、開発現場を大きく揺るがしている。開発者を「最も効率的な侵入ルート」と見なす構造的な背景を解説し、OSSを活用したソフトウェア開発プロセスの盲点を明らかにする。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
昨今、「Mini Shai-Hulud」をはじめとする、オープンソースソフトウェア(以下、OSS)に悪性コードが混入するソフトウェアサプライチェーン攻撃が、開発現場を大きく揺るがしています。インターネット上で無料公開され、世界中で利用されている「npm」「PyPI」などのパッケージに、いつの間にかマルウェアが混入し、取り込んだ端末やCI/CD(継続的インテグレーション/継続的デリバリー)ツールから機密情報が窃取される事故が後を絶ちません。
攻撃者にとっては、堅牢(けんろう)な本番環境よりも、高い権限を持ちながらOSSを迅速に追加、活用することが多い開発者の端末やCI/CDツールを狙う方が合理的です。開発者環境への侵害は、ステージング/本番環境のデータベース(以下、DB)へのフリーパスにつながります。
本記事では、開発者を「最も効率的な侵入ルート」と見なす構造的な背景を解説し、OSSを活用したソフトウェア開発プロセスの盲点を明らかにします。その上で、開発者を起点とする攻撃の連鎖を断つソフトウェアサプライチェーンセキュリティの在り方を提言します。
OSSの流通経路を悪用したソフトウェアサプライチェーン攻撃が、現実的な脅威として定着しました。攻撃者は本番環境を正面突破するのではなく、広く使われるnpm、PyPIなどのパッケージレジストリやOSSの依存関係に紛れ込み、開発者の端末で正規の開発行為に見せ欠けて侵入を成立させます。
Mini Shai-Huludのような事例で共通するのは、まずOSSパッケージを汚染し、取り込んだ開発者の環境で次の攻撃につなげる点です。混入するコードは派手な破壊活動よりも、機密情報窃取やリモート実行の足掛かりを作るものが多く、発覚が遅れやすい傾向があります。
重要なのは、被害の入り口が本番環境ではなく、日常の開発で必ず利用する「install」「build」といったコマンドにあることです。開発者が普段通りOSSパッケージをインストールするだけで、侵害が発生し得るのです。だからこそ、本番環境を中心とした従来の対策だけでは、ソフトウェアサプライチェーンのリスクに対応し切れません。
攻撃者の目的は、暗号化されたデータそのものを盗むことよりも、「そのデータに対して正規の手段でアクセスできる権限」を手に入れることにあります。
たとえデータベースの中身が暗号化されていても、開発者は基本的に復号済みのデータを扱うことができ、開発者が持っている“データを読み取る権限”を奪うだけで攻撃者にとっては十分だからです。開発者はこの意味で、狙われやすい位置にいます。
開発者の端末は、業務上どうしても多くの機密情報が集まりやすく、攻撃者にとって宝の山になります。例として、以下のような情報が開発者の手元に集まりやすい傾向にあります。
さらに攻撃者にとって都合が良いのは、開発現場には「早く試す」「まず動かす」という文化があり、OSSの依存パッケージの追加や変更が高速に行われる点です。急ぎの検証、暫定対応などといった、日々の作業が抜け道になります。攻撃者が開発者を狙うのは、それが攻撃にとって合理的な“最短距離”だからなのです。
悪性OSSの混入は、開発者個人のミスではなく、OSSの依存関係が膨大になった結果、チェックが追い付かないことから発生します。典型的な開発プロセスの盲点は次の通りです。
1つ目は、依存関係が深いことです。アプリケーションが直接利用するOSSライブラリは数十程度でも、その依存の依存まで含めると数百〜数千規模になります。攻撃者はこの層を狙い、目立たない場所に悪性コードを混入させます。
2つ目は、OSSの導入が速いことです。新しいOSSライブラリは、小さな検証作業のために次々に追加されていきます。レビュー対象が増え続け、全てを人手で確認するのは現実的ではありません。侵入の手口としては、次のようなものが組み合わさります。
深刻なのは、侵入が「正規のコマンド」の実行によって成立してしまう点です。「npm install」「pip install」は日常的な開発作業で使われるので、正常な開発行為と攻撃による実行を見分けるのは容易ではありません。その結果、「悪性OSSは侵入させやすい一方で、検知や抑止が難しい」という非対称なリスクを生み出します。
近年、開発者端末と同じくらい攻撃の対象になりやすいのがCI/CD環境です。CI/CDは「ビルドとテストをする場所」だけではなく、それ以外にも以下を実行します。
CI/CD環境は、機密情報が集まりやすい場所であり、「Git」へのプッシュ、プルリクエスト(PR)、タグ作成などを契機に自動でコードを実行し、ビルド中にnpmやPyPIなど組織外のコードを取得して動かす、という条件がそろった「第二の開発端末」です。
CI/CD環境が侵害されると、単に社内環境が荒らされるだけではなく、正規のビルド成果物として悪性コードが社外にも配布され得ます(※)。これはサプライチェーン攻撃の供給側に回ることを意味し、被害規模が跳ね上がる可能性があります。
※参考:大手企業が次々と被害に ソーラーウィンズから連鎖した「サプライチェーン攻撃」の脅威
ここまで見てきた通り、最新のソフトウェアサプライチェーン攻撃は、開発端末とCI/CD環境が「強い権限を持つ実行環境」になっている構造を突いて成立します。従って、その対策は、開発者の注意や個別のレビューに寄せるのではなく、依存関係の取得からビルド成果物の配布までをアーティファクト(成果物)管理ツールを使って中央で統制し、ルールを自動適用する方向に寄せるのが現実的です。
悪性OSS混入の多くは、各開発者やCI/CDツールがnpmやPyPIなどへ直接アクセスして依存を取得する構造から起きます。まずは依存取得の経路を統一し、アーティファクト管理ツールを経由させます。
これにより、依存関係が野良ルートで入ってくることを抑え、後述の検査・ブロックが効く土台ができます。
人手承認の代わりに、OSSの依存関係が入ってくる際に機械的に判定します。
重要なのは、これらを検知するだけではなく「ダウンロードさせない」まで落とし込むことです。入り口で止めると、開発者端末やCIでの実行に到達しません。
「悪性コードを含んだ成果物が正規成果物として配布され得る」という問題は、配布経路が分散しているほど深刻になります。対策として、成果物を中央に集め、配布もそこから行うようにします。
これで「どこから出た成果物か不明」「個人端末やCI/CDツールから直接公開された」といった抜け道をつぶせます。
成果物がアーティファクト管理ツールに登録されたタイミングで、依存関係や脆弱性、ライセンスの自動スキャン(SCA:Software Composition Analysis)をします。新しい脆弱性、CVE(Common Vulnerabilities and Exposures)が公開された場合は、過去に登録された成果物も含めて再評価(継続監視)し、影響を受ける成果物を即座に洗い出せるようにします。
重要なのは、“検知”にとどめず、ポリシー違反の成果物は“隔離”し、配布やデプロイ対象から自動的に除外することです。
成果物ごとにSBOMを生成、保管しておくと、インシデントが起こったときでも、判断が高速化します。
アーティファクト管理ツールの運用体制が整うと、CI/CD環境に必要な権限を整理しやすくなります。CI/CD環境には、アーティファクト管理ツールに対するアップロードやダウンロードの権限を持たせ、本番環境へのデプロイは「アーティファクト管理ツールに登録された、検査済みの成果物だけ」を対象にします。
加えて、できればCI/CDツールに直接トークンなどの認証情報をセットせず、別のシークレット管理ツールに保管するなどの対策が望ましいです。CI/CD環境を何でもできる特権環境にしないことが、現実的な落としどころです。
ソフトウェアサプライチェーン攻撃は、開発者端末やCI/CDツールの中にある、“どこか1カ所”の守りを固めるだけでは防ぎ切れません。効果が出やすいのは、次の2点を中央で押さえることです。
この「入り口」と「出口」を管理できるようになると、開発者の速度を落とさずに、悪性OSS混入やCI侵害の被害連鎖を断ちやすくなります。開発者の行動を制限するのではなく、開発者が安全に開発できるソフトウェアサプライチェーンセキュリティを設計、構築することが、これからの現実解です。
Rustでもソフトウェアサプライチェーン攻撃 「arrayref」など人気クレートで侵害
ITエンジニア必読書『徳丸本』が8年ぶりの改訂へ 「第3版」のポイントを筆者が解説
npmサプライチェーン攻撃は新段階に ClaudeやCursorを狙う自己増殖マルウェアの正体
「悪意あるnpmパッケージをインストールさせない」 GitHubが発表した2つの防止策
UPSIDER、開発者端末の侵害による不正アクセス・サービス一時停止 最終報告書を公表Copyright © ITmedia, Inc. All Rights Reserved.