AIToday

getdebug 0.4.0、Python AI アプリのセキュリティパターン検出を追加

Hacker News1日前LINEで送る
getdebug 0.4.0、Python AI アプリのセキュリティパターン検出を追加

要点

getdebugが決定論的な正規表現パターンを使用したPython向けAIアプリセキュリティ検出バージョン0.4.0をリリースしました。費用ゼロで遅延なく動作します。実世界のPythonコードを対象にBandit、Semgrep、vulnhuntrと比較するベンチマークでは、getdebugが6つのAIアプリ固有のセキュリティ問題を検出したのに対し、競合ツールは数千件の誤検知を生成するか、LLM呼び出しアプリケーションに関連する検出をしていません。このツールはLLM呼び出しを行うPythonアプリ(チャットラッパー、エージェント、ツール呼び出しバックエンド)を対象に設計されており、汎用セキュリティリンターを補完するものです。

こういう要約が、毎朝あなたのメールに届きます。

無料で登録 →

3つのポイント

  • 何が起きたか

    getdebug CLI 0.4.0 がリリースされ、Python向けに正規表現ベースの5つのAIアプリ脆弱性パターン検出器(プロンプトインジェクション、unsafe-role-merge、pii-in-prompt、unbounded-stream、unsafe-tool-output)が追加されました。既存のJS/TS検出機能に並行して提供されます。LLM呼び出しなしで決定論的に動作し、ミリ秒単位で完了、費用はかかりません。

  • なぜ重要か

    Bandit、Semgrep、vulnhuntrに対するベンチマーク(Simon Willison氏の49ファイルのllm CLIで実施)では、getdebugが6つのAIアプリ固有の脆弱性を検出したのに対し、Banditは1,228件のノイズアラート(ほとんどがpytestのassert_used警告)を返し、Semgrepは3件の汎用検出結果を返したものの、AIアプリ関連の検出はありませんでした。Vulnhuntrはファイル選択時にCLIではなくウェブアプリエントリーポイントを対象とするため、0件を選択しました。LLM呼び出しを行うPythonアプリを提供するチームにとって、getdebugは汎用セキュリティツールでは対応していない領域を埋めます。

  • 注目点

    getdebugはOllama経由のローカルLLM SAST(無料、端末内)とClaudeベースのホスト型スキャン(有料)もオプションで提供しています。より新しいバージョン(0.5.5)ではより厳密な検出器が導入され、以前は安全とされていたフィクスチャーが重大な問題にフラグ立てされるようになり、ツールのアローリストロジックがさらに厳密化されていることがわかります。ベンチマークコーパスと方法論はGitHub(CodeSecBench)およびgetdebug.dev/benchで公開されており、プルリクエストを受け付けています。

詳細

AI アプリコードベース走査用CLIツールであるgetdebugがバージョン0.4.0をリリースし、Python向けの5つの決定論的で正規表現ベースの脆弱性パターン検出器(prompt-injection、unsafe-role-merge、pii-in-prompt、unbounded-stream、unsafe-tool-output)が追加されました。これらのパターンは0.3.0で提供されたJS/TSディテクターに加わります。ツールはミリ秒単位で実行され、費用がかかり、LLM呼び出しを必要としません。subprocess.run(tool_call.input.command, shell=True)またはstream=TrueタイムアウトガードなしなどのSDKイディオムに対する静的パターンマッチングのみです。

チームはgetdebugを3つの競合者に対してベンチマークしました:Bandit(Python OSS セキュリティリンター標準、手書きルール、Pythonのみ)、Semgrep(コミュニティルールパック付き多言語SAST、手書きルール)、vulnhuntr(Protect AI のオープンソースLLMアプリ静的アナライザー、LLM駆動型、Pythonのみ、エントリーポイント検出ベース)。10ペアの脆弱/安全なPythonフィクスチャー(脆弱性パターンカテゴリーあたり1ペア)に対する合成テストでは、getdebugは83%の精度と100%のリコール(5真陽性、1偽陽性、0偽陰性)を達成しました。BanditとSemgrepは両方とも50%の精度と20%のリコール(1真陽性、1偽陽性、4偽陰性)を記録しました。これは、安全なバリアント(model出力ではなく静的アローリストから値を受け取ったsubprocess.run(shell=True))にフラグを立てたためです。どちらのツールもcmdが静的辞書から来たことを理解しませんでした。getdebugの正規表現要件では、tool_call.input.Xがシンク引数に出現する必要があり、その誤検知をフィルタリングしました。両ツールは他の4つの振る舞いカテゴリーも完全に見落としました。ルールパックにはprompt-injection、pii-in-prompt、unsafe-role-merge、unbounded-streamのパターンがありません。

実世界テストは3つの機能するツールをすべてsimonw/llm(Simon Willison氏のLLMと対話するためのCLI、49 Pythonファイル、コミット0d593ea)で実行しました。Banditは1,261件の検出結果を返しました。そのうち1,228件がpytestアサーション上のassert_usedにフラグを立てたもので、Banditのデフォルト設定に関する長年の不満です。残りのシグナルはAIアプリカバレッジがゼロでした。Semgrepは3件の汎用SASTヒット(プラグインシステム向けのcli.pyのexec()、静的HTMLアセット上の欠落した整合性属性、非リテラルインポート)を検出しました。ここでも、AIアプリ固有のものはゼロです。getdebugは7件の検出結果を表示しました:6件がAIアプリカテゴリ分類済み(テンプレート機能連結からの1件のプロンプトインジェクション、OpenAIプラグイン内の5件のunbounded-streamヒット、stream=Trueでスコープ内にタイムアウトなし)、1件がボーダーラインロールマージ(APIの独自レスポンスをエコーするロール、リクエスト入力ではない)。すべてはHIGH/MEDIUM(CRITICALではない)としてフラグ立てされ、トリアージの文脈がありました。vulnhuntrはPython 3.11上できれいにインストールされましたが、エントリーポイントヒューリスティックがネットワーク公開ウェブアプリを対象とし、CLIツールではないため、0件のファイルを選択しました。

