コンテンツにスキップ

コードセキュリティ監査

duduclaw secauditをリポジトリに向けると、注意深いレビュアーがするのと同じやり方でセキュリティ上の問題を見つけ出します——高速スキャナーを実行し、エージェントにリスクの高いモジュールを読ませ、最後にもう1体のエージェントに、結果があなたに届く前に各検出結果を反証させます。

静的スキャナーは高速で確実ですが、複数ファイルにまたがる推論が必要なものは見逃します——3つのモジュールを経由してから使われる汚染された値、悪い状態へ追い込まれうるステートマシン、特定の順序でのみ壊れるビジネスルールなどです。言語モデルはそうした経路を追えますが、もっともらしく聞こえて実在しないバグをでっち上げもします。duduclaw secauditは両方を実行し、互いにチェックさせます。

プラットフォームが既に持っている仕組みを再利用します:マルチランタイムエージェント層が深い読み込みを担当し、コンテナサンドボックスがネットワークなしで概念実証コードを実行し、他の場所で使われているのと同じmaker-checkerの規律が、ここでは対抗的レビューの1パスになります。唯一自前で作っていないのが静的エンジンです——すでに信頼しているスキャナー(gitleaks、semgrep、cargo-audit、osv-scanner)をオーケストレーションするだけで、車輪の再発明はしません。

  1. インテーク/脅威モデリング(決定論的、LLM不使用)。リポジトリのプロファイルを作成し(言語構成、エントリーポイント)、セキュリティ関連のコミットが頻発するモジュールをgit履歴からマイニングします。これにより、コストのかかる後続のステップが最初からリスクの高い領域に集中できます。
  2. 静的スキャン。 インストール済みのスキャナーを実行し、その出力を1つの検出結果フォーマットに正規化します。インストールされていないスキャナーは、理由付きで「不足」として報告され、黙ってスキップされることはありません。
  3. AI深度監査(--profile deep)。固定のプロンプト予算内で、ランク付けされた各モジュールを読み込み、静的ツールでは見逃す具体的な脆弱性を提示します。--max-modulesで上限が定められ、暴走はできません。
  4. 対抗的レビュー。 AIが挙げた候補それぞれに、最初のパスの文脈を一切持たない新しいエージェントが割り当てられ、ファイルをまっさらな状態から読み直して反証するよう指示されます:コードは本当に存在するか、そのパスは本当に到達可能か?反証された候補はレポートに残りますがその旨がマークされ、もっともらしいものは人間の判断待ちとして保留され、自動確認されることは決してありません。静的スキャナーの検出結果はこのステップをスキップします——それらはすでに決定論的な証拠だからです。
  5. 概念実証(PoC)(--poc、High以上の深刻度のみ)。PoCを生成し、コンテナサンドボックス内で実行します(ネットワークなし、tmpfs、ハードタイムアウト)。コンテナランタイムが利用できない場合はPoCを「スキップ」として記録します——ホスト上で実行されることは決してありません。
duduclaw secaudit . # クイック: スキャナーのみ
duduclaw secaudit . --profile deep --max-modules 5 # + AI監査とレビュー
duduclaw secaudit . --poc --fail-on high --save # + サンドボックス化されたPoC, レポート保存

--fail-onのしきい値(デフォルトhigh)に達するものが何もなければexit codeは0、何か達すれば1、インフラエラーの場合のみ2です——スキャナーが1つもインストールされていないマシンでも0で終了するため、CIにそのまま組み込めます。反証済みおよび抑制済みの検出結果はレポート上に見えたまま残りますが、深刻度の統計やゲート判定にはカウントされません。対抗的レビューは、ビルドを失敗させるノイズを実際に減らします。

--saveはレポートを<home>/secaudit/reports/に書き込み、ダッシュボードがそこから拾い上げます。

セキュリティ監査ページは保存済みレポートを一覧表示し、それぞれについて検出結果を深刻度別にグループ化し、展開可能な証拠チェーン(静的スキャンのヒット、AIの推論、対抗的レビューの判定、PoCの実行記録)を添えます。各検出結果には3つのレビューアクション——確認・抑制・反証——があり、レポートに書き戻されます。このページはmanagerでゲートされています。

監査自身が検出結果を「確認済み」にすることは決してありません——もっともらしいものはセキュリティ監査ページで、あなたの判断を待ち続けます。オープンソースの依存関係を監査している場合、脆弱性を上流に報告するのは対外的な行為であり、これは人間のステップのままです。