こんにちは、ゆるいぞITチャンネルです。

今回はハッキングの基本的な流れである「偵察、侵入、情報収集、権限昇格、そしてデータ取得までの工程」について順を追って見ていきましょう。

TryHackMeの演習問題(Room:Basic Pentesting)を題材に、攻撃者がどのような視点でサーバーを攻略していくのかをイメージしてもらえればと思います。

※Youtubeでは動画版をご視聴いただけます。

この記事はこんな人にオススメ
  • ペネトレーションテスト(侵入テスト)の流れを知りたい方
  • CTF(Capture The Flag)初心者の方
  • ハッキングツール(Nmap, Hydra, JohnTheRipperなど)の実際の使い方を見たい方
  • セキュリティエンジニアを目指している方

※実務や演習等を除き、インターネット上のサーバへクラッキングすることは違法行為となりますのでご注意ください。

ハッキングの全体像(流れ)

実際の演習に入る前に、今回実施するハッキングの全体フローを確認しておきましょう。

一般的に攻撃(対象へのクラッキング)は以下のフェーズで進行します。

STEP1
偵察(Reconnaissance)

ターゲットのポートやサービス、脆弱性を探る。

STEP2
侵入(Gaining Access)

見つけた脆弱性やアカウント情報を利用してログインする。

STEP3
情報収集(Enumeration)

サーバー内部のファイルや設定を調査・収集する。

STEP4
権限昇格(Privilege Escalation)

一般ユーザーから管理者(root)へ権限を昇格させる。

STEP5
データ取得

機密情報の奪取や痕跡の消去を実行する。(今回はフラグの取得)

ラボ環境の構成

ソフトウェア

  • 仮想環境 : Virtual Box
  • 攻撃用サーバ : Kali Linux
  • ターゲットホスト : TryHackMeのWebサーバ

演習環境

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

※「ハッキングラボの初期構築」、「TryHackMeへの接続方法」については下記のページをご参照ください。

【Phase 1:偵察】ターゲットの情報を洗い出す

まずはターゲットホストの情報収集を実施します。

演習の内容としてはnmapでポートスキャンだけ実行すればいいことになっていますが、せっかくなので前回紹介した偵察コマンドも一緒に実行してみたいと思います。

ポートスキャン(nmap)

まずは基本となる「nmap」で開いているポート(サービスの入り口)を確認します。

実行結果を確認すると、以下のポートが開いていることが分かりました。

  • 22/tcp (SSH):遠隔操作用
  • 80/tcp, 8080/tcp (HTTP):Webサーバー
  • 139, 445/tcp (SMB):ファイル共有
ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

Webサーバーの脆弱性診断(nikto)

80番ポート(HTTP)が開いていたので「nikto」を使って、Webサーバー特有の脆弱性がないかチェックします。

スキャン結果から「Server may leak inodes via ETags」ということで一つだけ脆弱性情報が出ています。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

あとは「Apacheのバージョンが古いですよ」といった警告も表示されています。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

共有フォルダの調査(enum4linux)

次にSMB(ファイル共有)が有効だったので「enum4linux」で共有フォルダの情報を探ります。

結果を確認すると「Anonymous(匿名)」という共有フォルダが見つかりました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

早速このフォルダにアクセスしてみましょう。

フォルダには「staff.txt」というファイルがあったので中身を確認してみます。

記載内容から「Jan」と「Kay」という2名の従業員がいることが判明しました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

さらに「仕事に関係ないファイルをアップロードするな(特にJan!)」というKayからの注意書きもあります…。

ディレクトリの探索(gobuster)

Webサーバー上に隠されたディレクトリがないか「gobuster」で総当たり攻撃を仕掛けます。

スキャン結果から「/development」というディレクトリが見つかりました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

ここにアクセスしてみると、テキストファイルから再度「J」と「K」というユーザーの存在を確認することができます。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

さらに「Jさんのパスワードは簡単にクラックできたから変更するように…」という記述も確認できます。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

偵察フェーズのまとめ

ここまでの偵察で以下の内容が分かりました。

  • 「Jan」と「Kay」というユーザが存在している
  • Janのパスワードは脆弱である可能性が高い
  • リモートアクセス用のSSH(22番ポート)が開いている

【Phase 2:侵入】パスワードを特定してログインする

偵察フェーズで得た「Janのパスワードは脆弱である可能性がある」という情報を元に侵入を試みてみます。

パスワードクラッキング(hydra)

ユーザIDは「jan」を想定し、hydraを使ってパスワードの総当たり攻撃(ブルートフォースアタック)を実行します。

ワードリストは「rockyou.txt」を使用します。

解析結果から「jan」のパスワードは「armando」であることが判明しました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

SSHログイン

入手した認証情報を使って、ターゲットサーバーにログインします。

これで「Jan」のアカウントで侵入することができたので侵入フェーズは完了になります。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

【Phase 3:情報収集】侵入後のサーバー内を調査する

