AI

PentestGPTとは?v1.0の構成・導入手順と同名別製品の見分け方

PentestGPTとは?v1.0の構成・導入手順と同名別製品の見分け方

PentestGPTは、シンガポール南洋理工大学のGelei Deng氏らが開発し、USENIX Security 2024で発表されたペネトレーションテスト向けのLLMフレームワークです。ただし日本語の解説記事の多くは、2024年5月のv0.14までの姿で止まっています。2025年12月24日に公開されたv1.0.0で、PentestGPTは「人がコマンドを打ち、AIが助言する対話ツール」から「Claude CodeまたはCodexを駆動して自分で手を動かす自律エージェント」へ作り替えられました。この記事では、2026年9月5日時点のリポジトリ・論文・公式ドキュメントを直接読んで確認した内容だけを使い、現行版の構成、導入手順、そして検索でよく混同される同名別製品の見分け方まで整理します。

まとめ:PentestGPTを検討する前に押さえる6点

  • 現行版はv1.0.0(2025年12月24日公開)。実行前提はPython 3.12以上、uv、そしてclaudeまたはcodexのCLIです。OpenAIのAPIキーだけでは動きません。
  • リポジトリ直下のREADMEに載っている実行例はそのままでは動きません。自律エージェント本体はpentestgpt_agentへ移動済みで、起動はmake runまたはuv run pentestgpt-agentです。
  • 論文が示したReasoning/Generation/Parsingの3モジュールは、v1.0ではpentestgpt-legacyという別コマンドに保存されています。自律エージェント本体のLLMロールはSupervisorとExecutorの2つだけです。
  • PentestGPT自身はサンドボックスを持ちません。公式のアーキテクチャ文書が「デプロイ環境こそが隔離境界である」と明記しており、Docker等の隔離実行は推奨ではなく前提条件です。
  • よく引用されるXBOWベンチマーク86.5%(90/104)は2025年12月の研究結果で、READMEが「現行エージェントの性能保証ではない」と自ら断っています。製品CLIにXBOWランナーは同梱されていません。
  • Keygraph社が出していた同名の「PentestGPT」は別製品で、現在はShannonに改称されています。ライセンスも実装言語も異なるため、GitHubのオーナー名で確認してください。

以下、それぞれの根拠と実際の手順を見ていきます。

USENIX Security 2024論文版からv1.0自律エージェントへの設計変更

論文版の3モジュール構成とPentesting Task Tree

論文「PentestGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing」は、第33回USENIX Security Symposium(2024年8月・フィラデルフィア)の847〜864ページに収録され、Distinguished Artifact Award Winnerに選ばれています。著者はGelei Deng氏、Yi Liu氏、Víctor Mayoral-Vilches氏ら10名です。

ここで設計されたのが、人間のペネトレーションテストチームの役割分担を写した3モジュール構成でした。Reasoning Moduleはリードテスター役で、テスト全体の進行状況を保持します。この保持のために導入されたのが、サイバー攻撃ツリーを土台にしたPentesting Task Tree(PTT)という表現形式です。PTTは自然言語へ翻訳できるため、LLMがそのまま読んで次の行動を決められます。Generation Moduleはジュニアテスター役で、個別サブタスクの具体的な手順を組み立てます。Parsing Moduleはツール出力・ソースコード・HTTPレスポンスといった雑多なテキストを圧縮し、要点だけを他モジュールへ渡します。

解説記事によっては、この3つを「偵察モジュール・脆弱性分析モジュール・攻撃実行モジュール」と紹介しているものがありますが、それは診断工程の名前であってモジュール名ではありません。論文が挙げているのは上記のReasoning/Generation/Parsingです。

評価にはHackTheBoxとVulnHubから選んだ13ターゲット・182サブタスクのベンチマークが使われ、OWASP Top 10の全項目と18種類のCWEを含みます。サブタスク完了率はGPT-3.5の直接利用比で228.6%、GPT-4比で58.6%の増加でした。実地検証ではHackTheBoxの稼働マシンとpicoMini CTFに対して10課題中4課題を解決し、そのときのOpenAI API費用は合計131.5米ドルと報告されています。なお公開時点のスター数は、USENIX版が「12か月で6,500超」、arXiv版(2308.06782)が「4,700超」と記述が異なるため、引用する際はどちらの版かを揃えてください。

v1.0が採用した2ロール構成とマルチステージ・パイプライン

v1.0.0の自律エージェントは、この3モジュールを引き継いでいません。リポジトリ内のアーキテクチャ文書(docs/architecture.md、2026年7月12日時点)は「このループのLLMロールは意図的に2つだけ」と述べ、タスクを1つ選ぶか完了を提案するSupervisorと、貸し出された1タスクを実行して型付きの結果を返すExecutorを挙げています。スコープ検証、リース管理、証跡の来歴、リトライ、正規状態の保持はLLMではなく決定的なコードが担い、記憶はSQLiteが正本です。常駐の判定役やRAGサービス、並列スケジューラは置かれていません。

