ラック・セキュリティごった煮ブログ

セキュリティエンジニアがエンジニアの方に向けて、 セキュリティやIT技術に関する情報を発信していくアカウントです。

【お知らせ】2021年5月10日~リニューアルオープン!今後はこちらで新しい記事を公開します。

株式会社ラックのセキュリティエンジニアが、 エンジニアの方向けにセキュリティやIT技術に関する情報を発信するブログです。(編集:株式会社ラック・デジタルペンテスト部)
/ セキュリティブログ / セキュリティエンジニア /
当ウェブサイトをご利用の際には、こちらの「サイトのご利用条件」をご確認ください。

デジタルペンテスト部提供サービス:ペネトレーションテスト

ペネトレーションテスト初心者が生成AIを活用して Hack The Box でペネトレーションテストを勉強してみた話

デジタルペンテスト部の吉原です。

普段はプラットフォーム診断で診断作業や新規診断スクリプトを開発したりしています。

そんな私ですが、今回は、ペネトレーションテスト初心者である私が生成AIを使ったりして、Hack The Box (以下 HTB)でペネトレーションテストを勉強してみたお話を紹介したいと思います。

これからセキュリティ技術やペネトレーションテストを勉強してみたいけど、何か難しそう!という方々の参考になれば幸いです。

免責事項

当記事の内容は教育・学習およびセキュリティの向上目的で執筆されており、サイバー攻撃行為を推奨するものではありません。​ 第三者が所有する資産に管理者の許可なく攻撃行為を行うと各種の法律に抵触する可能性があります。​ 当記事の内容を使用して起こるいかなる損害や損失に対し、当社は一切責任を負いません。


Hack The Box とは

「Hack The Box」とは、サイバーセキュリティのスキル向上を目的としたオンラインプラットフォームです。ペネトレーションテスト(侵入テスト)を中心に、情報セキュリティに関する様々な分野を実践的に学ぶことができます。

主な特徴

  • 実践的なラボ環境:仮想環境内に用意された様々な「マシン」(サーバーやネットワーク機器など)に対して、実際に侵入を試みることで脆弱性の発見などの攻略手順を学ぶことができます。

  • 無償で利用可能 基本的な機能は無料で利用できます。有料プランでは、より多くのマシンや特別な機能が利用可能になります。

利用方法

1. アカウント登録 Hack The Box のウェブサイトから「Get Started」をクリックし、アカウントを登録します。

HTBトップページ

2. VPN 接続 HTB のラボ環境に接続するために、VPN(Virtual Private Network)を設定します。HTB が提供する OpenVPN の設定ファイルなどを利用することで VPN 接続することができます。

VPN 接続に関しては公式ヘルプページがあるので、接続できない場合はこちらを参照してみてください。


Starting-Point とは

「Starting Point」とは、サイバーセキュリティとペネトレーションテストの初心者向けに設計された、基礎的な学習コンテンツです。

問題は一番簡単な単純な操作でマシンをクリアできる Tier0 から、難易度の高い、複数の操作を必要とする Tier2 まであり、全 25 台のラボ環境が用意されています。(無料で使用できるラボ環境もありますが、有料プランが必要なラボ環境もあります。)

今回、私は HTB に初めて挑戦するので、問題の形式やどのように攻略するのかを理解するために、Starting-Point の問題に取り組みました。

Starting-Point
また、Starting-Point の各問題に HTB 公式が writeup(問題を解くための解説)を英語のみですが用意してくれているため、行き詰った場合も、ある程度のセキュリティに関連する知識(ポートスキャンや脆弱性ペネトレーションテストツール)があれば、今回紹介するように 生成AI を活用することで言語の壁を超えて問題が解きやすくなります。

会社の研修費で HTB の有料プラン(VIP+)をいただいたので、やらなきゃという使命感があったのはナイショ

私が権限昇格や横移動に関する知識を持っていないのもあり、全てのラボ環境を攻略するのには 3 ヶ月ほどかかりました。

Starting-Point の問題に関する記事はもう既にネット上にいくつかあるので、本記事では、問題の Writeup というよりは、Starting-Point の問題を解くに当たって苦戦したものや、学習方法に焦点を当てたいと思います。

問題の解き方

