التحقيق الجنائي الرقمي لذاكرة الوصول العشوائي

بسم الله الرحمن الرحيم

أول مقالة أكتبها في هذه المدوّنة، اسأل الله ان ينفع بها وأن يستفيد الجميع. طبعاً بكتب المقالة باللغة العامية لسهولة الشرح وتبسيط المعلومة.


قبل ما نبدأ من هم المستفيدين أو الأشخاص اللي تناسبهم هذه المقالة؟

1- محلل مركز العمليات الأمنية SOC Analyst L1 & L2

2- أخصائي التحقيق الجنائي الرقمي والاستجابة للحوادث DFIR Specialist

3- محلل البرمجيات الخبيثة (Malware Analyst)

4- كل شخص مختص بالأمن السيبراني أو كل مهتم بمجال التحقيق الجنائي الرقمي.


طيب وش يعني ذاكرة الوصول العشوائي (RAM)؟

ذاكرة الوصول العشوائي وتختصر RAM وتعرف بذاكرة القراءة والكتابة، وهذا نوع من الذاكرة مؤقت يستعمل في الحواسيب، إذ أن المعلومات تٌفقد منها بمجرد انقطاع التيار عنه، فإذا أعيد مثلاً تشغيل الحاسوب فقدت المعلومات.


وش بنستخدم من أدوات للتحقيق في الذاكرة المؤقتة؟

راح نستخدم أداة وحدة مفتوحة المصدر أسمها Volatility وهي عبارة عن إطار عمل لتحقيق في الذاكرة المؤقتة وتحليل البرامج الضارة فيها. مكتوبة بلغة Python وتدعم Microsoft Windows و Mac OS X و Linux. الأداة ببساطة command-line based وفيها عدة من plug-in وراح نتطرق لأكثر عدد ممكن في تحقيقنا هذا ونتعرف عليهم.


وش باقي؟!

بعد ماعرفنا هذه المقالة موجهه لمين، ووش يعني الذاكرة المؤقة، والأداة المستخدمة وفائدتها، مابقى غير سرد السيناريو للحالة اللي بنحقق فيها، ثم نبدأ بإستخدام الأداة المذكورة.


السيناريو (قصة الحادثة الأمنية)

أتصل موظف إدارة الموارد البشرية فيصل على مكتب خدمة المساعدة ليطلب مساعدتهم بخصوص ايميل وصل له لتنزيل التحديث الجديد لـ outlook ولكن بعد التنزيل ظهرت له شاشة ملونة وعليها عبارات غير مفهومة! استغرب موظف الـ Help Desk وقال له ما ارسلنا ايميل لتحديث الـ outlook!! مباشرة اتصل موظف الـ Help Desk على قسم إدارة أمن المعلومات ليذكر لهم ماحدث مع تقديم معلومات اسم الجهاز واسم الموظف وبريده الإلكرتوني.


الإستجابة للحادثة الأمنية

بدأ فريق مركز العمليات الأمنية بتحديد نقطة الإنطلاق ثم توجهوا لبوابة البريد الإلكتروني مايسمى ب Mail-Gateway لتحقق من صحة البريد الذي استلمه الموظف فيصل، ثم اكتشفوا ان البريد الذي استمله لم يكن من مكتب الخدمة انما هو بريد مزيف مذكور به كما ذكر الموظف فيصل انه تحديث جديد لتطبيق outlook!!

تم الإتصال مباشرة بفريق الإستجابة للحوادث مع تقديم شرح للحالة بشكل كامل كما هو فوق من قبل فريق مركز العمليات الأمنية، ثم بدأ فريق IR بإجراءات استجابة الحوادث IR Process ابتداءً من التحضير (الأدوات والسياسات) والتحليل (فهم الحالة ومن أين بدأت وماهي نوع الإصابة) الاحتواء (عزل الجهاز المصاب وتحديد عدد الاجهزة المصابة الأخرى وأخذ نسخة من الذاكرة المؤقتة RAM)

