การตั้งค่าความปลอดภัย¶
สิ่งเหล่านี้คืออะไร¶
ผู้โจมตีเปลี่ยนการตั้งค่าความปลอดภัยของ Windows เพื่อซ่อนตัวและเพื่อเข้าถึงข้อมูลรับรอง พวกเขาปิด Microsoft Defender หรือยกเว้นเครื่องมือของตนจากการสแกน ทำให้ Windows เก็บรหัสผ่านแบบ cleartext เปิด Remote Desktop ปิดไฟร์วอลล์ และปิดการบันทึก log ของ PowerShell รีจิสทรีเก็บ การตั้งค่าเหล่านี้ไว้:
SOFTWARE: Defender, ข้อยกเว้นและนโยบายของ Defender; UAC; นโยบายของ Remote Desktop และ ไฟร์วอลล์; execution policy, นโยบายการบันทึก log และผู้ให้บริการ AMSI ของ PowerShell; System Restore; ช่องทาง (channel) ของ event logSYSTEM(ต่อ control set):WDigest, การป้องกัน LSA, Credential Guard, Restricted Admin, NTLM; Remote Desktop; โปรไฟล์ไฟร์วอลล์; SMBv1; เวลาเข้าถึงล่าสุด; ขนาดของ event log แต่ละรายการNTUSER.DAT: execution policy และนโยบายการบันทึก log ของ PowerShell ของผู้ใช้ และ AMSI สำหรับ Windows Script Host
parse-registry security-settings รายงานการตั้งค่าแต่ละรายการที่พบเป็นหนึ่งระเบียน แต่ละระเบียนมี
ค่าของการตั้งค่า ความหมายของค่า และค่านั้น ลดระดับจากค่าเริ่มต้น (weakens the default) หรือไม่: กล่าวคือ ปิด
การป้องกันหรือแหล่งหลักฐาน หรือลดระดับให้ต่ำกว่าสิ่งที่ Windows ปัจจุบัน (10 และ 11) ทำเมื่อ
ไม่มีค่านั้นหรือไม่
ข้อสรุปที่ดีที่สุด: การตั้งค่านี้มีค่านี้ ณ เวลาที่ไฮฟ์ ถูกบันทึก และคีย์ถูกเขียนครั้งล่าสุด ณ เวลานี้ การตั้งค่าที่ถูกลดระดับเป็นเบาะแส ไม่ใช่ข้อพิสูจน์ว่า ถูกบุกรุก ผู้ดูแลระบบ Group Policy ผลิตภัณฑ์ความปลอดภัยอื่น และ Windows รุ่นเก่าก็ตั้งค่า บางค่าเหล่านี้เช่นกัน และคำอธิบายความหมายจะระบุไว้ในกรณีที่พบบ่อย
ตำแหน่ง¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows Defender[\Real-Time Protection|\Features|\Spynet]
Microsoft\Windows Defender\Exclusions\Paths|Extensions|Processes|IpAddresses|TemporaryPaths
Policies\Microsoft\Windows Defender\…
Microsoft\Windows\CurrentVersion\Policies\System UAC
Policies\Microsoft\Windows NT\Terminal Services RDP policy
Policies\Microsoft\WindowsFirewall\<profile> firewall policy
Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell ExecutionPolicy
Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging|ModuleLogging|Transcription
Microsoft\AMSI\Providers\{CLSID}
Microsoft\Windows NT\CurrentVersion\SystemRestore DisableSR
Microsoft\Windows\CurrentVersion\WINEVT\Channels\<channel> Enabled, MaxSize
C:\Windows\System32\config\SYSTEM (ControlSet00N\…)
Control\SecurityProviders\WDigest UseLogonCredential
Control\Lsa RunAsPPL, LsaCfgFlags, DisableRestrictedAdmin, LmCompatibilityLevel
Control\Terminal Server[\WinStations\RDP-Tcp] fDenyTSConnections, PortNumber, UserAuthentication
Services\SharedAccess\Parameters\FirewallPolicy\<profile> EnableFirewall
Services\LanmanServer\Parameters SMB1
Control\FileSystem NtfsDisableLastAccessUpdate
Services\EventLog\<log> MaxSize
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell ExecutionPolicy
Software\Policies\Microsoft\Windows\PowerShell\…
Software\Microsoft\Windows Script\Settings AmsiEnable
ให้เก็บรวบรวมไฮฟ์ทั้งสามพร้อม transaction log การตั้งค่าที่เปลี่ยนไม่นานก่อนการเก็บรวบรวม อาจมีอยู่เฉพาะใน log
ข้อควรระวังสำหรับนักวิเคราะห์¶
- การกำหนดค่าที่จัดเก็บไว้ไม่ใช่สถานะการป้องกันที่มีผลจริง ค่ารีจิสทรีที่เก็บรวบรวมมาและแถววินิจฉัยสำหรับรายการค่าที่เสียหาย
จะถูกรายงาน ข้อมูลที่ขาดหายอาจสะท้อนค่าเริ่มต้น แหล่งข้อมูลที่ไม่ได้เก็บรวบรวม หรือกลไก
การจัดการอื่น ไม่ใช่ข้อพิสูจน์ว่าการป้องกันเปิดหรือปิดอยู่
WeakensDefaultระบุ การตั้งค่าที่อาจลดระดับต่ำกว่า baseline ที่ระบุไว้เมื่อการตั้งค่านั้นมีผล - แฟล็กแบบเดิมของ Defender อาจถูกละเลย
DisableAntiSpywareและDisableAntivirusไม่ได้ พิสูจน์ว่า Defender หยุดทำงาน การมีผลขึ้นอยู่กับเวอร์ชันของแพลตฟอร์ม การ onboarding และ tamper protection Microsoft อธิบายการตั้งค่าแบบเดิมเหล่านี้ - ข้อยกเว้นที่จัดการแบบใหม่อาจไม่มีอยู่ในข้อมูลรีจิสทรีที่เก็บมา ตั้งแต่แพลตฟอร์ม 4.18.25110.6 อุปกรณ์ที่ใช้การจัดการการกำหนดค่าของ Defender for Endpoint ต้องใช้ cmdlet ของ Defender PowerShell ที่รองรับเพื่อดึงการกำหนดค่าข้อยกเว้น ดังนั้นการไม่พบในรีจิสทรีแบบออฟไลน์ จึงไม่ได้ยืนยันว่าไม่มีข้อยกเว้น คำแนะนำการกำหนดค่าของ Microsoft
- ถูกลดระดับไม่ได้หมายความว่าเป็นอันตราย ตัวอย่าง:
DisableAntiSpyware= 1 ถูกตั้งโดย Windows เองด้วยในขณะที่มีโปรแกรมป้องกันไวรัสอื่นลงทะเบียนอยู่- Remote Desktop ถูกเปิดโดยเจตนาบนเซิร์ฟเวอร์
- Windows 7 เก็บ event log ขนาดเล็กกว่าและไม่ได้อัปเดตเวลาเข้าถึงล่าสุด
- ค่าเริ่มต้นขึ้นอยู่กับเวอร์ชัน บางค่าเคยเป็นค่าเริ่มต้นมาก่อน:
NtfsDisableLastAccessUpdate= 1 เป็นค่าเริ่มต้นก่อน Windows 10 1803 จึงถูกรายงาน โดยไม่มีคำตัดสิน แต่0x80000001ที่ตั้งด้วยมือบนเวอร์ชันที่ใหม่กว่าถือว่าถูกลดระดับRunAsPPL,LsaCfgFlagsและUseLogonCredentialถูกเปรียบเทียบกับ Windows ปัจจุบัน- ข้อยกเว้นของ Defender: แต่ละพาธ นามสกุล โพรเซส หรือที่อยู่เป็นหนึ่งระเบียน ข้อยกเว้นทุกรายการ
ลดระดับ Defender
TemporaryPathsซึ่ง Defender เพิ่มเอง ไม่มีคำตัดสิน ให้มองหาโฟลเดอร์ที่ผู้ใช้เขียนได้ นามสกุล.ps1/.exeและ LOLBin (rundll32.exe,powershell.exe) - คีย์นโยบาย (
Policy= True) ถูกเขียนโดย Group Policy โดยเครื่องมือ และโดยผู้โจมตีที่ รู้ว่านโยบายมีลำดับความสำคัญเหนือการตั้งค่าภายในเครื่อง ให้เชื่อมโยงกับ GPO ของโดเมน - ช่องทางของ event log: รายงานเฉพาะ 25 ช่องทางที่เกี่ยวข้องกับความปลอดภัย พร้อมระบุว่า Windows
เปิดแต่ละช่องทางตามค่าเริ่มต้นหรือไม่ ตัวอย่างเช่น
TaskScheduler/OperationalและDNS-Client/Operationalปิดอยู่ตามค่าเริ่มต้น ใช้parse-registry readสำหรับช่องทางอื่น - เวลาของคีย์:
KeyLastWrittenUTCเป็นของคีย์ จึงไม่จำเป็นต้องเป็นเวลาที่ค่านี้ เปลี่ยนแปลง การเขียนคีย์Policiesทั้งคีย์ในคราวเดียวเป็นเรื่องปกติ - Control set: ตามค่าเริ่มต้นจะอ่าน control set ที่ Windows ใช้ครั้งล่าสุด
--all-control-setsอ่านทุก control set
วิเคราะห์ด้วย Juntei¶
Usage: juntei parse-registry security-settings <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE, SYSTEM and NTUSER.DAT hives
-f, --file <FILE> Parse one hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--all-control-sets Every control set, not only the one in use
--weakened-only Only settings that weaken the default
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry security-settings -d evidence/ -o settings.csv
juntei parse-registry security-settings --weakened-only -d evidence/ -t jsonl \
| jq -r '[.Host, .Area, .KeyPath, .ValueName, .Value, .Meaning] | @tsv'
ส่วนสรุปนับจำนวนการตั้งค่าตามหมวด แสดงรายการการตั้งค่าที่ลดระดับจากค่าเริ่มต้น และ ข้อยกเว้นทุกรายการของ Defender
ฟิลด์เอาต์พุต¶
| ฟิลด์ | การตีความ |
|---|---|
Host, SourcePath, HiveType |
โฮสต์ ไฮฟ์ และชนิดของไฮฟ์ (SOFTWARE, SYSTEM, NTUSER.DAT) |
ControlSet, IsCurrentControlSet |
สำหรับ SYSTEM: control set และเป็นชุดที่ Windows ใช้ครั้งล่าสุดหรือไม่ ไม่ทราบเมื่อ Select\Current ไม่มีอยู่หรือไม่ถูกต้อง |
User, UserSID |
สำหรับ NTUSER.DAT: ชื่อโฟลเดอร์โปรไฟล์ และ SID ของผู้ใช้จาก ProfileList ของระบบ |
Area |
defender, uac, credentials, remote_access, network, powershell, evidence |
Setting |
การตั้งค่านั้นคืออะไร: defender_disable_realtime_monitoring, defender_exclusion_path, uac_local_account_token_filter_policy, wdigest_use_logon_credential, rdp_deny_connections, powershell_script_block_logging, event_channel_enabled, … |
Value |
ค่า: ตัวเลขฐานสิบ สตริง หรือตัวข้อยกเว้นเอง ว่างเปล่าเมื่อค่าไม่ได้มีชนิดตรงกับการตั้งค่า |
Meaning |
ความหมายของค่า |
WeakensDefault |
True เมื่อค่าลดระดับจากสิ่งที่ Windows ปัจจุบันทำเมื่อไม่มีค่านั้น False เมื่อไม่ได้ลดระดับ ว่างเปล่าเมื่อไม่เกี่ยวข้อง (ขนาด พอร์ต ผู้ให้บริการ AMSI) หรือไม่สามารถบอกได้ |
Policy |
คีย์อยู่ใต้คีย์ Policies หรือไม่ |
KeyPath, ValueName |
คีย์และค่า ชื่อค่าของข้อยกเว้นคือรายการที่ถูกยกเว้น ผู้ให้บริการ AMSI ไม่มีชื่อค่า |
KeyLastWrittenUTC |
เวลาเขียนล่าสุดของคีย์ |
DataRaw |
ไบต์ของค่า (hex) เมื่อไม่ได้มีชนิดตรงกับการตั้งค่า |
TransactionLogStatus, LogsApplied |
บริบทการกู้คืนรีจิสทรี |
Problems |
ค่าที่มีชนิดไม่ถูกต้องและคีย์ที่อ่านไม่ได้ |
กลยุทธ์การตรวจสอบ¶
- เรียกใช้ด้วย
--weakened-onlyบนทุกโฮสต์ และเปรียบเทียบโฮสต์ต่าง ๆ เข้าด้วยกัน: การตั้งค่า ที่มีเพียงโฮสต์เดียวจะโดดเด่นขึ้นมา - ตรวจสอบข้อยกเว้นแต่ละรายการของ Defender เทียบกับเครื่องมือที่พบบนโฮสต์และใน log ของ Defender (Event 5007 บันทึกการเปลี่ยนแปลงการกำหนดค่า)
- เชื่อมโยงเวลาของคีย์กับการเข้าสู่ระบบ การติดตั้งบริการ และการสร้างโพรเซส มองหาบรรทัดคำสั่ง
reg.exe,Set-MpPreference,netsh advfirewallและpowershell(เหตุการณ์ 4688, Sysmon 1 และ 13, PowerShell 4104) - สำหรับการตั้งค่าเกี่ยวกับข้อมูลรับรอง (
WDigest,RunAsPPL,LocalAccountTokenFilterPolicy,DisableRestrictedAdmin) ให้มองหาการดัมพ์ข้อมูลรับรองและ pass-the-hash ที่เกิดขึ้นหลังจากนั้น - ใช้
parse-registry read --recover-deletedสำหรับค่าที่ถูกลบเพื่อคืนค่าเริ่มต้น และ--all-control-setsสำหรับ control set ที่เก่ากว่า