Amcache¶
ما هو Amcache¶
Amcache هو جرد لتوافق التطبيقات في Windows مخزّن في خلية من خلايا سجل Windows. تسجّل الأنظمة الحديثة
الملفات التنفيذية تحت InventoryApplicationFile وأجهزة التوصيل والتشغيل (Plug-and-Play) تحت
InventoryDevicePnp؛ بينما تستخدم إصدارات Windows الأقدم تخطيط Root\File القديم.
في التحقيق في الملفات التنفيذية، يُعد Amcache قيّمًا لأنه قد يحتفظ بالمسار الكامل، وتجزئة SHA-1، وحجم الملف، وبيانات PE الوصفية، ومعلومات الإصدار، ونص الناشر، وتاريخ الربط (link date)، والطوابع الزمنية في سجل Windows بعد اختفاء الملف الأصلي. ويمكن لسجلات الأجهزة أن تحدد الأجهزة الموصولة، وبرامج التشغيل، وتواريخ التثبيت، والمعرّفات.
أفضل استنتاج: أدرج Windows الملف أو الجهاز المسجل في الجرد. وسجل الملف التنفيذي دليل على الوجود، لا إثبات للتنفيذ.
الموقع والجمع¶
اجمع الخلية والملفات المجاورة Amcache.hve.LOG و.LOG1 و.LOG2. إذا كانت الخلية غير متزامنة (dirty)، فإن parse-registry amcache يعيد تلقائيًا تشغيل سجلات المعاملات الصالحة في الذاكرة قبل التحليل، دون تعديل الأدلة. تظهر تفاصيل الاستعادة في سجل المحلل أو الطرفية؛ وعند إرسال السجلات إلى stdout تُرسل رسائل التشخيص إلى stderr. قد تؤدي السجلات المفقودة أو غير الصالحة إلى بيانات ناقصة أو تعذّر قراءة خلية غير متسقة.
تحذيرات للمحلل¶
- لا يثبت إدخال الملف التنفيذي في Amcache أن مستخدمًا شغّل الملف.
Publisherبيانات وصفية من PE/موارد الإصدار سجّلها Windows. ولا يثبت أن الملف كان يحمل توقيع Authenticode صالحًا وقت الجمع.- قد تكون التجزئات غائبة، ولا تعرض المخططات القديمة/الحديثة قيمًا متطابقة.
- يأتي
LinkDateمن ترويسة PE، ويمكن تزويره أو نسخه أو إنتاجه عبر عمليات بناء قابلة لإعادة الإنتاج (reproducible builds). - يصف وقت آخر كتابة للمفتاح تحديث سجل سجل Windows، وليس بالضرورة التنزيل أو الإنشاء أو التنفيذ الأول أو التنفيذ الأخير.
- قد تشير المسارات إلى وحدات تخزين قابلة للإزالة أو لم تعد موجودة.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry amcache <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find Amcache hives
-f, --file <FILE> Parse one Amcache.hve
Records:
--files Include every inventoried executable
--devices Include every inventoried PnP device
-a, --all Include both (default for saved structured output)
Output:
-o, --output <PATH> Save text/JSON/JSONL or a directory of CSV tables
-t, --output-type <TYPE> csv, json, jsonl, or text
# Inspect the summary and findings
juntei parse-registry amcache -f Amcache.hve
# Save all record types as CSV tables
juntei parse-registry amcache -f Amcache.hve -a -o amcache-output
# Hunt for one SHA-1 in JSONL
juntei parse-registry amcache -f Amcache.hve -t jsonl \
| jq 'select(.RecordType == "file" and .SHA1 == "0123456789abcdef0123456789abcdef01234567")'
يحتوي إخراج CSV على جداول الملخص والنتائج والملفات والأجهزة. ومع auto-parse، تكون هذه الجداول
Registry-Amcache-Summary.csv وRegistry-Amcache-Findings.csv وRegistry-Amcache-Files.csv
وRegistry-Amcache-Devices.csv مباشرةً تحت مجلد FileExistence/ لكل كمبيوتر، مع
Registry-Amcache-logs.txt بجانب الجداول. وتضيف الخلايا المتعددة -Source1 و-Source2 وما إلى ذلك
قبل الامتداد؛ ويسرد OutputFiles في ملفات البيان (manifests) المسارات الدقيقة. أما عمليات تصدير CSV
المستقلة فتحتفظ بأسماء جداولها الأصلية وبموقع الإخراج المطلوب. وتستخدم سجلات JSONL قيم
RecordType التالية: summary وfinding وfile وdevice.
حقول إخراج الملفات¶
| الحقل | كيف ينبغي للمحلل استخدامه |
|---|---|
KeyName، SourceKeyPath |
يحددان سجل سجل Windows المصدر الدقيق وفرع المخطط. احتفظ بهما لقابلية إعادة الإنتاج. |
KeyLastWrittenUTC، KeyLastWrittenFiletime |
وقت تحديث سجل سجل Windows، بصيغة مقروءة وخام. لا تسمّه وقت تنفيذ. |
SourceVolumeKeyLastWrittenUTC، SourceVolumeKeyLastWrittenFiletime |
وقت مفتاح وحدة التخزين الأم في المخططات القديمة؛ سياقي، وليس وقت إجراء على الملف. |
FileID |
معرّف الملف الذي سجّله Amcache. يُحتفظ به كما هو تمامًا؛ لا تفترض أنه دائمًا SHA-1. |
SHA1، SHA256 |
نقاط محورية قوية إلى Defender واستخبارات التهديدات وEDR ومستودعات الملفات. تعني القيمة null أنها لم تُسجَّل. |
Name، OriginalFileName، Description |
أسماء PE/الإصدار المسجلة. قارنها بالمسار الفعلي لكشف الانتحال؛ فالبيانات الوصفية خاضعة لتحكم المهاجم. |
FullPath |
أكثر نقاط الموقع المحورية فائدة. وحّد حالة الأحرف بعناية، لكن احتفظ بالسلسلة الأصلية للدليل. |
LongPathHash |
معرّف مرتبط بالمسار في Windows؛ مفيد لمطابقة السجلات، وليس تجزئة للمحتوى. |
ProgramID |
يربط الملف بسجل جرد التطبيقات حيثما كان متاحًا. |
Publisher |
نص الناشر المسجل. تعامل معه على أنه بيانات وصفية، لا تحقق من التوقيع. |
Version، BinFileVersion، ProductName، ProductVersion، BinProductVersion |
سياق موارد الإصدار. يمكن للاختلافات أو القيم غير المعقولة أن تدعم تحليل الانتحال. |
BinaryType |
سياق البنية المعمارية/النوع المسجل؛ قارنه بتحليل PE عند استرداد الملف. |
LinkDate |
الطابع الزمني لترجمة/ربط PE كما هو مسجل. لا يفيد إلا مع التشكك والتعزيز. |
Size |
الحجم المسجل؛ قارنه بـ $MFT أو بمحتوى Defender أو بملف مسترد. |
Language |
معرّف لغة PE؛ دليل سياقي ضعيف، لا إسناد. |
IsPE-File، IsOS-Component |
علامات التصنيف التي سجّلها Windows. ولا تثبت القيمة false أن الملف غير ضار. |
USN |
قيمة تسلسل التحديث في NTFS التي سجّلها Amcache؛ قد تساعد على الانتقال إلى سجلات USN الباقية. |
APPX-PackageFullName، APPX-PackageRelativeID |
يربطان التطبيقات/المكونات المحزّمة بالملف. |
RegistryValues |
كل قيمة أصلية في سجل Windows مع نوعها، وقيمتها بعد فك الترميز، وصيغتها الست عشرية الخام. استخدمها عندما يكون حقل محدد النوع غائبًا أو للحقول المستقبلية/القديمة. |
حقول إخراج الأجهزة¶
| مجموعة الحقول | الحقول وتفسيرها |
|---|---|
| المصدر | KeyName، SourceKeyPath، KeyLastWrittenUTC، KeyLastWrittenFiletime: سجل الجهاز الدقيق ووقت تحديث سجل Windows. |
| الهوية | Description، BusDescription، Manufacturer، Model: أوصاف الجهاز الموجهة للبشر؛ وقد تكون سلاسل المورّد عامة. |
| معرّفات العتاد | HWID، CompID، Class، ClassGUID، ContainerID، DeviceInterfaceClasses: أقوى النقاط المحورية لعائلة الجهاز ونسخته. |
| الحالة | DeviceState، ProblemCode، ParentID، MatchingID، Enumerator: سياق التعداد في Windows والعلاقات. |
| برنامج التشغيل | DriverID، DriverName، DriverPackageStrongName، DriverVerDate، DriverVerVersion، Provider، Service، INF: ارتباطات حزمة برنامج التشغيل والخدمة؛ اربطها بالملفات والخدمات المثبتة. |
| التثبيت | InstallDate، FirstInstallDate، InstallState، ExtendedInfs: دورة حياة التثبيت المسجلة. ولا يثبت غياب التاريخ أن الجهاز لم يُوصل قط. |
| المرشحات والمكدس | LowerClassFilters، UpperClassFilters، LowerFilters، UpperFilters، StackID، LocationPaths: سياق متقدم لمكدس برامج التشغيل؛ وتستحق برامج تشغيل المرشحات غير المتوقعة المراجعة. |
| الحفظ الخام | RegistryValues: القيم المصدرية الكاملة محددة النوع/الخام للتحقق وللحقول غير المدعومة. |
تستخدم أعمدة المصفوفات والقيم الخام في CSV اللاحقة JSON (على سبيل المثال، HWID-JSON و
RegistryValuesJSON)؛ وتحتوي خلاياها على JSON، بينما تحتفظ JSON/JSONL بالمصفوفات الأصلية.
استراتيجية التحقيق¶
- انطلق من
FullPathوSHA1وNameوUSNنقاطًا محورية. - ابحث عن Prefetch مطابق لدعم استنتاج التنفيذ.
- استخدم
$MFTودفتر يومية USN لإثبات إنشاء الملف وإعادة تسميته وحذفه وحجمه. - قارن البيانات الوصفية للناشر/الإصدار بملف PE مسترد بشكل مستقل وبالتحقق من التوقيع.
- افحص حجر Defender وسجلات الأحداث بحثًا عن عمليات الاكتشاف أو الإزالة.