طبعاً المقصود في أخذ النسخة للذاكرة المؤقتة Live Memory Image يعني الحصول على البيانات الحية واستخراج المعلومات المتطايرة الموجودة في السجلات Registry وذاكرة الوصول العشوائي RAM. لذلك يجب على المحققين الرقميين جمع البيانات في الوقت الفعلي نفسه قبل إغلاق الجهاز أو إعادة تشغليه.

من هنا وبعد أخذ النسخة للذاكرة المؤقتة للجهاز المصاب (من الممكن أن تكون عن طريق ال EDR أو بعض الأدوات المجانية مثل Magnet Forensics RAM Capture أو FTK Imager)، راح نبدأ بالتحقيق الرقمي بإستخدام أداة Volatility حتى نتمكن للوصول إلى إستنتاج صحيح وسليم وضمان عدم تضرر سير عمل المنظمة.


بداية إنطلاق التحقيق الجنائي الرقمي للذاكرة المؤقتة بإستخدام أداة Volatility

طبعاً هذه الأداة تحتوي على عدد كبير من الـ Plugins وحطيت لكم في أسفل المقالة جميع الـ Plugins اللي في إصدار 2.6، هنا راح نستخدم اللي نحتاجه بناء على الحادثة الأمنية المذكورة لنا فقط وتقدرون تجربون الباقي كتدريب لكم مع نسخ ذاكرة مؤقتة Memory Image أخرى.

1- أول شيء بنستخدم imageinfo عشان نقدر نعرف نوع النظام إذا كان غير معروف وأيضا فيها معلومات أخرى مثل تاريخ الـ Image Acquisition، خل ننفذ الأمر التالي ونشوف وش يطلع معنا.

.\volatility.exe .\Mohammed_Snapshot4.vmem imageinfo

زي ماهو واضح بالصورة قدرنا نعرف نظام التشغيل لـ Memory Image هذه ونوع البروفايل ويعتبر شيء مهم لأن أغلب الـ Plugins تحتاج تعرف نوع الـ Profile وبرضوا وقت وتاريخ الاستحواذ على الـ image حتى ماتتلخبط إذا كنت تسوي Time Line.


2- نحتاج نعرض كل الـ processes اللي كانت تشتغل في لحظة الاستحواذ على Image، راح نستخدم pslist plugin وبتعرض لنا العمليات المنتهية ايضاً إذا كان فيه، خل ننفذ الأمر التالي ونشوف وش يطلع معنا.

.\volatility.exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 pslist

هنا جميع العمليات اللي كانت تشتغل وموضح فيها وش الـ parent لكل عملية مع الرقم الخاص بها وزي ما أنتم شايفين ماكان فيه عمليات منتهية، ولكن الكتاب واضح من عنوانه وش الـ process اللي غريبة 🙂 هاه فكر عرفت وشي؟ أيه صحيح واضح من الأسم outlock.exe لعدة أسباب، الخطأ الإملائي للعملية والصحيح هي outlook.exe ايضاً بناء على التحليل المبدئي المقدم من مكتب الخدمة ومركز العمليات الأمنية أن المستخدم وصل له إيميل بخصوص تحديث تطبيق اوتلوك. ممتاز هنا عندنا نقطة للإنطلاق لتحقيق أكثر.


3- بنفس الطريقة اللي فوق ولكن بشكل أفضل ومرتب، راح نستخدم pstree من أسمها واضح “شجرة” والمقصود منها أنه يعرض كل عملية ولكن يربطهم مع بعض الـ Parent مع الـ Child وهنا نستفيد أنه راح نحدد وش العملية اللي شغلت البروسيس الغريبة، وممكن تظهر لك شيء ماظهر لنا بالسابق لأنه ممكن يكون اسم البرويسس صحيح ولكن parent ID غير متوقع مثل svchost.exe الـ Parent لها دايم يكون services.exe ف إذا لقيت شيء غيره راح يعتبر غير طبيعي، على كل حال خلينا ننفذ الأمر التالي ونشوف وش بيطلع معنا

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 pstree

