日本語

Aikidoにおける到達可能性分析の例

Aikidoは、100以上のカスタムルールを組み合わせて、誤検知と無関係なアラートを減らします。これらの基本ルールの大半は、独自の到達可能性分析エンジンによって支えられています。

Aikidoが依存関係やファーストパーティコード内の既知の脆弱性を検出すると、アプリケーションが実際にその脆弱なコードパスを呼び出せるかを確認します。実際には、軽量な呼び出し/依存関係グラフを作成し、コードから影響を受けることが分かっている関数やクラスへの参照を追跡します。脆弱なコードに到達できない場合(または、テストやツール類など本番以外の文脈でのみ使用されている場合)、アラートは優先度が下げられるか抑制されます。

その結果、使用状況に関係なく脆弱なパッケージをすべて報告する従来のスキャナーと比べて、ノイズを大幅に削減できます。

注: この仕組みは、ノイズ抑制をさらに改善するため、言語やエコシステムをまたいで継続的に拡張しています。

例 1: 影響を受ける関数を使用していません

Aikidoの内部ナレッジベースによると、 CVE-2020-7774 が影響するのは setLocale 関数のみです。分析で、あなたのコードベースが setLocale一度も参照していないことが確認できれば、あなたは影響を受けません。Aikidoはこの問題の優先度を下げ、関数が使われ始めた場合に備えて今後の変更を引き続き監視します。

セキュリティ分析では、リポジトリ内でCVE-2020-7774の脆弱性の使用は見つかりませんでした。

例 2: ツール用途でのみ使用されている脆弱なパッケージ

JSパッケージの minimatch は脆弱ですが、これが取り込まれているのは次のものだけだと検出しています: eslint と mochajs。これらはリンティング/テスト用の依存関係であり、本番には含まれないため、エンドユーザーは影響を受けません。Aikidoはそれに応じて問題の優先度を下げます。

例 3: 使われていない依存経路

あるパッケージ(path-parse)にはCVEがあることが知られており、次によって必要とされています pug。追跡結果では pug は、もはやあなたのアプリケーションで使用されていません(import/参照がない、またはビルド対象から除外されています)。この場合、そのCVEは安全に無視できます。

リポジトリ内の脆弱なパッケージ経路を示す、CVE-2021-23343の依存関係到達可能性分析。


Aikidoが判断する方法

  • 呼び出し/依存関係グラフ化: コードがパッケージをどのようにimportし、呼び出しているかをマッピングし、その後CVEに関連する関数へとエッジをたどります。
  • コンテキスト認識: 本番実行コードと、開発/テスト用ツール(リンティング、テスト、ビルドのコードなど)を区別するため、ツール用途のみの使用で本番に影響するアラートは発生しません
  • 慎重な優先度下げ: 検出結果が優先度を下げられる、または抑制されるのは、脆弱なシンボルが到達不可能であると証明できる場合のみです。証拠が変わった場合(新しいimportなど)、深刻度は自動的に再評価されます。

留意すべき追加事項

  • ヒューリスティックとビルド設定: 非常に動的なパターン、カスタムローダー、または特殊なビルド手順によって、呼び出しグラフが見えにくくなることがあります。使用状況が不明な場合、一部の問題はより高い深刻度のまま維持されることがあります。
  • 推移的な変更: 間接依存関係を更新すると、以前は到達不可能だったコードが到達可能になることがあります。Aikidoは依存関係の更新やコード変更の後に継続的に再確認します