処理の流れは対象によって切り替わります。CTFモードでは偵察から攻撃、そしてウォークスルー生成へ、ペネトレーションテストモードでは資産の洗い出しから脆弱性の特定、レポート生成へと段階が進み、各段階の成果が次の段階へ渡されます。実際にコマンドを打つのはPentestGPTではなく、その下で動くClaude CodeまたはCodexです。

この変更は、AI診断ツールの潮流とも一致しています。自律エージェント型の設計思想についてはPentAGIの基本概念とAI自律型ペネトレーションテストの全体像、既存ツール群をMCP経由で束ねる方式についてはHexStrike AIの基本概念とMCPベースの動作原理もあわせて読むと、各ツールの立ち位置が比べやすくなります。

同名の「PentestGPT」を取り違えないための識別基準

「pentestgpt.ai」「pentestgpt.com」「pentestgpt 公式サイト」といった検索が一定数あるのは、PentestGPTという名前の製品が複数存在してきたためです。GitHubのオーナー名とライセンスを見れば確実に区別できます。

項目 本記事が扱う本家 Keygraph社の同名製品
リポジトリ GreyDGL/PentestGPT KeygraphHQ/shannon
現在の製品名 PentestGPT Shannon(改称済み)
ライセンス MIT AGPL-3.0(Lite版)
実装言語 Python TypeScript
診断方式 ブラックボックス・CTF中心 ホワイトボックス(ソース解析前提)
出自 USENIX Security 2024論文 商用プラットフォームのAppSec層

本家の公式サイトはリポジトリのREADMEが示すとおりpentestgpt.comで、同サイトも「PentestGPT – Autonomous Penetration Testing」を名乗り、USENIX Security 2024のDistinguished Artifactを掲げています。一方のKeygraph社版は、2026年9月5日時点でKeygraphHQ/PentestGPTが404を返し、同社のリポジトリはKeygraphHQ/shannonとしてShannonの名前で公開されています。旧READMEと現READMEでTrendshiftのリポジトリID(15604)が一致しているため、これは同一リポジトリの改称です。旧名のままのコピーがフォーク側に残っているので、検索結果でPentestGPTという名前のTypeScript製リポジトリに当たった場合は、まずオーナー名を確認してください。

なお、pentestgpt.aiというドメインについては、2026年9月5日時点でCloudflareのチャレンジが返り内容を確認できませんでした。確認できないものを本家と紐づけるのは危険なので、APIキーや診断対象の情報を入力する前に、リポジトリのREADMEに記載されたドメインと一致しているかを必ず突き合わせてください。

v1.0の導入手順とDocker実行

uvとClaude Code/Codex CLIを前提とした最小構成

v1.0の前提条件は、Python 3.12以上(pyproject.tomlの指定は>=3.12,<4.0)、パッケージマネージャのuv、そして認証済みのClaude Code CLI(claude)またはCodex CLI(codex)です。旧版の解説にある「OpenAIのAPIキーを取得してmake configで初回認証」という手順は、v1.0の自律エージェントには当てはまりません。

ここで一つ注意点があります。リポジトリ直下のREADMEのUsage節にはpentestgpt --target 10.10.11.234という実行例が載っていますが、このpentestgptというコマンドは登録されていません。ルートのpyproject.tomlの[project.scripts]にあるのはpentestgpt-legacyとpentestgpt-legacy-connectionだけです。自律エージェント本体は入れ子のpentestgpt_agentパッケージへ移されており、そちらのpyproject.tomlにpentestgpt-agentとして登録されています。ルートREADMEが移行に追随できていないため、以下はMakefileとpentestgpt_agent/README.mdで実際に定義されている手順です。

git clone https://github.com/GreyDGL/PentestGPT.git
cd PentestGPT
make install

# リポジトリ直下から実行する場合(BACKENDの既定値は claude)
make run TARGET=http://127.0.0.1:8080 BACKEND=claude MODEL=claude-opus-4-8

# 直接起動する場合は pentestgpt_agent ディレクトリへ移ってから
cd pentestgpt_agent
uv run pentestgpt-agent \
  --goal "Capture the flag from this authorized target." \
  --target http://127.0.0.1:8080 \
  --backend claude \
  --model claude-opus-4-8 \
  --effort xhigh \
  --run-id example

# 中断した実行の再開は同じ --run-id に --resume を足す
uv run pentestgpt-agent \
  --goal "Capture the flag from this authorized target." \
  --target http://127.0.0.1:8080 \
  --backend claude \
  --model claude-opus-4-8 \
  --effort xhigh \
  --run-id example \
  --resume