زي ما أنتم شايفين، كل process مربوطة مع الـ parent process بكذا راح تقدر تعرف السلسلة كاملة والعمليات المشبوهة مثل المثال اللي ضربناه فوق لـ svchost.exe، ولكن لايوجد شيء مشبوهه في حالتنا هذه إلا الـ outlock.exe وفعلاً يثبت لنا الان أن المستخدم اللي فتح هذا التطبيق والدليل على ذلك الـ PPID هو explorer.exe واللي يعني أن المستخدم طلب هذه العملية.


4- إلى الان ماتعمقنا أكثر في العملية المشبوهة حتى ننتهي من فحص الـ Image بشكل عام ثم نستمر في التحقيق الجنائي للعملية المشبوهه بشكل أدق، خلونا الان نلقي نظرة على الـ Network Connections اللي صار للـ Image هذه، لذلك راح نستخدم netscan بما أن النظام Windows 7، هذه الخطوة راح تعطينا نظرة أوسع من ناحية الإتصالات إذا كانت هذه العملية تتواصل مع C2 IP اللي هو القيادة والسيطرة من جهة المخترق. ننفذ الأمر التالي ونشوف وش بيطلع معنا.

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 netscan

أيضاً كما هو واضح، لايوجد إتصالات مشبوهه من العملية اللي تكلمنا عنها، وكلها تواصلات داخلية ماعدا واحد، تواصل خارجي على بورت 443 عن طريق المتصفح وأيضاً كان منتهي قبل ماناخذ الـ Memory Image ولكن يبقى محفوظ بالذاكرة المؤقتة حتى يتم إعادة تشغيل الجهاز. الملخص مافيه دليل على عمليات أو إتصالات مشبوهة عن طريق الشبكة من الجهاز المتضرر.


5- في المرحلة هذه، راح نتعمق أكثر ونلقي نظرة على الـ MFT$ أيه تقدر عن طريق الـ Memory Forensics تتطلع على الـ MFT File من دون ماتوصل لـ Hard disk، طيب ممكن البعض مايعرف وش الملف هذا، الـMFT هو إختصار لـ Master File Table وهو نظام أرشفة ملفات خاصة بنظام NTFS للأقراص الصلبة وهو أشبه بكتاب لتسجيل الحركات والملفات وأرشفتها لجميع القرص الصلب. هذا الكتاب يضم جميع المعلومات المختلفة مثل الحجم والوقت والتصاريح وبالطبع محتويات الملفات المحذوفة متاحة من خلال جدول الـ MFT.

بالنسبة لي خليت النتائج تظهر على ملف txt خارجي عشان يكون أسهل للقراءة والبحث عن keywords محددة.

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 mftparser | Out-File -FilePath C:\Users\x95x\Desktop\MFT.txt

طبعاً اطلعنا عليه ولايوجد ملفات مريبة حالية أو محذوفة، مجرد مسار ملف outlock.exe غير صحيح لأن الـ Default path لـ outlook.exe بالغالب يكون في C:\Program Files\Microsoft Office 15\root\office15\OUTLOOK.EXE


6- هذه الخطوة مشابهه للخطوة السابقة، راح نستخدم cmdline عشان نقدر نعرف وش الأوامر اللي تنفذت من عملية محددة، بالنسبة لنا مهتميين في outlock.exe، خل ننفذ الأمر التالي ونشوف وش يطلع معنا.

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 cmdline -p 2452

طبعاً نفس الـ File Path اللي شفناه فوق وبالتأكيد غلط، بعض الأحيان قد يكون مفيد إذا تم تنفيذ عدة أوامر.


7- هنا راح نستخدم الأمر handles عشان نعرض أي شيء كان يتعامل مع process محددة فقط، اللي هي outlock.exe ورقمها 2452، ينطبق هذا على الملفات، ومفاتيح التسجيل Registry Keys ، و الـ Mutex وفايدتها منح حق الوصول إلى Objects لعملية واحدة فقط في كل مرة، وجميع الأنواع التنفيذية الباقية. بعد ماننفذ الأمر راح نقدر نشوف الوصول ونوعه لـ process اللي جالسيين نحقق فيها، خل ننفذ الأمر هذا ونشوف وش بيطلع معنا.

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 handles -p 2452

