
أداة حصاد كلمات المرور المحلية الخفية في الذاكرة (SILPH): استخراج LSA وSAM وDCC2 عبر استدعاء النظام غير المباشر

SILPH هي أداة مفتوحة المصدر للفريق الأحمر (Red Team) مصمَّمة لتفريغ أسرار LSA وتجزئات SAM وبيانات اعتماد DCC2 بالكامل في الذاكرة، دون كتابة أي ملفات على القرص.
على عكس مشروعها الأساسي go-secdump، صُمِّمت SILPH لتُدمج في إطار عمل Orsted C2، وهي مخصصة للعمل مباشرة على مضيف Windows، مما يلغي الحاجة إلى إنشاء خدمة عبر RPC.
أولاً، استنسخ المشروع وقم بتجميعه (ستحتاج إلى go لذلك):
git clone [email protected]:almounah/silph.git
cd silph
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w"
ثم شغّل silph.exe.
PS C:\Users\haroun> Z:\silph.exe
███████╗██╗██╗ ██████╗ ██╗ ██╗
██╔════╝██║██║ ██╔══██╗██║ ██║
███████╗██║██║ ██████╔╝███████║
╚════██║██║██║ ██╔═══╝ ██╔══██║
███████║██║███████╗██║ ██║ ██║
╚══════╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝
Stealthy In-Memory Password Harvester
"Well… I think I wanted to be like Eris."
Usage: Z:\silph.exe [options]
-dcc2
dump dcc2
-lsa
dump lsa
-sam
dump sam
ستُضاف وحدة silph جديدة إلى Orsted C2 قريبًا. راجع توثيق orsted لمعرفة طريقة الاستخدام.
أردتُ أداة يمكن دمجها في إطار عمل C2 الخاص بي لتفريغ بيانات SAM وLSA.
المشكلة أنني لم أكن أجد أدوات (أو على الأقل فاتتني) تقوم بذلك مع الالتزام بهذين الشرطين:
بالإضافة إلى ذلك، أثناء اطلاعي على الموضوع وجدت مقالًا مثيرًا للاهتمام: https://g3tsyst3m.com/threat%20hunting/Detecting-SAM-registry-hive-dumps-using-Elastic!/.
باختصار، يوضح لنا المؤلف كيف يمكن، من خلال تفعيل بعض الخيارات، أن يُطلق حدثٌ يُخبر أعضاء الفريق الأزرق (Blue Team) بأن SAM يتم تفريغه. ثم قام بتوجيه هذا الحدث إلى Elastic. يمكنك رؤية الحدث المُثار هنا

كود بايثون الذي يولّد الحدث والمذكور في المقال يستخدم RegOpenKeyEx وRegSaveKeyEx.
توجد تقنيات عديدة لتفريغ خلايا السجل الحساسة في Windows. تشمل الأساليب الشائعة أدواتٍ وملفات BOF تحفظ خلايا SAM وSYSTEM وSECURITY على القرص باستخدام أدوات مثل أمر reg أو نصوص برمجية مخصصة.
هناك نهج آخر يتمثل في إنشاء نسخة ظل لوحدة التخزين (Volume Shadow Copy) واستخراج خلايا السجل من اللقطة.
قدّم go-secdump تقنية مختلفة. فعند إطلاقه لأول مرة في عام 2023، اعتمد على خدمة تعدّل قوائم DACL الخاصة بالسجل لتمنح نفسها صلاحية وصول كافية. وقد سمح ذلك للخدمة بتعداد المفاتيح الفرعية والاستعلام عن أسمائها وقيمها، مما مكّن من استعادة الأسرار بنصها الصريح.
تعمل واجهات برمجة تطبيقات سجل Windows المستخدمة لتعداد المفاتيح والقيم على مقابض السجل (handles) بدلاً من الكائنات المعتمدة على الملفات، مما يسمح بتنفيذ هذه العمليات دون كتابة البيانات على القرص.
في عام 2025، قدّمت Synacktiv طلب سحب (pull request) إلى مشروع Impacket يتضمن regsecrets.py، الذي ينفّذ نهجًا مشابهًا. وعلى عكس go-secdump، تتجنب هذه الطريقة تعديل قوائم DACL عبر فتح مقابض السجل باستخدام علامة REG_OPTION_BACKUP_RESTORE، مما يمنح الصلاحيات اللازمة للتعداد والاستعلام.
تتبع SILPH هذا النهج باستخدام REG_OPTION_BACKUP_RESTORE عبر استدعاءات NT أصلية محمّلة من ntdll، مستعينةً بمشروع Superdeye لاستدعاءات النظام غير المباشرة (indirect syscalls). ولأن SILPH مصمَّمة للعمل محليًا على النظام المستهدف، فلا حاجة لإنشاء خدمة، مما يقلل من احتمالات الاكتشاف المرتبطة بالشبكة والتي قد تنتج عن الأدوات البعيدة مثل Impacket.
أثناء الاختبار، لم يُنتج تشغيل SILPH في ظل الظروف نفسها أي إدخالات إضافية في سجل أحداث Windows مقارنةً بالتنفيذ الأساسي (baseline).
سمّيت SILPH تيمنًا بـسيلفيت من Mushoku Tensei.
في بداية حياتها، تواجه سيلفيت العزلة والتنمر بسبب شعرها الأخضر، مما يجعل الآخرين يربطونها بعرق Superd المخيف. وبدلاً من التغلب على ذلك بالقوة أو المكانة، فإنها تنمو من خلال التعلّم والمثابرة والتوجيه، مطوِّرةً بمرور الوقت الانضباط والتحكم.
وهذا يعكس فلسفة تصميم SILPH: أداة مكتفية بذاتها تعمل بهدوء، وتنفَّذ بالكامل داخل الذاكرة، وتتكامل بسلاسة دون أن تترك أثرًا دائمًا.