Transcript
00:00:00AIによって誰もがコーディングできるようになり、
00:00:04開発のスピードは格段に上がりました。
00:00:05しかし、それ以上の速さでアプリ内のセキュリティ問題が積み上がっています。
00:00:09ここ数ヶ月で、状況はさらに悪化しています。
00:00:12エージェントがプロジェクト全体を削除してしまった例も少なくありません。
00:00:16開発者が全く無関係な作業をしている間に、別のエージェントが
00:00:20本番データベースを丸ごと削除したこともありました。
00:00:22Appleの社内用「Clod.md」が流出するなど、同様のトラブルが多発しています。
00:00:26そのため、こうした問題を検知するツールの重要性がかつてないほど高まっています。
00:00:30こうした状況を受け、VercelはAI生成アプリの脆弱性を検知する
00:00:35「DeepSec」というセキュリティハーネスをリリースしました。
00:00:37「Claude Codeならエージェント自身でレビューできるのでは?」と思うかもしれません。
00:00:42では、なぜわざわざDeepSecが必要なのでしょうか?
00:00:44それは、DeepSecがより体系的にレビューを処理する構造化ツールだからです。
00:00:49内部では、Claude CodeやCodexなどのコーディングエージェントを使用しています。
00:00:52このツールは、並列設計によってワークフローを高速化し、
00:00:57コードを複数のグループにバッチ処理するため、
00:01:01大規模なリポジトリのスキャンに最適です。
00:01:03ただし、コスト効率を重視して設計されているわけではありません。
00:01:06最強のモデルであるClaude Code Opus 4.7(max effort)や
00:01:10GPT 5.5(x-high reasoning)を使用するため、大量のトークンを消費します。
00:01:16これらを並列実行すると、トークン使用量が急速に積み上がり、コストが増大します。
00:01:20すでにいくつかの有名アプリが導入しており、良好な結果が報告されています。
00:01:25テストでの偽陽性率は、およそ10~20%でした。
00:01:30LLMの一般的な精度を考えると、この数字は非常に優秀です。
00:01:33つまり、エージェントはほとんどの場合で正しく、
00:01:37真陽性の確率が高いことを意味します。
00:01:38他と一線を画すのは、その背後にあるアーキテクチャです。
00:01:40通常のエージェントにレビューを依頼すると、直接コード全体をスキャンし、
00:01:45フルレポートを作成しようとします。
00:01:48これでは時間がかかるだけでなく、トークンを大量に消費し、
00:01:52見落としが発生する可能性もあります。
00:01:53そこで最初のステップとして、まずRegEx(正規表現)のみで全ファイルをスキャンし、
00:01:58セキュリティ上重要な箇所を特定して、後の工程で重点的に調査します。
00:02:01RegExによる検知は、数千ものファイルが存在しうる
00:02:06大規模なコードベースにおいて非常に重要です。
00:02:08脆弱性の可能性が高い既知のコードパターンをRegExで照合し、
00:02:13膨大なファイル群から対象を絞り込みます。
00:02:16絞り込みが完了したら、次にエージェントによる詳細な調査を行います。
00:02:21エージェントはトークンを多く消費し、コストも時間もかかる
00:02:25最もリソースを必要とする部分です。
00:02:28そのため、全ファイルをバッチに分割して並列化し、
00:02:32同時に処理できるようにしています。
00:02:34調査が終わると、次は「再検証」のステップです。
00:02:37調査結果をダブルチェックして、偽陽性を排除します。
00:02:40見落としを防ぎ、分類が正しく行われていることを
00:02:45確実に保証します。
00:02:46なお、この再検証ステップは任意です。
00:02:47その後、エージェントはGitのメタデータなどを利用して、
00:02:51どの問題に誰が責任を負うべきかを特定します。
00:02:53全工程が完了すると、結果はMarkdownまたはJSONで保存され、
00:02:57人間やコーディングエージェント向けのチケットとして発行されます。
00:03:01前述の通り、ファイルはバッチ化され、
00:03:051回につき約5ファイルずつ処理されます。
00:03:06各バッチでは、使用されているフレームワークやプロジェクト情報に基づき、
00:03:11最新のプロンプトが作成されます。
00:03:12設定されたClaudeまたはCodexのAgent SDKがそれらを分析し、
00:03:17読み取り専用ツールを使ってコードベースの内容を理解します。
00:03:22最終的な分析結果は1つのファイルにマージされ、
00:03:26重複の排除と正規化が行われます。
00:03:27最後に、分析がすべてを網羅しているかを確認するフォローアップステップがあります。
00:03:31この体系的かつ構造化されたプロセスにより、
00:03:36ハーネスなしの状態よりもはるかに高い精度で問題を特定できます。
00:03:41実際に試すため、学習用に意図的に脆弱性が組み込まれた
00:03:45オープンソースのWebアプリプロジェクトを使用しました。
00:03:47このツールが、リポジトリ内のすべての問題を
00:03:52自力で検出できるかを確認したかったのです。
00:03:53このプロジェクトには10個のセキュリティ問題が含まれており、
00:03:56修正方法を含めた詳細はすべてコード内に記載されています。
00:03:58DeepSecを実行するには、まず「deepsec init」コマンドで
00:04:03依存関係をインストールし、.deepsecフォルダを作成します。
00:04:08また、エージェントに入力するためのプロンプトも提供されます。
00:04:12今回はClaude Codeを使用したため、そのプロンプトをClaudeで実行し、
00:04:16プロジェクト情報をまとめたテンプレート形式の
00:04:21「info.md」ファイルを作成させました。
00:04:23このコマンドはプロジェクトのルートではなく、.deepsecフォルダ内で実行します。
00:04:27上の階層(プロジェクトルート)にあるすべての情報を読み取るよう
00:04:31エージェントに指示するためです。
00:04:32info.mdには、コードベースの概要、認証フロー、
00:04:37脅威モデル、プロジェクト固有のパターン、
00:04:42既知の偽陽性などが含まれます。
00:04:44このファイルができたら、次は「deepsec scan」コマンドを実行します。
00:04:48これは先ほど説明したRegEx照合を行い、
00:04:52潜在的な問題があるファイルをリストアップします。
00:04:57単なるパターンマッチングなので、この工程は非常に高速です。
00:05:00次に「deepsec process」コマンドを実行します。
00:05:02Vercel API Gateway、Codex、Claudeなど、
00:05:07.env.localに使用したいモデルのAPIキーを指定できます。
00:05:11指定しない場合は、デフォルトでClaude Codeのサブスクリプションを使い、
00:05:16個別のAPIキーなしで認証が行われます。
00:05:19プロジェクトをバッチに分割し、それぞれに複数のツールを適用します。
00:05:23各バッチの終了後には、消費されたトークン数と
00:05:27推定コストのサマリーが表示されます。
00:05:28サブスクリプション利用中なら追加費用はかかりませんが、
00:05:32APIコストの目安として役立ちます。
00:05:35大規模プロジェクト向けに設計されているため、信頼性も考慮されています。
00:05:39レビュー中にエラーが発生しても、最初からやり直すのではなく、
00:05:43中断した箇所から再開することができます。
00:05:46スキャン完了後に「deepsec report」コマンドを叩くと、
00:05:50重要度別に分類されたJSONおよびMarkdown形式の
00:05:55レポートが生成されます。
00:05:56レポート生成後は、必要に応じて「再検証」を行うことができます。
00:06:00このステップは完全にオプションです。
00:06:02実行するか、そのままスキップするかを選べます。
00:06:04実行すると、報告された内容が本当に脆弱性なのか、
00:06:08それとも偽陽性なのかを検証します。
00:06:09最後に「export」コマンドで、すべての結果を
00:06:13findingsフォルダに書き出します。
00:06:15このフォルダには、優先度順にフォルダ分けされた
00:06:20各問題のファイルが作成されます。
00:06:22そこには、該当するファイル名と行数、
00:06:26深刻度、そしてモデルの確信度が記載されています。
00:06:30さらに、どのコミットで混入したか、誰の仕業かも特定されます。
00:06:34推奨される修正方法、再検証結果、
00:06:39対処済みの問題一覧なども含まれています。
00:06:41バグを再現するための手順までレポートに含まれます。
00:06:44しかし、今回のテストでは、コード内にヒントがあったにもかかわらず、
00:06:48すべての問題を特定することはできませんでした。
00:06:52意図的に組み込まれた脆弱性がなぜ見逃されたのか、
00:06:56Claudeと一緒に原因を分析しました。
00:06:59その結果、3件しか報告されなかった理由は、
00:07:03info.mdファイル内の記述にありました。
00:07:07DeepSecは、すでに10個の脆弱性が知られているアプリであることを前提に、
00:07:12それ「以外」の問題にフォーカスしてしまったのです。
00:07:16既知の問題をあえて無視し、新しいパターンを探すことで、
00:07:21時間とトークンを無駄にせず、スキャンを効率化しようとした結果でした。
00:07:25そこで、別のアプリで再テストを行いました。
00:07:28スキャンから処理まで、同じ手順を踏みます。
00:07:32今回は再検証を省き、すぐにレポートを作成してエクスポートしました。
00:07:36今度のinfo.mdにはアプリの詳細のみを記載し、
00:07:42余計な前提条件は含めませんでした。
00:07:43比較のため、Claudeにも直接コードレビューを依頼し、
00:07:48どちらのパフォーマンスが良いかを検証しました。
00:07:52DeepSecのレポートでは、様々な深刻度のバグが検出されました。
00:07:56合計9件の問題が見つかり、詳細なレポートと
00:08:01修正ステップが提示されました。
00:08:02こうした推奨修正案は、他のレポートツールにはない強みであり、
00:08:05デバッグを大幅に楽にしてくれます。
00:08:09一方で、Claudeの単体レポートはより詳細で、39件の問題を指摘しました。
00:08:13そこで、まずは差分を確認しました。
00:08:15確かにClaudeの方が指摘数は多かったです。
00:08:18ただ、これはCodexのテスト時にも見られた傾向なのですが、
00:08:20Claudeは対象範囲外の問題まで拾ってしまう傾向があります。
00:08:24DeepSecがターゲットとする特定のスコープに集中してくれないのです。
00:08:29範囲を絞るよう指示すると、指摘数は13件にまで減りました。
00:08:34それでも、DeepSecが逃し、Claudeが見つけた問題がいくつかありました。
00:08:38DeepSecが見逃した原因は、それがコード自体に含まれ、
00:08:43関数内で直接解決できる問題のみに特化しているからです。
00:08:47アプリ実行時に発生するCORS関連の問題などは
00:08:52検出しません。
00:08:53論理的なパターンやアーキテクチャ上の決定も対象外です。
00:08:57先ほど言ったように、RegExでファイルをフィルタリングするため、
00:09:01コード上に明示的に存在するものが主な対象となります。
00:09:05実行時に動的に発生する可能性のある問題には弱いのです。
00:09:08もし私たちのコンテンツを気に入っていただけたら、ぜひHypeボタンを押してください。
00:09:12より多くの人に情報を届ける励みになります。
00:09:15これらの手順を一つずつ自分で行う代わりに、
00:09:20Vercelのセキュリティスキャナーをエンドツーエンドで使いこなすための
00:09:24「DeepSecスキル」を作成しました。
00:09:28これを使えば、ユーザーの指示からタスクを判断し、全工程を自動で管理してくれます。
00:09:32多くのアセット、評価指標、リファレンスが同梱されており、
00:09:37解決策の提示やリポジトリの運用をサポートする
00:09:42各種スクリプトも含まれています。
00:09:43これを使えば、モデルを指定するだけで
00:09:47セキュリティスキャンを丸投げできます。
00:09:50前述の全ステップを実行し、従来の見落としもカバーしながら、
00:09:54DeepSecの能力と補完的な分析を組み合わせた
00:09:59より精度の高いレビューが可能になります。
00:10:02このスキルとリソースは、AI Labs Proで公開しています。
00:10:07ダウンロードして、ご自身のプロジェクトにご活用ください。
00:10:11私たちの活動を応援していただけるなら、
00:10:15これが一番のサポートになります。
00:10:16詳細は概要欄のリンクをご覧ください。
00:10:17さて、今回の動画はここまでです。
00:10:19チャンネルを支援し、こうした動画制作を続けてほしいという方は、
00:10:23下のスーパーサンクスボタンからお願いします。
00:10:25ご視聴ありがとうございました。また次回の動画でお会いしましょう。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video