Memory Forensics With Volatility Lab


في البداية نتعرف عن الـ Memory Forensics ماهي؟

  • Memory Forensics أو تحليل الذاكرة هو يعتبر فرع من التحقيق الجنائي الرقمي (Digital Forensics) يركز على تحليل ذاكرة الوصول العشوائي (RAM) الخاصة بالجهاز لفهم الأنشطة التي حدثت عليه. يتم ذلك بغرض اكتشاف الاختراقات الأمنية، تعقب الأنشطة الضارة، جمع الأدلة الرقمية، أو تحليل البرمجيات الخبيثة (Malware).

  • يُشير مصطلح تحليل الذاكرة إلى تحليل الـ Volatile Data وعمل Memory Dump للجهاز. في العادة يقوم المحللون بإجراء تحليلات للـ Memory لتحديد مؤشرات الاختراق أو مايُسمى بالـ Indicators of Compromise لمعرفة الأنشطة الضارة والسلوكيات وحركة المرور على الشبكة الضارة أو حتى على خوادم الشركات التي تعمل بشكل مستمر.

  • مُصطلح الـ Memory Volatile يعني أن البيانات تُفقد كلما تم إيقاف تشغيل الجهاز ، مما يعني عند التعامل مع جهاز مخترق، قد يكون أحد ردود الفعل الأولى هو إيقاف تشغيل الجهاز لاحتواء التهديد أو مايُسمى بالـ Containment ، فإذا تم إنشاء أي برامج ضارة أو تنفيذ اوامر على الجهاز ( Command and Control ) ، فسيتم تشغيلها في الذاكرة وإذا تم إيقاف تشغيل الجهاز، فسيتم فقد هذه المعلومات. فهذه الأحداث مهمة عند كتابة تقرير الإستجابة للحوادث وتحليلها. وهذا هو السبب في أن إحتواء الشبكة بمعنى عزل الجهاز عن بقية الشب هو الخيار الأمثل عند عزل جهاز مخترق ، وايضاً من ضمن الأسباب المهمة هي عندما يحدث إختراق لجهاز معين لابد الحصول على أدلة مهمة قبل أن تُفقد عند إيقاف تشغيل الجهاز مثل الـ Logs وعمل نسخة من الـ Disk Images..

  • هنا مراحل مهمة في عملية الـ Digital Forensics Process :

  •  المرحلة الأولى تعني انه لابد من الحصول على الأدلة وجمعها من الأجهزة الرقمية لتحليلها وعرضها لاحقًا.

  • المرحلة الثانية تحتوي على الكثير من المعلومات المفيدة مثل الـ Passwords والـ Usernames والـ Running Processes وما إلى ذلك.

  • المرحلة الثالثة تعتبر مرحلة عمل الـ Capture للملفات المُراد تحليلها.

  • الـ Disk Forensics هنا تكون عملية الفحص للذاكرة بطريقة تحليلية لاسترداد البيانات المرتبطة بالبرمجيات الخبيثة المحتملة لمزيد من التحليل ايضاً تتضمن استخراج المعلومات من الـ Memory Dumps والبحث عن معلومات محددة لتحديد التعليمات البرمجية الضارة والبيانات المرتبطة بها.

  • آخر مرحلة وهي توثيق جميع الأحداث في تقرير..