هنا في شيء غريب على الـ Mutex !! الـ default setting أنه يكون فاضي NULL بمجرد أن نشوف الأسم نسخته وبحثت عنه بقوقل طلع أنه WannaCry Ransomware ياسلاااام!

طيب أولاً الـ Mutex المسمى “MsWinZonesCacheCounterMutexA” فايدته إذا لقى الـ Mutex موجود أو عدم وجود c.wnry يطلع من دون ماينفذ شيء، يعني نقدر نقول أن فايدته كل شوي يشتغل يتحقق أنه موجود عشان يستمر التشفير. إذا كان أحد الشرطيين ماتحقق، يروح يسوي Mutex جديد بإسم MsWinZonesCacheCounterMutexA0 واللي موجود بالصورة فوق بعد.

طيب الحين تأكدنا أن البرنامج اللي تم تنزيله على جهاز الموظف فيصل كان فيروس الفدية WannaCry Ransomware عشان كذا قال تغيرت الوان الشاشة، على كل حال راح نستمر بالتحقيق ونشوف وين نوصل أكثر.

برضوا هنا في نفس الأمر اللي نفذناه handles فوق، نلاحظ ملف اسمه 00000000.eky وهو جزء مسؤول عن تشفير الملفات الموجودة على الهارديسك، وهو الملف اللي فيه الـ Private Key. هذا كله جزء من عملية تحقق الـ Mutex اللي تكلمنا عنها فوق.

أيضاً، فيه ملف أسمه hibsys.WNCRYT وأسمه واضح أنه أختصار لـ WannaCry وهذا جزء من عملية التشفير ووظيفته يسوي سلسلة سريعة عشان ينقل ملفات الـ txt إلى الـ Temp folder ويغير أسمها وتكون هذه الملفات غير مشفرة ويمكن استعادتها مباشرة عن طريق تعديل الـ suffix.

برضوا ينشأ ملف يسمى hibsys.WNCRYT تحت $ RECYCLE سلة المهملات ويكون مخفي ونسخة في ملف الـ Temp.


8- هنا راح نشوف وش كان نوع التشفير المستخدم بإستخدام yarascan تقدر تعطيها أشياء محددة تبحث عنها أو ملف .yar كامل وتسوي البحث على process محددة، هنا جربت أسوي بحث على كلمة RSA1 حتى أشوف الـ Crypto PublicKey في عملية التشفير اللي حصلت وهل كانت حقيقي أو عملية وهمية فقط عشان يدفع الضحية المبلغ، ننفذ الأمر ونشوف.

.\volatility.exe .exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 -p 2452 yarascan -Y"RSA1"

طيب الان تأكدنا أنه تم تشفير البيانات بشكل رسمي، خلينا نجرب نبحث عن كلمة bitcoin كنوع من أنواع اللقافة والفضول بعد ماتأكدنا أنه WannaCry ونشوف وش يطلع معنا.

هنا طلع معنا حساب بيتكوين اللي طالب مبلغ الفدية (شطبت حسابه 🙂 ) وواضح لنا أيضاً، الـ exe المخصص لفك التشفير بعد عملية الدفع ويطلب منك إيقاف الـ Anti-Virus هذا أن صح كلامه، وبالغالب كلهم كذابيين.

طيب خلينا نبحث عن cmd.exe ونشوف وش يطلع معنا من أشياء تهمنا في رحلة التحقيق.

هنا نلاحظ أنه يضيف الـ exe المخصص لفك التشفير إلى الـ Run Registry Key عشان يعرضه عليك كل شوي مع الإرشادات كنوع من أنواع الإزعاج والتطفيش 🙂 ونقدر نقول أنه Persistence.


9- أيضاً فيه طريقة تستعرض كل الـ strings للملف الـ exe إذا حاب تشوف أكثر أو إذا كنت تبي تنشأ IoCs مميزة للملف الخبيث لكن هنا مايحتاج لأنه شيء معروف الـ WannaCry وقديم أيضاً أنتشر في 2017، على كل حال الطريقة تستخدم الـ plugin procdump وفايدتها تسوي دمب للبروسيس اللي تحددها ولكن حط ببالك لما تكون تحقق في جهاز خاص بك أو خاص بالعمل كأنك نزلت الملف الخبيث على جهازك الشخصي، عموماً بعد ماتنفذ الأمر راح يكون موجود عندك الملف بعدها تقدر تستخدم أداة أسمها strings.exe فايدتها تعرض لك النصوص الخاصة لهذا التطبيق وتقدر تتطلع عليها وتعرف وش محتوى التطبيق هل خبيث أو لا في حالة أنك ماوصلت لنتيجة بعد فترة من التحقيق.


