CrackMapExecのcmedbコマンド徹底解説 💾 データベースを活用した効率的なペネトレーションテスト

セキュリティツール

はじめに

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 を活用してみてください。🚀

コメント

タイトルとURLをコピーしました