Memory Analysis Procedures

  • هنا سنتطرق لكيفية إجراء تحليل حول ما يجب البحث عنه لتحديد أي نشاط ضار.

  1. تحديد العمليات الضارة أو الـ Identifying Malicious Processes

    أحد أهم النقاط التي لابد أن نركز عليها هي الـ Running Processes فمثلاً في أنظمة التشغيل لدينا مايُسمى بالـ Process ID أو الـ (PID) وإعطائه رقمًا فريدًا بحيث لن يكون لعمليتين مختلفتين نفس الرقم في نفس الوقت.

  2. تحديد اتصالات الشبكة الضارة أو الـ Identifying Malicious Network Connections

    تظل أي اتصالات شبكة نشطة أو مغلقة مؤخرًا في الذاكرة. فيمكننا تحديد الـ IP Address  والمجالات الضارة التي يتصل بها الـ host. في بعض الأحيان، يمكن أيضًا الحصول على الـ Process ID المتعلقة بإتصال شبكة معينة والذي قد يساعدنا في تحديد العمليات الضارة.

  3. اكتشاف عمليات حقن الذاكرة أو الـ Detecting Memory Injections

    كلما حدث شيء غير عادي أو مريب في الـ memory space فإنه يترك بعض الآثار، لأن مساحة الذاكرة معقدة. وبينما تبدو الأنظمة على ما يرام تمامًا من السطح، فإن الأمور ليست طبيعية على مستوى الذاكرة ، بمعنى إن هناك كود برمجي ضار يتم برمجته وحقنه في الذاكرة بحيث يهرب من الكشف أو يعمل تصعيد إمتيازات بلا أن يتم الكشف عنه.

  4. الملفات المرتبطة أو الـ Associated Files (DLL, EXE)

    يحتاج كل برنامج إلى بعض الملفات الإضافية مثل مكتبات الارتباط الديناميكي أو مايُسمى بالـ Dynamic Link Libraries (DLLs) أو ملفات أخرى حتى يتمكن من تنفيذ عمله والتواصل مع نظام التشغيل للقيام به ، فكلما وجدنا عملية خبيثة، يجب علينا أيضًا إسترداد هذه الملفات الإضافية وتحليلها لفهم البرامج الضارة والوظيفة التي قامت بها على النظام المصاب.

  5. الـ Registry Keys

    يحتوي الـ Windows Registry على معلومات حول كل شيء يحدث تقريبًا في نظام التشغيل، ويخزن المعلومات كـ Keys  فهذه تعتبر كـ artifact  قيمة وهي واحدة من الـ artifacts التي تم تحليلها أثناء الـ Host Forensics لأنها تحتوي على معلومات مهمة ويمكن أن تساعد في فهم ما حدث أثناء الـ Incident.


