サイバーセキュリティにおける狼の叫び
狼を叫んだ少年は、羊飼いの少年が狼が群れを襲っていると言って他の村人をあざけった寓話にさかのぼる。村人たちは最初、少年を信じたが、少年は村人たちと一緒に笑っていただけだった。羊飼いの少年が冗談を繰り返すと、村人たちは彼を無視し始め、ある時、本物のオオカミがやってきて羊たちを襲った。少年は狼と叫んだが、もう誰も彼を信じなかった。
サイバーセキュリティ・ツールは、羊飼いの男の子のような役割を担ってきた。多くの誤報を出しがちで、開発者はそれに注意を払うことに疲れてしまう。その結果、開発者は時間を失い、ツールに対する信頼を失うことになる。サイバーセキュリティの分野で効率的かつ効果的に働くためには、誤検出を避けるための優れたフィルターが必要です。それこそが、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の発見よりも深刻度が高いため、優先度も高めます。
このような問題が報告された場合、早急に修正する必要があります。AikidoAutoFixツールを使うより早い方法はありません。これはワンクリックでプルリクエスト(またはマージリクエスト)を作成します。この場合の結果は

AutoFixは常に、脆弱性を適切に解決する最も単純な修正を提案します。この場合、名前とパスワードの両方をキャストすれば、エンドポイントを安全に保護し、開発者の意図に沿うことができます。
パスワードは決して直接比較すべきではなく、代わりにパスワードハッシュを使うべきであることに留意してほしい。AutoFixが使用するLLMは、報告された脆弱性以外の問題を修正しないよう明示的に指示されているため、プルリクエストは一度に1つの問題を解決するというベストプラクティスを達成しています。
偽陽性の例
前述したように、SASTツールの真の問題は、誤報の多さである。その一例を以下に示す。productName' が SQL クエリに注入される SQL インジェクションの可能性があります。さらに、この'productName'はリクエストボディから来るので、ユーザが制御できます。幸運なことに、productNameが "iPhone15"、"Galaxy S24"、"MacBook Pro"、"ThinkPad X1 "のいずれかであるかどうかをチェックするallowlistがある。これによって、productNameがproductName = "iPhone15'; DROP TABLE products; - - ".

この例のような許可リストはSQLインジェクションに対する効果的な対策です。しかし、Semgrepのようなレガシーなスキャナは、このようなallowlistの有効性を評価することができません。
大規模言語モデル(LLM)は、ソースコードのより多くの文脈を理解し、このようなサンプルをフィルタリングすることができる。
Aikido"でたらめな安全保障 "論
ソフトウェア企業がAppSecプロバイダーを探すとき、市場で入手可能なさまざまなソリューションを比較することが多い。経験の浅い企業がベンダーを比較する典型的な方法の1つは、ソースコードから見つかった脆弱性の数を数えることだ。脆弱性の数が多ければ多いほど、より優れたツールが使えると考える傾向があるのは、驚くことではないだろう。このような不十分な評価に基づいてベンダーを選ぶこともある。その結果、AppSec企業の中には、偽陽性をフィルタリングすることをためらうところもある。
Aikido、異なるアプローチをとっている。私たちの "No Bullsh*t"(でたらめなし)という語り口は、私たちが可能な限りお客様のお役に立ちたいと考えていることを意味します。AIオートトリアージは、その明確な例であり、この機能により、Aikido他の市場とは一線を画しています。
空室状況
javascript/typescript、python、java、.NET、phpなど、さまざまな言語にわたる50のSASTルールでこの機能を有効にしました。さらに多くのルールが速いペースで追加されています。
この機能は、無料アカウントを含むすべての人に有効です。とはいえ、無料アカウントの場合、LLMコールの最大数に簡単に達してしまう可能性があります。
CIゲート
CI ゲーティングとは、Aikido プルリクエストごとに脆弱性をスキャンするプロセスです。AI AutoTriageもこの機能で有効になり、ワークフローがより便利になりました。
プル・リクエストでパストラバーサル脆弱性を導入し、AutoFixを適用したとします。その修正は通常、ファイルを読み書きする前にパターンのデニリストを使います。denylistはハードコードされたパターンを解釈するのが難しいため、修正されたバージョンであっても問題としてフラグが立ってしまいます。これは、CIパイプラインに直接AutoTriageを適用することで解決しました。
結論
我々は、偽陽性のSAST検出をフィルタリングし、また真陽性サンプルの優先順位付けを支援する強力な機能をリリースした。無料アカウントでも、誰でもテストすることができます。この機能は、サイバーセキュリティにおける "Cry Wolf "効果を低減するための大きな前進であり、開発者が本当に重要なこと、つまり本当の脆弱性を解決することに集中し、顧客のための機能を構築する時間を増やすことを支援します。