
はじめに
こんにちは、セキュリティ推進グループの徐承賢(a.k.a. sunchan)です。前回、Burp AIを活用したDASTの脆弱性診断について紹介しました(Burp AI: セキュリティ診断にAIの力を借りる - hacomono TECH BLOG)。今回はその続編として、「Takumi AI」を使い、実際のプロジェクトでソースコードの脆弱性診断(SAST: Static Application Security Testing)を実施した結果をお伝えします。
本記事では、AI技術を活用した脆弱性診断の実践を通じて得られた知見と、効果的な活用方法についてお伝えできればと思います。
Takumiとは
Takumiは、大規模言語モデル(LLM)を活用したホワイトボックスチェックと呼ばれるSAST(Static Application Security Testing)向けの脆弱性診断AIツールです。従来のルールベースの静的解析ツールとは異なり、文脈を理解しながらソースコードを分析できる点が特徴です。人間のセキュリティエンジニアのように、コードの意図や処理フローを読み解きながら潜在的な脆弱性を発見できます。OSSのアプリケーションなどで数多くのCVEを検知・報告しているため、セキュリティ業界でも注目を集めているAIツールの一つです。
Takumi AI 脆弱性診断の実施背景
現在、hacomonoでは事業の拡大に伴い、新しいアプリのセキュリティ対応や既存アプリのコード量の増加、さらにはセキュリティ人材の不足といった課題に直面しています。これらを解決するため、脆弱性診断をもっと効率的に進められる方法が必要でした。そこで目をつけたのが、AI技術を活用するTakumiです。
毎日のように新しいAIツールが登場する中、特にTakumiを選んだ決め手は、TakumiのAIが脆弱性診断に特化した最新のセキュリティ学習データを取り込んでいるため、他のツールと比べて脆弱性検知の精度が高いという点でした。
脆弱性診断の進め方とポイント
ポイント1: 診断範囲の絞り込みが成功の鍵
最初の大きな学びは、診断範囲を適切に絞り込むことの重要性です。
当初、プロジェクト全体のソースコード(約100万行)を一度に診断しようと試みましたが、処理時間が膨大になってしまいました。Takumi AIによる解析は、コードの文脈を深く理解するため、通常の静的解析ツールよりも時間がかかる傾向にあります。
例えば、「脆弱性がありそうなところを教えて」のような指示に対して、結果が出るまで丸一日からそれ以上かかることもありました。Takumiがタスクを最後までやり切る点は優れている一方、業務的には待機時間が長くなるため少し工夫が必要でした。
そこで、以下のような戦略で範囲を絞り込みました:
- 外部入力を受け取る箇所を優先: ユーザー入力やAPIリクエストを処理するコントローラー層
- 重要な機能から着手: 認証・認可、決済処理、個人情報を扱うところ
- 過去に脆弱性が見つかった類似コード: リファクタリング前のレガシーコード部分
この結果、診断時間が丸一日から1〜2時間に短縮され、業務時間内で質の高い診断を実施できるようになりました。
ポイント2: 具体的な脆弱性名とシナリオを指定する
二つ目の重要なポイントは、Takumi AIに対して明確な指示を出すことです。
漠然と「脆弱性を探してください」と指示するよりも、具体的な脆弱性名やシナリオを提示することで、診断精度が大幅に向上しました。
今回、以下のような具体的な指示を行いました:
【診断指示の例】 - SQLインジェクションの可能性を調査してください 特に、動的にクエリを構築している箇所に注目 - XSS(クロスサイトスクリプティング)の脆弱性を確認してください ユーザー入力をHTMLに出力している箇所をチェック - パストラバーサルのリスクを評価してください ファイルパスを組み立てている処理を重点的に - 認証・認可のバイパスが可能な箇所がないか検証してください 権限チェックのロジックを中心に
このように、OWASP Top 10などのセキュリティ知識をベースに、対象システムの特性を踏まえた具体的なシナリオを提示することで、Takumi AIはより的確な分析を行うことができました。
ポイント3: AIの結果は必ず人間が検証する
三つ目のポイントは、AIの診断結果を盲信しないことです。
Takumiは脆弱性検知で非常に優秀なAIツールですが、出力される結果がすべて正しいわけではありません。特に以下のようなケースに注意が必要です。
False Positive(誤検知)
Takumi AIが脆弱性と判断したものの、実際には問題ないケースがありました。
例えば:
- フレームワークのセキュリティ機能が自動的に無害化している
- 既に別の層でバリデーションが実施されている
- 存在しないルートのPoCを提示してくる
これらは、コード全体の構造やフレームワークの仕様を完全に理解できていない場合に発生する誤検知です。False Positiveは他のAIツールでも一般的に見られる問題であり、Takumi AI特有の課題ではありません。
False Negative(見逃し)
逆に、Takumi AIが見逃す可能性のある脆弱性もありました。
- ビジネスロジック固有の脆弱性
- タイミング依存の競合状態
そのため、診断結果は専門家が一つひとつ検証し、実際に攻撃可能かどうかを確認する必要があります。
また、DAST(Dynamic Application Security Testing)のAIツールと連携すれば、さらに効率を高められると感じました。現在、DAST系のツールでもAI機能やMCPサーバーが急速に進化しているため、今後うまく連携していきたいと考えています。これは次の課題として進めたいと思います。
実際に発見した脆弱性
今回のTakumi AI脆弱性診断で、実際に修正が必要な脆弱性を発見できました。すでに対応済みで詳細はここでは詳しく説明できませんが、概要は以下のとおりです。
ケース1: XSS(クロスサイトスクリプティング)
XSSは、攻撃者が悪意のあるスクリプトをWebページに注入し、他のユーザーのブラウザ上で実行させる攻撃手法です。今回、入力値を出力する際に、管理者の使い方次第で発生する恐れがある箇所が見つかりました。Takumiはこの脆弱性を正確に指摘し、攻撃シナリオも提示してくれました。開発チームと連携して適切な対応を行い、脆弱性を解消しました。
ケース2: 認可処理の不備
リソースへのアクセス時に、ユーザーが適切な権限を持っているかの確認が不十分な箇所が発見されました。Takumiは「認可不備の可能性」として指摘し、実際にテストを行ったところ、問題を再現できました。そこで、適切な権限チェックのロジックを追加して対応しました。発生頻度はかなり低く再現が難しいため緊急度は低いものの、潜在的な脆弱性を早期発見できたことで、セキュリティの向上につながったと考えています。
ケース3: サプライチェーンの脆弱性
近年、このタイプの脆弱性は攻撃者に悪用されるケースが増えており、OWASP Top 10でも新たに項目として追加されています。Takumi AIは最新の脆弱性情報が常にアップデートされているため、サプライチェーンの脆弱性検知にも活用できます。さらに、脆弱なライブラリがアプリケーションに与える影響の分析や、短期的な対策から中長期的な対策まで提案を受けることができます。今回、これらを開発プロセスに組み込むことで、リスクを軽減できました。
診断を通じて得られた知見
AI活用のメリット
- スピード: 適切に範囲を絞れば、人手による網羅的なコードレビューよりも早い
- 文脈理解: コードの意図を理解した上で、潜在的なセキュリティ問題を指摘できる
- サプライチェーンの調査: サプライチェーンの脆弱性の検知やアプリケーションへの影響分析もできる
限界と注意点
- 処理時間: 大規模コードベースでは時間がかかるため、戦略的な範囲選定が重要
- 完璧ではない: False PositiveとFalse Negativeの両方が存在する
- 専門知識が必要: 指示の出し方や結果の妥当性を判断するには、セキュリティの専門知識が不可欠
- コストに注意: Takumiの場合、定額制のクレジットを消費しながらコードの解析を進めるため、クレジットの消費に気をつけないと途中で診断が止まってしまうこともある
まとめ
今回、Takumi AIを活用したSAST脆弱性診断のAI化を実施し、実際に複数の脆弱性を発見・修正することができました。AIツールは強力なアシスタントですが、最終的な判断と検証には人間の専門知識が欠かせません。
効果的に活用するための3つのポイントを再度まとめます:
- 診断範囲を戦略的に絞り込む: 重要度の高い箇所から優先的に診断
- 具体的な脆弱性名とシナリオを指定: AIに明確な指示を与えることで精度向上
- 必ず人間が検証する: AIの結果を鵜呑みにせず、実際に攻撃可能か確認
AI技術の進化により、セキュリティ脆弱性診断の効率化が進んでいますが、ツールと人間の専門性を組み合わせることで、より高品質なセキュリティ担保が可能になります。今後もこうした新しい技術を積極的に取り入れながら、hacomonoのセキュリティレベルの向上に取り組んでいきたいと思います。
以上、sunchanでした。
💁 関連記事