チームは以前のバージョン(0.4.0)が合成フィクスチャー上でクリーンスイープを示したことを認識しましたが、0.5.5で追加された更新された検出器(scanPyShellToolArg)は、tool_call.input.tagが静的ルーティングを理解せずにshell=Trueに到達するのを見ているため、その安全なアローリストケースをCRITICALとしてフラグ立てするようになりました。この回帰は厳密化のために追跡されています。著者は3つのツールカテゴリーをすべて補完的に実行することをお勧めします。Banditはassert_usedを無効にしてPython衛生( assert_usedを無効)、Semgrepは言語横断型SAST、getdebugはAIアプリ振る舞いパターンのために。ベンチマークコーパス、方法論、ハーネスはGitHub上のCodeSecBench下でオープンソース化されており、ツールはnpm(@getdebug/cli@0.4.0)またはHomebrew(getdebug-ai/tap/getdebug)でインストールできます。

背景と解説

getdebugはオープンソースセキュリティリンティング環境における本当のブラインドスポットに対処しています。BanditとSemgrepは、それぞれPythonセキュリティと言語横断型SASTに設計された成熟した広く使われるツールで、SQLインジェクション、安全でないデシリアライゼーション、欠落した整合性チェックの検出に優れています。しかし、どちらもLLM固有のリスク、つまりユーザーオブジェクトのプロンプトへのシリアライゼーション、タイムアウトなしのストリーミング、メッセージアレイ内の互換性のないロールフィールドのマージを理解するよう設計されていません。ベンチマークはその汎用性のコストを示唆しています。49ファイルのコードベース上でBanditの1,228件のassert_used警告はほとんどの本番環境ではノイズであり、Semgrepの3件の検出結果は実在していますが汎用的で、AIアプリ固有ではありません。

vulnhuntrはLLM駆動型AIアプリ分析のカテゴリーリーダーとして位置づけられており、LLMを呼び出してエントリーポイントと脆弱性を推測することで異なるアプローチを採用しています。トレードオフはスコープです。ファイル選択はウェブアプリヒューリスティックに基づいており、CLIツールは分析されません。getdebugの正規表現層はウェブであろうとコマンドラインであろうと、LLM SDKと接触するあらゆるPythonで実行することでこれを回避しています。別方向でのトレードオフは、手書きされた正規表現パターンはLLMが推測する可能性のある新しい攻撃対象領域を見落とすことです。ツール設計者はこれを認め、オープンコミュニティからのフィードバックを招待しています。

公開ベンチマーク方法論とオープンソースコーパス(GitHub上のCodeSecBench)は透明性に高い基準を設定しています。simonw/llmの実世界テストでは、getdebugの7件の検出のうち2件は脅威モデルに依存しており(単一ユーザーツール内の2つのCLIユーザー入力間のプロンプトインジェクション)、リクエスト入力ではなくAPIレスポンスを通じてルーティングされるロールマージロジックです。ツールはフラグ立てされたすべてを表示し、チームは.getdebug-ignoreファイル経由でトリアージでき、境界線的なケースを認識しています。これは誤検知の削減と完全性とのトレードオフを優先する立場です。

よくある質問

getdebugはLLM呼び出しなしでAIアプリの脆弱性をどのように検出するのですか?
getdebug 0.4.0は決定論的な正規表現パターンを使用してSDKイディオムに対応します。たとえば、tool_call.input.X参照がsubprocess.run()のshell=Trueシンクに到達する場合や、ユーザー提供の変数を含むシステムロールプロンプトを持つmessagesアレイなどを検索します。これらのパターンはLLM呼び出しを必要とせず、ミリ秒単位で実行でき、費用はかかりません。
vulnhuntrがテストリポジトリで何も検出しなかったのはなぜですか?
vulnhuntrのファイル選択ヒューリスティックはネットワーク公開エントリーポイント(ウェブアプリ)を対象とし、CLIではありません。simonw/llmはコマンドラインツールであるため、vulnhuntrは分析対象ファイルをゼロ件選択しました。これは故障ではなく、getdebugとは異なるターゲット範囲を持つツールです。getdebugはLLMと接触するあらゆるPythonで実行されます。
getdebugはBanditとSemgrepで検出できないものを何を検出しますか?
BanditとSemgrepは両方とも、subprocess.run(shell=True)が安全なパターン(アローリストされた値で呼ばれる、モデル出力ではない)でフラグを立てました。getdebugの正規表現ではtool_call.input.X参照がシンク引数に現れる必要があり、その誤検知を回避します。両ツールは4つの振る舞いカテゴリーを完全に見落としています:pii-in-prompt、unsafe-role-merge、prompt-injection、unbounded-stream。これらはLLM呼び出しアプリ固有のパターンです。

「AIコーディング」の最新ニュースを、毎朝7時にお届けします

AIが要約して、あなたの選んだトピックだけを1日1通。LINE・Email・Slackで届きます。

登録無料・30秒で完了・いつでも解除できます

ディスカッション

まだコメントがありません。最初のコメントを投稿しましょう!

ログインして議論に参加

関連記事

AIニュースを毎日お届け

200以上のソースから厳選したAIニュースを毎日無料でお届けします。

無料で始める

登録無料・30秒で完了・いつでも解除できます