ターゲットサーバに侵入することができたので、次はサーバ内にある情報を収集してみましょう。

ディレクトリを漁って手動で探しても良いですが、今回は時短のために「linPEAS」という情報収集ツールを使用します。

linPEASとは?
Linux環境において、OSのバージョン、機密ファイル、起動中のプロセス、権限昇格のヒントなどを自動で収集してくれるスクリプトになります。

KaliLinuxにはデフォルトで入っていないので、はじめて使う場合はGitHubからダウンロードしてきます。

Kali Linuxからターゲットサーバーへツール(linPEAS)を転送します。

転送が完了したら再度ログインしてツールを実行します。

情報の収集が完了するとズラズラと情報が表示されますが、赤字で記載されてる部分が重要そうな情報になっています。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

これだと少し見ずらいので、もう少し情報を絞ってみましょう。

そうすると「sshの秘密鍵らしき情報(id_rsa)」や「pass.bak」といった怪しそうなファイルが見つかりました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)
ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

pass.bak」を確認してみましたが、Janのアカウントでは権限が無く見れません。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

なので、もう一つの「Kay(ケイ)」のアカウントでログインしてみましょう。

【Phase 4:権限昇格】管理者権限(root)を奪取する

これ以上のサーバ内の情報を確認する為には管理者権限が必要なるので、最後のフェーズである「権限昇格」のフェーズを実施してみましょう。

もう一つの「Kay(ケイ)」のアカウントが管理者権限のアカウントになると思うのでログインする為の方法を探します。

SSH秘密鍵のクラッキング

Kay(ケイ)」のアカウントでSSHでログインする場合は秘密鍵(id_rsa)を使う必要があるので、KaliLinux側に秘密鍵のファイルをダウンロードしておきます。

ここでいう鍵を使った認証方式のことを「公開鍵認証方式」といいます。

簡単に言うとパスワードを使った認証よりセキュリティが高い認証方式になります。

サーバとクライアントに「公開鍵」と「秘密鍵」というファイルを用意しておかないと認証できないので、パスワードクラッキングの対策になったりする認証方式になります。

ダウンロードした秘密鍵を使って「Kay(ケイ)」のアカウントでログインしてみましょう。

そうすると「秘密鍵を使用するのにパスフレーズを入力してください」と表示されました。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

秘密鍵(id_rsa)にかかっているパスワードについてもクラッキングする必要があるので、「JohnTheRipper」というツールを使用して解析を実施します。

JohnTheRipperとは?
ハッシュ化されたパスワードから元のパスワードを特定するために使用するパスワードクラッキングツールになります。
※ハッシュ化というのは特殊な計算方法(ハッシュ関数)によって変換されたランダムな文字列のこと。

JohnTheRipper」はKali Linuxにデフォルトでインストールされていますが、「ssh2john」というSSHの秘密鍵をjohn形式に変換にするツールはインストールされていないので、そちらはインストールしましょう。

ツールを使って対象の秘密鍵からハッシュ値を抽出します。

次にワードリストを使って抽出したハッシュファイルを解析します。

しばらく待つと「Session completed.」となり解析が完了します。

beeswax」が秘密鍵のパスフレーズになります。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

Kayのアカウントでログイン

判明した「秘密鍵(パスフレーズ)」を使ってKayのアカウントにログインします。

Root権限へ昇格

ユーザ:Kayでログインしたことで、先ほどは見れなかった「pass.bak」が閲覧できるようになっています。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

pass.bak」の中身がroot権限になるためのパスワードになるので、そのパスワードを使用してroot権限に昇格します。

これでサーバーの全権限を掌握したことになります。

ハッキングの基本的な流れについて(偵察→侵入→情報収集→昇格→データ取得)

【Phase 5:データ取得】ゴールへの到達

Root権限があればサーバー内のすべてのファイルにアクセス可能となります。

今回の演習のゴールであるフラグ(root.txtなど)も自由に確認することができます。

最後に

今回はハッキングの基本的なフローをTryHackMeの演習を通して実施してみました。

今回のポイント
  • 偵察が重要:ポートスキャンやWebスキャンで得た情報が、後の侵入の足掛かりになる
  • 情報の連鎖:脆弱なパスワード(Jan)→ 内部調査 → 秘密鍵の発見(Kay)→ Rootパスワード発見と、小さな穴を広げていくイメージ
  • ツールの活用:Nmap, Hydra, JohnTheRipper, LinPEASなど、適切な場所で適切なツールを使うことが効率化の鍵になる

今回はパスワードクラッキングがメインのアプローチでしたが、実際の脆弱性(エクスプロイト)を利用する場合や、他の手法を使う場合でも「偵察→侵入→調査→昇格」という大枠の流れは変わりません。

是非皆さんも、安全な環境で実際に手を動かして学んでみてください。

ということで、今回はここまでにしたいと思います。

それではまた次回お会いしましょう!