各問題にはそれぞれ、攻略のヒントとなる、「HTB lab 環境へのアクセスに使用する VPN とは何か?」などの基礎的な知識が解答として設定されていて、答えを入力していき、最終的に CTF(Capture The FLAG)と同様のラボ環境に存在する root ユーザのフラグを送信することで攻略となります。

回答欄

主なラボ環境の攻略手順

以下は主に問題を解くにあたっての流れを説明します。

1. 情報収集:nmap(ポートスキャナ)でラボ環境で稼働しているサービスを特定します。

2. 脆弱性、侵入経路の探索:特定したサービスのバージョン情報や Web サイトにアクセスもしくは、サービスへの接続試行などを行い、脆弱性を探します。

3. 侵入後、root ユーザへのアクセス権限を入手:見つけた脆弱性などからラボ環境に侵入、探索や横移動、権限昇格などを行い root ユーザのフラグを入手します。

問題に行き詰ったとき

  • まずは見逃しがないか確認する まずは自分が探すことが出来た範囲でラボ環境への侵入の糸口となるヒントを見逃していないかを確認します。

  • 解答欄のヒントボタンを活用する 初学者向けの Starting-Point の問題では解答欄にヒントボタンがあり、問題の解答に関連した内容や検索するべき内容を教えてもらえます。

  • 生成AI にヒントを聞いてみる そもそも事前に問題に関連した知識がない場合、ヒントに「~で検索してください」と言われて検索しても、問題の回答にたどり着けない場合があります。 その場合には、自分で検索するよりも、AI で関連知識をまとめて教えてもらったほうが、早く正解にたどり着ける場合があります。

AIにヒントを聞いてみる

  • 全く分からないなら、とりあえず公式 Writeup を読んで、理解を深める 私もそうですが、問題によっては、そもそも侵入の前提となる知識が不足している場合があります。その場合はいくら時間をかけても、ラボ環境の攻略が進むことはほぼ無いので、潔く諦めて、解説を読んで、侵入の仕方を学んで経験を積んでいくのも手です。 その場合は無理に時間をかけるよりも、解説を読んで理解を深め、次のステップに進むことも有効な学習方法です。 また公式 writeup は英語のみで記載されているため、ある程度関連知識があれば英語が苦手でも、内容をある程度理解することができるかと思いますが、本当に何のコマンドを実行しているのかすらも分からない、場合には 生成AI に writeup を読んで貰って要約して日本語で解説してもらうことも可能です。

    私は Gemini のファイル読み込み機能を活用して詳細な要約解説を作成してもらい、問題に取り組みました。

    writeupをAIに解説してもらう


攻略で苦戦した所(もしくは初学者が苦戦すると思われる所)

Starting-Point の問題を解いて行くにあたって、幾つか苦戦したものがあったので、紹介したいと思います。

そもそもセキュリティ(脆弱性ペネトレーションテスト)に関する知識がない

これに関しては私は普段仕事として脆弱性診断などのセキュリティ知識に触れているため、あまり苦戦しませんでしたが、Starting-Point の問題だけでは補完できないものもあると思います。

その場合、必要になった知識は随時調べるまたは 生成AI に聞いてみて、概要を理解するだけでも理解が深まりやすくなります。(検索すべき関連した語句などは問題を解いていくうちに、調べて理解が深まっていきます)

普段あまり使用しないコマンドの操作などがわからない

これは Tier0 の問題を解く際に苦戦しました。普段脆弱性診断ではあまり使用しないコマンドやツールの操作方法がわからず、最初は調べることが多かったです。(対処方法としてもとにかく調べる、もしくはヘルプオプションを見てみるなど)

Starting-Point の問題は初学者向けであることから、root フラグを送信するまでの問題に使用するコマンドやツールのオプションに関する問題があることから、問題を解くにあったって自然と調べていくことで理解が深まりました。

権限昇格や侵入の仕方がわからない

これは Tier1 以降の問題を解く際に、侵入は出来たけど、今侵入しているユーザには SU 権限がなく、どうやって root ユーザのフラグを入手するかという所で権限昇格の様々手法がまだ理解できておらず、苦戦しました。

これに関しては、場数を踏んで権限昇格などの手法に慣れていくのが、一番いいと思うので、私は公式 Writeup を読みながら実際に手を動かして、学んでいきました。


