はじめに
CrackMapExec (CME) は、特にActive Directory環境のような大規模ネットワークのセキュリティ評価を自動化・効率化するための強力なポストエクスプロイトツールです。内部ペネトレーションテストにおいて、「ネットワークのスイスアーミーナイフ」とも称され、偵察、パスワードスプレー、権限昇格、横展開(Lateral Movement)など、多岐にわたる攻撃手法をサポートします。CMEは、システムに組み込まれた機能やプロトコルを悪用する「Living off the Land」のコンセプトに基づいており、多くの防御機構を回避できる可能性があります。
CMEの強力な機能の一つに、収集した情報を整理・管理するためのデータベース機能があります。このデータベースを操作するためのインターフェースが cmedb
コマンドです。このブログ記事では、cmedb
の基本的な使い方から、より高度な活用方法までを詳しく解説します。🔍
cmedbとは?
cmedb
は、CrackMapExecが収集した情報を格納するSQLiteデータベースを管理・照会するためのコマンドラインユーティリティです。CMEは、スキャン中に発見したホスト情報、有効な認証情報(ユーザー名、パスワード、ハッシュ)、共有フォルダ、グループメンバーシップ、セッション情報などを自動的にデータベースに保存します。cmedb
を使用することで、これらの情報を効率的に検索、フィルタリング、エクスポートすることが可能になります。
特に、大規模なネットワーク評価では、膨大な情報が収集されるため、cmedb
によるデータベース管理は不可欠です。これにより、テストの進行状況を把握しやすくなり、次のアクション(例:特定の権限を持つアカウントがアクセス可能なホストの特定)を計画する上で非常に役立ちます。📊
CME v4以降、各プロトコル(SMB, LDAP, WinRMなど)ごとに個別のデータベースを持つようになり、管理がより整理されました。また、「ワークスペース」という概念が導入され、異なるテストや環境ごとに情報を分離して管理できるようになりました。
cmedbの基本的な使い方
cmedb
コマンドは、ターミナルから直接実行します。引数なしで実行すると、インタラクティブなシェルが起動し、データベースに対する様々な操作を行うことができます。
crackmapexec cmedb
または、単に cmedb
と入力しても起動する場合があります(環境による)。
cmedb
インタラクティブシェル内では、help
コマンドで利用可能なコマンドの一覧を確認できます。
cmedb> help
Documented commands (type help <topic>):
========================================
creds hosts info shares users workspaces
credentials exit help status use
export got_admin list system view
Undocumented commands:
======================
EOF shell
基本的なコマンドとしては以下のようなものがあります。
workspaces
: 利用可能なワークスペースの一覧表示や切り替えを行います。info
: 現在のワークスペースの統計情報(ホスト数、認証情報数など)を表示します。hosts
: データベースに登録されているホスト情報を表示・フィルタリングします。users
: データベースに登録されているユーザー情報を表示・フィルタリングします。creds
/credentials
: データベースに登録されている認証情報(パスワード、ハッシュ)を表示・フィルタリングします。🔑shares
: 発見された共有フォルダの情報を表示します。export
: データベース内の情報をCSV形式などでエクスポートします。use <protocol>
: 特定のプロトコルデータベース(例: smb, ldap)に切り替えます。exit
: インタラクティブシェルを終了します。
ワークスペースの管理 📂
ワークスペースは、異なるペネトレーションテストやターゲット環境ごとに情報を分離して管理するための仕組みです。デフォルトでは `default` という名前のワークスペースが使用されます。
新しいワークスペースを作成するには、CME実行時に `-w` オプションで新しい名前を指定します。指定した名前のワークスペースが存在しない場合は自動的に作成されます。
crackmapexec smb 192.168.1.0/24 -w ProjectX
cmedb
内でワークスペースを操作するには workspaces
コマンドを使用します。
# ワークスペースの一覧表示
cmedb> workspaces list
# ProjectX ワークスペースに切り替え
cmedb> workspaces use ProjectX
ワークスペースを切り替えると、以降の cmedb
コマンドはそのワークスペースのデータベースに対して実行されます。
情報の照会とフィルタリング 🔍
cmedb
の中核機能は、収集された情報の照会です。hosts
, users
, creds
などのコマンドを使って、データベース内の情報を様々な条件でフィルタリングできます。
ホスト情報の照会 (hosts)
hosts
コマンドは、スキャンされたホストに関する情報を表示します。IPアドレス、ホスト名、OS情報などが確認できます。
# すべてのホストを表示
cmedb:default> hosts
# 特定のホストを表示
cmedb:default> hosts 192.168.1.100
# OS情報でフィルタリング (部分一致)
cmedb:default> hosts --os "Windows Server"
ユーザー情報の照会 (users)
users
コマンドは、発見されたユーザーアカウント(ドメインユーザー、ローカルユーザー)に関する情報を表示します。
# すべてのユーザーを表示
cmedb:default> users
# 特定のユーザーを表示
cmedb:default> users administrator
# 特定のドメインに属するユーザーを表示
cmedb:default> users --domain CORP
認証情報の照会 (creds) 🔑
creds
(または credentials
) コマンドは、収集された認証情報(平文パスワード、NTLMハッシュなど)を表示します。これはペネトレーションテストにおいて非常に重要な情報源です。
# すべての認証情報を表示
cmedb:default> creds
# 特定のユーザーの認証情報を表示
cmedb:default> creds administrator
# パスワードが平文で見つかった認証情報のみ表示
cmedb:default> creds --plaintext
# NTLMハッシュが見つかった認証情報のみ表示
cmedb:default> creds --hash
# 特定のホストで見つかった認証情報を表示
cmedb:default> creds --host 192.168.1.100
その他の照会コマンド
他にも、共有フォルダ (shares
)、グループ情報 (groups
– LDAPデータベース)、コンピュータアカウント (computers
– LDAPデータベース)、セッション情報 (sessions
– SMBデータベース) など、プロトコル固有のデータベースに対して様々な照会が可能です。特定のプロトコルデータベースにアクセスするには use <protocol>
コマンドを使用します。
# SMBプロトコルデータベースに切り替え
cmedb:default> use smb
cmedb:default:smb>
# SMBセッション情報を表示
cmedb:default:smb> sessions
# デフォルトデータベースに戻る
cmedb:default:smb> use default
cmedb:default>
主要なcmedbコマンドとオプション
以下に、cmedb
でよく使用されるコマンドとその主なオプションを表形式でまとめます。
コマンド | サブコマンド/オプション | 説明 |
---|---|---|
workspaces |
list |
利用可能なワークスペースを一覧表示します。 |
use <name> |
指定した名前のワークスペースに切り替えます。 | |
del <name> |
指定した名前のワークスペースを削除します(注意して使用してください)。 | |
info |
現在のワークスペースの概要(ホスト数、ユーザー数、認証情報数など)を表示します。 | |
use |
<protocol> / default |
指定したプロトコル (smb, ldap, winrmなど) のデータベース、またはデフォルトデータベースに切り替えます。 |
hosts |
[ip/hostname] |
指定したIPアドレスまたはホスト名の情報を表示します。 |
--os <string> |
指定した文字列がOS情報に含まれるホストをフィルタリングします。 | |
--port <number> |
指定したポートが開いているホストをフィルタリングします。 | |
users |
[username] |
指定したユーザー名の情報を表示します。 |
--domain <string> |
指定したドメインに属するユーザーをフィルタリングします。 | |
creds / credentials |
[username] |
指定したユーザー名の認証情報を表示します。 |
--plaintext |
平文パスワードを持つ認証情報のみ表示します。 | |
--hash |
ハッシュを持つ認証情報のみ表示します(NTLMなど)。 | |
--type <string> |
認証情報の種類(例: hash, plaintext)でフィルタリングします。 | |
--host <ip/hostname> |
指定したホストに関連する認証情報を表示します。 | |
export |
creds |
認証情報をエクスポートします。 |
plaintext |
平文パスワードを持つ認証情報をエクスポートします。 | |
hashes |
ハッシュを持つ認証情報をエクスポートします。 | |
--format <csv/list> |
エクスポート形式を指定します (デフォルトは list)。CSV形式は --output-file オプションと組み合わせて使用します。 |
注意: 利用可能なコマンドやオプションはCMEのバージョンによって異なる場合があります。常に help
コマンドや公式ドキュメントで最新情報を確認してください。
実践的な使用例 💻
ここでは、cmedb
を使った具体的な情報検索の例をいくつか紹介します。
例1: 特定のドメイン (CORP.LOCAL) の管理者権限を持つ認証情報を探す
cmedb:default> creds --domain CORP.LOCAL --admin
--admin
フラグ(または関連するフィルタ)を使用して、管理者権限(例: Pwn3d! ステータス)を持つ認証情報を絞り込みます。 (注: --admin
フラグの正確な有無や動作はバージョン依存の可能性があります。creds help
で確認してください。)
例2: 特定のホスト (192.168.1.50) で有効だった認証情報の一覧を取得
cmedb:default> creds --host 192.168.1.50
例3: SMBプロトコルで見つかった認証情報をCSVファイルにエクスポート
cmedb:default> use smb
cmedb:default:smb> export creds --format csv --output-file /tmp/smb_creds.csv
これにより、/tmp/smb_creds.csv
にSMB関連の認証情報がCSV形式で保存されます。
例4: パスワードが平文で見つかった全ユーザーのリストをファイルに出力
cmedb:default> export plaintext --output-file /tmp/plaintext_users.txt
export plaintext
は、平文パスワードが見つかったユーザー名とパスワードのリストを生成します。
cmedb を活用するメリット ✨
- 情報の整理と集約: スキャン結果を一元管理し、必要な情報へ素早くアクセスできます。
- 効率的な分析: フィルタリング機能により、膨大なデータから特定の条件に合致する情報を抽出できます。
- ターゲットの絞り込み: 例えば、「管理者権限が取得できたホスト」や「特定の脆弱性を持つ可能性のあるホスト」などを特定し、次の攻撃ステップのターゲットを絞り込むのに役立ちます。
- レポート作成の支援: 認証情報やホストリストなどをエクスポート機能で出力し、レポート作成の基礎データとして活用できます。
- チームでの情報共有: ワークスペースのデータベースファイルを共有することで、チームメンバー間で進捗や発見事項を共有できます(ただし、機密情報の取り扱いには十分注意が必要です)。
まとめ
CrackMapExec の cmedb
コマンドは、ペネトレーションテスト中に収集される膨大な情報を効率的に管理し、活用するための強力なツールです。ワークスペース機能によるテストごとの情報分離や、豊富な照会・フィルタリングオプションにより、テストの精度と効率を大幅に向上させることができます。
特に大規模ネットワークやActive Directory環境の評価においては、cmedb
を使いこなすことが、効果的なペネトレーションテストを実施する上で鍵となります。ぜひ、このガイドを参考に cmedb
を活用してみてください。🚀
コメント