SBOMは「インストールしたもの」を証明する。しかし、「インストールすべきだったか」は証明できない。

SBOMはレシートのようなものです。何がインストールされたかを教えてくれますが、それをインストールすることが正しかったかどうかまでは教えてくれません。

ほとんどのチームは、CI/CDパイプラインでSBOMとCVEスキャンを利用しています。これらのツールは、既存のパッケージに含まれる既知の脆弱性を見つけるには非常に優れています。しかし、AIコーディングエージェントを使用する場合、そこには巨大な盲点が存在します。

AIエージェントはパッケージ名を提案します。その名前が実在するものか、ハルシネーション(幻覚)か、あるいはタイポスクワッティング(打ち間違いを狙った悪意ある名前)かに関わらず、エージェントは全く同じ自信を持って提案してきます。

もし攻撃者が昨日、悪意のあるパッケージ名を登録したとしたら、それにはまだCVEが付与されていません。インストール後のスキャンはそれを検出し、「クリーン」と判定します。スキャン自体は正直ですが、間違った問いに答えてしまっているのです。それは「これは悪だと分かっているものか?」という問いに答えているだけで、「この名前が我々のスタックに存在してよいものか?」という問いには答えていません。

SBOMが悪意のあるパッケージを記録する頃には、すでに被害は発生しています。悪意のあるコードは、多くの場合、postinstallスクリプトを介してインストールフェーズ中に実行されます。スキャナーがファイルツリーを認識する前に、環境変数やCIのシークレットを盗み取ってしまう可能性があるのです。

副作用が生じる前に、判定を下す必要があります。

私はこの問題を解決するために、シンプルなツールを作成しました。これは、インストール前のプロベナンス・ゲート(出所確認ゲート)です。スキャナーとは異なる仕組みで動作します。

npm install が実行されるに名前をチェックします。 • 保証されたベースラインに対して「デフォルト拒否(default-deny)」のアプローチを採用しています。 • 人気パッケージとの編集距離を測定することで、タイポスクワッティングを検知します。 • 既知の安全な名前のいずれにも一致しないハルシネーションを捕捉します。 • .npmrc を検証し、不正なレジストリに接続していないことを確認します。

このツールはオフライン、キーレスで、Pythonの標準ライブラリのみを使用します。ネットワークには接続しません。パッケージの解決(resolve)も行いません。単に提案された名前を見て、「この名前を保証できるか?」と問いかけるだけです。

名前が保証済みのスナップショットにも、人気のあるベースラインにも含まれていない場合、ゲートはDENYを返します。

「何が起きたか」の記録だけに頼るのはやめましょう。「何が起きることを許可するか」を決定し始めるのです。

Source: https://dev.to/alex_spinov/an-sbom-proves-what-you-installed-it-cant-prove-you-should-have-117c

Optional learning community: https://t.me/GyaanSetuAi