For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

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

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

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

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

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

Aikidoの内部知識ベースによると、 CVE-2020-7774 影響を受けるのは setLocale 関数です。私たちの分析で、あなたのコードベースが setLocaleを一度も参照していないと分かれば、あなたは影響を受けません。Aikidoはこの問題を格下げし、将来その関数が使われ始めた場合に備えて変更を継続的に監視します。

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

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

JSパッケージの minimatch は脆弱ですが、私たちが検出したところ、取り込まれているのは eslintmochajsです。これらはリンティング/テスト用の依存関係であり、本番には配布されないため、エンドユーザーは影響を受けません。Aikidoはそれに応じてこの問題を格下げします。

例3: 使われなくなった依存パス

あるパッケージ(path-parse)にはCVEがあることが分かっており、次によって必要とされています pug。私たちのトレースでは pug は、もはやあなたのアプリケーションで使用されていません(インポートや参照がない、またはビルドから除外されています)。この場合、そのCVEは安全に無視できます。

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

Aikidoが判断する方法

  • 呼び出し/依存関係グラフ化: コードがどのようにパッケージをインポートし、呼び出しているかをマッピングし、そこからCVEに関連付けられた関数へとエッジをたどります。

  • コンテキストの認識: 本番実行コードと、開発・テスト用ツール(リンティング、テスト、ビルド用コードなど)を区別するため、ツール用途のみの使用が本番に影響するアラートを引き起こすことはありません

  • 保護された格下げ: 検出結果は、脆弱なシンボルが到達不可能であることを証明できる場合にのみ格下げまたは抑制されます。証拠が変わった場合(新しいインポートなど)、重要度は自動的に再評価されます。

留意すべき追加事項

  • ヒューリスティックとビルド設定: 非常に動的なパターン、カスタムローダー、または特殊なビルド手順は、呼び出しグラフを不明瞭にすることがあります。使用状況が不明な場合、一部の問題はより高い重大度のまま維持されることがあります。

  • 推移的な変更: 間接依存関係を更新すると、以前は到達不可能だったコードが到達可能になることがあります。Aikidoは依存関係の更新やコード変更の後に継続的に再チェックします

最終更新

役に立ちましたか?