TryHackMe「Offensive Security」

【フェーズ1:Offensive Securityの基本】 今日はTryHackMeの「Offensive Security Intro」を進めた。最初に学んだのは、Offensive Security(攻撃側セキュリティ)の考え方。

- Offensive Security:攻撃者と同じ視点でシステムを調べ、本物の攻撃者より先に弱点を見つけること - Defensive Security:攻撃を防御・検知する側のセキュリティ

つまり、 - Offensive Security = 攻めて弱点を探す - Defensive Security = 守る

【フェーズ2:FakeBankの確認】 今回のRoomでは、安全で合法なTryHackMeの演習環境にある「FakeBank」という偽の銀行サイトを攻撃対象として使った。

最初に確認した情報: - 口座番号:8881 - 残高:-$1,232.32

この段階ではまだ攻撃はしておらず、まずターゲットとなるWebサイトの状態を確認した。

【フェーズ3:隠しページの探索】 次に、普通にサイトを見ているだけでは表示されない「隠しページ」を探した。ここで使ったのが `dirb`。

実行したコマンド:

`dirb http://fakebank.thm`

dirbは、Webサイトに対して多数のURL候補を自動で試し、存在しているページやディレクトリを探すツール。

今回のような調査は「Directory Enumeration(ディレクトリ列挙)」と呼ばれる。

見つかったURL: - `http://fakebank.thm/bank-transfer` - `http://fakebank.thm/images`

dirbの実行結果では、「+」から始まる行が見つかったURLを表していた。

【フェーズ4:HTTPステータスコードの確認】 探索結果ではHTTPステータスコードも確認した。

- `CODE:200`:ページが正常に存在している - `CODE:301`:別のURLへ転送される

今回、`/bank-transfer` は `CODE:200` だったため、実際に利用可能なページだと分かった。

【フェーズ5:管理者ページへのアクセス】 次に、

`http://fakebank.thm/bank-transfer`

へ直接アクセスした。

すると「Admin Portal」という職員・管理者向けのページが表示された。

画面には、 - Staff Account - Register cash deposits - Deposit to account - Amount to deposit in USD

などが表示され、一般ユーザーが使うべきではない入金機能が利用できる状態だった。

重要なのは、管理者ページが「見えない場所に隠されているだけ」で、実際にはアクセス制限されていなかったこと。URLを知るだけで管理者用ページを開けてしまった。

【フェーズ6:アクセス制御の弱点】 この状態は、「隠してあるから安全」という設計が安全ではないことを示している。

本来必要なのは、 - 管理者かどうかを確認する - 権限のないユーザーは拒否する - サーバー側でアクセスを制御する

という仕組み。

今回のように、本来アクセスできないユーザーが重要な機能へアクセスできてしまう問題は「Broken Access Control(壊れたアクセス制御)」の考え方に近い。

【フェーズ7:口座残高の変更】 Admin Portalでは、自分の口座「Acc 8881」を選択した。

その後、 - 入金額:2000ドル - 「Deposit Money」を実行

元の残高:

`-$1,232.32`

そこへ2000ドルを入金したため、

`-$1,232.32 + $2,000 = $767.68`

となり、残高をプラスにすることができた。

【今回の攻撃の流れ】 1. 通常のWebサイトを確認 2. `dirb` で隠しURLを探索 3. `/bank-transfer` を発見 4. 管理者用ページへ直接アクセス 5. アクセス制御の不備を確認 6. 自分の口座 `8881` を選択 7. 2000ドルを入金 8. 残高をプラスに変更

【今回覚えた重要用語】 - Offensive Security:攻撃者の視点で弱点を探すセキュリティ分野 - Defensive Security:攻撃を防御・検知する側のセキュリティ - dirb:Webサイトの隠しページやディレクトリを探索するツール - Directory Enumeration:Webサイト内に存在するページやディレクトリを列挙して探すこと - HTTP 200:アクセスしたページが正常に存在することを示す - HTTP 301:別のURLへのリダイレクトを示す - Broken Access Control:本来アクセスできないユーザーが、重要なページや機能へアクセスできてしまう問題

【今回の一番重要な学び】 「URLを隠すこと」と「アクセスを禁止すること」は全く別。

管理者ページへのリンクを画面から消していても、URLへ直接アクセスできるなら安全ではない。ペンテストでは、表から見える機能だけを見るのではなく、「裏に隠れているページや機能がないか」を探すことも重要。

【完了記録】 - Room:Offensive Security Intro - Completed tasks:4 - Points earned:32

一覧へ戻る