私は最近Try Hack Meでサイバーセキュリティについて学んだいる。 きっかけは業務でセキュリティの知識と技能が求められたことにあるが、今の私が関心を寄せている暗号やプライバシーの領域と親和性が高いという点が大きい。 このブログでは私がTry Hack Meを初めて3週間で学んだことを紹介する。
Try Hack Meとは
Try Hack Meはサイバーセキュリティ学習コンテンツである。 ハッキングに必要な知識を体系的に学ぶだけでなく仮想マシンを動かして実践的にレッドチーム演習をすることができる。つまり攻撃者の視点に立つ機会が与えられているのだ。 基本的なスキルについては無料プランで学習することができる。
Learning Path
私は学習を進める上で以下の目標を設定した。 いきなりプロになることはできない。まずは量をこなしていくしかない。
- 1ヶ月毎日学習し、そのあとはCTFに出場する
- 全てのFlee contentsを制覇し、サイバーセキュリティの外観を掴む
- 特にPenetration Testerに関連するスキルを習得する
THMではstreakや学習者間のcompete機能があるのでこれらの目標はコンスタントに達成されつつある。 以下のようなプロトコルに対しての攻撃手法を確認した。
- SMB(todo)
- FTP(todo)
- Telnet(todo)
- ICMP(todo)
- NFS
- SMTP
演習では専用のマシンをホストしてターゲットの制約をかけられたターゲットマシンに対して攻撃を行う
NFS
What is NFS?
NFS (Network File System) の概要
NFS は、ネットワーク上の他のコンピューターに保存されているファイルやディレクトリにアクセスできるようにする、オープンなファイル共有プロトコルであり、NFSを使うことでユーザーやプログラムはローカルのファイルにアクセスするのと同じように、リモートのファイルにアクセスできるようになる。NFS では、サーバー上の特定のディレクトリやファイルシステムの一部を、クライアントマシンにマウントすることができる。
NFS の主な特徴
- クライアントはマウントされた共有ディレクトリにアクセスでき、サーバー上のファイルを読み書きできる。
- NFS は、Windows、Linux、macOS など異なるオペレーティングシステム間でファイル共有を可能にする。
Enumerating
-
Port Scanning:
- まずターゲットマシンに対して
nmap
を使ったポートスキャンを行う。 -A
オプションと-p-
オプションを使って、オープンポートやサービス、OSの情報を収集する。
- まずターゲットマシンに対して
-
NFS共有の列挙:
showmount -e [IP]
コマンドを使って、ターゲットマシンのNFS共有を一覧表示する。- 共有されているディレクトリの名称を確認する。
-
NFS共有のマウント:
- ローカルマシンに共有ディレクトリをマウントするために、
mkdir /tmp/mount
でマウントポイントを作成する。 sudo mount -t nfs IP:share /tmp/mount/ -nolock
でNFS共有をマウントする。
- ローカルマシンに共有ディレクトリをマウントするために、
-
共有ディレクトリの調査:
- マウントした共有ディレクトリの中身を確認する。
- ユーザーのホームディレクトリなどが共有されている可能性がある。
-
重要ファイルの発見と利用:
- 共有ディレクトリ内を調査し、SSHキーなどの重要ファイルを探す。
- 見つかったキーファイルをローカルマシンにコピーし、パーミッションを600に変更する。
- SSHキーを使ってターゲットマシンにログインできるかを確認する。
Exploiting
-
NFS共有の権限設定の確認:
- デフォルトでは、NFS共有に対してroot_squashが有効になっている。
- これにより、リモートのroot権限ユーザーはnfsnobodyユーザーとしてマウントされる。
-
root_squashの無効化:
- root_squashが無効化されている場合、リモートユーザーはroot権限で共有ディレクトリにアクセスできる。
- これを利用して、SUIDBitが設定されたファイルを作成することができる。
-
SUIDBitの設定:
- NFS共有にbashの実行ファイルをアップロードする。
sudo chown root bash
でファイルの所有者をrootに変更する。sudo chmod +s bash
でSUIDBitを設定する。
-
SUIDBitバイナリの実行:
- SSHでターゲットマシンにログインする。
./bash -p
でSUIDBitが設定されたbashを実行する。-p
オプションを使うことで、権限の低下を防ぐことができる。
-
root権限の取得:
- 上記の手順を正しく実行できれば、root権限のシェルが得られる。
- root権限を確認するためにroot flagを確認する。
このようにNFS共有の権限設定の不備を利用してローカルユーザーからroot権限を奪取する手法が学べた。
SMTP
What is SMTP?
SMTP (Simple Mail Transfer Protocol) の概要
SMTPは電子メールの送信を処理するためのプロトコルでメールユーザーエージェント(メールクライアントアプリ)とメールサーバー間の通信を管理する。SMTPはPOP (Post Office Protocol) やIMAP (Internet Message Access Protocol)などの受信プロトコルと組み合わせて使用される。
SMTP の主な機能
- メールクライアントがSMTPサーバーに接続し、送信者・受信者のメールアドレス、メール本文、添付ファイルなどを提供します。
- SMTPサーバーは受信者のドメイン名を確認し、その受信者のSMTPサーバーに中継します。
- 受信者のSMTPサーバーは受信メールを検証し、POP/IMAPサーバーに転送します。
- 最終的に受信者のメールクライアントがPOP/IMAPサーバーからメールを受信できるようになります。
Enumerating SMTP
SMTPの列挙の概要
- 不適切に設定されたメールサーバーは、ネットワークへの初期侵入経路となる可能性がある。
- 攻撃を開始する前に、メールサーバーの詳細情報を把握しておくことが重要。
- Metasploitの”smtp_version”モジュールを使用して、メールサーバーのバージョンを特定する。
SMTPユーザーの列挙
- SMTPサービスには、有効なユーザー名を確認できるVRFYコマンドと、ユーザーのエイリアスやメーリングリストを表示できるEXPNコマンドがある。
- Metasploitの”smtp_enum”モジュールを使用して、ユーザー名を列挙することができる。
- ユーザー名のリストを含むワードリストを入力する必要がある。
要するにSMTPサーバーの詳細情報を収集し、ユーザー名を特定することでネットワークへの侵入経路を見つける狙いがある
Exploiting SMTP
- Enumerationの結果から得られた情報を使って、SMTPサーバーを攻撃する
- 具体的には、ユーザー名とSMTPサーバーの種類を利用して、パスワードのブルートフォース攻撃を行う
パスワードに対する総当たり攻撃
- Enumerationで得られたユーザー名とSMTPサーバーの情報を使って、Hydraツールによるパスワードの総当たり攻撃を行う。
- Hydraのコマンド構文は以下の通り:
hydra -l <username> -P <wordlist> <target_ip> smtp
- 適切なユーザー名とワードリストを指定することで、SMTPサーバーのパスワードを突破できる可能性がある。
攻撃の目的
- 得られたユーザー名とパスワードを使ってSMTPサーバーにログインし、メール送信機能を悪用する。
- 例えば、他のユーザーになりすまして不審なメールを送信するなどの攻撃が考えられる。
このようにSMTPサーバーの設定ミスを利用してパスワードを突破し、サーバーを乗っ取ることができる。