SharpHound
SharpHound เป็น data collector ของ BloodHound — เก็บข้อมูลจาก Active Directory (users, groups, computers, sessions, ACL, trusts) มาสร้างกราฟ บทนี้ลงลึก collection methods ทั้งหมด, การรันจาก Windows (SharpHound) และ Linux (bloodhound-python), OPSEC, และ troubleshooting (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)
1. SharpHound เก็บอะไร
SharpHound query ข้อมูลจาก AD ผ่าน LDAP และเทคนิคอื่น แล้ว export เป็น JSON (zip) ให้ BloodHound import ข้อมูลที่เก็บ: โครงสร้าง user/group/computer/OU/GPO, ความสัมพันธ์ (membership, ACL, trust), session (ใคร login เครื่องไหน — สำคัญมากสำหรับหา path), และ local admin
2. Collection Methods
| method | เก็บอะไร | หมายเหตุ |
|---|---|---|
| Default | group, ACL, trust, container | เบื้องต้น เงียบ |
| Session | user session บนเครื่อง | สำคัญหา path (ดังกว่า) |
| LoggedOn | session (ต้อง admin) | แม่นกว่า Session |
| ACL | DACL ของ object | หา GenericAll/WriteDacl |
| Trusts | domain trust | cross-domain attack |
| LocalAdmin | ใคร admin เครื่องไหน | หา AdminTo edge |
| All | ทุกอย่าง (ยกเว้นบางตัว) | ครบสุด (ดังสุด) |
| DCOnly | เฉพาะจาก DC (LDAP) | เงียบสุด ไม่แตะ host อื่น |
3. รันจาก Windows (SharpHound)
# เก็บทุกอย่าง
SharpHound.exe -c All
# เลือก method + ระบุ domain
SharpHound.exe -c All,LoggedOn -d domain.local
# เงียบสุด — เฉพาะจาก DC (ไม่แตะ host อื่น)
SharpHound.exe -c DCOnly
# ระบุ DC + output path + zip ชื่อ
SharpHound.exe -c All --domaincontroller 10.10.10.10 --outputdirectory C:\temp --zipfilename loot
# PowerShell version
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All4. รันจาก Linux (bloodhound-python)
# ติดตั้ง
pip install bloodhound
# เก็บด้วย credential
bloodhound-python -u user -p 'Password' -d domain.local -ns 10.10.10.10 -c All
# ใช้ NTLM hash (pass-the-hash)
bloodhound-python -u user --hashes :NTHASH -d domain.local -ns 10.10.10.10 -c All
# ใช้ Kerberos ticket
export KRB5CCNAME=ticket.ccache
bloodhound-python -k -u user -d domain.local -ns 10.10.10.10 -c All
# ได้ไฟล์ .json หลายไฟล์ → zip แล้ว import
zip data.zip *.json5. OPSEC
- -c All ดัง — query session ทุกเครื่อง = traffic เยอะ ตรวจจับได้
- -c DCOnly เงียบสุด — แค่ LDAP query ที่ DC ไม่แตะ host อื่น (แต่ขาดข้อมูล session)
- --stealth — ลด query ที่ noisy
- --jitter / --throttle — หน่วง query เลี่ยง pattern
- EDR/defender ตรวจ LDAP query จำนวนมากผิดปกติ + SharpHound signature
- เลือก method ตามความเสี่ยง: เริ่ม DCOnly → ถ้าต้องการ session ค่อย All ทีหลัง
6. Troubleshooting
- เก็บได้น้อย/ไม่มี session: ต้องใช้ -c All หรือ LoggedOn (ต้อง local admin บน target)
- clock skew error (Kerberos): sync เวลากับ DC —
ntpdate DC_IPหรือrdate - DNS resolve fail: ตั้ง -ns เป็น DC IP; เพิ่ม domain ใน /etc/hosts
- import แล้วกราฟว่าง: zip ผิด/ไฟล์ไม่ครบ — zip ทุก .json รวมกัน
- เวอร์ชันไม่ตรง: SharpHound version ต้องตรงกับ BloodHound (legacy vs CE)
7. Quick Reference
- collector ของ BloodHound — เก็บ user/group/ACL/session/trust
- Windows: SharpHound.exe -c All (ครบ) / -c DCOnly (เงียบ)
- Linux: bloodhound-python -u user -p pass -d domain -ns DC_IP -c All
- pass-the-hash: --hashes :NTHASH; ticket: -k + KRB5CCNAME
- method: All(ครบ/ดัง), DCOnly(เงียบ), Session/LoggedOn(หา path)
- OPSEC: DCOnly เงียบสุด, --stealth/--jitter
- clock skew → sync เวลา; DNS → -ns DC IP
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติ BloodHound ยังไม่มีข้อมูลพอ (หรือ bloodhound-python รันแล้ว error) มีแค่ Kali ทำตามนี้เพื่อเก็บข้อมูลให้ครบและแก้ปัญหาที่เจอบ่อยทีละขั้น
- 1ยืนยันว่ามี credential ใช้ได้จริงก่อน:
netexec smb <DC_IP> -u user -p pass - 2ถ้าเวลาเครื่อง Kali ต่างจาก DC เกิน 5 นาที Kerberos จะ fail ก่อนเสมอ — sync เวลา:
sudo ntpdate <DC_IP>หรือsudo rdate -n <DC_IP> - 3รันเก็บข้อมูลแบบเงียบก่อน (ปลอดภัยสุด):
bloodhound-python -u user -p pass -d domain.local -ns <DC_IP> -c DCOnly - 4ถ้าต้องการ session/local admin เพิ่ม (path ดีกว่า) ค่อยรันแบบครบ:
bloodhound-python -u user -p pass -d domain.local -ns <DC_IP> -c All - 5ตรวจว่าได้ไฟล์ .json ครบไหม:
ls *.jsonแล้วzip data.zip *.json - 6ถ้า DNS resolve ไม่ได้ ให้ตั้ง -ns เป็น DC IP ตรงๆ และเพิ่ม domain ลง /etc/hosts
- 7ถ้ามี shell บน host ที่ join โดเมนแล้ว (Windows) ใช้
SharpHound.exe -c Allแทนได้ (บางกรณีครบกว่า python collector) - 8import ผลเข้า BloodHound แล้ววิเคราะห์ path ต่อ
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| เก็บข้อมูล AD (Linux) | - | pipx install bloodhound (bloodhound-python) | - |
| เก็บข้อมูล AD (มี shell Windows) | - | SharpHound.exe/.ps1 (GitHub BloodHoundAD) | - |
| ยืนยัน creds ใช้ได้ | netexec (crackmapexec) | apt install netexec | - |
| sync เวลากับ DC | ntpdate / rdate | apt install ntpdate | - |
| query LDAP/DNS ตรวจ domain | ldapsearch, dig | - | - |
| import/วิเคราะห์กราฟ | - | BloodHound CE (docker compose) | bloodhound.readthedocs.io |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้