Lab With Volatility

  • بالبداية نتعرف عن آداءة الـ Volatility وتعتبر هذه الآداء من أدوات تحليل البرمجيات الخبيثة لـ RAM فهي تُستخدم لإستخراج وتحليل المعلومات المخزنة في ذاكرة النظام بهدف الكشف عن الأنشطة المشبوهة أو تحديد آثار الاختراقات.

  • من أهم مميزات هذه الآداءة هي تحليل العمليات بمعنى نستطيع إستعراض العمليات النشطة في النظام ، وايضاً تعقب العمليات المخفية أو المشبوهة ، وايضاً نستطيع من خلال هذه الآداءة تحليل الشبكات وهي من خلالها نستطيع إستخراج تفاصيل الإتصالات النشطة (مثل المنافذ المفتوحة وعناوين IP) وايضاً كشف الإتصالات الخبيثة التي قد تكون مخفية ، وايضاً نستطيع كشف محاولات تسجيل الدخول غير المصرح بها.

                               Masqueraded Process
  • قبل الدخول في تفاصيل اللاب العملي ، سنشرح مفهوم العملية المتنكرة أو مايُسمى بالـ Masqueraded Process وهي تعني بأن هناك عملية ضارة يتلاعب بها المهاجم أو الـ Attacker لتبدو وكأنها عملية موثوقة من النظام ، والهدف من هذا هو إخفاء النشاط الضار لجعله يبدو طبيعياً عند مراقبته من قبل الـمحلل. مثال على ذلك svchost.exe  (تعتبر عملية تُساعد الـ Windows services على تشغيل الخدمات ، فمثلاً يتم التلاعب بها بإستبدال حرف “o” بـ صفر مثلاً “0” فتكون بهذه الطريقة svch0st.exe ..

  • كيف يتم التلاعب بالـ Process؟

    يوجد مايُسمى بالـ Parent-Child Process وهي ترتبط بالعمليات بمعنى هناك عمليات رئيسية أو ماتُسمى بالـ Parent Process والفرعية منها ماتُسمى بالـ Child Process  وهي في الغالب يتم التلاعب بها لتبدو وكأنها عمليات موثوقة متابعة للنظام.

  • من الأوامر المهمة في الـ Volatility

    حتى نستعرض ماهي العمليات أو الـ Process التي تعمل حالياً نستخدم هذا الآمر pslist

بالمراجعة للعمليات السابقة نرى أن الـ services.exe لها عملية رئيسية (Parent Process) وهي الـ wininit.exe وهي تعتبر عملية مشروعة أو ماتُسمى بالـ Legitimate Process ولديها الـ Process ID وهي رقم 604.

والآن سنرى أكثر من 10 عمليات svchost.exe وكلها لها عملية رئيسية "604" والتي يجب أن تكون كذلك، باستثناء واحدة كما ظاهر في الصورة التالية :

هذه العملية السابقة في الصورة السابقة تُسمى بالـ Rogue Process أو العملية المارقة بمعنى أن هذه العملية تعمل بدون إذن تعمل بطريقة غير متوقعة. هذه العمليات غالبًا تكون مرتبطة بسلوك مشبوه أو خبيث وتُعد مؤشرًا على وجود مشكلة في النظام مثل وجود إختراق أمني أو برمجيات خبيثة.

العملية السابقة في الصورة السابقة ، هذه العملية الـ svchost.exe تحتوي على الـ Process ID رقم 5688 والـ Parent PPID منها 3664 ( تعني الـ Parent PPID بالعملية التي تنشئ عملية جديدة بعملية رئيسية؛ وتسمى العملية الجديدة بعملية فرعية أو ماتُسمى بالـ child process فيصبح معرف العملية الرئيسية مرتبطًا بالعملية الفرعية الجديدة التي تم إنشائها وهي الـ  (PPID).

يمكننا البحث عن معرف PPID الرئيسي هذا باستخدام grep كما ظاهر في الصورة التالية بحيث يعمل على تصفية النتائج لتظهر بشكل أدق:

 تم إنشاء الملف للـ  svchost.exe بواسطة  الـ explorer.exe، وهذا يعني أن شخصًا ما قام بالنقر مرتين على هذا الملف من الـ explorer وهو أمر غير جيد.

الأن حددنا عملية ضارة محتملة. فيمكننا استخدام نفس الأمر في الصورة السابقة لكن مع تغيير الـ Process ID 5688

في الصورة آعلاه هنا سنجد أن هذا الملف كان موجودًا في دليل الـ Download الخاص بالمستخدم CyberJunkie.


في الخطوة التالية سنعمل على تفريغ أو مايُسمى بالـ dump لهذا الملف وإجراء تحليل ثابت/ديناميكي في الـ sandbox لتحديد سلوكه. ولكن أولاً قبل لذلك سنتحقق من وجود أي اتصالات C2 أو مآخذ شبكة مفتوحة مايُسمى بالـ network sockets بواسطة هذا الملف.


فسنستخدم الـ netscan plugin الموجود في الأداءة والذي سيسرد أو يوضّح جميع الاتصالات/المآخذ النشطة في مايُسمى بالـ Memory Acquisition (وهي تعني بكل بساطة استخراج الذاكرة هو عبارة عن عملية تجمع نسخة من محتويات الـ (RAM) لجهاز أو لنظام معين. بحيث توفر لقطة حية (Live Snapshot) للنظام أثناء تشغيله).


الأن سنبحث عن الـ Process ID الضار المُحتمل في هذا اللاب بإستخدام الأمر التالي الموجودة في الصورة الآتية

سنرى أن  الاتصال تم على العنوان التالي IP 192.168.230.128:53. سنعمل على تحليله

بعد ذلك، سنعمل تفريغ أو Dump لهذا الملف لتحليله سواءاً بالـ VirusTotal أو الـ sandboxes مثل ANY.RUN.


في الصورة التالية سنتسخدم أمر لتحليل كيفية تفريغ اـ (Memory Dump) واستخراج معلومات عن عملية معينة (Process) باستخدام معرفها (PID) ليتم تحليل العملية المحددة فقط، بدلاً من تحليل جميع الـ Processes.

قمنا بتحليل الملف عن طريق الـ VirusTotal فيمكننا أن نرى أنه عبارة عن ملف لـ Metasploit payload executable حتى يتمكن المهاجم من التحكم أو تنفيذ وظائف معينة على جهاز مستهدف. 

في بيئات الشركات حينمت يتم العثور على مثل هذا الملف الضار من صورة الذاكرة أو الـ memory image ، نبحث عن IOCs الموجودة (الملف، الـ IPs، وما إلى ذلك) للعثور على أي أجهزة مصابة أخرى عبر الشبكة.


Process Injection

حقن العملية أو مايُسمى بالـ Process Injection  هي تقنية يتم فيها تشغيل جزء من التعليمات البرمجية في مساحة العنوان الخاصة بعملية أخرى أو Process مختلفة.


يستخدم الـ Attackers  هذه الطريقة لتشغيل الكود البرمجي الضار في سياق عملية موثوقة أو مايُسمى بالـ legitimate process فبهذه الطريقةيمكنهم التهرب من آليات الدفاع وإخفاء آثارهم.


في الجزئية التالية من اللاب سنتعامل مع ملف مُخزّن في هذا المسار التالي :

 /home/analyst/memorydumps/ProcessInjectionCase2.mem


سنتعلم الأن كيفية إكتشاف ما إذا كانت هناك أي عمليات حقن للذاكرة أو ماتُسمى بالـ Memory Injections حدثت بإستخدام الـ Volatility.

فسنبدأ أولًا برؤية جميع العمليات التي تحدث باستخدام الأمر PsList.

في بداية أي تحليل نبحث أولاً عن أي علاقة غريبة بين الـ Parent-Child Process أو أي عملية مشبوهة/ عشوائية.

فالإكتشاف أي عمليات مشبوهه. فنستطيع رؤية مخرجات عند إستخدام الأمر  PsList كما ظاهر في الصورة السابقة..

في الامر آعلاه سنعمل على تحليل أو تفريغ الذاكرة أو مايُسمى بالـ Memory Dump فهنا سنعمل على معرفة أو إستخراج الأوامر التي تم تشغيلها عبر سطر الأوامر (Command Line) لكل عملية في النظام حتى نتحقق ما إذا تم عمل Process Injection للعملية أم لا.

في الصورة آعلاه هنا سنتطرق لكيفية إستكشاف حقن العمليات (Process Injection) وهي تعتبر تقنية تُستخدم غالبًا في البرمجيات الخبيثة لإخفاء أنشطتها داخل عمليات الموثوقة في النظام.

واحدة من أهم الآوامر التي تُستخدم لإكتشاف ف وإظهار أدلة على حقن العمليات (Process Injection) وهو الـ windows.malfind. .. فسنعرف في الصورة التالية ماهي المخرجات من هذا الآمر

في الصورة آعلاه نرى العملية لـ svchost.exe لا ينبغي لـ svchost.exe أن يظهر هذا السلوك في الظروف العادية. ايضاً لو نلاحظ الـ Process ID هو "1776" نرى بالأسفل Hex code، ومكافئها بـ ASCII، وأسفلها بعض الـ assembly instructions. سنعود نشرح بالتفصيل لكن الأن سنرى الصورة التالية سنجد عملية آخرى لكنها false positive (بمعنى إنه حدث مشروع ولكن ظهر تنبيه عليها) لأن عبارة عن عملية عبارة عن برنامج مضاد للبرامج الضارة من Microsoft Defender والذي يُظهر مثل هذا السلوك لأنه يعمل في الذاكرة بأذونات "EXECUTE_READWRITE" كاملة للعمل بكفاءة فيحتاج إلى قراءة الـ code في مساحة ذاكرة العمليات الأخرى للكشف عن الاختراقات المحتملة كما في حالتنا هنا سنرى أن الأ "MsMpEng.exe" في العديد من الحالات في الـ output للـ Malfind plugin فيمكن للمهاجمين أيضًا إساءة استخدام هذا عن طريق جعل الـ Binary Name هو هذا نفسه. لذلك من الأفضل دائمًا التحقق من أن هذا هو بالـ binary nameشرعي. يمكننا القيام بذلك إما عن طريق التخلص من هذه العملية أو تتبع علاقة الـ Parent-Child Process.

الأن نعود لـعملية الـ svhost.exe في الصورة آعلاه يتّضح انه حدث حقن للعملية محتمل أو مايُسمى بالـ Process Injection في الـ svchost.exe. فالأن يمكننا تفريغ هذه العملية أو إجراء هندسة عكسية أو استخدام الـ sandboxes لمعرفة سلوكها.

يعتبر  الـ Hex وASCII هذه تعتبر معلومات رأس هذا العملية لـ header information.


لو بحثنا عن الـ Hex code أو الـ strings، فسنجد أن هذا النمط في الغالب ما يوجد فيه الـ C2 beacons/Meterpreter Shells ، ففي هذا المثال، تم حقن الـ Meterpreter shellcode في الـ Process. فالأن لو بحثنا عن أي اتصالات نشطةباستخدام الـ netscan . سنبحث عن النتائج باستخدام الـ Process ID هو 1776 لأننا حددنا العملية الضارة ونشتبه في أنها الـ C2 beacon ( المقصود بالـ C2 beacon هو نوع من الاتصالات يتم بين جهاز مخترق (Victim Machine) وخادم Command and Control (C2) الذي يتحكم به المهاجم).

في الصورة آعلاه سنرى أن الـ infected host أو المضيف المصاب تواصل مع IP Address "192.168.230.128" على الـ Port التالي 4444 وهو منفذ افتراضي (default port)  لـ Metasploit. وهذا يؤكد انه تم الإتصال C2 ويستوجب هنا بحظر الـ IP Address هذا من شبكتنا والبحث عن مؤشرات لـ IOC الموجودة عبر الشبكة في حالة حدوث إصابات على مستوى الشبكة.

لذا، من هذا التحليل حصلنا على مؤشرات IOC التالية :

1- 192.168.230.128

2- svchost.exe (معرف العملية 1776) والهاش الخاص به

فيمكننا بعد ذلك إجراء تحقيق جنائي متعمق بعد احتواء التهديد.


DLL Injection

قبل التطرق لـ DLL Injection سنتطرق لمفهوم الـ DLL وإختصار لـ Dynamic Link Library، وهو عبارة عن مكتبة برمجية في نظام التشغيل ويندوز (Windows) تحتوي على مجموعة من الأكواد والوظائف التي يمكن للتطبيقات استخدامها عند الحاجة.

بدلاً من تضمين الأكواد الضرورية داخل كل برنامج على حدة، يتم تجميعها داخل ملف DLL، مما يسمح بمشاركة هذه الأكواد بين عدة برامج لتوفير الموارد.


في آخر جزئية في العملي سنتطرق لـ DLL Injection الذي يشبه إلى حد ما الـ Process Injection الذي ناقشناه.

في هذه التقنية، بدلاً من حقن بعض الـ code في مساحة العمليات الأخرى، نقوم بـ DLL Injection في سياق العملية المستهدفة أو الـ target process. ت


ستخدم البرامج مكتبات الارتباط الديناميكي (DLLs) أو مايُسمى بالـ DLLs (dynamic link libraries)  للعمل بشكل ديناميكي ووفقًا لحالات الاستخدام الخاصة بها في سيناريوهات مختلفة.

يستخدم المهاجمون هذه التقنية لفرض تحميل الـ DLL الضار في سياق عملية ما وتقوم هذه العملية بتنفيذ الـ code الموجودة في DLL.

في الصورة آعلاه بدأنا بالأمر المعتاد لإستعراض العمليات الحالية ، فسنبحث عن العمليات المارقة أو ماتُسمى بالـ rogue processes أو الـ suspicious التي تبدو مُريبة،  لذا سننتقل مباشرة إلى العثور على الـ DLL الضارة أو الـ malicious DLL .. فسنستخدم الأمر التالي في الصورة التالية:

سنرى في الصورة آعلاه  اسم الProcces وهي spoolsv.exe.

الـ  "spoolsv" هي عبارة خدمة طباعة في الـ Windows مسؤولة عن التعامل مع مهام الطباعة. فحينما نطبع ورقة مثلاً، يتم تنفيذ الـcode بواسطة هذه الخدمة ، لكن نرى مرة أخرى الـ Hex code وبعض الـ assembly instructions، وبدلاً من معلومات الخاصة بالملف، نرى مسار  الـ Windows. هذا لأنه في حالة حقن العملية أو الـ process injection، تم حقن الـ shellcode في هذه العملية حدث حقن لملف (DLL) لذلك نرى مساره كما ظاهر في الصورة آعلاه، فلدينا الآن الأسم ومسار ملف ضار يمكننا استخدامه لمطاردة التهديدات أو الـ threat hunting ، فمبدئياً نعلم أن هناك ملف DLL بإسم Winsrvc.dll في التنزيلات.

فيبدو وكأنه اسم شرعي، ولكن في ملفات الـ DLL  لا يوجد بشكله الأصلي في الـ Windows.

فلدينا معرف العملية أو الـ Process ID للعملية الضارة لذلك نقوم بإفراغ هذه العملية، أو نقوم بإفراغ جميع الملفات المتعلقة بالعملية، بما في ذلك ملفات DLL. يمكننا أيضًا تفريغ جميع مكتبات DLL أو الـ dump all DLLs التي تعمل في وقت الاستحواذ أو الـ acquisition ، فسنستخدم الآمر التالي في الصورة التالية :

فالأن نحن بحاجة فقط إلى ملف DLL المحدد هذا، لذا سنقوم بتطبيق الآمر التالي في الصورة التالية لتحديد الـ Process ID معين :

سيقوم الآمر التالي في الصورة التالية بإخراج جميع ملفات DLL المتعلقة بعملية spoolsv.exe ذات المعرف PID 1656. ، لكن سنقوم بإعادة تسميته لتمييزه عن ملفات DLL الأخرى وتحليله بشكل أكبر.

في التحليلات العميقة تختلف الـ Tools لدينا فالأن سنعمل ابسط اداءة وهي الـ VirusTotal وسيظهر لدينا التحليل الآتي في الصورة التالية :

يمكن أن نرى أن هذا ضار لأنه تم إنشاء ملف الـ DLL الضار هذا باستخدام الـ payload MSFvenom لهذا اللاب العملي وتم استخدامه للإتصال العكسي أو الـ reverse connection وهي تعتبر تقنية تُستخدم في الهجمات السيبرانية حيث يقوم الجهاز المستهدف (Victim Machine) بإنشاء اتصال بالخادم الذي يتحكم به المهاجم (Attacker's Server) بدلاً من أن يحاول المهاجم الاتصال بالجهاز المستهدف مباشرة فهو يُعتبر أساسياً في استغلال الثغرات، مثل إنشاء الـ Backdoors، أو أثناء استخدام أدوات مثل Metasploit..


الآن يمكننا استخدام الـ netscan plugin لمعرفة الإتصال الذي حدث في الصورة التالية :

من ضمن الأشياء المهمة معرفتها في هذا اللاب العملي هو اننا سنرى أن اتصال C2 يتم بواسطة عملية شرعية "rundll32.exe" بدلاً من عملية "spoolsv.exe" التي تم حقنها لأن تنفيذ ملفات DLL يتم بواسطة rundll32.exe في الـ Windows فعلى الرغم من تنفيذ الـ DLL في سياق عملية الـ spoolsv.exe، فإنه تم التعامل معه بالفعل بواسطة الـ rundll32.exe.

فسنرى نفس عنوان IP Address لنفس المهاجم أو الـ Attacker كما في الحالات السابقة.

حتى الآن، تم جمع IOCs في هذه الحالة:

1- 192.168.230.128

2- Winsrvc.dll ورمز التجزئة الخاص به