Persistence Hunter¶
การคงอยู่ (persistence) ทำให้โปรแกรมทำงานซ้ำได้อีกครั้งหลังการรีบูต การลงชื่อเข้าใช้ ทริกเกอร์ตามกำหนดเวลา หรือ เหตุการณ์อื่น ผู้โจมตีสามารถใช้การกำหนดค่าปกติของ Windows เพื่อจุดประสงค์นี้ได้ โปรแกรมที่ถูกต้องตามกฎหมายจำนวนมาก ใช้กลไกเดียวกันทุกประการ ดังนั้นการพบรายการการคงอยู่จึงเป็นเพียงจุดเริ่มต้นของการวิเคราะห์
juntei persistence-hunter เป็นการพอร์ตแบบเนทีฟด้วย Rust ของ
PyrsistenceSniper โดย Hexastrike โดยมีการตรวจสอบ 131 รายการ ได้แก่
แคตตาล็อกการตรวจสอบ 130 รายการของ PyrsistenceSniper และการตรวจสอบ COM ของ Start Menu แบบเนทีฟอีกหนึ่งรายการ
สำหรับคำอธิบายของทุกกลไก ตำแหน่งหลักฐาน และวิธีตรวจสอบผลการตรวจพบ ดูคู่มือการคงอยู่ 131 รายการ ส่วน กิตติกรรมประกาศของ Persistence Hunter อธิบายโปรเจกต์ Python และ PowerShell ที่อยู่เบื้องหลังแคตตาล็อกนี้
วิธีใช้งาน¶
Version: 1.1.0 (CODE BLUE Release)
Yamato Security (https://github.com/Yamato-Security/juntei - @SecurityYamato)
Usage:
juntei persistence-hunter -d <EVIDENCE> [OPTIONS]
Input:
-d, --directory <DIR> Evidence directory (a mounted Windows volume or a collection of hosts)
-f, --file <FILE> One registry hive (filesystem checks need a directory)
--no-logs Read dirty hives without replaying transaction logs
Filtering:
--profile <FILE> Replace the bundled allow/block profile with a YAML profile
--min-severity <MIN_SEVERITY> Minimum classification to include: info, low, medium, high [default: medium] [possible values: info, low, medium, high]
--check <ID> Run only these check or ATT&CK IDs (comma separated; repeatable) [alias: --technique]
General Options:
-h, --help Show the help menu
--list-checks Show every available check and its ATT&CK technique
Analysis:
--no-timeline Skip MFT and event-log timestamp correlation
--mft <FILE> MFT to use for timestamp correlation (one host only)
Performance:
-T, --threads <N> Worker threads (default: logical CPU count)
Output:
-o, --output <FILE> Save findings to a file
-t, --output-type <OUTPUT_TYPE> Output type: csv (default), json, jsonl; without -o, write data to stdout [possible values: csv, json, jsonl]
--coverage <FILE> Save per-check coverage and errors to CSV
-C, --clobber Overwrite output files
Display Settings:
-K, --no-color Disable color output
-q, --quiet Quiet mode: do not display the launch banner
การสแกนครั้งแรก¶
หลักฐานอาจเป็นวอลุ่ม Windows ที่เมานต์ไว้ ชุดที่เก็บรวบรวมด้วย Velociraptor หรือไดเรกทอรีที่มี
คอมพิวเตอร์ที่เก็บรวบรวมมาหลายเครื่อง คอมพิวเตอร์แต่ละเครื่องจะถูกแยกจากกันระหว่างการวิเคราะห์ และทุกผลลัพธ์จะมี
Comp การ escape ชื่อไฟล์ที่เกิดจากการเก็บรวบรวมจะถูกถอดรหัสเมื่อแปลงพาธของ Windows
สำหรับไฮฟ์เดียว
ไฮฟ์เดียวไม่สามารถรองรับการตรวจสอบที่ต้องใช้ไฮฟ์อื่นหรือหลักฐานจากระบบไฟล์ได้ ให้อ่านรายงานความครอบคลุม (coverage) ก่อนถือว่าผลลัพธ์ที่ว่างเปล่ามีความหมาย
แสดงรายการ check ID และการแมปกับ ATT&CK
juntei persistence-hunter --list-checks
juntei persistence-hunter -d evidence/ --check run_keys,windows_service_image_path -o focused.csv
ใช้ check ID ที่ --list-checks พิมพ์ออกมา หรือ ATT&CK ID เช่น T1547.001
ID ระดับแม่ เช่น T1547 จะเลือก sub-technique ทั้งหมดของตน --technique เป็นชื่อแทน (alias) ของ --check
การตรวจสอบแต่ละรายการจะระบุ technique คำอธิบาย และลิงก์อ้างอิงไว้ในผลการตรวจพบ
การสแกนแบบขนาน¶
คำสั่งนี้ใช้ worker pool ร่วมกัน โดยมีค่าเริ่มต้นเท่ากับจำนวน CPU เชิงตรรกะ ตั้งค่า
-T, --threads <N> เพื่อเลือกจำนวน worker หรือ -T 1 สำหรับการสแกนแบบเธรดเดียว
การค้นหาหลักฐาน การตรวจสอบที่เป็นอิสระต่อกัน เมทาดาทาของ payload และแหล่งไทม์ไลน์ MFT/EVTX ทำงานแบบขนาน ไฮฟ์รีจิสทรีที่โหลดแล้วของโฮสต์หนึ่งจะถูกใช้ร่วมกันแบบอ่านอย่างเดียว และเมทาดาทาที่แคชไว้ของ payload เดียวกันจะถูกเตรียมเพียงครั้งเดียว โฮสต์จะถูกโหลดทีละเครื่องเพื่อหลีกเลี่ยงการใช้หน่วยความจำของไฮฟ์ทวีคูณไปทั่วทั้งชุดที่เก็บรวบรวม ผลการตรวจพบ ความครอบคลุม การเลือก timestamp และลำดับคำเตือนยังคงเหมือนเดิมไม่ว่าจะใช้จำนวนเธรดเท่าใด
auto-parse เรียกใช้โพรเซสพาร์เซอร์แบบขนานอยู่แล้ว จึงกำหนดให้โพรเซสลูก persistence-hunter แต่ละตัว
ใช้ worker เพียงหนึ่งตัว ตัวเลือก -T ของคำสั่งนี้เองจะควบคุมจำนวนโพรเซสพาร์เซอร์ที่ทำงานพร้อมกัน
หลักฐานที่ควรเก็บรวบรวม¶
| แหล่งข้อมูล | ตัวอย่างการตรวจสอบ |
|---|---|
SYSTEM และ transaction log ที่อยู่ข้างเคียง |
บริการ คำสั่งกู้คืนบริการ แพ็กเกจ LSA การตั้งค่าบูต ผู้ให้บริการการยืนยันตัวตน |
SOFTWARE และ transaction log ที่อยู่ข้างเคียง |
Run key, Winlogon, IFEO, การลงทะเบียน COM, TaskCache, การตั้งค่า Office |
NTUSER.DAT และ UsrClass.dat ของผู้ใช้แต่ละราย |
การเริ่มอัตโนมัติของผู้ใช้ ตัวแปรสภาพแวดล้อม การแทนที่ COM การตั้งค่า Office |
SAM และ SOFTWARE |
ความผิดปกติของ RID บัญชีที่ซ่อนอยู่ การเป็นสมาชิก Administrators ภายในเครื่องที่ผิดปกติ |
Windows/System32/Tasks |
คำสั่งของงานตามกำหนดเวลาและ COM handler การเปรียบเทียบกับ TaskCache |
ไฟล์ .library-ms ใน Start Menu ของผู้ใช้แต่ละราย และโฟลเดอร์ที่ตั้งชื่อเป็น CLSID |
ผู้ต้องสงสัยของทริกเกอร์การเปิดใช้งาน COM ซึ่งเชื่อมกับการลงทะเบียนคลาสของผู้ใช้/เครื่องที่ตรงกัน |
| โฟลเดอร์ Startup, โปรไฟล์ PowerShell, เทมเพลต Office, การตั้งค่า Terminal | ไฟล์และคำสั่งที่ทำงานจากทริกเกอร์ของผู้ใช้หรือระบบ |
WMI OBJECTS.DATA |
อินสแตนซ์ของ event consumer และการผูก filter-to-consumer |
BITS qmgr.db หรือ qmgr*.dat |
คำสั่งแจ้งเตือนที่กู้คืนได้และ SID ของเจ้าของ |
$MFT และไฟล์ EVTX ที่เกี่ยวข้อง |
การเชื่อมโยง timestamp แบบอิสระ |
| ไฟล์ปฏิบัติการ DLL และไฟล์ catalog ที่ถูกอ้างอิง | แฮช SHA256 และเมทาดาทาเชิงพรรณนาของ PE/ใบรับรอง |
transaction log ของรีจิสทรีจะถูกนำมาเล่นซ้ำ (replay) เมื่อมีอยู่ --no-logs อ่านไฮฟ์ตามสภาพที่เก็บรวบรวมมา
ไฮฟ์ที่อยู่ในสถานะ dirty ซึ่งไม่ได้เล่น log ซ้ำอาจขาดการเปลี่ยนแปลงล่าสุด และจะถูกรายงานในความครอบคลุม control set
ปัจจุบันถูกใช้สำหรับการตรวจสอบระบบที่ใช้งานอยู่ การตรวจสอบ DSRM backdoor จะตรวจเพิ่มเติมใน
ControlSet001, ControlSet002 และ CurrentControlSet เมื่อมีอยู่ ให้ตรวจสอบพาธที่รายงาน
เทียบกับ SYSTEM\\Select ก่อนระบุว่าการตั้งค่านั้นมีผลอยู่ control set ในอดีตอื่น ๆ
สามารถตรวจสอบได้ด้วยคำสั่งพาร์เซอร์รีจิสทรีแต่ละคำสั่ง
การอ่านไฮฟ์ใช้งบประมาณอินพุตร่วมกัน 1 GiB ต่อคอมพิวเตอร์ ไฮฟ์ของเครื่องจะถูกอ่านก่อนไฮฟ์ของผู้ใช้
อินพุตหรือ transaction log ที่เกินงบประมาณจะถูกระบุชื่อไว้ในความครอบคลุมบางส่วน (partial) ไฮฟ์อื่นที่อ่านได้และ
การตรวจสอบที่อิงไฟล์จะยังคงทำงานต่อไป เฉพาะตำแหน่งไฮฟ์มาตรฐานหรือไฟล์ที่ส่งออกมาซึ่งระบุไว้อย่างชัดเจนเท่านั้นที่ใช้ยืนยัน
ตัวตนของไฮฟ์ สำเนาที่อยู่ในไดเรกทอรีชั่วคราวของผู้ใช้ไม่สามารถแทนที่ไฮฟ์จริงของผู้ใช้นั้นได้
ไดรฟ์ระบบเดิมที่บันทึกไว้ใน SOFTWARE จะถูกแมปไปยังวอลุ่มระบบที่เก็บมา ดังนั้นการเมานต์
วอลุ่ม C: เดิมไว้ภายใต้ป้ายชื่อไดรฟ์หลักฐานอื่นจะไม่ทำให้เมทาดาทาของ payload หายไป
auto-parse ก็เรียกใช้ hunter นี้ด้วย และบันทึก persistence/PersistenceHunter.csv (หรือ .json/.jsonl)
ไว้ในไดเรกทอรีของแต่ละคอมพิวเตอร์ พร้อม PersistenceHunter-logs.txt ไว้ข้างกัน ผลการตรวจพบยังถูกนำเข้า
ไทม์ไลน์ SIEM -j <FILE> แบบเลือกได้ด้วย การวิเคราะห์อัตโนมัติใช้ --min-severity info เพื่อเก็บ
inventory การกำหนดค่าไว้ครบถ้วน รวมถึงรายการที่ตรงกับกฎ allow
การลงทะเบียน COM และทริกเกอร์การเปิดใช้งาน¶
การตรวจสอบ scheduled_task_files เลือก principal ของแต่ละ action โดยใช้
Actions Context ของ XML ของงานและ Principal id ที่ตรงกัน principal ที่เป็นกลุ่มจะถูกเก็บไว้ในฐานะกลุ่ม
ซึ่งไม่สามารถระบุได้ว่าจะใช้การลงทะเบียนคลาสของผู้ใช้รายใด
ผู้ต้องสงสัยที่เป็น COM handler จะถูกแปลงแยกกันในมุมมองคลาสแบบเนทีฟและแบบ 32 บิต โดยพิจารณาเฉพาะ
UsrClass.dat/NTUSER.DAT ที่เก็บมาของผู้ใช้ที่ตรงกัน และ SOFTWARE ของเครื่อง
principal ที่เป็น SID จะถูกเชื่อมผ่านพาธ ProfileList ที่เก็บมา ชื่อบัญชี รวมถึง
HOST\user และ DOMAIN\user จะเลือกโปรไฟล์ user.DOMAIN ที่ตรงกันก่อนโปรไฟล์
user แบบธรรมดา alias ของโฮสต์ภายในเครื่องและ .\user ใช้ชื่อโฮสต์ที่เก็บมาสำหรับการจับคู่ส่วนต่อท้าย
โดยส่วนต่อท้ายที่ตรงกันทุกประการจะมีลำดับความสำคัญเหนือ alias ของโฮสต์อื่น โปรไฟล์แบบธรรมดาจะถูกพิจารณา
เฉพาะเมื่อไม่มีโปรไฟล์แบบมีตัวระบุใดตรงกันเท่านั้น การจับคู่เช่นนี้ทุกครั้งจะถูกระบุอย่างชัดเจนว่าเป็น
ฮิวริสติกจากชื่อโฟลเดอร์ (folder-name heuristic) ใน Description ซึ่งไม่ได้พิสูจน์ความเป็นเจ้าของบัญชีหรือการเป็นสมาชิกโดเมน การจับคู่ที่กำกวม
จะยังคงไม่ถูกแปลง และจะรายงานไว้ทั้งในคำอธิบายผลการตรวจพบและในความครอบคลุม ความกำกวม
ระหว่างโปรไฟล์แบบมีตัวระบุจะไม่ทำให้ย้อนกลับไปใช้โปรไฟล์แบบธรรมดา กลไกนี้ไม่ได้ขึ้นอยู่กับ
Volatile Environment ซึ่งโดยปกติอยู่ในหน่วยความจำเท่านั้นและไม่ได้ถูกบันทึกพร้อมไฮฟ์รีจิสทรี CLSID ของผู้ใช้ที่ซ้ำกัน
จะบดบัง (shadow) คีย์ลูกของ CLSID ของเครื่อง principal ที่เป็นกลุ่มใช้ผู้ต้องสงสัย COM ของเครื่อง และระบุ
ข้อจำกัดนั้นไว้ในคำอธิบายผลการตรวจพบ principal ที่เป็นกลุ่มตามปกติจะไม่ทำให้
ความครอบคลุมเป็นแบบบางส่วน หรือใช้รายการในสรุปข้อผิดพลาด
ตัวแปลง (resolver) จะติดตาม InprocServer32 และ LocalServer32 ใช้พาธ CodeBase แบบ managed
(รวมถึงคีย์ย่อยของเวอร์ชัน) และเชื่อม AppID LocalService เข้ากับ ImagePath ของบริการใน SYSTEM ที่เก็บมา
ความเชื่อมโยงกับชื่อไฟล์ปฏิบัติการของ AppID จะถูกเก็บไว้ แต่ชื่อฐาน (basename) ไม่ได้ยืนยัน
พาธแบบเต็มของไฟล์ปฏิบัติการ URL ของ CodeBase แบบ file: ภายในเครื่องจะถูกถอดรหัส ส่วน URL ระยะไกลจะถูกบันทึกไว้
โดยไม่เข้าถึง การลงทะเบียนที่ขาดหายไปจะเก็บ CLSID ไว้พร้อม
ResolutionStatus: unresolved_com_class ฟิลด์พาธ/แฮชว่างเปล่า และ Exists ที่ไม่ทราบค่า
การตรวจสอบ start_menu_com อ่าน URL ใน XML ของไฟล์ .library-ms ใน Start Menu ของผู้ใช้แต่ละราย และเก็บรวบรวม
โฟลเดอร์ที่ตั้งชื่อเป็น CLSID รวมถึงไดเรกทอรีว่าง โดยรายงานพาธของทริกเกอร์ CLSID เซิร์ฟเวอร์ที่เป็นผู้ต้องสงสัย
และแหล่งที่มาในรีจิสทรี การเก็บข้อมูลแบบไฟล์อย่างเดียวไม่สามารถเก็บรักษาไดเรกทอรีว่างได้
และการขาดไฮฟ์ของผู้ใช้ทำให้ค้นหาการลงทะเบียนของผู้ใช้แต่ละรายได้ไม่ครบถ้วน ลิงก์สัญลักษณ์จะ
ไม่ถูกติดตาม รายการเหล่านี้เป็นผู้ต้องสงสัยจากการกำหนดค่า สถาปัตยกรรม การยกระดับสิทธิ์ UAC นโยบาย และ
บริบทการเปิดใช้งานอาจส่งผลต่อการที่การลงทะเบียนนั้นถูกใช้จริงหรือไม่ ให้ยืนยันการเรียกใช้งาน
ด้วยหลักฐานด้านโพรเซส การโหลดโมดูล หรือหลักฐานอิสระอื่น
การจำแนกและโปรไฟล์¶
การจำแนกขั้นต่ำโดยค่าเริ่มต้นคือ medium หากต้องการตรวจสอบ inventory ทั้งหมด รวมถึง
รายการที่ตรงกับ allowlist ที่มาพร้อมโปรแกรม
ใช้ทุกระดับความรุนแรงเมื่อตรวจทานชุดที่เก็บรวบรวมมาไม่ครบถ้วน
กฎ allow ที่กว้างอาจตรงกับคำสั่งของผู้โจมตีบางส่วน แม้ว่าผู้ลงนามจะขาดหายไป
หรือแตกต่างกัน ต้นฉบับ (upstream) จำแนกการตรงกันบางส่วนเป็น LOW ซึ่งเกณฑ์ค่าเริ่มต้น
medium ของคำสั่งที่เรียกใช้ด้วยตนเองจะซ่อนไว้ สิ่งนี้อาจส่งผลต่องานตามกำหนดเวลาที่เป็นอันตรายภายใต้ไดเรกทอรี Windows
ให้ใช้ --min-severity info สำหรับการตรวจสอบที่ครบถ้วน และตรวจทาน PolicyReason, SignerStatus
คำสั่ง และหลักฐานต้นทางไปพร้อมกัน auto-parse เก็บรายการเหล่านี้ไว้อยู่แล้ว
| การจำแนก | ความหมาย |
|---|---|
HIGH |
กฎ block ที่กำหนดค่าไว้ตรงกันทั้งหมด |
MEDIUM |
ไม่มีกฎ allow หรือ block ใดตรงกัน |
LOW |
เงื่อนไขบังคับของกฎ allow ตรงกัน แต่เมทาดาทาของผู้ลงนามไม่ตรงกันหรือไม่มีให้ใช้ |
INFO |
กฎ allow ตรงกันทั้งหมด |
สิ่งเหล่านี้เป็นการจำแนกตามนโยบาย ไม่ใช่ความน่าจะเป็นของการถูกบุกรุกที่วัดได้ รายการ MEDIUM
โดยค่าเริ่มต้นไม่ใช่หลักฐานว่าเป็นมัลแวร์ INFO ไม่ได้ยืนยันว่าไฟล์มีลายเซ็นที่ถูกต้อง หรือว่า
ผู้โจมตีไม่ได้นำไฟล์นั้นไปใช้ในทางที่ผิด การตรงกับกฎ allow บางส่วนอยู่ต่ำกว่าเกณฑ์ค่าเริ่มต้น ดังนั้นให้ใส่
--min-severity low หรือ info เมื่อตรวจทานชุดที่เก็บรวบรวมมาไม่ครบหรือเมื่อปรับแต่ง allowlist
ระบุโปรไฟล์ YAML ด้วย --profile profile.yaml โปรไฟล์นี้จะแทนที่โปรไฟล์ที่มาพร้อมโปรแกรม กฎแบบ global
และกฎเฉพาะการตรวจสอบภายในไฟล์ที่เลือกจะถูกรวมเข้าด้วยกัน และกฎ block ใดก็ตามที่ตรงกันทั้งหมดจะมีผลเหนือกว่า
ตัวอย่างเช่น
allow: []
block:
- reason: Example known-bad command fragment
value_matches: 'example-malicious-loader\.exe'
checks:
windows_service_image_path:
enabled: true
allow:
- reason: Organization's expected service path
value_matches: '^C:\\Program Files\\ExampleCorp\\Agent\\agent\.exe$'
signer: ExampleCorp
เงื่อนไขของกฎที่รองรับได้แก่ path_matches, value_matches, hash (SHA256 เลขฐานสิบหก
64 หลัก), not_lolbin และ signer (สตริงย่อยแบบไม่แยกตัวพิมพ์เล็ก-ใหญ่) เงื่อนไขบังคับที่ระบุไว้ทั้งหมดต้อง
ตรงกัน เมทาดาทาของผู้ลงนามเป็นเงื่อนไขแบบผ่อนปรน (soft) ตามที่อธิบายไว้ข้างต้น regex ใช้ไวยากรณ์ regular expression
ของ Rust ซึ่งไม่รองรับ lookaround และ backreference check ID ที่ไม่รู้จัก นิพจน์ที่ไม่ถูกต้อง
และฟิลด์โปรไฟล์ที่ไม่รู้จักจะทำให้เกิดข้อผิดพลาด แทนที่จะทำให้นโยบายอ่อนลงโดยไม่แจ้งให้ทราบ
ฟิลด์เอาต์พุต¶
CSV เป็นรูปแบบไฟล์ค่าเริ่มต้น ใช้ -t json สำหรับออบเจกต์ JSON ที่อ่านง่าย หรือ -t jsonl สำหรับเอาต์พุตแบบกระชับ
หนึ่งออบเจกต์ต่อบรรทัด เมื่อไม่มี -o การระบุ -t อย่างชัดเจนจะเขียนเฉพาะข้อมูลไปยัง stdout ส่วน
คำเตือนเกี่ยวกับความครอบคลุมจะไปยัง stderr เมื่อไม่มีทั้งสองตัวเลือก Juntei จะพิมพ์สรุปผลและผู้ต้องสงสัยสูงสุด 30 รายการ
| ฟิลด์ | วิธีตีความ |
|---|---|
Comp, CheckID, Technique, MitreID |
คอมพิวเตอร์และกลไกการคงอยู่ที่แถวนั้นอธิบาย |
Path, Value |
ตำแหน่งในรีจิสทรี ไฟล์ งาน หรือเรคคอร์ดที่กู้คืนได้ และเนื้อหาที่กำหนดค่าไว้ |
Description, References |
เหตุผลที่กลไกนั้นสำคัญ และแหล่งข้อมูลอ่านเพิ่มเติม |
AccessGained |
ขอบเขตตามปกติของกลไก (USER หรือ SYSTEM โดย BITS อาจระบุ LOCAL_SERVICE/NETWORK_SERVICE ได้ด้วย) ไม่ใช่หลักฐานว่าคำสั่งใดคำสั่งหนึ่งได้รับสิทธิ์นั้นจริง |
Severity, PolicyReason |
การจำแนกตามโปรไฟล์ คำอธิบายนโยบายที่ตรงกัน และเงื่อนไขกำกับกรณีตรงกันบางส่วนหรือผู้ลงนามที่ยังไม่ได้ตรวจสอบ |
SourceFile, RecordStatus |
แหล่งข้อมูลที่เก็บรวบรวมมาอย่างแม่นยำ พาธที่เริ่มต้นด้วยอินพุตตามที่ระบุ (./HOST/... จาก auto-parse) และบริบทของการจัดสรร/การเล่นซ้ำ/การกู้คืน ให้ติดตามย้อนกลับไปยังหลักฐานต้นฉบับ |
KeyLastWrite |
timestamp ของคีย์รีจิสทรี ไม่ได้ระบุเวลาของค่าแต่ละค่า |
LastChange, ChangeSource, ChangeEvidence |
เวลาเปลี่ยนแปลงที่เชื่อมโยงได้อย่างอิสระ หลักฐานของแหล่งที่มา และการเชื่อมโยงสำเร็จหรือไม่ |
ResolvedPath, ResolutionStatus, Exists |
พาธของ payload และผลการแปลงแบบออฟไลน์ หลักฐานที่ไม่ได้เก็บรวบรวมถือว่าไม่ทราบ ไม่ใช่ false |
SHA256 |
SHA256 ของไบต์ payload ที่เก็บรวบรวมมา เมื่ออ่านได้ |
Signer, SignerStatus |
เมทาดาทาเชิงพรรณนาของใบรับรอง/catalog ที่ฝังอยู่และการมีอยู่ของข้อมูลนั้น ไม่ได้ตรวจสอบความน่าเชื่อถือของใบรับรองและความถูกต้องของลายเซ็น |
IsLolbin, Launcher |
launcher หรือ payload ที่กำหนดค่าไว้อยู่ในรายการ LOLBAS ที่มาพร้อมโปรแกรมหรือไม่ และ launcher ที่ใช้สำหรับ payload ที่ถูกเรียกผ่านตัวกลาง |
IsBuiltin, IsInOS-Directory |
บริบทสำหรับคำสั่งทั่วไปของ Windows และไดเรกทอรีระบบ ทั้งสองฟิลด์ไม่ได้ยืนยันความถูกต้องตามกฎหมาย |
คำสั่ง rundll32.exe สามารถระบุ payload ที่เป็น DLL ได้ Juntei เก็บรักษา launcher ไว้ขณะแปลงพาธและ
คำนวณแฮชของ payload การอ้างอิงที่อยู่นอกคอมพิวเตอร์ที่เก็บรวบรวมมา ไดรฟ์ที่ขาดหายไป การจับคู่แบบไม่แยกตัวพิมพ์เล็ก-ใหญ่
ที่กำกวม หรือตัวแปรสภาพแวดล้อมที่แปลงค่าไม่ได้ จะไม่ถูกแทนที่ด้วยไฟล์จาก
เครื่องของนักวิเคราะห์
timestamp และข้อจำกัด¶
hunter นี้ไม่ใช้เวลาแก้ไขของไฟล์ที่คัดลอกไว้บน VM ของนักวิเคราะห์เป็น timestamp ของการโจมตี
เมื่อมีข้อมูล จะเชื่อมโยงการเขียนรีจิสทรีกับ Sysmon event 13 การติดตั้งงานกับ
Security 4698 หรือ Task Scheduler 106 การติดตั้งบริการกับ System 7045 และการกำหนดค่าที่อิงไฟล์
กับ timestamp เดิมใน $MFT แหล่งที่มาจะปรากฏใน ChangeSource
เหตุการณ์หนึ่งสามารถระบุเวลาของการเปลี่ยนแปลงการกำหนดค่าได้ โดยไม่ได้พิสูจน์ว่า payload ที่กำหนดค่าไว้ได้ทำงานจริง
event 6011 ใน System log ของเครื่องสามารถพิสูจน์ชื่อคอมพิวเตอร์ก่อนหน้าได้ hunter จะติดตามห่วงโซ่การเปลี่ยนชื่อ
ที่ตรวจสอบแล้วซึ่งยึดโยงกับคอมพิวเตอร์ที่เก็บรวบรวมมา โดยคงค่า Comp ปัจจุบันไว้ พร้อมบันทึก
ชื่อคอมพิวเตอร์ในเหตุการณ์เดิมและหลักฐานจากเรคคอร์ดการเปลี่ยนชื่อไว้ใน ChangeSource ชื่อภายนอกที่ยังไม่ได้พิสูจน์
log ที่ถูกเก็บถาวร log ที่ถูกส่งต่อมา และการติดตั้ง Windows อื่น จะไม่ได้รับการยอมรับผ่านกฎนี้
ComputerName/ActiveComputerName, TCP/IP Hostname/NV Hostname และ hostname/FQDN จาก client-info ที่เก็บมา ให้ alias ของโฮสต์ ซึ่งครอบคลุมความแตกต่างระหว่าง DNS/NetBIOS และการเปลี่ยนชื่อที่รอดำเนินการ เมื่อไม่มีข้อมูลตัวตนที่เก็บมา ชื่อเดียวใน log หลักสามารถใช้สนับสนุนการระบุเวลาได้ โดยมีแหล่งที่มาที่ระบุชัดเจนว่าตัวตนยังไม่ได้ตรวจสอบ และมีคำเตือนเกี่ยวกับความครอบคลุม ชื่อที่ยังไม่ได้ตรวจสอบหลายชื่อจะไม่ถูกระบุว่าเป็นของโฮสต์ ชื่อ Computer ที่ถูกปฏิเสธจะรายงานเป็นข้อจำกัดของความครอบคลุมในการเชื่อมโยง ส่วน channel ของชื่อเหล่านั้นยังคงถูกระบุว่าเก็บรวบรวมแล้ว
ใช้ --mft <FILE> เพื่อเลือก MFT ที่เก็บรวบรวมจากภายนอกสำหรับคอมพิวเตอร์เครื่องเดียว ใช้ --no-timeline
เพื่อข้ามการเชื่อมโยง timestamp ค่า NOT_RUN, NOT_APPLICABLE, NO_ARTIFACT, NO_MATCH และ REJECTED
อธิบายสาเหตุที่ LastChange ว่างเปล่า ฟิลด์ที่ว่างเปล่าไม่ใช่หลักฐานว่ารายการนั้นไม่เป็นอันตราย
การกู้คืน WMI และ BITS เป็นการ carving แบบมีขอบเขต ไม่ใช่พาร์เซอร์ธุรกรรมฐานข้อมูลแบบสมบูรณ์ สตริงหรือการผูกที่กู้คืนได้อาจมีข้อมูลเก่า/ที่ถูกลบ เรคคอร์ดเหล่านี้ต้องได้รับการยืนยันด้วยหลักฐานอื่น schema ของคลาส WMI เพียงอย่างเดียวจะไม่ถูกนับเป็น subscription รายการ TaskCache ที่ไม่มีไฟล์ XML ของงาน ที่เก็บรวบรวมมาเป็นความไม่สอดคล้องที่ต้องตรวจทาน ชุด triage อาจเพียงแค่ไม่ได้เก็บไฟล์นั้นมา เมทาดาทาของ catalog และ PE ยังไม่ได้ตรวจสอบ และอาจไม่มีอยู่ในชุดที่เก็บรวบรวม การตรวจสอบการแทนที่ไฟล์ accessibility ขึ้นอยู่กับเมทาดาทาลายเซ็นอ้างอิงที่เหมาะสม การขาดหลักฐาน catalog ต้องไม่ทำให้ไฟล์ปฏิบัติการ accessibility ทุกไฟล์ถูกตั้งค่าสถานะ
ความครอบคลุมจะถูกบันทึกสำหรับทุกการตรวจสอบ รวมถึงการตรวจสอบที่ไม่มีผลการตรวจพบ complete หมายความว่า
แหล่งข้อมูลที่เก็บรวบรวมมาซึ่งเกี่ยวข้องถูกอ่านแล้ว ไม่ได้พิสูจน์ว่าชุดที่เก็บรวบรวมครบถ้วน หรือว่า
คอมพิวเตอร์ไม่มีการคงอยู่อื่นใด partial, not_collected, failed และ disabled อธิบาย
ข้อจำกัด ให้เก็บ --coverage Coverage.csv และ log ของพาร์เซอร์ไว้พร้อมกับผลการตรวจพบ
การพอร์ตนี้ใช้รูปแบบ CSV/JSON/JSONL ของ Juntei โดยไม่เรียกใช้โปรแกรม Python ต้นฉบับ ไม่สอบถาม บริการเพิ่มข้อมูล (enrichment) ออนไลน์ และไม่ได้สร้าง UI แบบ HTML/XLSX ของต้นฉบับขึ้นใหม่