はじめに
こんにちは、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.1(OpenRouter経由)
※ 検証はCTF環境内で実施しています。許可のない対象には絶対に実施しないでください。ダメだよ!本当に!
HackTheBox「Cap」の解き方
HackTheBoxとは、VPNを用いて許可された環境であるマシンに攻撃を行い、user.txtとroot.txt(権限昇格が必要)を取得するといったものです。今回はCapというマシンを解かせることにしました。CapのWriteupはこちらの記事を参考に解説します。
https://qiita.com/kk0128/items/a91d4261b31ec891285e
user.txtとroot.txtの取得は、次のような手順です。
-
nmapで21/22/80を確認する - Webの
Security Snapshotから/capture -> /data/<id>の挙動を確認する -
/data/0から取得できるPCAPを確認し、FTP認証情報を得る - FTPログインで
user.txtを取得する - 同認証情報でSSHログイン後、
/usr/bin/python3.8のcap_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つです。
- ブラウザ経由の挙動確認(
/capture→/data→/download)が速い - PCAPからのFTP認証情報抽出は比較的得意
探索の初動と、見つかったデータの機械的な掘り下げは強い印象でした。WireSharkとか使わずに、自力でプログラムを作って認証情報を発見している感じでしたね。また、認証情報を用いてログインをする際もPythonプログラムを自作して試行するような挙動を見せていました。
悪かった点
正直、こちらがかなり個人的に「しんどい」と感じました。
- 失敗時の再試行や無駄と思えるような自動化、ディレクトリトラバーサル/パストラバーサル系を何度も試し、APIトークン消費が激しい
- 「ここが怪しい」という嗅覚ベースの絞り込みが弱い
- インタラクティブな処理(SSHや対話系)で詰まると、待ち時間と再試行コストが重い
- 権限昇格フェーズの安定感が低い
広く打って当たるまで回す、いわゆるパチンコ戦法になってしまい、外した時のコストが大きいと感じてしまいました。
トークン消費が多すぎる
今回、1度実行しただけで約7ドルを消費しました。1つのマシンを攻略(成功、失敗問わず)するのに1000円以上を使うのは正直かなりオサイフに厳しい。
金持ちの道楽に近いですね。今後AIの性能が上がればマシンの攻略率は上がるでしょうが、トークン消費量は更に増えそうだな、といった印象です。
それを嫌ってしょうもないAIを使えば、安く済ませられるかもしれませんが、失敗し続けるポンコツツールへと成り下がってしまうでしょう。
もちろん、認証情報を見つけるような作業では強みがあります。
ただし、実際に侵入を成立させて、さらに権限昇格まで安定させるには、
- もっと強いモデルを回す
- トークン消費をある程度許容する
- 相手マシン側への攻撃条件や環境がうまく噛み合う
といった条件が必要だと感じました。
リベンジ: --instruction でWriteupを渡したらどうなるか
次回は別マシンで、--instruction オプションを用いて公開されているWriteUp記事のURLと共に「これを参考にしろ」と指示を与えました。
ちょっと記事が長くなってしまうので割愛しますが、結論として、こちらも失敗。
やはりインタラクティブな処理が厳しいのか、相手側の反応が鈍い場面でタイムアウト待ちが長く、約30分使って user.txt すら取れませんでした。
正直、この結果はかなり意外でした。お手本があれば難なくこなせると思っていましたが、こちらも厳しいみたいです。
結果として、合計15ドル近く溶かしてしまいました...
まとめ
現時点では、HackTheBox攻略をAIにすべて任せるにはまだ厳しめです。
Easyマシンでも、噛み合わないとひたすらトークンだけが減っていく悲しい末路を迎えます。
しかし、初動調査やブラウザでの怪しい挙動の発見、認証情報の抽出においてはかなりのスピードで可能であり、「調査の足掛かり」としてPentestGPTを使用するのはアリだと思いました。
GPT-7くらいになったら、また試してみようと思います。何年後だろう?