make installはuv syncに加えてpentestgpt_agent側でもuv sync --extra allを走らせます。バックエンドを絞るなら、そのディレクトリでuv sync --extra claudeとします。再開時の--resumeは、目標・対象・プロバイダ・モデルを含むtrial-config.jsonの完全一致を要求するため、途中でモデルを差し替えた実行は再開できません。

テレメトリは既定で有効で、セッションのメタデータ、どのツールを使ったかという実行パターン、フラグを見つけたという事実がLangfuseへ匿名送信されます。コマンドの出力内容、認証情報、フラグの値そのものは送信されません。止めたい場合は実行時に--no-telemetryを付けるか、LANGFUSE_ENABLED=falseを環境変数に設定します。

Dockerイメージで今できることと、まだできないこと

公式のDockerイメージはClaude Code関連のCLIとCodex CLI、そしてpentestgpt_legacyを同梱し、ログイン情報を名前付きボリュームに残します。認証が一度で済むのはこのためです。

make docker-build        # ツールイメージのビルド
make docker-login        # 一度だけ・冪等。未ログインのものだけログインする
make docker-auth-status  # 両方のログイン状態を確認
make docker-shell        # ログイン用ボリュームを付けた対話シェル
make docker-down         # コンテナを止める(ログインは保持)
make docker-nuke         # ログイン用ボリュームを削除して再ログインを強制

ここで実務上いちばん引っかかるのがmake docker-runです。READMEにはバックエンドとモデルを指定して回す例が載っていますが、2026年9月5日時点のMakefileでは、このターゲットは「pentestgpt_agent is not baked into pentestgpt:latest yet」と表示して終了コード2で止まるだけです。Makefileのヘルプ表示自体も「Pending: framework is not baked into the image yet」と書いており、代わりにmake run TARGET=...をローカルで使うよう案内しています。Dockerfileが/appへコピーしているのもunified_agentとpentestgpt_legacyまでで、自律エージェント本体は含まれていません。

現時点のDockerイメージは、認証の保持と対話型legacyモードの実行環境としては使えますが、自律エージェントを回す用途にはまだ使えません。隔離を効かせたまま自律実行したいなら、使い捨ての仮想マシンを診断ごとに立ててそこでmake runする形になります。検証環境そのものの設計は、Kali Linuxのインストールと危険性で扱っている考え方がそのまま使えます。

pentestgpt-legacyで8プロバイダとローカルOllamaを使い分ける設定

論文どおりの対話型ワークフローを使いたい場合は、v1.0に同梱されるpentestgpt-legacyコマンドを使います。「レガシー版v0.15」という別リリースがあるわけではなく、pyproject.tomlの[project.scripts]に登録された別エントリポイントです。reasoning/generation/parsingの3セッションが協調してPTTを保ち、利用者はnext、more、todo、discussで対話を進めます。

自律エージェント側がClaudeとCodexの2バックエンドに絞られているのに対し、こちらは各社の公式SDKで直接つながるため、対応プロバイダがはるかに広いのが実務上の使いどころです。OpenAI、Anthropic、Google Gemini、DeepSeek、xAI Grok、Alibaba Qwen、Moonshot Kimi、そしてローカルのOllamaが対象で、環境変数か.envにAPIキーを置いたプロバイダだけが有効になります。

# 利用可能なモデルから自動選択
pentestgpt-legacy

# セッションごとにモデルを指定
pentestgpt-legacy --reasoning-model claude-opus-4-8 --parsing-model gemini-3.5-flash

# Ollama経由のローカルモデル(OpenAI互換エンドポイント)
pentestgpt-legacy --reasoning-model ollama:qwen3 --base-url http://localhost:11434/v1

# 対応モデル一覧と、設定済みプロバイダの表示
pentestgpt-legacy --list-models

# 設定済みモデルへ実際に往復して合否マトリクスを出す
pentestgpt-legacy --smoke-test

モデルIDは頻繁に変わるため、READMEの一覧を写すのではなく--list-modelsでその場のレジストリを表示させるのが確実です。レジストリの実体はpentestgpt_legacy/llm/registry.pyで、対応モデルの追加はModelSpecの1エントリで済む構造になっています。診断対象の情報を外部APIへ出せない案件では、ollama:接頭辞でローカルモデルに寄せたうえで--smoke-testを通し、実際に応答が返るモデルだけを本番の診断に使ってください。

XBOW 86.5%という数字が保証していない範囲

PentestGPTの性能として引用されることが多い「XBOW検証スイートで86.5%(104件中90件成功)」は、READMEのBenchmark historyに載っている実測値です。ただし同じ段落が続けてこう断っています。この数字は2025年12月の実験による過去の研究結果であり、現行のpentestgpt-agentのリグレッションを保証するものではない、と。