10- وفيه الـ plguin الرهيب جداً timeliner فايدته يسوي لك تايم لاين لكل الـ artifacts اللي على الميموري معها الوقت، شيء أسطوري جداً (ممكن ماتلقى هالميزة عند منتج DFIR مدفوع بعد!) طبعاً كمية البيانات اللي بتظهر لك كثيرة جداً وراح تحتاج ترتبها بالوقت وتستخرجها على txt file أو اكسيل شيت اللي بيناسبك بالتحليل، خل ننفذ الأمر هذا وراح ياخذ وقت طويل على حسب حجم الذاكرة اللي نسخناه من 5 دقايق يصل إلى 45 دقيقة.

.\volatility.exe -f .\Mohammed_Snapshot4.vmem --profile=Win7SP1x64 timeliner | Out-File -FilePath C:\Users\x95x\Desktop\DFIR_Time_Line.txt

بعد ماطلعت البيانات، رتبنا بناء على الوقت ويظهر لك كل شيء صار من DLLs loaded و exe اشتغلت ومن Reg Keys تعدل واضاف عليها، زي مانلاحظ بحالتنا الحين، جالسيين نشوف كل شيء صار قبل تشغيل الـ outlock.exe اللي هو الـ WannaCry وبعد التشغيل ووش حصل من تعديلات على النظام.


إلى هنا يكون أنتهيت من كتابة مقالة (التحقيق الجنائي الرقمي لذاكرة الوصول العشوائي) ممكن فيه plugins كثيرة ماتطرقت لها بسبب ماتنطبق على حالة تحققينا هذه أو النظام الذي أستخدم لايدعمها ولكن أنصح الجميع بالتطبيق وإستخدامها حتى يكون متمكن منها عند الحاجة لها في حادثة أمنية لاقدر الله. وفي نهاية كل تحقيق جنائي رقمي لازم نكون نقدر نجاوب على الثلاث أسئلة هذه:

  • كيف؟ (How): عن طريق الأيميل وبالتحديد عن طريق User Interaction والدليل explorer.exe
  • متى؟ (When): في هذا الوقت 2021-07-05 19:27:42 تم تشغيل البرنامج المشبوهه
  • أين؟ (Where): كان على C:\Users\Mohammed\Desktop\outlock.exe على جهاز الموظف فيصل فقط ولم ينتشر في المنظمة

شكراً لكم واسأل الله أن ينفع بها وأعتذر عن أي خطأ أو تقصير في الشرح.

للتواصل:

بريد إلكتروني: info@mohammedalhumaid.com

لينكد إن: https://www.linkedin.com/in/maalhumaid


Volatility Framework 2.6 Plugins

