Aikidoにおける到達可能性分析の例
Aikidoは、100以上のカスタムルールを組み合わせて、誤検知や無関係なアラートを減らします。これらの基本ルールの大半は、独自の到達可能性分析エンジンによって支えられています。
Aikidoが依存関係やファーストパーティコード内の既知の脆弱性を検出すると、アプリケーションが実際にその脆弱なコードパスを呼び出せるかを確認します。実際には、軽量な呼び出し/依存関係グラフを作成し、コードから影響があると分かっている関数/クラスへの参照を追跡します。脆弱なコードに到達できない場合(またはテストやツールなどの本番以外の文脈でのみ使用される場合)は、アラートの優先度を下げるか抑制します。
その結果、使用状況にかかわらず脆弱なパッケージをすべて報告する従来のスキャナーに比べて、ノイズを大幅に削減できます。
例 1: 影響を受ける関数を使用していません
Aikidoの内部ナレッジベースによると、 CVE-2020-7774 影響があるのは setLocale 関数です。分析で、あなたのコードベースが一度も参照していないことが確認できれば setLocale、あなたは影響を受けません。Aikidoはこの問題の優先度を下げ、将来この関数が使われ始めた場合に備えて引き続き変更を監視します。

例 2: ツール用途でのみ使用される脆弱なパッケージ
JSパッケージの minimatch は脆弱ですが、これを取り込んでいるのは eslint および mochajs。これらはリンティング/テスト用の依存関係で、本番環境には出荷されないため、エンドユーザーが影響を受けることはありません。Aikidoはそれに応じてこの問題の優先度を下げます。
例 3: 使われていない依存関係パス
パッケージ(path-parse)にはCVEがあることが知られており、次によって必要とされています pug。追跡結果では pug は、もはやあなたのアプリケーションで使用されていません(インポート/参照がない、またはビルドから除外されている)。この場合、そのCVEは安全に無視できます。

Aikidoが判断する仕組み
呼び出し/依存関係グラフ化: コードがどのようにパッケージをインポートし、呼び出しているかをマッピングし、その後CVEに関連する関数へとエッジをたどります。
コンテキストの認識: 本番実行コードと、開発・テスト用ツール(リンティング、テスト、ビルド用コードなど)を区別するため、ツール専用の利用では本番に影響するアラートは発生しません
保護された格下げ: 脆弱なシンボルが到達不可能であることを証明できる場合にのみ、検出結果は格下げまたは抑制されます。証拠が変わった場合(新しいインポートなど)、重要度は自動的に再評価されます。
留意すべき追加事項
ヒューリスティックとビルド構成: 非常に動的なパターン、カスタムローダー、または特殊なビルド手順は、呼び出しグラフを不明瞭にすることがあります。使用状況が不明な場合、一部の問題はより高い重要度のままにされることがあります。
推移的な変更: 間接依存関係を更新すると、以前は到達不可能だったコードが到達可能になることがあります。Aikidoは依存関係の更新やコード変更の後に継続的に再チェックします
最終更新
役に立ちましたか?