はじめに
HackTheBox、TryHackMe、OSCPの勉強をしていてまとめていたBoot2Rootについてのナレッジをまとめていくことにした。
俗にいう一般イメージ的なハッキングというか、ハッキングされてランサムウェア被害が…みたいな過程を味わえるのがこの分野の問題になっている。
普通の環境に対してこれから紹介する知識を使ったら犯罪なので注意。
何を言われているかよくわからない人は見ないほうがいいです。
レッドチーム向けに役立つとは思うけれど、こんなまとめを見ないでちゃんとした資料で勉強した方がいいです。
Boot2Root
Boot2Rootでは、一般的には以下のような問題が出る。
脆弱な端末が提示され、その端末の管理者権限でのシェルを奪取せよ
問題文として提示されるのは攻撃先端末のIPアドレスだけである。(問題によっては追加情報があったりするけど)
なので、競技者はこのIPアドレスにアクセスをして、どういったサービスが動いているか、どういった脆弱性が存在するかというのをゼロから探索していくことになる。
ゴールについて
どうやって管理者権限を奪取したかを示すかであるが、CTFと同様に管理者しかアクセスできない所に「フラグ」が置いてあることが多い。
WindowsであればC:\Users\Administrator\Desktop\root.txt
、Linuxであれば/root/root.txt
のような感じで置かれているので、これを提出すれば問題クリアとなる。
便宜上、ルートフラグと呼ぶことにする。
多くの問題ではチェックポイントとして、ユーザーフラグというものもある。
これは、ユーザー権限でのシェル奪取が成功したときに手に入るフラグである。
WindowsであればC:\Users\[任意ユーザー]\Desktop\user.txt
、Linuxであれば/home/[任意ユーザー]/user.txt
のような感じで置かれている。
(所説ありそうですが、シェル奪取/獲得というのは、コマンドプロンプトとかbashみたいな雰囲気でコマンド実行できる状態を確保することを指します)
これ以外にも問題によっては攻撃の過程で手に入る情報について細かく回答したり、
フラグが3個以上あったり、特殊な場所にフラグが置いてあるものもあるが、特に断りが無ければ、↑のような形式を想定していればよい。
初学者に向けて
Boot2Rootに初めて取組む場合は、手取り足取り教えてくれる記事や文献を参考にしながら始めていくのがいい。
(というかそれしかなさそう)
あと問題に取り組む前に色々設定しなきゃいけなかったりするので、その辺も参考にすること。
「Boot2Root入門」と銘打っておきながら、この辺の手取り足取りは他に優れた記事が多数あるので、
そちらを参考にしてほしい。
- 防御のためのハッキング入門 TryHackMeのはじめかた|やわらかセキュリティ
- 昨今Boot2Rootを始める場合はTryHackMeから始めるのがいい
- Hack The Boxを楽しむためのKali Linuxチューニング
- v_avengerさんの資料は非常に参考になるので、ここのWalkthroughを参考に練習してもいい
プラットフォームについて
とりあえず3つ挙げておく。
- TryHackMe (https://tryhackme.com/) 超オススメ。ステップバイステップのものもあるので、初学者はここからが良い
- HackTheBox (https://www.hackthebox.eu/) オススメ。ちょっと前まで崖から突き落として這い上がってきた者限定サイトだったが、最近は学習教材もある
- VulnHub (https://www.vulnhub.com/) やや古く自分で環境を立ち上げる必要もあるので、初手ではオススメしない
ほかにもそれっぽいものがいくつかあるが、入門向けの本記事で扱う感じではないと思うので、とりあえず上の1,2をやるといい。3はちょっと微妙かも。
具体的な流れについて
さて、つらつら書いたが、これだけ聞いても想像が難しいかもとも思う。
実際に解く場合の流れについて、実例を以下に上げておく。
(https://blog.hamayanhamayan.com/entry/2021/05/13/223627 を例にしています。ネタバレ有り注意)
- 謎のIPアドレスが与えられる
- 何が動いているかも分からないのでnmapでポートスキャンをして、何のポートが開いているか特定する
- ポート80が開いていて、見てみるとweb server(apache2)が動いていた。
- dirbusterでディレクトリスキャンをして、web serverで何が動いているか確認する
/simple
というディレクトリが見つかり、CMS Made Simple version 2.2.8
が動いていることが分かった- このCMSには脆弱性CVE-2019-9053が報告されており、この脆弱性を利用するとCMSの管理者パスワードが特定できた
- CMSにログインするととあるユーザー名も特定できる
- 6で特定したパスワードは使いまわされており、このパスワードと7で得たユーザー名でssh接続すると成功
/home/mitch/user.txt
にユーザーフラグがあるsudo -l
をしてこのユーザーがsudoを通じて実行可能なものを確認する- sudoを使えばroot権限でvimが動かせることが分かったので vim | GTFOBins を参考にして、これを悪用してvimからシェルを起動する。vimは管理者権限で動かせているので、そこから起動できるシェルもroot権限を持つ
- root権限のシェルが獲得できたので
/root/root.txt
が確認でき、これがルートフラグ
これを読んですんなり理解できるならば、かなり素養があるというか、周辺知識が豊富だと思う。
かなり抽象的に説明をすると、「ひたすら探索」→「脆弱点を攻撃」を繰り返して、現状よりもより上位の権限を奪取していくのが基本方針となる。
最初は、サーバーを利用するユーザーとしての権限しかない状態であるが、そこから得られる情報を探索し、脆弱点が見つかるとそれを悪用して別のユーザーが利用可能になる。
別のユーザーが利用可能になることで認可範囲も増えるのでさらに広い範囲で情報探索ができるようになる。
さらに広い範囲で情報探索をすると、新しく脆弱点が発見でき、さらに別のユーザーが利用可能に…ということを繰り返して最終的にはルート権限を得る。
上の実例をちょっとだけ抽象化すると、以下のようになる。
「どういうサービスが動いているか探索」手順1~5
→ 「脆弱点を突いて、ユーザーシェルを獲得する(ユーザーフラグ獲得)」 手順6~9
→ 「使えるようになったユーザーで何ができるか探索」手順10
→ 「脆弱点を突いて、ルートシェルを獲得する(ルートフラグ獲得)」手順11~12
これを繰り返すことでユーザーシェルを獲得したり、ルートシェルを獲得していくことになる。
より体系的/発展的な話
これ以降はより体系的な話、もしくは、より発展的な話をすることにする。
Boot2Rootについてなんとなく理解できていることを前提として進めるので注意。
より強くなるには
- Boot2Rootはひたすら『探索』->『脆弱点をついて水平/垂直移動』を繰り返すゲームである
- 必要とされる概念自体はそれほど多くはないが、サービスは無限にあるのでそれらすべてに対応する必要がある
- おそらく出題側も完璧な知識は要求しておらず、見慣れぬサービスを見つけたら適切に検索して攻撃することが大切
- 攻撃の過程でCTFの1部分が要求されることがある
- 特にユーザーシェルを獲得するためにweb serverが起点になることは多く、Webカテゴリが得意であれば多少有利に働くこともあると思う
- だが、普通にpwnも出るし、revも出るし、たまにcryptoも出る。forensicsもそう。
- 根気と自動化
- 根気よくひたすら基本の列挙をしていくのが重要な気がする
- 抜け漏れと時間短縮のため、ある種の自動化をしていくのもオススメ
- 最新技法のキャッチアップ
- Rabbit Holeについて
- Rabbit Holeというワードを見かけることがあるかもしれないが、これは出題者が置いた攻略には関係ない要素のことを指す
- つまり、脆弱な点を探しても見つからない、囮のような部分になる
- 明らかに怪しいものであっても意図的に置かれたRabbit Holeである可能性があるので、1点にこだわるのではなく、網羅的に探索を行うようにしよう
『探索』について
先ほど書いたようにBoot2Rootでは『探索』->『脆弱点をついて水平/垂直移動』を
繰り返すので脆弱点を付くのはもちろんだが、探索の質も要求される。
機械的にもれなく探索することが要求されるのはもちろんだが、時には攻撃者の気持ちになって探索的に探索を行うことも重要になる。
探索のメソッドの1つはスキャンである。 リクエストを飛ばし、その応答によって環境を把握する。
- ポートスキャン
- 辞書を使ったスキャン
- 脆弱性を狙ったスキャン
- sqlmapのような脆弱性があるかどうかを確かめるスキャナーもある
- 他にもサービス毎に固有のスキャン方法がある
- スキャンの範疇で語っていいかわからないが、ユーザー名を使った辞書攻撃をしてユーザー名を特定していく手法もある
他にもOSINTで情報を得る場合もある。
例えばポート443で会社のホームページがホスティングされていて社員紹介のページがあれば、
ユーザー名がそこから類推可能かもしれない。
悪用される『脆弱点』について
- 脆弱性
- 脆弱な設定を突いたり、認可が最小化されていない
- 権限昇格時に多いかも
- 重要なファイルがpublicになっていたり
- 人間的な脆さを利用
- 推測可能なパスワードなど
- パスワードの使いまわし
- フィッシングメール
と簡単に書いてしまったが、本当に色々ある。
網羅的に見たい場合はMITRE ATT&CKみたいなマジなやつを見たほうがいい。
この記事にぶら下げる子記事で紹介されるようなことはほぼほぼ脆弱点にまつわることだと思う。
横展開、もしくは、権限昇格をいかに行うか
(このセクション、用語の使い方がおかしい可能性あります)
水平移動、垂直移動とも言ったりする。
シェルを獲得した後に
水平も垂直もメソッド的にはそれほど違いはなく、単にどのユーザーに移るかによって言い方が変わる印象
- 横展開, 水平移動, Lateral Movement, Pivoting
- 一般ユーザーの権限を使って、他の一般ユーザーの権限を得ること
- もしくは、侵害済みの端末を使って、他の端末のアクセス権限を得ること
- 少し難しい問題だと、ユーザーシェルが手に入った後、権限昇格するために一旦他のユーザー権限を得る必要があるかも
- 複数端末の問題もあり、その場合は侵害した端末から、さらに別の端末へアクセスをしたりする
- 一般ユーザーの権限を使って、他の一般ユーザーの権限を得ること
- 権限昇格, Priviledge Escalation, 垂直移動
移動方法については、基本的には以下の2通りのルートを使う。
- とあるユーザー(例えばrootユーザー)の権限で動かしているプログラムに何とかしてRCEさせることで、そのユーザーの権限で特定プログラムを動かす
- 特定プログラムと書いたが、1例として書くとリバースシェルを動かすことができれば、そのユーザーの権限で任意のコードを実行することができ、移動が完了する
- とあるユーザーの認証情報が何らかの理由で漏洩し、ログインが可能になる
- 認証情報がハードコーディングされていたりして、認証情報が漏れてしまう場合がある
『辞書』について
所感だがスキャンや辞書攻撃で使う辞書については、暗黙の了解というか結構みんな使っている辞書がある。
自分が使っている辞書について以下に書いておく。
以下の辞書を使っておけば大丈夫という訳ではないが、参考にしてほしい。
- ディレクトリスキャン用辞書
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
- /usr/share/dirb/wordlists/big.txt
- /usr/share/SecLists/Discovery/Web-Content/raft-medium-directories-lowercase.txt
- ユーザー名スキャン用辞書
- /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
- パスワードクラック用辞書
- rockyou.txt
- サブドメイン探索用辞書
- /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
- パラメータ探索用辞書
- /usr/share/SecLists/Discovery/Web-Content/burp-parameter-names.txt
- たまにアドホックな辞書もある
- サービスをもとに使える辞書を持ってきて使う
- 規則性がある場合はそれをもとに作ったり、webサイトからキーワードを拾ってきて辞書にしたりすることもある
まとめ
まとめ…の前に
細かくまとめを書いていくが、サービスは無限にあって網羅性はあきらめている。
とりあえず手元にあるものを適当な粒度でまとめておいている感じなので、もっとたくさんまとめられている以下のようなサイトを参考にするか、
適当に[keyword] pentest
とかで適宜検索しながら頑張るのがいい。
まとめ [WIP]
- Boot2Rootにおけるスキャニングまとめ
- Boot2RootにおけるActive Directory/Kerberos認証/LDAPまとめ
- Boot2Rootにおける脆弱性調査まとめ
- Boot2RootにおけるCMSまとめ
- Boot2RootにおけるDocker/VMまとめ
- Boot2RootにおけるCredentialsまとめ
- Boot2Rootにおけるログイン総当たり
- Boot2Rootにおける辞書攻撃まとめ
- Boot2Rootにおけるアンチウイルス回避まとめ
- Boot2RootにおけるExfiltrationまとめ
- Boot2Rootにおけるポートスキャンとポート毎攻撃まとめ
- Boot2RootにおけるLinux関連まとめ
- Boot2Rootにおけるmetasploitまとめ
- Boot2RootにおけるWindows関連まとめ [mimikatz]
- Boot2RootにおけるPhishing関連まとめ
- Boot2RootにおけるLateral Movementまとめ
- Boot2RootにおけるPersistent/PostExploitまとめ
- Boot2Rootにおけるリバースシェルまとめ
- Boot2RootにおけるTunnelingまとめ
これに加えてCTFの各ジャンルで要求されることも頭に入れておく必要がある。
beginnerレベルにはどれも学習していますが、いつか全部かけるくらい極めたいですね…
- CTFにおけるWebセキュリティ入門とまとめ
- CTFにおけるpwn入門とまとめ
- CTFにおけるreversing入門とまとめ
- CTFにおけるcrypto入門とまとめ
- CTFにおけるフォレンジック入門とまとめ
- CTFにおけるステガノグラフィ入門とまとめ