はじめに: Impacket と Mimikatz の組み合わせ
サイバーセキュリティの世界では、システムの脆弱性を評価し、防御策を講じるために様々なツールが利用されています。その中でも、Impacket スイートに含まれる impacket-mimikatz
(または単に mimikatz.py
と呼ばれることもあります) は、ペネトレーションテスターやセキュリティ研究者にとって強力なツールの一つです。これは、有名な認証情報ダンプツールである Mimikatz の機能を、Impacket のネットワークプロトコル操作能力と組み合わせて、リモートシステム上で実行できるようにしたものです。
まず、それぞれの要素について理解しましょう。
impacket-mimikatz
は、これら二つの強力なツールを組み合わせたものです。Impacketのネットワーク通信機能を利用してターゲットのWindowsマシンに接続し、Mimikatzの機能をリモートで実行します。これにより、ターゲットマシンに直接Mimikatzの実行ファイルを配置することなく、メモリ上の認証情報などを取得できます。これは、侵入テストの際に検知を回避しつつ、効率的に情報を収集する上で非常に有効です。しかし、その強力さから悪意のある攻撃者にも利用されるため、防御側もこのツールの挙動を理解し、対策を講じることが不可欠です。
前提条件: 何が必要か? 🛠️
impacket-mimikatz
を使用するには、いくつかの準備が必要です。
-
Impacket のインストール:
Python環境にImpacketスイートがインストールされている必要があります。通常は pip を使ってインストールできます。
あるいは、Fortra (旧 SecureAuth) の GitHub リポジトリから直接クローンしてセットアップすることも可能です。pip install impacket
Docker を使用することもできます。git clone https://github.com/fortra/impacket.git cd impacket pip install .
docker build -t "impacket:latest" . docker run -it --rm "impacket:latest"
- ネットワーク接続: 攻撃元のマシンからターゲットのWindowsマシンへ、SMB (通常TCPポート445) や関連するRPCポートで通信できる必要があります。ファイアウォールなどでブロックされていないか確認してください。
-
有効な認証情報:
ターゲットマシンに対する有効な認証情報(ユーザー名とパスワード、またはNTLMハッシュ)が必要です。通常、
impacket-mimikatz
を実行するには、ターゲットマシン上の管理者権限を持つアカウントが必要です。これは、MimikatzがLSASSプロセスなど、特権が必要なリソースにアクセスするためです。 - ターゲットOSの互換性: Mimikatz自体が対象とするWindowsのバージョンで動作する必要があります。最近のWindowsバージョン(Windows 8.1以降)では、LSA保護などのセキュリティ機能により、Mimikatzの実行が制限される場合があります(後述)。
基本的な使い方: コマンド構造とオプション 💻
impacket-mimikatz
(多くの場合、Impacketのexamplesディレクトリ内では mimikatz.py
という名前です) の基本的なコマンド構造は以下のようになります。
python3 mimikatz.py <ドメイン>/<ユーザー名>:<パスワード>@<ターゲットIPアドレス> [Mimikatzコマンド]
認証情報の部分には、いくつかの形式が利用可能です。
- パスワード認証:
DOMAIN/username:password@target_ip
- NTLMハッシュ認証 (Pass-the-Hash):
DOMAIN/username@target_ip -hashes LMhash:NThash
(LMハッシュは通常空で、aad3b435b51404eeaad3b435b51404ee
または省略可能です::NThash
) - Kerberos認証 (チケット利用):
DOMAIN/username@target_ip -k -no-pass
(事前にkinit
などで有効なKerberosチケットを取得しておく必要があります)
主なオプションをいくつか紹介します。
オプション | 説明 |
---|---|
target |
ターゲットを指定します。通常は ドメイン/ユーザー名@IPアドレス の形式です。 |
-hashes LMhash:NThash |
パスワードの代わりにNTLMハッシュを指定して認証します (Pass-the-Hash)。 |
-k |
Kerberos認証を使用します。事前に KRB5CCNAME 環境変数を設定するか、-dc-ip オプションでKDCを指定する必要があります。 |
-no-pass |
-k と共に使用し、パスワード入力プロンプトを表示しません(チケットキャッシュを使用)。 |
-dc-ip ip_address |
Kerberos認証で使用するドメインコントローラーのIPアドレスを指定します。 |
-target-ip ip_address |
接続先のターゲットマシンのIPアドレスを明示的に指定します。ターゲット文字列で指定されたホスト名とは別にIPアドレスを指定したい場合に使用します。 |
コマンド |
ターゲット上で実行したいMimikatzのコマンドを指定します。指定しない場合は、対話的なMimikatzシェルが起動します。 |
例えば、ドメイン `CONTOSO` のユーザー `Administrator`、パスワード `Password123` を使って、IPアドレス `192.168.1.100` のマシンに接続し、対話シェルを起動するには次のようにします。
python3 mimikatz.py CONTOSO/Administrator:Password123@192.168.1.100
NTLMハッシュ (例: `0123456789abcdef0123456789abcdef`) を使用する場合は以下のようになります。
python3 mimikatz.py CONTOSO/Administrator@192.168.1.100 -hashes :0123456789abcdef0123456789abcdef
接続に成功すると、mimikatz #
というプロンプトが表示され、Mimikatzコマンドを入力できるようになります。
認証情報の抽出: Mimikatz コマンドの実行例 🔑
impacket-mimikatz
を通じてリモートシェルを取得したら、様々なMimikatzコマンドを実行して認証情報を抽出できます。最もよく使われるのは、LSASS (Local Security Authority Subsystem Service) プロセスのメモリから認証情報をダンプするコマンドです。
1. LSASSからログオン中の認証情報をダンプする:
Mimikatzの最も有名な機能の一つです。現在システムにログオンしているユーザーの平文パスワード(メモリ上に存在する場合)、NTLMハッシュ、Kerberosチケットなどを表示します。
# 対話シェル内で実行
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
または、コマンドラインから直接実行することも可能です。
python3 mimikatz.py DOMAIN/User:Pass@TargetIP 'privilege::debug' 'sekurlsa::logonpasswords' 'exit'
privilege::debug
は、MimikatzがLSASSなどの保護されたプロセスにアクセスするために必要なデバッグ権限を取得するコマンドです。通常、管理者権限があっても明示的にこの権限を有効にする必要があります。
2. SAMデータベースからハッシュをダンプする:
ローカルアカウントのパスワードハッシュはSAM (Security Account Manager) データベースに保存されています。lsadump::sam
コマンドは、レジストリハイブ(通常はSYSTEMとSAM)にアクセスしてこれらのハッシュを抽出します。これは impacket-secretsdump
と同様の機能ですが、Mimikatzコマンドとして実行できます。
# 対話シェル内で実行
mimikatz # lsadump::sam
注意: このコマンドは通常、SYSTEM権限が必要です。また、アクティブなレジストリハイブに直接アクセスするため、環境によっては不安定になる可能性があります。impacket-secretsdump
の方が安定している場合が多いです。
3. Kerberosチケットを抽出する:
ドメイン環境ではKerberos認証が広く使われています。メモリ上にあるKerberosチケット(TGTやサービスチケット)を抽出し、表示またはファイルにエクスポートできます。
# 対話シェル内で実行
mimikatz # sekurlsa::tickets /export
これにより、チケットが .kirbi
形式のファイルとして保存されます。これらのチケットは、Pass-the-Ticket攻撃などに利用される可能性があります。
4. DCSync攻撃を実行する:
十分な権限(通常、Domain Adminsまたは同等の権限、具体的には「ディレクトリ変更のレプリケート」権限)があれば、ドメインコントローラーになりすまして、他のドメインコントローラーからパスワードハッシュ(krbtgtアカウントを含む)を要求できます。これは非常に強力な攻撃で、ドメイン全体の侵害につながる可能性があります。
# 対話シェル内で実行 (ターゲットがDCで、実行ユーザーが適切な権限を持つ場合)
mimikatz # lsadump::dcsync /user:DOMAIN\krbtgt
これにより、Kerberos TGTの暗号化/署名に使用される `krbtgt` アカウントのNTLMハッシュが取得でき、Golden Ticket攻撃の実行が可能になります。
検知と防御: どうすれば守れるか? 🛡️
impacket-mimikatz
や Mimikatz 自体の使用は、攻撃の兆候として非常に重要です。防御側は、これらのツールの使用を検知し、実行を困難にするための対策を講じるべきです。
検知方法:
- ネットワークトラフィックの監視: Impacketツールは特有のネットワークパターン(SMB/RPC通信の異常なシーケンスなど)を示すことがあります。IDS/IPSやネットワーク監視ソリューションで、Impacketのシグネチャや異常なSMB/RPCトラフィックを監視します。特に、ドメインコントローラー以外からのDCSyncに関連するレプリケーション要求 (DsGetNCChanges) は非常に疑わしいです。
-
エンドポイントでのプロセス監視:
impacket-mimikatz
はリモートで動作しますが、ターゲットマシン上では最終的に特定のAPI呼び出しやプロセスアクセスを行います。EDR (Endpoint Detection and Response) ソリューションは、LSASSプロセスへの疑わしいアクセス(特に読み取りやデバッグ権限の要求)を検知できます。 -
Mimikatzコマンドの実行ログ: PowerShellスクリプトブロックログやコマンドライン監査ログを有効にしている場合、Mimikatz特有のコマンド文字列(例:
sekurlsa::logonpasswords
,privilege::debug
)がログに残る可能性があります。 - 認証ログの監視: Pass-the-HashやPass-the-Ticketが疑われる異常なログオンイベント(例: 通常ではありえないアカウントからの対話ログオン、不審なソースIPからのログオン試行)を監視します。
- セキュリティ製品のアラート: 最新のウイルス対策ソフトやEDR製品の多くは、Mimikatzの既知のシグネチャや挙動ベースの検知ルールを持っています。これらのアラートを適切に監視し、対応することが重要です。
防御・緩和策:
- LSA保護 (RunAsPPL): Windows 8.1 / Server 2012 R2 以降で利用可能な機能です。LSASSプロセスを保護されたプロセスライト (PPL) として実行し、管理者権限を持つユーザーであっても、信頼されていないプロセスからのメモリアクセスやコードインジェクションを防ぎます。これにより、MimikatzによるLSASSからの認証情報ダンプが非常に困難になります。グループポリシーやレジストリで有効化できます。Windows 11 22H2以降では、特定の条件下でデフォルトで有効になる場合があります。
- Credential Guard: Windows 10 / Server 2016 以降で利用可能な機能で、仮想化ベースのセキュリティ (VBS) を利用します。LSAが保持する認証情報(NTLMハッシュ、Kerberos TGTなど)を、OSカーネルからも隔離されたセキュアな環境 (lsaiso.exe) に格納します。これにより、たとえカーネルレベルの侵害を受けたとしても、これらの認証情報が窃取されるのを防ぎます。Mimikatzによるダンプに対して非常に効果的な防御策です。
- 管理者権限の最小化: 日常的な作業には標準ユーザー権限を使用し、管理者権限の使用を必要最低限に制限します (最小権限の原則)。特権アクセス管理 (PAM) ソリューションの導入も有効です。
- パスワードハッシュの漏洩対策: 強力なパスワードポリシーを適用し、定期的なパスワード変更を義務付けます。可能であれば、NTLM認証を無効化し、Kerberosのみを使用するように構成します。
- ネットワークセグメンテーション: ネットワークを適切に分割し、重要なサーバー(特にドメインコントローラー)へのアクセスを厳しく制限します。
- セキュリティ更新プログラムの適用: OSや関連ソフトウェアの脆弱性を悪用される可能性があるため、常に最新のセキュリティパッチを適用します。特に認証メカニズムに関する脆弱性(例: CVE-2022-26925 LSAなりすまし)には注意が必要です。
- デバッグ権限の無効化: 可能であれば、管理者アカウントに対してもデバッグ権限 (SeDebugPrivilege) を付与しないように構成します。ただし、システムの運用に必要な場合もあるため、影響を慎重に評価する必要があります。
impacket-mimikatz
のようなツールによる攻撃のリスクを大幅に低減できます。特に LSA保護 と Credential Guard は、認証情報窃取に対する強力な防御策となります。
倫理的考察と法的側面 🤔⚖️
impacket-mimikatz
は、システムのセキュリティ評価やインシデント対応において非常に役立つツールですが、その能力の高さ故に、倫理的および法的な側面を十分に考慮する必要があります。
- 許可なき使用の禁止: このツールは、所有者から書面による明確な許可を得たシステムに対してのみ使用されるべきです。許可なく他者のシステムにアクセスし、認証情報を取得しようとする行為は、多くの国や地域で不正アクセス禁止法などの法律に違反し、厳しく罰せられます。
- ペネトレーションテストにおける責任: 許可されたペネトレーションテストで使用する場合でも、テスト担当者はその影響を十分に理解し、対象システムへの損害を最小限に抑える責任があります。テスト範囲、許可される行為、報告義務などを事前にクライアントと明確に合意しておく必要があります。
- 情報漏洩のリスク: 取得した認証情報は極めて機密性の高い情報です。テスト中およびテスト後に、これらの情報が偶発的または意図的に漏洩しないよう、厳重な管理体制が必要です。
-
ツールの悪用可能性:
impacket-mimikatz
や Mimikatz は、サイバー犯罪者によってランサムウェア攻撃や標的型攻撃で頻繁に悪用されています。セキュリティ専門家は、これらのツールに関する知識を防御目的で活用する一方で、その情報が悪用されないよう慎重に取り扱う必要があります。
まとめ ✨
impacket-mimikatz
は、Impacketのネットワーク機能とMimikatzの認証情報抽出能力を組み合わせた、強力なリモート管理・セキュリティ評価ツールです。主な特徴は以下の通りです。
- リモートのWindowsマシンに対して、Mimikatzコマンドを実行できる。
- SMB/RPC経由で接続し、ターゲットマシンに実行ファイルを配置する必要がない場合が多い。
- パスワードまたはNTLMハッシュ、Kerberosチケットによる認証が可能。
- LSASSメモリからの認証情報ダンプ(平文パスワード、ハッシュ、チケット)が可能。
- DCSync攻撃など、高度な攻撃も実行可能(適切な権限が必要)。
- ペネトレーションテストやセキュリティ評価で有用だが、攻撃者による悪用も多い。
防御側としては、LSA保護やCredential Guardの有効化、管理者権限の適切な管理、ネットワークおよびエンドポイントでの監視強化、最新のセキュリティパッチ適用などが重要です。
このツールを使用する際は、必ず倫理的な側面と法的な制約を遵守し、許可された範囲内で責任を持って利用することが不可欠です。その強力な機能を理解し、適切に扱うことで、システムのセキュリティ強化に貢献できますが、一歩間違えれば深刻な事態を招きかねません。常に注意深く、敬意を持って技術と向き合いましょう。🚀
コメント