4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自動ハッキングツール「PentestGPT」を試してみたけど、意外とデメリットが多かった。

4
Posted at

はじめに

こんにちは、MooseLoveと申します。

最近、AIの進化が凄すぎて「セキュリティエンジニアは将来無くなってしまうのでは?」と考えています。

実際、静的解析においてはSemGrepよりも論理的にコードを追えるCodexに任せた方が誤検知も少なく、多くの脆弱性を検出できると感じています。

しかし、実際に攻撃を仕掛けるフェーズでは、AIは活躍できるのでしょうか?

どのような長所・短所があるのかを知りたくなったため、今回は自動ペネトレーションツールであるPentestGPTを使ってみた感想を書いていこうと思います。

自己紹介

  • 19歳 情報系の大学に通っている大学2年生
  • 情報処理安全確保支援士試験 合格(登録セキスペには未登録)
  • Python Java HTML CSS PHPくらいならなんとかギリわかる

セキュリティ・キャンプ2025コネクトに向けて修行中です。

検証環境

  • 対象: HackTheBox Cap(検証時IP: 10.129.1.108
  • 利用ツール: PentestGPT CTF Solver v1.0
  • モデル: GPT-5.1OpenRouter 経由)

※ 検証はCTF環境内で実施しています。許可のない対象には絶対に実施しないでください。ダメだよ!本当に!

HackTheBox「Cap」の解き方

HackTheBoxとは、VPNを用いて許可された環境であるマシンに攻撃を行い、user.txtとroot.txt(権限昇格が必要)を取得するといったものです。今回はCapというマシンを解かせることにしました。CapのWriteupはこちらの記事を参考に解説します。
https://qiita.com/kk0128/items/a91d4261b31ec891285e

user.txtとroot.txtの取得は、次のような手順です。

  1. nmap21/22/80 を確認する
  2. Webの Security Snapshot から /capture -> /data/<id> の挙動を確認する
  3. /data/0 から取得できるPCAPを確認し、FTP認証情報を得る
  4. FTPログインで user.txt を取得する
  5. 同認証情報でSSHログイン後、/usr/bin/python3.8cap_setuid を使ってroot権限へ昇格し、root.txtを取得する

私も実際に解いてみたんですけど、権限昇格がちょっと難しかったなという感想です。ずっとlinpeas実行後のcap設定を見つけられずに30分近く迷走してしまいました...orz

PentestGPTに実際にやらせたこと(ログ要点)

以下、実行ログから有用だった部分をそのまま抜粋します。

02:52:54
command: nmap -sC -sV -Pn 10.129.1.108
description: Scan target 10.129.1.108 for open ports and services with default scripts and version detection
timeout: 600000

02:55:52
command: gobuster dir -u http://10.129.1.108/ -w /usr/share/wordlists/dirb/common.txt -q -t 30
description: Directory brute force on web root using common wordlist
timeout: 600000

03:09:56
command: strings -n 4 /tmp/108_pcap_0.pcap | grep -n 'USER '
description: Find all USER commands in pcap 0 via strings to see all FTP usernames used.
timeout: 600000

03:10:45
command: grep -a "PASS " /tmp/108_pcap_0.pcap | head
description: Extract PASS lines from pcap 0 treating as text to re-confirm FTP password exactly
timeout: 600000

03:22:31
description: Use Python socket to login to FTP as nathan and run PWD and LIST -al, capturing full raw responses.
timeout: 600000

03:22:45
description: Use Python to perform FTP passive mode directory listing for /home/nathan.
timeout: 600000

03:23:04
description: Retrieve user.txt via FTP passive RETR as nathan and print its contents.
timeout: 600000

03:23:24
description: Login via FTP as nathan and attempt various CWD commands to see if we are chrooted or can access ...
timeout: 600000

03:15:26
description: Test /download endpoint for path traversal to access /etc/passwd using different traversal patterns.
timeout: 600000

03:09:27
description: Attempt basic command injection via netstat endpoint and search for id output.
timeout: 600000

03:03:52
description: Attempt SSH login as nathan using discovered password to check access
timeout: 600000

03:08:18
description: Attempt interactive SSH login as nathan to get shell
timeout: 600000

※descriptionは実行した意図であり、成功ログではない。

結果として、ポートスキャンやディレクトリ探索、認証情報の抽出までは成功しましたが、認証情報を用いたログイン処理に苦戦しており、結果的に的外れなパストラバーサルなどを行ってしまい、最後にはタイムアウトを連発させてしまいました。結果として、SSHにログインしたらすぐに取得できるuser.txtすら取得することが出来ませんでした。

良かった点

私が感じたメリットは次の2つです。

  1. ブラウザ経由の挙動確認(/capture/data/download)が速い
  2. PCAPからのFTP認証情報抽出は比較的得意

探索の初動と、見つかったデータの機械的な掘り下げは強い印象でした。WireSharkとか使わずに、自力でプログラムを作って認証情報を発見している感じでしたね。また、認証情報を用いてログインをする際もPythonプログラムを自作して試行するような挙動を見せていました。

悪かった点

正直、こちらがかなり個人的に「しんどい」と感じました。

  1. 失敗時の再試行や無駄と思えるような自動化、ディレクトリトラバーサル/パストラバーサル系を何度も試し、APIトークン消費が激しい
  2. 「ここが怪しい」という嗅覚ベースの絞り込みが弱い
  3. インタラクティブな処理(SSHや対話系)で詰まると、待ち時間と再試行コストが重い
  4. 権限昇格フェーズの安定感が低い

広く打って当たるまで回す、いわゆるパチンコ戦法になってしまい、外した時のコストが大きいと感じてしまいました。

トークン消費が多すぎる

今回、1度実行しただけで約7ドルを消費しました。1つのマシンを攻略(成功、失敗問わず)するのに1000円以上を使うのは正直かなりオサイフに厳しい。

金持ちの道楽に近いですね。今後AIの性能が上がればマシンの攻略率は上がるでしょうが、トークン消費量は更に増えそうだな、といった印象です。

それを嫌ってしょうもないAIを使えば、安く済ませられるかもしれませんが、失敗し続けるポンコツツールへと成り下がってしまうでしょう。

もちろん、認証情報を見つけるような作業では強みがあります。
ただし、実際に侵入を成立させて、さらに権限昇格まで安定させるには、

  1. もっと強いモデルを回す
  2. トークン消費をある程度許容する
  3. 相手マシン側への攻撃条件や環境がうまく噛み合う

といった条件が必要だと感じました。

リベンジ: --instruction でWriteupを渡したらどうなるか

次回は別マシンで、--instruction オプションを用いて公開されているWriteUp記事のURLと共に「これを参考にしろ」と指示を与えました。
ちょっと記事が長くなってしまうので割愛しますが、結論として、こちらも失敗。
やはりインタラクティブな処理が厳しいのか、相手側の反応が鈍い場面でタイムアウト待ちが長く、約30分使って user.txt すら取れませんでした。

正直、この結果はかなり意外でした。お手本があれば難なくこなせると思っていましたが、こちらも厳しいみたいです。

結果として、合計15ドル近く溶かしてしまいました...

まとめ

現時点では、HackTheBox攻略をAIにすべて任せるにはまだ厳しめです。
Easyマシンでも、噛み合わないとひたすらトークンだけが減っていく悲しい末路を迎えます。

しかし、初動調査やブラウザでの怪しい挙動の発見、認証情報の抽出においてはかなりのスピードで可能であり、「調査の足掛かり」としてPentestGPTを使用するのはアリだと思いました。

GPT-7くらいになったら、また試してみようと思います。何年後だろう?

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?