ความเข้ากันได้ของแอปพลิเคชัน¶
สิ่งที่ Windows เก็บไว้¶
นอกเหนือจาก ShimCache (parse-registry shimcache) และ Amcache (parse-registry amcache)
ฟีเจอร์ความเข้ากันได้ของแอปพลิเคชันของ Windows ยังเก็บข้อมูลต่อไปนี้ไว้ใต้
Microsoft\Windows NT\CurrentVersion\AppCompatFlags:
| แหล่งข้อมูล | ไฮฟ์และคีย์ | สิ่งที่แสดง |
|---|---|---|
layers |
SOFTWARE (และ Wow6432Node) และ NTUSER.DAT Layers |
โปรแกรมที่ตั้งค่าให้ทำงานด้วย compatibility layer: RUNASADMIN (ทำงานในฐานะผู้ดูแลระบบเสมอ), WIN7RTM, HIGHDPIAWARE, … |
pca_store |
NTUSER.DAT Compatibility Assistant\Store (Windows 8 ขึ้นไป) |
โปรแกรมที่ Program Compatibility Assistant เห็นว่าผู้ใช้เรียกใช้ |
pca_persisted |
NTUSER.DAT Compatibility Assistant\Persisted (Windows 7) |
ข้อมูลเดียวกันบน Windows 7 |
cit_module |
SOFTWARE CIT\Module\<module> |
โปรแกรมที่โหลดโมดูลที่ถูกติดตาม และเวลาที่โหลดครั้งล่าสุด |
cit_system |
SOFTWARE CIT\System (Windows 7 ถึง Windows 10 รุ่นแรก ๆ) |
พาธโปรแกรมและบรรทัดคำสั่งในฐานข้อมูล CIT ที่ถูกบีบอัด |
installed_sdb |
SOFTWARE InstalledSDB\{GUID} |
ฐานข้อมูล shim แบบกำหนดเองที่ติดตั้งด้วย sdbinst: ไฟล์ คำอธิบาย และเวลาติดตั้ง |
custom_sdb |
SOFTWARE Custom\<program> |
ฐานข้อมูล shim แบบกำหนดเองที่ใช้กับแต่ละโปรแกรม พร้อมเวลาติดตั้ง |
ข้อสรุปที่ดีที่สุด: layer และฐานข้อมูล shim เป็น การกำหนดค่าที่เปลี่ยนวิธีการทำงานของโปรแกรม ส่วนรายการของ Program Compatibility Assistant และ CIT แสดงว่าโปรแกรมได้ทำงาน (หรือโหลดโมดูล) ในฐานะผู้ใช้รายนี้หรือบนระบบนี้
ฐานข้อมูล shim แบบกำหนดเองเป็นเทคนิคการคงอยู่ (persistence) และการแทรกโค้ด (MITRE ATT&CK T1546.011): shim สามารถโหลด DLL เข้าไปในโปรแกรม หรือเริ่มโปรแกรมอื่นทุกครั้งที่โปรแกรมนั้นทำงาน
ตำแหน่ง¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers <program> = <layers>
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\Module\<module> <program> = FILETIME
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\System <id> = compressed database
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB\{GUID} DatabasePath, …
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom\<program.exe> {GUID}.sdb = FILETIME
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
ให้เก็บรวบรวม SOFTWARE, NTUSER.DAT ทุกไฟล์พร้อม transaction log และไฟล์ .sdb ที่พาธของฐานข้อมูล
shim ระบุไว้ (โดยปกติคือ C:\Windows\AppPatch\Custom\)
ข้อควรระวังสำหรับนักวิเคราะห์¶
-
การขยายข้อมูล CIT มีขีดจำกัด ค่าที่ระบุขนาดหลังขยายเกิน 64 MiB จะถูกเก็บไว้ เป็นไบต์ดิบพร้อมข้อความวินิจฉัย การบีบอัดที่ผิดรูปแบบและขนาดที่ไม่ตรงกันจะถูกรายงาน
-
รายการของ Program Compatibility Assistant ไม่มีเวลาที่เรียกใช้ ข้อมูล
Store(SACPซึ่งเก็บไว้ในDataRaw) มีเวลาหนึ่งค่า แต่บน Windows 8.1, 10 และ 11 ค่านั้นเหมือนกันสำหรับทุกโปรแกรมในไฮฟ์เดียวกัน และสำหรับระบบอื่นก็เช่นกัน: ค่านี้ไม่ใช่เวลาที่โปรแกรมทำงาน มีเพียงเวลาเขียนล่าสุดของคีย์Storeเท่านั้นที่ระบุวันเวลาของการเปลี่ยนแปลงครั้งล่าสุด - โปรแกรมบนสื่อแบบถอดได้ จะมีชื่อเป็น
SIGN.MEDIA=<id> <path>:Pathคือพาธบน สื่อนั้น และDetailsมี id ของสื่อ - ฐานข้อมูล CIT ถูกบีบอัดด้วย LZNT1 และโครงสร้างไม่มีเอกสารเผยแพร่สาธารณะ: Juntei แสดงรายการพาธโปรแกรมและบรรทัดคำสั่งที่พบในแต่ละฐานข้อมูล ครั้งเดียวต่อฐานข้อมูล โดยไม่มีจำนวนครั้งหรือ เวลา บรรทัดคำสั่งเป็นระเบียนแยกของตัวเอง ไม่ได้ผูกกับโปรแกรมของมัน Windows 10 ขึ้นไปเก็บ ข้อมูลส่วนนี้ไว้น้อยมาก
- ฐานข้อมูล shim ให้ตรวจสอบทุกระเบียน
custom_sdbและinstalled_sdb: ซอฟต์แวร์ที่ถูกต้อง แทบไม่เคยติดตั้งฐานข้อมูลนี้ ตัวไฟล์.sdbเองจะบอกว่า shim ทำอะไร - Layer ที่ผู้ใช้ตั้งค่าจะมีผลเฉพาะกับผู้ใช้รายนั้น ส่วนของ
SOFTWAREมีผลกับทุกคนRUNASADMINทำให้ โปรแกรมขอยกระดับสิทธิ์ทุกครั้ง
วิเคราะห์ด้วย Juntei¶
Usage: juntei parse-registry app-compat <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE and NTUSER.DAT hives
-f, --file <FILE> Parse one SOFTWARE or NTUSER.DAT hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry app-compat -d evidence/ -o appcompat.csv
juntei parse-registry app-compat -d evidence/ -t jsonl \
| jq 'select(.Source == "installed_sdb" or .Source == "custom_sdb")'
ส่วนสรุปจะแสดงรายการฐานข้อมูล shim แบบกำหนดเอง โปรแกรมที่มี layer และการใช้งานครั้งล่าสุด ของโมดูล CIT
ฟิลด์เอาต์พุต¶
| ฟิลด์ | การตีความ |
|---|---|
Host, SourcePath, HiveType |
โฮสต์ ไฟล์ไฮฟ์ และ SOFTWARE หรือ NTUSER.DAT |
User, UserSID |
ชื่อโฟลเดอร์โปรไฟล์ของไฮฟ์ผู้ใช้ และ SID จาก ProfileList ของระบบ |
Source, Scope |
layers, pca_store, pca_persisted, cit_module, cit_system, installed_sdb, custom_sdb; machine หรือ user |
Path |
โปรแกรม (ชื่อของค่า) พาธหรือบรรทัดคำสั่งในฐานข้อมูล CIT หรือโปรแกรมที่ฐานข้อมูล shim มีผล |
Layers |
compatibility layer ตามที่เขียนไว้ (~ RUNASADMIN) |
LastSeenUTC |
เวลาที่โปรแกรมโหลดโมดูล CIT ครั้งล่าสุด |
SdbGUID, SdbPath, SdbInstalledUTC |
GUID ไฟล์ และเวลาติดตั้งของฐานข้อมูล shim |
Details |
ชื่อโมดูล CIT ชื่อค่าของฐานข้อมูล CIT id สื่อแบบถอดได้ของโปรแกรม (SignMedia) หรือ DatabaseDescription และ DatabaseType ของฐานข้อมูล shim |
KeyPath, KeyLastWrittenUTC, ValueName, WOW64 |
ที่มาของระเบียน เวลาที่คีย์นั้นเปลี่ยนแปลงครั้งล่าสุด และอยู่ใต้ Wow6432Node หรือไม่ |
DataRaw |
ข้อมูล SACP ของค่า Store หรือข้อมูลที่ไม่เป็นไปตามที่ควรจะเป็น (hex) |
TransactionLogStatus, LogsApplied |
บริบทการกู้คืนรีจิสทรี |
Problems |
ข้อมูลที่ถอดรหัสหรืออ่านไม่ได้ |
กลยุทธ์การตรวจสอบ¶
- ตรวจทานฐานข้อมูล shim แบบกำหนดเองทุกรายการ: ไฟล์
.sdbเวลาติดตั้ง และโปรแกรมที่มีผล แล้วเชื่อมโยงกับsdbinst.exeใน Prefetch, Amcache และเหตุการณ์การสร้างโพรเซส - มองหาโปรแกรมในโฟลเดอร์ที่ผู้ใช้เขียนได้ในรายการของ Program Compatibility Assistant และ โปรแกรมจากสื่อแบบถอดได้
- ตรวจสอบ
RUNASADMINและ layer อื่น ๆ บนโปรแกรมที่ผิดปกติ - เชื่อมโยงกับ ShimCache, Amcache, BAM, Prefetch และ UserAssist เพื่อหาเวลาการเรียกใช้งาน