DescriptionPlugin
Display process command-line argumentscmdline
Extract command history by scanning for _COMMAND_HISTORYcmdscan
Print list of open connections [Windows XP and 2003 Only]connections
Pool scanner for tcp connectionsconnscan
Extract command history by scanning for _CONSOLE_INFORMATIONcrashinfo
Dump crash-dump informationcrashinfo
Poolscaner for tagDESKTOP (desktops)deskscan
Show device treedevicetree
Dump DLLs from a process address spacedlldump
Print list of loaded dlls for each processdlllist
Driver IRP hook detectiondriverirp
Associate driver objects to kernel modulesdrivermodule
Pool scanner for driver objectsdriverscan
Dump RSA private and public SSL keysdumpcerts
Extract memory mapped and cached filesd Epmemoryche
Dumps registry files out to diskdumpregistry
Displays information about Edit controls. (Listbox experimental.)editbox
Display process environment variablesenvars
Print details on windows event hookse Pndetails ven
Extract Windows Event Logs (XP/2003 only)eralWindows Ev200
Pool scanner for file objectsfilescan
Dump the USER handle type informationgp tthe USER handnfo
Print installed GDI timers and callbacksg Ptinstalle ca
Display Global Descriptor Tablegdt
Get the names of services in the Registry and return Calculated SIDgetservicesids
Print the SIDs owning each processgntsthe SIDs ownch 
Print list of open handles for each processhandles
Dumps passwords hashes (LM/NTLM) from memoryhashdump
Dump hibernation file informationhibinfo
Prints out a hivehivedump
Print list of registry hives.hivelist
Pool scanner for registry hiveshivescan
Extract physical memory from an HPAK filehpakextract
Info on an HPAK filehpakinfo
Display Interrupt Descriptor Tableidt
Reconstruct Internet Explorer cache / historyi RiIn / 
Copies a physical address space out as a raw DD imageimagecopy
Identify information for the imageimageinfo
Scan for calls to imported functionsin sfor calls to  fu
Print process job link informationjoblinks
Search for and dump potential KDBG valueskrcgand dumdbg
Search for and dump potential KPCR valueskrcrand dumpcr
Detect unlinked DLLsldrmodules
Dump (decrypted) LSA secrets from the registrylsadump
Dump Mach-O file format informationmachoinfo
Find hidden and injected codemalfind
Scans for and parses potential Master Boot Records (MBRs)mbrparser
Dump the addressable memory for a processmemdump
Print the memory mapmemmap
List desktop and thread window message hooksmsLsasag
Scans for and parses potential MFT entriesmftparser
Dump a kernel driver to an executable file samplemoddump
Pool scanner for kernel modulesmodscan
Print list of loaded modulesmodules
Scan for various objects at oncem Stfor variots 
Pool scanner for mutex objectsmutantscan
List currently displayed notepad textnotepad
Scan for Windows object type objectso Stfor Windope 
Patches memory based on page scanspchcmemory baspag
Configurable pool scanner pluginpoolpeek
Print a registry key, and its subkeys and valuesprintkey
Display process privilegesprivs
Dump a process to an executable file sampleprocdump
Print all running processes by following the EPROCESS listspslist
Pool scanner for process objectspsscan
Print process list as a treepntrprocess list as
Find hidden processes with various process listingspsxview
Dump Qemu informationqemuinfo
Converts a physical memory sample to a windbg crash dumpraw
Save a pseudo-screenshot based on GDI windowsscreenshot
List Windows services (ala Plugx)servicediff
List details on _MM_SESSION_SPACE (user logon sessions)st son _Mion
Prints ShellBags infoshellbags
Parses the Application Compatibility Shim Cache registry keyshimcache
Print ShutdownTime of machine from registryshutdowntime
Print list of open socketssockets
Pool scanner for tcp socket objectssockscan
Display SSDT entriesssdt
Match physical offsets to virtual addresses (may take a while, VERY verbose)strings
Scan for Windows servicessvcscan
Pool scanner for symlink objectssymlinkscan
Pool scanner for thread objectsthrdscan
Investigate _ETHREAD and _KTHREADsthreads
Creates a timeline from various artifacts in memorytimeliner
Print kernel timers and associated module DPCstimers
Recover TrueCrypt 7.1a Master Keystruecryptmaster
TrueCrypt Cached Passphrase Findertruecryptpassphrase
TrueCrypt Summarytruecryptsummary
Print list of unloaded modulesunloadedmodules
Print userassist registry keys and informationu Pruserassinfo
Dump the USER handle tablesuserhandles
Dumps out the vad sections to a filevaddump
Dump the VAD infovadinfo
Walk the VAD tree and display in tree formatvadtree
Walk the VAD treevadwalk
Dump virtualbox informationvboxinfo
Prints out the version information from PE imagesverinfo
Dump VMware VMSS/VMSN informationvmwareinfo
Shell in the memory imagevolshell
Print Desktop Windows (verbose details)windows
Print Z-Order Desktop Windows Treewintree
Pool scanner for window stationswndscan
Scan process or kernel memory with Yara signaturesyarascan