サプライチェーンの脅威
依存関係が攻撃経路になる仕組みを学びます。
「サプライチェーンの脅威」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
サプライチェーン攻撃とは
ソフトウェアサプライチェーン攻撃とは、組織を直接侵害するのではなく、組織が信頼して利用するもの、つまりライブラリ、ビルドツール、コンテナのベースイメージ、更新サーバーなどを改ざんすることで組織を侵害する攻撃です。
現代のソフトウェアは数百ものサードパーティ製コンポーネントから組み立てられるため、1つの汚染された経路が、下流のすべての利用者に引き継がれます。攻撃者は一度投資するだけで、多数の被害者に到達できます。
- 信頼の逆転 — セキュリティ境界が自分のコードの外側に移ります
- 推移的な影響範囲 — 1つの悪意あるパッケージが何千ものビルドに入り込みます
依存関係の氷山
直接依存関係を1つ追加すると、選択した覚えのない推移的依存関係が数十個も取り込まれることがよくあります。一般的なNodeまたはPythonのアプリは少数のパッケージを宣言しますが、解決後には数百個になることがあります。
実際に出荷するものを確認するには、マニフェストだけでなく、解決後の完全なツリーを一覧表示します。
# npm: full resolved dependency tree
npm ls --all
# Python: pinned transitive closure
pip freeze
# count transitive nodes
npm ls --all --parseable | wc -lタイポスクワッティングと混同
攻撃者は、人気のあるパッケージに似た名前の悪意あるパッケージを公開し、致命的なタイプミスを誘います。
- タイポスクワッティング —
requestsの代わりにreqeustsを使わせます - コンボスクワッティング —
python-requestsのように、実際の名前をまねます - 依存関係の混同 — 内部の非公開パッケージと同じ名前の公開パッケージを登録し、設定を誤ったリゾルバーに攻撃者のバージョンを取得させます
信頼できる内部レジストリを固定し、スコープ付きまたは名前空間付きの非公開パッケージを使用して防御します。
アカウントとメンテナーの乗っ取り
正当で広く信頼されているパッケージでも、メンテナーのアカウントが侵害されたり、悪意あるコントリビューターが公開権限を取得したりすると、危険なものに変わる可能性があります。
近年の実際のインシデントでは、攻撃者がメンテナーの認証情報をフィッシングで盗み、インストール中にトークンを外部へ送信する汚染されたパッチリリースを公開しています。
- すべての公開用アカウントで2FAを必須にします
- スコープ付きの公開トークンと保護されたリリースを備えたパッケージを優先します
- 重要な依存関係に予期しない新しいメンテナーが追加されていないか監視します
悪意あるインストールスクリプト
多くのエコシステムでは、アプリが実行されるより前のインストール時にコードが実行されます。npm installによって、環境変数やSSHキーを盗むpostinstallフックが実行される可能性があります。
CIでは任意のインストールスクリプトを無効にし、それらを必要とするパッケージを監査します。
# npm: block lifecycle scripts during install
npm ci --ignore-scripts
# inspect what a package would run
npm view <package> scripts
# pnpm equivalent
pnpm install --ignore-scripts侵害されたビルドツールチェーン
ビルド環境そのものが価値の高い標的です。攻撃者がコンパイラー、CIランナーのイメージ、またはビルドプラグインを汚染すると、ソースコードがクリーンであっても、そこで生成されるすべてのアーティファクトにバックドアが仕込まれます。
典型的な例は、正当なコード署名キーでマルウェアに署名する、トロイの木馬化された更新メカニズムです。これにより、被害者はそれを本物として受け入れてしまいます。
- ビルドインフラストラクチャを本番環境として扱い、完全に強化します
- 一時的で再現可能なビルドランナーを使用します
- 署名キーをビルドホストから分離します
ロックファイルと整合性ハッシュ
ロックファイルは正確なバージョンとコンテンツハッシュを固定するため、再解決によって別のアーティファクトにひそかに置き換えられることを防ぎます。必ずコミットし、自由に再解決するのではなく、CIで検証させます。
整合性フィールドにはハッシュが保存されます。ダウンロードしたtarballが一致しない場合、インストールは失敗します。
# package-lock.json integrity entry
# "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
# "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
# CI must install from lock, never re-resolve
npm ci
yarn install --frozen-lockfile依存関係の脆弱性スキャン
既知の脆弱なバージョン(CVEとして追跡されます)は、サプライチェーンにおける最も一般的な弱点です。ソフトウェア構成分析(SCA)ツールは、解決後の依存関係を脆弱性データベースと照合します。
CIでスキャンを実行し、重大な検出結果があればビルドを失敗させます。
# npm built-in audit
npm audit --audit-level=high
# OSV scanner across ecosystems
osv-scanner --lockfile=package-lock.json
# Trivy for filesystem and images
trivy fs --severity HIGH,CRITICAL .固定とベンダリング
可変のバージョン範囲(^1.2.0)を指定すると、新しいリリースが自動的に取り込まれます。これは便利ですが、悪意あるパッチにさらされることになります。
- 正確なバージョンに固定し、アップグレードを意図的にレビューします
- コンテナイメージは、
latestのような変更可能なタグではなく、ダイジェストで固定します - 重要な依存関係を自分のリポジトリまたはミラーにベンダリングし、上流での削除によって障害や汚染が起きないようにします
# pin a container image by immutable digest
FROM python:3.12-slim@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f継続的な監視と来歴
サプライチェーンのセキュリティ確保は、一度きりのスキャンではなく継続的な取り組みです。何を出荷するのか、どこから来たのか、いつ脆弱になるのかを把握する必要があります。
- すべてのリリースでSBOMを生成します(次のレッスンで扱います)
- アーティファクトがどのように生成されたかを証明できるよう、ビルドの来歴を記録します
- 新たに公開されたCVEによって、すでに出荷したビルドを再評価できるよう、アドバイザリを購読します
パイプラインの脅威モデリング
信頼できない入力が入り込む可能性のあるすべての段階を洗い出します。開発者のマシン、ソース管理、依存関係レジストリ、ビルドシステム、アーティファクトストレージ、更新チャネルが対象です。それぞれが潜在的な注入ポイントです。
各段階で、ここに書き込めるのは誰か、侵害された場合に何を実行できるか、そしてどのように検知できるかを問いかけます。これにより、一般的なチェックリストではなく、優先順位付けされた対策の一覧が得られます。
理解度チェック:依存関係の混同
一般的なサプライチェーン攻撃の種類について理解度を確認しましょう。
まとめ:サプライチェーンの脅威
依存関係が攻撃経路になる理由と、そのリスクを軽減する方法を学びました。
- 信頼の逆転とは、自分で管理できない第三者にセキュリティが依存することです
- 主な脅威は、タイポスクワッティング、依存関係の混同、メンテナーの乗っ取り、悪意あるインストールスクリプト、侵害されたビルドツールチェーンです
- 中核となる防御策は、整合性ハッシュ付きロックファイル、SCAスキャン、ダイジェストによる正確な固定、公開者の2FA、継続的な監視です
次は、SBOMを使ってソフトウェアに何が含まれているかを正確に一覧化します。
よくある質問
「サプライチェーンの脅威」レッスンは無料ですか?
はい。「サプライチェーンの脅威」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「サプライチェーンの脅威」で何を学びますか?
依存関係が攻撃経路になる仕組みを学びます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「サプライチェーンの脅威」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- サプライチェーンの脅威
- ソフトウェア部品表(SBOM)
- 依存関係と成果物の署名
- CI/CDパイプラインの保護