PentestGPTは、シンガポール南洋理工大学(NTU)のGelei Deng氏らが開発し、USENIX Security 2024で発表したAIペネトレーションテストツールです。GitHubのGreyDGL/PentestGPTでMITライセンスで公開されており、2026年10月17日時点のスター数は15,979です。最初は「人がコマンドを打ち、AIが次の手を助言する」対話ツールでしたが、2025年12月24日のv1.0.0で自律エージェントになり、2026年7月にはmainブランチの実行基盤がもう一度作り替えられました。困るのは、公式サイトとREADMEの手順が古い版と新しい版で混ざっていることです。この記事では、リポジトリのコードを版ごとに読んで、いまどの手順で動くのかを整理します。
まとめ:PentestGPTを導入する前に押さえる要点
- 最新の正式リリースはv1.0.0(2025年12月24日)で、それ以降のタグはありません。v2も存在しません。
- mainブランチは2026年7月13日に作り替えられ、起動コマンドが
pentestgptからpentestgpt-agent(make run)に変わりました。前提はPython 3.12以上、uv、認証済みのClaude Code CLIまたはCodex CLIです。 - 公式サイトのクイックスタートとREADMEのUsage節には、mainでは使えない旧CLIの手順が残っています。mainをcloneしてそのまま打っても
pentestgptコマンドはありません。 - v1.0.0は既定でLangfuseへ実行記録を送り、送信用の鍵が埋め込まれていた問題がCVE-2026-37012として公開されています。v1.0.0を使うなら送信を止めてから動かしてください。
pip install pentestgptで入るのは2023年6月の0.8.0です。PyPIは更新されていません。- 論文の3モジュール(Reasoning/Generation/Parsing)は、Ollamaを含む8系統のプロバイダで動く
pentestgpt-legacyに残っています。 - PentestGPT自身はサンドボックスを持たず、実行環境の隔離が前提条件です。XBOWの86.5%は2025年12月の研究結果で、製品の性能保証ではありません。
PentestGPTの仕組み:USENIX Security 2024論文の3モジュール
Reasoning・Generation・ParsingとPentesting Task Tree
論文「PentestGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing」は、第33回USENIX Security Symposium(2024年8月)の847〜864ページに収録され、USENIXの発表ページでDistinguished Artifact Award Winnerと表示されています。出発点は、LLMは個々の作業はこなせても、長いテストの途中で全体の文脈を失うという観察でした。
そこで人間のテストチームの役割分担を写した3モジュールが設計されました。Reasoning Moduleはリードテスター役で、テスト全体の進み具合をPentesting Task Tree(PTT)という木構造で保持し、次に何をするかを決めます。Generation Moduleはジュニアテスター役で、選ばれたサブタスクを具体的なコマンドや操作手順に落とします。Parsing Moduleはツール出力・ソースコード・HTTPレスポンスを圧縮し、要点だけを他のモジュールへ渡します。日本語の解説で見かける「偵察・脆弱性分析・攻撃実行の3モジュール」は診断工程の名前で、論文のモジュール名ではありません。
論文が示した成績と費用
評価にはHackTheBoxとVulnHubから選んだ13ターゲット・182サブタスクのベンチマークが使われ、OWASP Top 10の全項目と18種類のCWEを含みます。arXiv版(2308.06782)によると、サブタスク完了率はGPT-3.5を直接使った場合より228.6%、GPT-4より58.6%高くなりました。
実戦に近い検証の数字のほうが、導入の見積もりには役立ちます。HackTheBoxの稼働中マシン10台では、OpenAI APIの費用が各ターゲットを5回ずつ試した合計で131.5米ドルでした。解決数は要旨が「10課題中4課題」、本文が「易しい4台と中程度の1台」と書いていて揃っていないので、引用するときはどちらの記述かを添えてください。picoMini CTFでは4,200点中1,500点を取り、248チーム中24位です。易しい〜中程度の課題なら手が届くが、難しいマシンは解けないという水準で、2023年時点のGPT-4での結果である点も含めて読む必要があります。
v1.0.0リリースと現在のmainブランチの違い
PentestGPTを調べて混乱する原因の大半はここにあります。リリース一覧の最新はv1.0.0のままですが、その後mainには9コミットが積まれ、2026年7月13日のプルリクエスト#493で自律エージェントの実行基盤が別物に置き換わりました。この変更に対応する新しいリリースタグはありません。ただしパッケージの版番号は存在し、ルート側は1.0.0、自律エージェント側は0.1.0と定義されています。
| 項目 | v1.0.0(2025-12-24リリース) | main(2026-07-14時点) |
|---|---|---|
| 起動コマンド | pentestgpt | pentestgpt-agent(make run) |
| 実行環境 | Docker必須 | uvでローカル実行 |
| LLMの接続 | Claude Agent SDK | Claude Code CLI/Codex CLI |
| 認証 | APIキー/Claude OAuth/OpenRouter | 各CLIのログイン |
| 操作画面 | TUI(非対話モードあり) | コマンドライン |
| LLMロール | 単一エージェント | Supervisor+Executor |
| Langfuse送信 | 既定で有効 | 送信コードなし |
v1.0.0:Docker前提でClaude Agent SDKを動かす版
v1.0.0は、Dockerコンテナの中でClaude Agent SDKを動かす構成でした。前提条件はDockerと、AnthropicのAPIキー・Claudeのサブスクリプションによるログイン・OpenRouterのいずれかです。make installでイメージを作り、make configで認証方式を選び、make connectでコンテナに入ってからpentestgpt --target 10.10.11.234のように実行します。ローカルLLMはmake configの選択肢4から、LM StudioやOllamaのOpenAI互換エンドポイントにつなぎます。
この版は既定でLangfuseへ実行記録を送ります。READMEは「送るのはセッションのメタデータ、使ったツールの種類、フラグを見つけたという事実で、コマンドの出力・認証情報・フラグの値は送らない」と説明していますが、v1.0.0の送信モジュールを読むと、診断対象のアドレス、ツールに渡した引数、エージェントが出力したメッセージ本文、見つけたフラグの値まで記録に載せています。しかも同じファイルにLangfuseの公開鍵と秘密鍵が埋め込まれており、送られた記録が第三者に読まれうる問題が2026年8月27日にCVE-2026-37012として公開されました。止めるには--no-telemetryを付けるかLANGFUSE_ENABLED=falseを設定します(未設定なら有効として扱われます)。止めても、それまでに送った記録が消えるわけではありません。
main:Claude Code/Codexを駆動する2ロールのエージェント
mainの自律エージェントはpentestgpt_agentという入れ子のパッケージに移りました。アーキテクチャ文書(2026年7月12日付)は「LLMロールは意図的に2つだけ」と書いています。タスクを1つ選ぶか完了を宣言するSupervisorと、割り当てられた1タスクを実行して結果を返すExecutorです。スコープの検証、リトライ、証跡の来歴管理はLLMではなく決定的なコードが受け持ち、記憶の正本はSQLiteです。常駐の判定役、RAG、並列実行の仕組みはありません。実際にコマンドを打つのは、その下で動くClaude CodeまたはCodexです。
テレメトリも変わりました。2026年7月14日時点のmain(コミットe8b1bb7)をgit grepすると、langfuseという語はルートのpyproject.tomlの依存一覧、uv.lock、READMEにしか出てきません。v1.0.0にあった送信モジュールは削除され、READMEの「Telemetry」節だけが残っています。
READMEと公式サイトの手順が今のmainで動かない箇所
READMEのUsage節はpentestgpt --target、--mode pentest、--list-sessionsを例に挙げていますが、mainのルートpyproject.tomlに登録されたコマンドはpentestgpt-legacyとpentestgpt-legacy-connectionだけで、pentestgptは定義されていません。公式サイトpentestgpt.comのクイックスタート(make config && make connect)もv1.0.0の手順で、mainのMakefileにはconfigもconnectもありません。
古い手順はPyPIにも残っています。PyPIのpentestgptは2023年6月15日公開の0.8.0が最新で、それ以降は登録されていません。英語の解説記事にはpip install pentestgptを最初の方法として案内するものがありますが、入るのは論文発表前の対話ツールです。現行版を使うなら、GitHubからcloneしてください。
PentestGPTのインストール手順と使い方(main版)
uvとClaude Code/Codex CLIによる起動手順
mainで動かす前提は、Python 3.12以上(pyproject.tomlの指定は3.12以上4.0未満)、パッケージマネージャのuv、そして認証済みのClaude CodeまたはCodex CLIです。OpenAIやAnthropicのAPIキーを環境変数に置くだけでは、自律エージェントは動きません。
git clone https://github.com/GreyDGL/PentestGPT.git
git -C PentestGPT checkout e8b1bb77d1ac00329675cec3b060aba971ec1ac8
cd PentestGPT
make install # uv sync と pentestgpt_agent 側の uv sync --extra all
# リポジトリ直下から(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
--backendに指定できるのはclaudeとcodexの2つで、Codexを使うならBACKEND=codexにします。--targetは複数回指定でき、Supervisorの判断回数は--max-decisions(既定20)で打ち切られます。--resumeは目標・対象・プロバイダ・モデル・予算などを記録したtrial-config.jsonの完全一致を要求するので、途中でモデルを替えた実行は再開できません。
実行後に確認する成果物と監査コマンド
実行結果はruns/の下に--run-idごとのディレクトリとして残ります。エピソードごとに、役割への入力(input.json)、ツールやコマンドの実行イベントを時系列で並べたevents.jsonl、結果・トークン使用量・費用をまとめたoutput.jsonが保存されます。CTFのように正解のフラグが分かっている検証では、次のコマンドで実行の整合性と証跡の根拠を監査できます。
uv run pentestgpt-agent-audit \
--run-dir runs/example \
--expected-flag 'FLAG{...}' \
--output runs/example-audit.json
注意したいのは、pentestgpt_agentのREADMEが「トレースには診断対象の機密な出力とプロバイダのセッションIDが含まれ、パーミッションで保護されるが暗号化も改ざん検知もされない」と明記している点です。顧客の環境を診断したなら、runs/は診断報告書と同じ扱いで保管・削除の対象に含めてください。
Dockerイメージの収録内容と自律エージェント未同梱の制約
公式のDockerイメージには、Claude Code CLI、Codex CLI、pentestgpt_legacy、診断ツール群が入っています。ログイン情報は名前付きボリュームに保存されるので、認証は一度で済みます。
make docker-build # イメージのビルド
make docker-login # 未ログインのものだけログイン(何度実行してもよい)
make docker-auth-status # Claude と Codex のログイン状態を確認
make docker-shell # ログイン用ボリュームを付けた対話シェル
make docker-down # コンテナ停止(ログインは保持)
make docker-nuke # ログイン用ボリュームを削除して再ログインを強制
READMEにはmake docker-run TARGET=... BACKEND=codexの例がありますが、mainのMakefileではこのターゲットは「pentestgpt_agent is not baked into pentestgpt:latest yet」と表示して終了コード2で止まります。Dockerfileが/appにコピーするのもunified_agentとpentestgpt_legacyまでです。現時点のイメージは認証の保持とlegacyモードの実行環境で、自律エージェントを隔離して回したいなら、使い捨ての仮想マシンを診断ごとに立ててmake runするのが現実的です。検証用の仮想マシンの作り方はKali Linuxのインストールと危険性の考え方がそのまま使えます。
pentestgpt-legacyで8系統のプロバイダとOllamaを使う設定
論文どおりの対話型ワークフローは、mainに同梱されるpentestgpt-legacyで使えます。「レガシー版v0.15」のような別リリースがあるわけではなく、pyproject.tomlに登録された別のコマンドです。reasoning/generation/parsingの3セッションがPTTを保ち、利用者はnext、more、todo、discussで対話を進めます。コマンドを実行するのは人間なので、自律エージェントより事故の範囲を絞りやすい使い方です。
自律エージェントがClaudeとCodexの2つに限られるのに対し、legacyは各社の公式SDKに直接つながります。対応はOpenAI、Anthropic、Google Gemini、DeepSeek、xAI Grok、Alibaba Qwen、Moonshot Kimi、ローカルのOllamaの8系統で、環境変数か.envにAPIキーを置いたプロバイダだけが有効になります。OPENAI_API_KEYだけで使いたい場合もこちらです。
# 以下はcloneしたPentestGPTのルートディレクトリで実行
source .venv/bin/activate
# 利用できるモデルから自動選択
pentestgpt-legacy
# セッションごとにモデルを指定
pentestgpt-legacy --reasoning-model claude-opus-4-8 --parsing-model gemini-3.5-flash
# このIDは非推奨で、Google側ではgemini-3.6-flashへ自動転送される
# 新IDへの変更にはPentestGPT側のレジストリ対応も必要
# Ollama のローカルモデル(OpenAI 互換エンドポイント)
pentestgpt-legacy --reasoning-model ollama:qwen3 --parsing-model ollama:qwen3 --generation-model ollama:qwen3 --base-url http://localhost:11434/v1
# 対応モデル一覧と設定済みプロバイダの表示
pentestgpt-legacy --list-models
# 設定済みの全モデルへ実際に問い合わせて合否を一覧表示
pentestgpt-legacy --smoke-test
READMEのモデル一覧には「2026年6月にWeb上で確認」と書かれており、モデルIDが古くなる前提の書き方です。一覧を写すより、--list-modelsでその場のレジストリ(pentestgpt_legacy/llm/registry.py)を表示させてください。診断対象の情報を外部APIへ出せない案件では、ollama:接頭辞を付けたモデルを3セッションすべてに指定し、機密情報を含まない入力で応答を確認してください。現行の--smoke-testは固定レジストリだけを対象とし、動的に指定するOllamaモデルは検査しません。Ollamaの導入と必要なマシンスペックはローカルLLMの構築手順で整理しています。
XBOW 86.5%という数字が保証していない範囲
PentestGPTの性能として引用される「XBOW検証スイートで86.5%(104件中90件)」は、READMEのBenchmark history節に載っている数字です。ただし同じ段落が、これは2025年12月の実験による過去の研究結果で、現在のpentestgpt-agentのリグレッションを保証するものではないと断っています。
XBOWのハーネスと結果は製品リポジトリの外に置かれ、2026年7月14日のコミット#496で製品からの統合が外されました。READMEは「サポート対象のCLI、Makefile、CI、Dockerランタイムのいずれもが、XBOWランナーを提供しない」と書いています。86.5%を出したのは2025年12月時点の構成で、作り替えられた現在のmainでは測り直されていません。社内でこの数字を導入根拠にするなら、時期と対象(XBOWの検証用課題であって自社のアプリケーションではない)まで添えて共有してください。何を確かめたい診断なのかを先に決めるなら、ペネトレーションテストと脆弱性診断の違いの整理が判断の軸になります。
同名の「PentestGPT」と公式サイトを見分ける基準
「pentestgpt.ai」「pentestgpt official website」のような検索があるのは、PentestGPTという名前のプロジェクトが複数あるためです。GitHubのオーナー名とライセンスを見れば区別できます。
| 項目 | この記事の本家 | Keygraph社の同名製品 |
|---|---|---|
| リポジトリ | GreyDGL/PentestGPT | KeygraphHQ/shannon |
| 現在の名前 | PentestGPT | Shannon(改称済み) |
| ライセンス | MIT | AGPL-3.0 |
| 実装言語 | Python | TypeScript |
| 診断方式 | ブラックボックス・CTF中心 | ソースコードを読むホワイトボックス |
| 出自 | USENIX Security 2024の論文 | 商用プラットフォームの一部 |
本家の公式サイトはREADMEがリンクしているpentestgpt.comで、ページタイトルはPentestGPT - Autonomous Penetration Testingです。Keygraph社のKeygraphHQ/PentestGPTは2026年10月17日時点で404を返し、同社のリポジトリはKeygraphHQ/shannonとして公開されています。旧READMEと現READMEでTrendshiftのリポジトリID(15604)が一致するため、同じリポジトリの改称です。一方、pentestgpt.aiは当社の取得環境では同日時点でCloudflareのチャレンジ(HTTP 403)が返り、中身を確認できませんでした。GreyDGL/PentestGPTのREADMEはこのドメインに触れていません。READMEに載っていないドメインを本家とみなして、APIキーや診断対象の情報を入力しないでください。
隔離環境と法的前提:PentestGPTを入れてはいけない環境
アーキテクチャ文書には、導入判断を左右する一文があります。SupervisorとExecutorはどちらもFULL_ACCESSで動き、デプロイ環境そのものが隔離境界であって、PentestGPTは二つ目のツールサンドボックスやファイルシステムのサンドボックスを持たないという記述です。エージェントが作ったコマンドは、実行したホストの権限でそのまま走ります。
そのため、本番システムと同じネットワークにある作業端末、社内の認証情報が設定済みのマシン、消えて困るデータを持つホストには入れないでください。逆に、診断対象と必要な認証情報だけを置いた使い捨ての環境と、書面での実施許可があれば、CTFや自社の検証環境で偵察と列挙を任せる用途には向いています。v1.0.0を使う場合は、顧客の環境に向ける前にLangfuseへの送信を止めておくことも条件に入れます。
リポジトリの免責事項は、教育目的と許可を得たセキュリティテスト以外での利用を認めていません。自社所有の資産でも、クラウド上なら事業者の侵入テストポリシーが別にかかります。実行前のチェックリストとして、対象資産の一覧、実施許可の書面、実行ホストの隔離状態、runs/の保管先を固定しておくのが現実的です。報告書に採用する指摘は、担当者が再現手順、対象への影響、根拠となる通信やログを確認してください。社外の専門家に任せる場合は脆弱性診断・セキュリティ診断の支援も相談先の一つです。手動検証に切り替える段階ではBurp Suiteの通信傍受の仕組みが参考になります。
よくある質問
PentestGPTの公式サイトとGitHubはどれですか?
GitHubはGreyDGL/PentestGPT、公式サイトはそのREADMEがリンクしているpentestgpt.comです。開発の中心はNTUのGelei Deng氏らで、研究はQuantstampとNTUの支援を受けています。ただし公式サイトのクイックスタートはv1.0.0の手順なので、mainを動かすときはこの記事の手順かpentestgpt_agentのREADMEに従ってください。
PentestGPT v2はありますか?
ありません。リリース一覧の最新はv1.0.0(2025年12月24日)で、その前がv0.14.0(2024年5月15日)です。2026年7月にmainの実行基盤が作り替えられましたが、この変更に対応する新しいリリースタグは付いていません。「PentestGPT v2」と名乗るリポジトリはフォークや第三者のものです。
PentestGPTの現在の開発状況は?
2026年10月17日時点で、mainの最終コミットは2026年7月14日です。アーキテクチャ文書は今後の優先事項として、Supervisorが同じ作業を繰り返す問題の改善と、古い互換コード(ルートのunified_agent)の削除を挙げています。Dockerイメージへの自律エージェントの同梱も未完了です。
PentestGPTはOllamaのローカルLLMで動きますか?
mainではpentestgpt-legacy側で動きます。--reasoning-model ollama:qwen3 --parsing-model ollama:qwen3 --generation-model ollama:qwen3のように、3つのセッションすべてにollama:付きのモデルを指定してください。reasoningだけを指定すると、parsingはAPIキーを設定したクラウドのモデルから自動で選ばれ、キーが無ければ起動に失敗します。エンドポイントの既定はhttp://localhost:11434/v1です。自律エージェントのバックエンドはClaude CodeとCodexだけで、v1.0.0ではmake configのローカルLLMの選択肢から設定します。
USENIX Security 2024の論文はどこで読めますか?
USENIXの発表ページで本文PDFと付録PDFが無償公開されています。プレプリントはarXivの2308.06782です。GitHubのスター数などは版によって記述が違うので、引用するときはどの版から取ったかを書いてください。