Aikido

AIによる自動トリアージでサイバーセキュリティ負債を削減

執筆者
マッケンジー・ジャクソン

サイバーセキュリティにおけるオオカミ少年

「オオカミ少年」の話は、羊飼いの少年が、オオカミが羊の群れを襲っていると村人たちに嘘をついてからかったという寓話に由来します。村人たちは最初彼を信じましたが、少年はただ彼らを笑っていただけでした。少年がその冗談を繰り返すと、村人たちは彼を無視し始め、そしてある時、本物のオオカミが現れて羊を襲いました。少年は「オオカミが来た!」と叫びましたが、もう誰も彼を信じませんでした。

サイバーセキュリティツールは、羊飼いの少年のように振る舞ってきました。つまり、多くの誤報を発しがちで、開発者はそれらに注意を払うことに疲弊してしまいます。これにより、開発者は時間を無駄にし、ツールへの信頼を失います。サイバーセキュリティにおいて効率的かつ効果的に作業するためには、これらの誤検知を回避するための優れたフィルターが必要です。それこそが、AutoTriageがSASTの脆弱性に対して行うことです。

真陽性の例

以下はSASTの検出結果の例です。SASTはStatic Application Security Testingの略で、自由に翻訳すると「コードを実行せずにソースコード内の危険なパターンを検出する」となります。これは、さまざまな種類の脆弱性を検出するための強力な手法です。

この例では、AutoTriageがサンプルを「修正の優先度が非常に高い」とマークしていることがわかります。SASTの検出結果は、潜在的なNoSQL脆弱性を示しています。このコードは、ユーザーがユーザー名とパスワードを提供できるログインエンドポイントを表しています。ユーザー名とパスワードの両方で一致するレコードを検索するために、データベースへの呼び出しが行われています。

The problem here is that NoSQL allows you to insert objects like { $ne: undefined }. In that case, the match will be based on anything that is different from undefined. Imagine that an attacker would upload something like this:

{
	name: LeoIVX,  
    password: { $ne: undefined }
}

その場合、パスワードが常にクエリと一致するため、攻撃者は教皇としてログインできてしまいます(もし教皇がそのソフトウェアプラットフォームにそのユーザー名でアカウントを持っていた場合)。

このケースでは、SASTの検出結果は実際の真陽性でした。AutoTriageは単に確認するだけでなく、この脆弱性は平均的なSASTの検出結果よりも悪用しやすく、深刻度が高いため、優先度も引き上げます。

このような問題が報告された場合、早急に修正する必要があります。AikidoのAutoFixツールを使用するよりも速い方法はありません。これにより、ワンクリックでプルリクエスト(またはマージリクエスト)が作成されます。この場合の解決策は次のとおりです。

AutoFixは、脆弱性を適切に解決する最もシンプルな修正を常に提案します。このケースでは、名前とパスワードの両方をキャストすることで、エンドポイントを保護し、開発者の意図に合致させることができます。

パスワードは直接比較すべきではなく、代わりにパスワードハッシュを使用すべきであることにご留意ください。この例は簡潔さのために使用されました。AutoFixが使用するLLMは、報告された脆弱性以外の問題を修正しないよう明示的に指示されているため、プルリクエストは一度に一つの問題を解決するというベストプラクティスを達成します。

偽陽性の例

前述の通り、SASTツールの本当の問題は、生成される誤検知の数です。その一例を以下に示します。「productName」がSQLクエリに挿入される可能性のあるSQLインジェクションがあります。さらに、この「productName」はリクエストボディから来るため、ユーザーによって制御されます。幸いなことに、「productName」が「iPhone15」、「Galaxy S24」、「MacBook Pro」、または「ThinkPad X1」のいずれかであるかをチェックする許可リストがあります。これにより、「productName」が「iPhone15'; DROP TABLE products; -- 」のような攻撃ペイロードを含むことができないと保証されます。

この例で示されているような許可リストは、SQLインジェクションに対する効果的な対策です。しかし、Semgrepのような従来のスキャナーは、このような許可リストの有効性を評価できません。

大規模言語モデル (LLM) はここに大きな可能性をもたらします。これらはソースコードのより多くのコンテキストを理解し、このようなサンプルを除外できます。

Aikidoの「No Bullsh*t Security」という物語

ソフトウェア企業がAppSecプロバイダーを探す際、市場で利用可能な様々なソリューションを比較することがよくあります。経験の浅い企業がベンダーを比較する典型的な方法の1つは、自社のソースコードで見つかった脆弱性の数を数えることです。より多くの脆弱性が見つかるほど優れたツールであると信じる傾向があるのは、驚くべきことではありません。彼らはこの不十分な評価に基づいてベンダーを選択することがあります。その結果、一部のAppSec企業は、このよく見られる比較において自社の評価が低くなるため、誤検知を除外することに躊躇します。

At Aikidoでは、私たちは異なるアプローチをとっています。私たちの「No Bullsh*t」という考え方は、短期的にいくつかの取引を失うことになったとしても、お客様を可能な限り支援したいということを意味します。AI AutoTriageは、この機能が市場の他の製品からAikidoの提供物を差別化するため、その明確な例です。

可用性

この機能を、javascript/typescript、python、java、.NET、phpを含むさまざまな言語の91のSASTルールに対して有効にしました。より多くのルールが急速に追加されています。

この機能は、無料アカウントを含むすべての方にご利用いただけます。ただし、無料アカウントではLLM呼び出しの最大数に比較的容易に達する可能性があります。

CIゲーティング

CIゲーティングは、Aikidoが各プルリクエストで脆弱性をスキャンするプロセスです。AI AutoTriageもこの機能で有効になり、ワークフローがはるかに便利になりました。

プルリクエストでパストラバーサル脆弱性を導入し、AutoFixを適用したと想像してください。その修正は通常、ファイルを読み書きする前にパターンデニーリストを使用します。デニーリストはハードコードされたパターンでは解釈が難しいため、修正されたバージョンでも問題としてフラグが立てられるでしょう。これは、CIパイプラインに直接AutoTriageを適用したことで解決されました。

まとめ

SASTの誤検知をフィルタリングし、真陽性サンプルの優先順位付けを支援する強力な機能をリリースしました。無料アカウントの方も含め、どなたでもテストにご利用いただけます。この機能は、サイバーセキュリティにおける「オオカミ少年」効果を低減するための大きな一歩であり、開発者が本当に重要なこと、つまり実際の脆弱性を解決し、顧客のための機能構築により多くの時間を費やすことに集中できるよう支援します。

共有:

https://www.aikido.dev/blog/reducing-cybersecurity-debt-with-ai-autotriage

脅威ニュースをサブスクライブ

今日から無料で始めましょう。

無料で始める
CC不要

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。