さらに重要なのは、XBOWのハーネスと結果アーカイブが製品リポジトリの外に置かれ、参照専用の研究成果として扱われている点です。READMEは「サポート対象のPentestGPT CLI、Makefile、CI、Dockerランタイムは、いずれもXBOWランナーを提供しない」と明記しています。つまり「最新版にXBOWによる自動ベンチマーク機能が追加された」という説明は誤りで、手元で86.5%を再現する手段は製品側に用意されていません。将来的に別管理のアダプタ経由で再利用する可能性がある、という書き方にとどまっています。

導入判断でこの数字を根拠に使うなら、条件まで含めて社内に共有すべきです。104件はXBOWの検証用ベンチマークであって自社アプリケーションではなく、実施は2025年12月、当時のモデル構成での結果です。診断範囲の妥当性を測る指標としては、ベンチマークの成功率よりもペネトレーションテストと脆弱性診断の違いで整理されている「何を目的とした診断か」の切り分けのほうが実務では効きます。

隔離環境と法的前提:PentestGPTを実務に入れてはいけない条件

アーキテクチャ文書には、導入判断を左右する一文があります。SupervisorとExecutorはいずれも新しいプロバイダセッションとFULL_ACCESSで動作し、デプロイ環境そのものが隔離境界であって、PentestGPTは二重のツールサンドボックスやファイルシステムサンドボックスを持たないという記述です。エージェントが生成したコマンドは、実行ホストの権限でそのまま走ります。

したがって、次の条件のいずれかに当てはまる環境へ入れるべきではありません。本番システムと同じネットワークセグメントにある作業端末、社内の認証情報が設定済みのマシン、そして削除されて困るデータを持つホストです。公式がDockerフローを整備しているのは利便性のためだけではなく、この隔離を成立させるためでもあります。逆に言えば、隔離済みの検証環境と明示的な診断許可を用意できるなら、CTFや自社検証環境での偵察・列挙工程は十分に任せられます。

法的な前提も同じくらい明確です。リポジトリのディスクレイマーは、このツールが教育目的と許可されたセキュリティテストのみを対象とすると述べ、違法な利用を容認しないと明記しています。診断対象が自社所有であっても、クラウド上のリソースであれば事業者側の侵入テストポリシーが別途かかります。社内ルールとしては、対象資産の一覧、書面での実施許可、実行ホストの隔離状態、そして診断ログの保管場所を、実行前のチェックリストとして固定しておくのが現実的です。プロキシツールを併用した手動検証に切り替える段階では、Burp Suiteの通信傍受の仕組みとエディションの選び方が接続設計の参考になります。

よくある質問

PentestGPTの公式サイトはどれですか?

GreyDGL氏のリポジトリのREADMEが公式サイトとして案内しているのはpentestgpt.comです。同サイトのタイトルは「PentestGPT – Autonomous Penetration Testing」で、USENIX Security 2024のDistinguished Artifactを掲げ、論文・チーム・GitHubへのリンクを置いています。似た名前の別ドメインについては、リポジトリのREADMEに記載があるかどうかを基準に判断してください。

PentestGPTはOllamaのローカルLLMで動きますか?

動きます。ただし自律エージェント本体ではなく、pentestgpt-legacy側の機能です。--reasoning-model ollama:qwen3 --base-url http://localhost:11434/v1のように、モデル名にollama:接頭辞を付け、OpenAI互換エンドポイントを指定します。自律エージェント側のバックエンドはClaude CodeとCodexの2つです。

PentestGPT v2というバージョンはありますか?

公式リリースにv2という番号は存在しません。GitHubのリリース一覧で最新はv1.0.0(2025年12月24日公開)で、その直前がv0.14.0(2024年5月15日)です。検索で見かける「PentestGPT v2」はフォークや第三者リポジトリの名称であることが多いため、オーナー名を確認してください。

USENIX Security 2024の論文はどこで読めますか?

USENIXの発表ページ(usenix.org内のusenixsecurity24/presentation/deng)で本文PDFを無償公開しています。プレプリントはarXivの2308.06782です。両版で本文が一部異なり、たとえば公開時点のスター数はUSENIX版の要旨が「12か月で6,500超」、arXiv版の要旨が「4,700超」となっています。さらにUSENIX版は同じ論文の中でも、要旨が「6,500超」、本編の導入部が「執筆時点で6,200超」と記述が割れています。引用するときは版と箇所の両方を揃えてください。

OpenAIのAPIキーだけで最新版を動かせますか?

自律エージェント側は動きません。v1.0の前提条件は、認証済みのClaude Code CLIまたはCodex CLIです。OpenAIのAPIキーを直接使う構成にしたい場合はpentestgpt-legacyを選び、OPENAI_API_KEYを設定してください。こちらはAnthropic、Gemini、DeepSeek、Grok、Qwen、Kimi、Ollamaにも対応しています。

関連記事

お気に入りに入れた記事の一覧

資料請求

RELATED POSTS 関連記事

目次