依存関係の混同への対策
A 社は,社内で開発した共通部品をパッケージ名 acme-logger として社内レジストリに公開し,複数のアプリケーションで利用している。ビルド環境のパッケージマネージャは,社内レジストリと公開レジストリの両方を参照し,同じ名前のパッケージがあれば版番号の大きい方を取得する設定である。ある日,ビルドで取得された acme-logger の版が 99.0.0 になっており,ビルド環境から外部への不審な通信が発生していた。社内レジストリにある acme-logger の最新版は 2.3.1 である。再発防止策として,最も適切なものはどれか。
- アSCA ツールで依存パッケージを既知の脆弱性情報と照合し,脆弱性が登録されている版を検出したらビルドを停止する。
- イ公開レジストリに,acme-logger と綴りが 1,2 文字だけ異なる名前のパッケージが登録されていないかを定期的に監視する。
- ウ社内レジストリへの公開操作に多要素認証を必須とし,社内レジストリにパッケージを公開できる利用者を限定する。
- エ社内パッケージにはスコープ(名前空間)を付けた名前を用い,そのスコープのパッケージは社内レジストリだけから取得するようにパッケージマネージャを設定する。
正解と解説を見る
正解 エ
この問題の基礎知識
- ソフトウェアサプライチェーン攻撃は,開発で利用する部品やその配布経路を経由して,悪意のあるコードを利用者のシステムに入り込ませる攻撃である。
- 依存関係の混同(dependency confusion)は,社内パッケージと同じ名前で大きい版番号のパッケージを公開レジストリに公開し,両方を参照するパッケージマネージャに取得させる攻撃である。タイポスクワッティングは,有名なパッケージと綴りの似た名前で入力ミスを誘う攻撃である。
- SCA(ソフトウェア構成分析)は,利用している OSS の部品と版を把握し,既知の脆弱性情報やライセンスと照合する手法であり,脆弱性情報に登録される前の悪意のある版は検出できない。
アSCA ツールで依存パッケージを既知の脆弱性情報と照合し,脆弱性が登録されている版を検出したらビルドを停止する。
照合で検出できるのは,脆弱性情報として登録された後の版だけである。攻撃者が公開した直後の悪意のある版は登録前なので取得されてしまい,取得先が公開レジストリに切り替わるという原因も残るので,再発防止策にならない。
イ公開レジストリに,acme-logger と綴りが 1,2 文字だけ異なる名前のパッケージが登録されていないかを定期的に監視する。
綴りの似た名前で入力ミスを誘うタイポスクワッティングへの対策である。今回は社内パッケージと全く同じ名前で大きい版番号のパッケージが公開されており,この監視の対象にならない。
ウ社内レジストリへの公開操作に多要素認証を必須とし,社内レジストリにパッケージを公開できる利用者を限定する。
社内レジストリへの不正な公開を防ぐ対策である。今回の不正なパッケージは公開レジストリに公開されたものであり,社内レジストリは改ざんされていないので,再発は防げない。
エ社内パッケージにはスコープ(名前空間)を付けた名前を用い,そのスコープのパッケージは社内レジストリだけから取得するようにパッケージマネージャを設定する。正解
公開レジストリに社内パッケージと同じ名前で大きい版番号のパッケージを公開し,取得させる攻撃は依存関係の混同(dependency confusion)と呼ばれる。スコープ付きの名前とし,そのスコープの取得先を社内レジストリに限定すれば,公開レジストリから取得されなくなる。
検証用の出典出典照合済み
OWASP NPM Security Cheat Sheet(12) Prevent dependency confusion attacks) / npm Docs: scope(Associating a scope with a registry)照合の根拠(5 件)
- エ(正解)・ウ(誤り): 公開レジストリに同じ名前で大きい版番号の悪意あるパッケージを公開する攻撃が依存関係の混同であり,社内レジストリは関与しない
A dependency confusion attack occurs when an attacker publishes a malicious package on the public npm registry using the same name as your internal private package, but with a higher version number.
OWASP NPM Security Cheat Sheet · 12) Prevent dependency confusion attacks(新しいタブで開きます) - エ(正解): 社内パッケージにはスコープ付きの名前を使う
Always use scoped package names for internal packages (e.g., @yourorg/package-name instead of package-name )
OWASP NPM Security Cheat Sheet · 12) Prevent dependency confusion attacks(新しいタブで開きます) - エ(正解): スコープをレジストリに関連付けると,そのスコープのパッケージはそのレジストリだけから取得される
Once a scope is associated with a registry, any `npm install` for a package with that scope will request packages from that registry instead.
npm Docs: scope · Associating a scope with a registry(新しいタブで開きます) - イ(誤り): タイポスクワッティングは似た名前を使う攻撃で,同じ名前を使う今回の攻撃とは異なる
With typosquatting, bad actors publish malicious modules to the npm registry with names that look much like existing popular modules.
OWASP NPM Security Cheat Sheet · 10) Typosquatting attacks(新しいタブで開きます) - ア(誤り): SCA は既知の脆弱性を持つパッケージへの対策であり,依存関係の混同などの依存チェーンの悪用は別のリスクとされる
In the context of CI/CD, automated use of SCA and comparable tools can actually assist in improving security in this area. However, the CI/CD environment itself is susceptible to a different, but related, risk: dependency chain abuse.
OWASP CI/CD Security Cheat Sheet · Dependency Management(新しいタブで開きます)