本記事の目的
TryHackMeのKing of the HillというCTFの体験会を社内で実施したので、その内容や進め方を書いていきます。
King of the Hill とは
問題サーバーの脆弱性を突いて管理者権限を奪い、その後は脆弱性を修正しながら籠城して他のプレイヤーが侵入してこないように競いあうスタイルのCTFです。
ゲームのポイントは以下の2つの方法で取得できます。
- 占領していることを示す指定された文字列を、問題サーバー内の指定されたファイルに書き込んでおくと、一定時間経過する度に付与される
- 問題サーバーに隠されているフラグ 🏁を提出することで付与される
THMのKing of the Hill はゲーム時間が1時間に固定されており、初見でポイントを取得するにはかなりハイレベルな技術が必要とされます💻
不正行為を防ぐために以下のルールがこのページにて定められています(読みやすいよう和訳しました)。
- マシンを使用不可にしないでください (シャットダウン/再起動、すべての通信を停止するためのファイアウォール/iptables ルール、すべてのサービスの終了、マシンのボッチングなど)
- 他の方法でパッチを適用できない場合にのみ、サービスを停止してください。サービスは、可能な限り「ボックスの真のユーザー」が利用できるようにする必要があります。サービスのポートの変更は許可されています。(機械はできるだけ元の状態に保つようにしてください。)
- フラグまたはその権限を変更/削除しないでください (フラグが誰でも読める場合は、そのままにしておく必要があります)
- 9999 番ポートで稼働しているサービス (king/KoTH サービス) を攻撃、変更、または停止しないでください (これには、デフォルトで /root に配置される 'KoTH' バイナリや、サービスの場所の変更などが含まれます)
- マシンに対するあらゆる種類の DoS
- 他のユーザーを攻撃しないでください (ゲーム ページで指定された IP 以外の IP で偵察を試みる理由はありません)
- マシンを自動的にハッキングしたり、防御を固めるスクリプトは禁止されています
- システム バイナリ (chattr を除く) を削除したり、それら (またはそのディレクトリ) の実行権限を変更したりしないでください
- 代替/ダミー アカウントを使用してリセットを制御することは許可されていません
- リセットは、ターゲットが壊れているか、使用できなくなっている場合にのみ使用してください。ユーザーがアクセスできないようにするためにリセットを使用しないでください
- 1 つの脆弱性が防がれたからといって、マシンをリセットしないでください。すべてのマシンに足場を築くための 4 ~ 5 の方法があります
始め方
THMでは友人同士で競い合うプライベートゲームと、世界中のプレイヤーと競い合うパブリックベームを選択できます。今回はプライベートゲームを体験してみました。(プライベートの方は有料アカウントのみのサービスとなっています。)
まず https://tryhackme.com/games/koth にアクセスします。
Create private game(下図)を選択すると、、
Create new game のポップアップが表示されるので、試合を開始する時間(Start In)や問題サーバー(Machine to play)を選択します。
今回は問題サーバーとして「H1:Easy(Linux)」を選びました。
ゲームを開催すると、他のプレイヤーを招待できるようになります。King of the Hillの画面右上の「Options」をクリックすると、、
Game Settingsのポップアップが表示されますので、その中に記載されている Invitation Link を招待するプレイヤーに伝えましょう。
※King of the Hillに参加するにはVPNでTHMに接続する必要があります。今回の体験会を実施した際に、VPN接続できない問題が発生しました。どうやらTHM側の暗号化処理のアルゴリズムが変更されたようです。VPN接続できない問題が発生した場合は以下のコマンドを試してみてください。
*sed -i 's/cipher AES-256-CBC/data-ciphers AES-256-CBC/' .ovpn
King of the Hillのページでは、ゲームが開始される時刻までカウントダウンが表示され、、
試合開始時刻になると、問題サーバーのIPアドレスが表示されてゲーム開始となります!
CTFの進め方
ここでは、CTFでどのようにポイントを得ていくか等の大まかな進め方を解説します。
また、実施したH1:Easy(Linux)についての攻略手順は載せませんので、ぜひ解いてみてください!
Attack
内部侵入
まず、与えられたホストに対して侵入を行うところから、CTFが始まります。
詳細は避けますが、対象には複数の脆弱性・設定不備があり、それらをついて侵入を図ります。
権限昇格
侵入後は、root権限の取得を目指し、内部調査・権限昇格を行います。
侵入後
ここまでで、ホストに対しての侵入・権限昇格が完了しました。
今回行ったBOXでは、root権限の取得後取得後、ポイントが取得できるようになりました。
システムの占領
/root/king.txtの中に自分のユーザ名を書き込むことで、システムを占領することができます。
実際には、以下のようになります。
# cd /root
# ls
king.txt
root.txt
# echo "username" > king.txt
# cat king.txt
username
ユーザ名が書き込まれている間は、下図のように1分ごとに10ptずつ取得できます。
ユーザ名が複数書き込まれているとポイントが入らないようです。
ご注意ください。
フラグの取得
環境内にフラグファイルがいくつか存在していて、中身をフォームに入力することでもポイントの取得ができます。
場所が分かりにくいフラグもあるようです。
例)
$ ls /hoge/hogehoge
hoge.txt
$ cat /hoge/hogehoge/hoge.txt
THM{hogehogehoge}
Defense
侵入後、他のプレイヤーが侵入できないように侵入経路を塞ぎます。
ルールにもありますが、サービスの停止やシャットダウン、フラグの削除等には注意してください。
修正個所としては、侵入の足掛かりとなる箇所や、権限昇格に至る箇所の脆弱性・設定不備などがあげられます。
侵入経路を塞いで、占領したマシンを守り切りましょう!
所感
今回は難易度Easyのマシンを選択したこともあり、Hack The Box等でペネトレーションテストに慣れている方であれば脆弱性を見つけることは簡単かもしれません。しかしTHMのKing of the Hillはゲーム時間が1時間と限られており、列挙・エクスプロイト・権限昇格をしてポイントを取得するには、スピードが重要だと感じました。
上記のとおり、ゲームの開催方法は簡単ですし、いつでもすぐに開始できますので、メンバーの技術向上のためのツールとしてとても良いと感じました。ここまで読んで頂きありがとうございました。