2025年度Solve課題 株式会社セキュアサイクル様 AI・機械学習を使ったセキュリティ業務の効率化 NNAST: GNN+LLM型脆弱性診断ツール 提案者: 北島琉斗 (九州大学) メンター: 安達 康平さん (株式会社セキュアサイクル) PM: 服部 祐一さん (株式会社セキュアサイクル) 1
脆弱性とは? 脆弱性とは「システムやソフトウェアが攻撃に対して弱い部分、セキュリティ上の欠陥」 悪意のある者がその弱点を利用して情報を盗んだりシステムを破壊したりすることが可能な状態 例えば… パスワード無しでユーザー情報を見られる 2
脆弱性とは? SQLインジェクション 脆弱性とは「システムやソフトウェアが攻撃に対して弱い部分、セキュリティ上の欠陥」 悪意のある者がその弱点を利用して情報を盗んだりシステムを破壊したりすることが可能な状態 例えば… パスワード無しでユーザー情報を見られる 3
我々が提案するプロダクト ソフトウェアの開発段階でコードから脆弱性を発見して 自動で修正コード提案する統合ツール「NNAST」 4
4. 修正コード生成 LLMが修正用コードを生成 Issueで修正コード提案 1. 入力 NNAST プルリクエスト単位で 脆弱性診断処理が起動 Neural Network based Application Security Testing 3. 推論 ニューラルネット にグラフを入力し診断 2. 前処理 コードのグラフ化 5
脆弱性診断の効率化 ・誤検知が多い ・脆弱性診断の出力のチェックと修正は人間が行うことが多い より高精度で自動修正までしてくれるものが欲しい GNNによる 誤検知軽減 NNAST LLMによる 修正コード生成 6
NNASTの期待される優位性 ●既存ツールと比べて • フレームワークに最適化したグラフ生成 によって誤検知軽減 (https://www.zaproxy.org/) • LLMにより修正コードの提案が可能 • 導入が容易 (https://snyk.io/jp/) 7
プロジェクト期間中に取り組むこと • 福岡未踏の5か月では本ツールの対象をFastAPI(Python)に絞って開発する • コードのグラフ化、GNNによる推論、LLMによる修正コード生成の機能を開発 • 対象リポジトリでのプルリクエストにより処理が起動するようにCI/CDに統合する 8
修正コードはIssueで提案される 推論&コード生成 修正案用のIssueが立つ 9
[動作] 1.コードをCPGに変換 本ツールではコードをCPG(Code Property Graph)に変換しGNNに入力する. CPG…コードプロパティグラフ(CPG)とは抽象構文木(AST)や制御フローグラフ(CFG)、データフロー グラフ(DFG)などの複数の概念を単一のスーパーグラフ ・AST: 構文構造(変数宣言,呼び出し構造など) ・CFG: 実行順序(if/else, loop, returnなど) ・DFG: データの流れ NNASTでは既存グラフ化ツールJoernをラップして フレームワーク特化のサブグラフ抽出ロジックを使う (https://fraunhofer-aisec.github.io/cpg/) 10
[動作] 2.CPGをGNNに入力し推論(脆弱性検知) 作成したCPGをGNNに入力して ・SQLAlchemy経由のSQL Injection ・JWTトークンの検証ミス ・Pydanticでの入力バリデーション漏れ ・FastAPIの依存注入の誤用 などの脆弱パターンを検出する. 推論結果はJSONで返す. 11
[動作] 3.LLMによる修正コード生成 GNNが検出した箇所をもとにLLMにプロンプトを投げ安全なコードに自動修正する さらに該当リポジトリにIssueを立てて安全なコードを含む修正案を提案する Issueサンプル 12