脆弱性診断員として面白いなと思った問題

Starting-Point の問題を全部解くのは結構時間がかかるので、いくつか脆弱性診断員の目線で普段の仕事ではあまり見ない面白いと思った問題をいくつか紹介したいと思います。

(Tier0 の問題は基本的に稼働しているサービスに接続して横移動が出来れば、root フラグが取得できるものが多いので、省略させていただきます。)

Tier1 : Three (s3 や WebShell/Reverse Shell の問題)

この問題は、ラボ環境で稼働しているサブドメイン(s3)を GoBuster などのディレクトリ探索ツールを利用して、WebShell を s3 経由で設置して root フラグを入手する、という問題でした。

gobuster vhost -w /usr/share/wordlists/secLists/subdomains-top1million-5000.txt -u http://thetoppers.htb

================================================================
Gobuster v3.1.0
by 0J Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
================================================================
[+] Url:        http://thetoppers.htb
[+] Method:     GET
[+] Threads:    10
[+] WordList:   /usr/share/wordLists/secLists/subdomains-top1miIIion-5000.txt
[+] User Agent: gobuster/3.1.0
[+] Timeout:    10s
================================================================
 2025/04/20 16:40:33 Starting gobuster in VHOST enumeration mode
================================================================

Found: s3.thetoppers.htb(Status:404) [Size:21]

[** SNIP **]

普段の診断業務ではファイルアップロードが可能であったとしても、診断対象への影響は最小限に抑える(ペネトレーションテストではないため)必要があることから WebShell を設置することがないため、ペネトレーションテストの要素を感じることができました。(s3 を経由しての攻撃というのも面白い問題でした。)

Tier1 : Funnel (ポートフォワーディングやトンネリングの問題)

この問題は、FTP に匿名アクセスが可能という、お決まりの流れがあり、そこからパスワードポリシーやユーザー ID に関する情報を入手して、Hydra を利用して SSH 接続を行い、足がかりの確保をしてから権限昇格を行い、root フラグを入手する、という問題でした。

ftp> get password—policy.pdf
local: password—policy.pdf remote: password—policy.pdf
229 Entering Extended Passive Mode (|||15726|)
150 Opening BINARY mode data connection for password—policy.pdf (58899bytes).
100% |***********************************************************************| 58899   478.99 KiB/s   00:00 ETA
226 Transfer complete.
58899 bytes received in 00:00 (317.26 KiB/s)

ftp> get welcome_28112022
local: welcome_28112022 remote: welcome_28112022
229 Entering Extended Passive Mode (|||62848|)
150 Opening BINARY mode data connection for welcome_28112022 (713 bytes).
100% |*******************************************************************| 713   1.67 MiB/s   00:00 ETA
226 Transfer complete.
713 bytes received in 00:00 (11.93 KiB/s)

苦戦した所としては SSH 接続後の権限昇格や、オープンポートになっていない PostgreSQL にどうやってアクセスするか、というところが難しかったです。(ここでも普段の診断業務では通常行わない、対象に SSH 接続した後に、権限昇格を行って、ローカルポートフォワーディングで PostgreSQL に接続するという手法がよい学びになりました。)

Tier2 : Unified ( Log4j や管理者パスワードを変更する問題)

この問題は、ラボ環境に UniFi(ver6.4.5)が稼働していて、Apache Log4j脆弱性(CVE-2021-44228)を悪用して、用意した LDAP サーバを立ち上げて、リバースシェルを接続して、そこから侵害を行う問題でした。

UniFiのログイン画面
log4jの通信

Log4j で実際にリバースシェルを接続してそこから侵害を行う流れが、普段の仕事で侵害された際のシナリオなどを考える上で役に立つなと感じました。


まとめ

以上、ざっと ペネトレーションテスト初学者の視点で HTB 攻略手順や攻略で行き詰った場合の対処方法、どのように 生成AI を活用して、必要な知識を補完して学習を進めていくのか、などを書いてみました。

まずは Starting-Point などの簡単な問題を解いていくことで、徐々にペネトレーションテストの手順に慣れていき、慣れてきたら、より難しい問題に取り組んでセキュリティ技術の学習やペネトレーションテストスキルの向上の手助けになれば幸いです。