> ## Content Index
> Fetch the complete content index at: https://arabroot.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# أدوات التحقيق الرقمي مفتوحة المصدر وكيف تستخدمها
- URL: https://arabroot.io/articles/ادوات-التحقيق-الرقمي-مفتوحة-المصدر/
- Published: 2026-10-05T13:00:00.000Z
- Updated: 2026-10-09T09:42:16.000Z
- Description: الأدوات المفتوحة التي تحتاجها في كل مرحلة من التحقيق الرقمي، من نسخ القرص واسترجاع ملف محذوف إلى بناء خط زمني لما حدث.
- Author: فريق عرب رووت
- Tags: الأدلة التقنية, الأمن السيبراني, لينكس والسيرفرات, الاستضافة الذاتية

في دليل [التحقيق الرقمي DFIR للمبتدئين](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/) ذكرنا ماذا تفعل عندما تشك أن سيرفرك مخترق، ولماذا تحفظ الأدلة قبل أن تنظف، وما هو ترتيب التقلب Order of Volatility وسلسلة الحيازة Chain of Custody. ولكن هذا الدليل كان عن القرارات وليس عن الأدوات، فعندما تقرر أن تأخذ نسخة من القرص أو أن تجمع ما على السيرفر الحي سوف تحتاج أن تعرف بأي أداة تفعل ذلك، وكيف تقرأ النسخة بعد ذلك، وكيف تخرج منها ملفاً محذوفاً أو خطاً زمنياً يجيب عن سؤال «ماذا حدث ومتى». والخبر الجيد أن أغلب الأدوات التي يستخدمها المحققون في العالم مفتوحة المصدر ومجانية، من The Sleuth Kit إلى Volatility وPlaso وVelociraptor، والمشكلة أنها كثيرة ومتفرقة، وبعضها توقف تطويره منذ سنوات وما زالت المقالات تنصح به.

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

- خريطة الأدوات على مراحل التحقيق، وما معنى «مفتوحة المصدر» عند كل أداة، فليست كل أداة مجانية مفتوحة المصدر.
- النسخ الجنائي للقرص Disk Imaging بـ dd وdc3dd وewfacquire، ونسخ الذاكرة بـ LiME وAVML وWinPmem.
- تحليل صورة القرص بـ The Sleuth Kit خطوة خطوة، واسترجاع ملف محذوف والتحقق منه بالهاش.
- بناء الخط الزمني Timeline بـ mactime ثم بـ Plaso، والدرس الذي خرجنا به عندما اختلفت أداتان على التاريخ نفسه.
- تحليل الذاكرة مع Volatility 3، وما الذي نعرضه منه هنا وما الذي نؤجله لمقال مستقل.
- جمع الأدلة من سيرفر Linux حي بـ UAC، ومن عشرات الأجهزة مع Velociraptor، مع صور من تجربتنا.
- أدوات أجهزة Windows، والأدوات المساعدة مثل YARA وexiftool، والتوزيعات الجاهزة SIFT وCAINE وTsurugi.
- كيف تبني حقيبة الاستجابة Jump Kit، وكيف تكتب التقرير، وجدول مقارنة لكل الأدوات، ومتى تستعين بمختص.

## الأدوات على مراحل التحقيق

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

![مخطط من خمسة أعمدة من اليمين إلى اليسار: الجمع من النظام الحي بأدوات UAC وVelociraptor وosquery وGRR، ثم النسخ بأدوات dd وdc3dd وdcfldd وewfacquire وLiME وAVML وWinPmem، ثم تحليل القرص بـ The Sleuth Kit وAutopsy وbulk_extractor وYARA وexiftool، ثم تحليل الذاكرة بـ Volatility 3، ثم الخط الزمني بـ mactime وPlaso وTimesketch، وفي الأسفل التقرير والتوزيعات الجاهزة SIFT وCAINE وTsurugi](https://arabroot.io/content/images/2026/10/forensics-tools-01-toolkit.webp)

كل مرحلة لها أدواتها، والتوزيعات الجاهزة تجمعها كلها في نظام واحد

وقد يتساءل البعض: هل كل هذه الأدوات مفتوحة المصدر بالمعنى الدقيق؟ والإجابة أن أغلبها كذلك برخص معروفة مثل Apache-2.0 وGPL وMIT، ولكن هناك استثناءات يجب أن تعرفها قبل أن تعتمد عليها في مؤسستك، وقد شرحنا الفرق بين أنواع الرخص في [دليل الرخص مفتوحة المصدر](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%88%D8%AA%D8%B1%D8%A7%D8%AE%D9%8A%D8%B5%D9%87%D8%A7/):

- **Volatility 3** كودها متاح للجميع، ولكن رخصتها هي [Volatility Software License الإصدار 1.0](https://www.volatilityfoundation.org/license/vsl-v1.0?ref=arabroot.io)، وهي رخصة خاصة كتبتها مؤسسة Volatility وليست من الرخص المدرجة في [قائمة OSI](https://opensource.org/licenses?ref=arabroot.io)، فاقرأ شروطها إذا كنت سوف تدمجها في منتج تبيعه.
- **FTK Imager** من شركة Exterro أشهر أداة نسخ مجانية على Windows، ولذلك يظن كثيرون أنها مفتوحة المصدر، وهي ليست كذلك، فالشركة [تقدمها مجاناً](https://www.exterro.com/digital-forensics-software/ftk-imager?ref=arabroot.io) ولا تنشر كودها، وهي تعمل على Windows فقط. نذكرها هنا حتى لا يختلط عليك الأمر، ولكنها خارج هذا المقال.
- **The Sleuth Kit** رخصتها [خليط](https://www.sleuthkit.org/sleuthkit/licenses.php?ref=arabroot.io)، فالكود الأساسي برخصة IBM Public License أو Common Public License، وبعض الأجزاء برخصة Apache-2.0، وهي كلها رخص مفتوحة المصدر ولكنها ليست GPL.

## القرص التجريبي الذي سوف نحقق فيه

حتى تكون المخرجات في هذا المقال حقيقية وليست منسوخة من الشرح الرسمي، صنعنا قرص USB تجريبياً على شكل ملف حجمه 64 MiB، فيه جدول أقسام MBR وقسم واحد بنظام الملفات FAT32، وكتبنا فيه ثلاثة ملفات نصية ثم حذفنا واحداً منها، تماماً كما يفعل موظف يحاول أن يخفي ملفاً قبل أن يسلم جهازه. واخترنا FAT32 لأنه نظام الملفات الذي تجده في أغلب الفلاشات وبطاقات الذاكرة، ولأننا نستطيع بناءه بأداة mtools دون أن نحتاج إلى ربط القرص Mount بالنظام. ونفذنا كل شيء داخل Container من Debian 13 باسم `lab-forensics-tsk`، فإذا أردت أن تجرب بنفسك فثبت الحزم التالية:

```bash
docker run -d --name lab-forensics-tsk -v "$PWD":/case debian:trixie sleep infinity
docker exec -it lab-forensics-tsk bash
apt-get update && apt-get install -y sleuthkit dc3dd mtools dosfstools fdisk
```

ثم احفظ السكربت التالي باسم `make-disk.sh` وشغله، وهو يبني القرص ويكتب الملفات بتواريخ ثابتة حتى تكون المقارنة سهلة لاحقاً، ثم يحذف الملف `plan.txt` ويطبع الهاش الخاص به قبل الحذف:

```bash
#!/bin/bash
# lab-forensics: build a small "suspect" USB disk image with one FAT32 partition, then delete one file
set -e
cd /work
rm -f usb.img
truncate -s 64M usb.img
echo 'label: dos
start=2048, type=c' | sfdisk -q usb.img
mkfs.vfat -F 32 -n EVIDENCE --offset 2048 usb.img >/dev/null
mkdir -p src
printf 'Meeting notes: move the file server to the new VPS next week.\n' > src/meeting.txt
printf 'invoice,amount,currency\nINV-2026-001,1200,SAR\nINV-2026-002,850,SAR\n' > src/invoices.csv
for i in $(seq 1 400); do echo "line $i: Q4 migration plan, customer list export scheduled, do not share"; done > src/plan.txt
touch -d '2026-10-01 09:15:00 UTC' src/meeting.txt
touch -d '2026-10-02 13:40:00 UTC' src/invoices.csv
touch -d '2026-10-03 22:05:00 UTC' src/plan.txt
export MTOOLS_SKIP_CHECK=1
mmd -i usb.img@@1M ::/docs
mcopy -m -i usb.img@@1M src/meeting.txt src/invoices.csv ::/docs/
mcopy -m -i usb.img@@1M src/plan.txt ::/
mdel -i usb.img@@1M ::/plan.txt
mdir -/ -i usb.img@@1M ::/
sha256sum src/plan.txt
```

والمخرج سوف يكون كما يلي:

```text
 Volume in drive : is EVIDENCE
 Volume Serial Number is 0706-AA3A
Directory for ::/

docs         <DIR>     2026-10-05  22:10
        1 file                    0 bytes

Directory for ::/docs

.            <DIR>     2026-10-05  22:10
..           <DIR>     2026-10-05  22:10
meeting  txt        62 2026-10-01   9:15
invoices csv        67 2026-10-02  13:40
        4 files                 129 bytes

Total files listed:
        5 files                 129 bytes
                         65 025 024 bytes free

3078424596f1189ca4922b09dd410f935b09d8e69d2656f17f41ae903a3f616f  src/plan.txt
```

لاحظ أن الملف `plan.txt` اختفى من القائمة تماماً، فمن يفتح هذه الفلاشة في مستكشف الملفات لن يرى إلا المجلد `docs` وملفين، واحتفظنا بهاش الملف الأصلي في السطر الأخير حتى نتحقق لاحقاً من أن ما نسترجعه هو الملف نفسه بايتاً ببايت.

## النسخ الجنائي للقرص والذاكرة

أول ما يخطر على البال عندما تريد أن تحفظ محتوى قرص هو أن تنسخ ملفاته بـ `cp -r` أو تضغطها في ملف tar، وهذه الطريقة غير مناسبة إطلاقاً للتحقيق، والسبب أن نسخ الملفات ينسخ ما يعرضه نظام الملفات فقط، أي الملفات الموجودة، ولا ينسخ الملفات المحذوفة ولا المساحة غير المستخدمة Unallocated Space ولا جدول الأقسام، وهذه بالضبط الأماكن التي يبحث فيها المحقق. وبالإضافة إلى ذلك فالنسخ العادي يغير وقت الوصول Access Time على الملفات الأصلية في بعض الأنظمة، فتكون قد عدلت الدليل وأنت تحاول حفظه.

والحل هو النسخة الجنائية Forensic Image، أي نسخة بت ببت Bit-by-bit لكل القرص من أول قطاع Sector إلى آخره، بغض النظر عما فيه، مع حساب الهاش للأصل وللنسخة. وأبسط أداة لذلك هي [dd](https://man7.org/linux/man-pages/man1/dd.1.html?ref=arabroot.io) الموجودة في كل نظام Linux، ولكنها لا تحسب الهاش ولا تسجل ما فعلته، فظهرت نسخ معدلة منها للتحقيق:

- **dc3dd:** نسخة معدلة من dd للتحقيق، تحسب الهاش أثناء النسخ وتكتب سجلاً بما فعلته، ورخصتها GPLv2، وآخر إصدار لها 7.3.1 في أبريل 2023، وهي موجودة في مستودعات [Debian](https://packages.debian.org/trixie/dc3dd?ref=arabroot.io) وغيرها.
- **dcfldd:** فكرتها نفسها، وكانت متوقفة لسنوات ثم [أعاد إحياءها](https://github.com/resurrecting-open-source-projects/dcfldd?ref=arabroot.io) مشروع Resurrecting Open Source Projects، وآخر إصدار لها v1.9.3 في يونيو 2025.
- **ewfacquire:** من مكتبة [libewf](https://github.com/libyal/libewf?ref=arabroot.io) برخصة LGPL-3.0، وتكتب النسخة بصيغة EnCase المعروفة باسم E01، وهي صيغة مضغوطة تحفظ داخلها الهاش وبيانات القضية مثل اسم المحقق ورقم الدليل، وتقرؤها أغلب أدوات التحقيق التجارية والمفتوحة. ولاحظ أن المشروع يصف نفسه بأنه تجريبي Experimental وإصداراته تحمل تاريخ اليوم بدلاً من رقم إصدار.

الآن سوف نأخذ نسخة جنائية من قرصنا التجريبي بـ dc3dd، مع حساب SHA-256 وكتابة سجل:

```bash
dc3dd if=usb.img of=evidence.dd hash=sha256 log=acquire.log
sha256sum usb.img evidence.dd
```

والمخرج سوف يكون كما يلي، بعد أن حذفنا سطور عداد التقدم:

```text
dc3dd 7.2.646 started at 2026-10-05 22:11:25 +0000
compiled options:
command line dc3dd if=usb.img of=evidence.dd hash=sha256 log=acquire.log
sector size: 512 bytes (assumed)
  67108864 bytes ( 64 M ) copied ( 100% ),   12 s, 5.5 M/s

input results for file `usb.img':
   131072 sectors in
   4a9ac62727e024cde367e03f154001403f44489168b1acb29ef3a6a1871d51cf (sha256)

output results for file `evidence.dd':
   131072 sectors out

dc3dd completed at 2026-10-05 22:11:36 +0000

4a9ac62727e024cde367e03f154001403f44489168b1acb29ef3a6a1871d51cf  usb.img
4a9ac62727e024cde367e03f154001403f44489168b1acb29ef3a6a1871d51cf  evidence.dd
```

في المخرج أعلاه لاحظ التالي:

- dc3dd حسبت الهاش للمصدر أثناء القراءة، و`sha256sum` على النسخة أعطى القيمة نفسها، وهذا ما تكتبه في سجل سلسلة الحيازة مع وقت النسخ بتوقيت UTC الظاهر في السطر الأول والأخير.
- الأداة كتبت كل هذا في الملف `acquire.log` أيضاً، فلا تحتاج أن تنسخ المخرج من الشاشة.
- عدد القطاعات 131072 قطاعاً بحجم 512 بايت، أي 64 MiB بالضبط، وهذا يعني أن النسخة تشمل كل القرص وليس الملفات فقط.
- الحزمة في Debian 13 رقمها 7.3.1، ولكن البرنامج نفسه يطبع 7.2.646 في السطر الأول، فاكتب في تقريرك ما تطبعه الأداة وما تعرضه الحزمة معاً.

⚠️

على قرص حقيقي يكون المصدر جهازاً مثل `/dev/sdb` وليس ملفاً، فاستخدم مانع كتابة Write Blocker أو اربط القرص للقراءة فقط، وتأكد مرتين من الاتجاه في `if` و`of`، فالخطأ فيهما يكتب فوق الدليل الأصلي ولا يمكن التراجع عنه. وعلى سيرفر سحابي يكون الأسهل غالباً أن تأخذ Snapshot من لوحة المزود ثم تنسخ القرص من الـ Snapshot على سيرفر آخر.

### نسخ الذاكرة قبل أن تختفي

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

- **LiME:** وحدة Kernel Module لنظامي Linux وAndroid، تكتب الذاكرة إلى ملف أو ترسلها عبر الشبكة TCP، ورخصتها GPL-2.0\. ولاحظ أن المستودع القديم باسم 504ensicsLabs ينقلك الآن إلى [مستودع مؤلفها Joe Sylve](https://github.com/jtsylve/LiME?ref=arabroot.io)، ولها إصدارات جديدة في 2025 و2026، آخرها v1.12.0 في مارس 2026\. ومشكلتها العملية أنها تحتاج أن تبنيها على نسخة الـ Kernel نفسها التي يعمل بها السيرفر.
- **AVML:** أداة من [Microsoft](https://github.com/microsoft/avml?ref=arabroot.io) برخصة MIT لنسخ ذاكرة Linux، وتعمل في مساحة المستخدم Userland فلا تحتاج وحدة Kernel، وهذا ما يجعلها أسهل على السيرفرات السحابية، وآخر إصدار v0.20.0 في يوليو 2026.
- **WinPmem:** أداة نسخ ذاكرة Windows من [Velocidex](https://github.com/Velocidex/WinPmem?ref=arabroot.io) برخصة Apache-2.0، ولاحظ أن آخر إصدار مستقر لها v4.0.rc1 من 2020 وآخر إصدار تجريبي v4.1.dev1 في نوفمبر 2024، فهي تتحرك ببطء، وVelociraptor نفسه يستخدمها في جمع الذاكرة على Windows.

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

## تحليل صورة القرص مع The Sleuth Kit

[The Sleuth Kit](https://www.sleuthkit.org/sleuthkit/?ref=arabroot.io)، واختصاراً TSK، مجموعة أدوات سطر أوامر ومكتبة كتبها Brian Carrier، وتقرأ صورة القرص مباشرة دون أن تربطها بالنظام، فلا يغير التحليل شيئاً في الصورة، وتفهم أنظمة الملفات NTFS وFAT وexFAT وext2/3/4 وغيرها، وآخر إصدار لها 4.15.0 في أبريل 2026 (والحزمة في Debian 13 رقمها 4.12.1). والفكرة المهمة لفهم أدواتها أنها تقرأ القرص في طبقات، ولكل طبقة أداة، والصورة التالية تبين هذه الطبقات بالقيم الحقيقية من تجربتنا:

![مخطط طبقات متداخلة: صورة القرص evidence.dd، داخلها طبقة الأقسام التي يقرؤها mmls ويبدأ فيها FAT32 عند القطاع 2048، داخلها نظام الملفات الذي يقرؤه fsstat، ثم أسماء الملفات التي يعرضها fls ومنها الملف المحذوف _lan.txt برقم 5، ثم البيانات الوصفية التي يعرضها istat من حجم وأوقات وقطاعات، ثم المحتوى الذي يخرجه icat](https://arabroot.io/content/images/2026/10/forensics-tools-02-sleuthkit-layers.webp)

كل أداة في TSK تعمل على طبقة: mmls للأقسام، fsstat لنظام الملفات، fls للأسماء، istat للبيانات الوصفية، icat للمحتوى

الآن سوف نمشي على الطبقات بالترتيب، ونبدأ بجدول الأقسام بالأداة [mmls](https://www.sleuthkit.org/sleuthkit/man/mmls.html?ref=arabroot.io):

```bash
mmls evidence.dd
```

```text
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
001:  -------   0000000000   0000002047   0000002048   Unallocated
002:  000:000   0000002048   0000131071   0000129024   Win95 FAT32 (0x0c)
```

الرقم المهم هنا هو 2048، أي القطاع الذي يبدأ عنده القسم، وكل أدوات الطبقات التالية تحتاجه في الخيار `-o` حتى تعرف أين يبدأ نظام الملفات داخل الصورة. ثم نسأل عن نظام الملفات نفسه بالأداة fsstat:

```bash
fsstat -o 2048 evidence.dd
```

```text
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: FAT32

OEM Name: mkfs.fat
Volume ID: 0x706aa3a
Volume Label (Boot Sector): EVIDENCE
Volume Label (Root Directory): EVIDENCE
File System Type Label: FAT32
Next Free Sector (FS Info): 2079
Free Sector Count (FS Info): 127002

Sectors before file system: 0

File System Layout (in sectors)
Total Range: 0 - 129023
* Reserved: 0 - 31
** Boot Sector: 0
** FS Info Sector: 1
** Backup Boot Sector: 6
* FAT 0: 32 - 1024
* FAT 1: 1025 - 2017
* Data Area: 2018 - 129023
** Cluster Area: 2018 - 129023
*** Root Directory: 2018 - 2018

METADATA INFORMATION
--------------------------------------------
Range: 2 - 2032102
Root Directory: 2

CONTENT INFORMATION
--------------------------------------------
Sector Size: 512
Cluster Size: 512
```

ثم نعرض كل الأسماء في نظام الملفات، الموجودة والمحذوفة، بالأداة [fls](https://www.sleuthkit.org/sleuthkit/man/fls.html?ref=arabroot.io) مع الخيار `-r` للدخول في المجلدات:

```bash
fls -r -o 2048 evidence.dd
```

```text
r/r 3:	EVIDENCE    (Volume Label Entry)
d/d 4:	docs
+ r/r 21:	meeting.txt
+ r/r 22:	invoices.csv
r/r * 5:	_lan.txt
v/v 2032099:	$MBR
v/v 2032100:	$FAT1
v/v 2032101:	$FAT2
V/V 2032102:	$OrphanFiles
```

في المخرج أعلاه لاحظ التالي:

- السطر `r/r * 5: _lan.txt` هو ملفنا المحذوف، والنجمة تعني أن المدخل غير مخصص Not Allocated، أي محذوف، والرقم 5 هو عنوان البيانات الوصفية Metadata Address الذي نستخدمه في الأوامر التالية.
- الاسم أصبح `_lan.txt` وليس `plan.txt`، والسبب أن FAT عندما يحذف ملفاً لا يمسح مدخله، وإنما يستبدل الحرف الأول من اسمه بالبايت `0xE5` علامة على أنه محذوف، وTSK تعرض هذا الحرف بشرطة سفلية، فإذا رأيت أسماء تبدأ بشرطة في فلاشة مشكوك فيها فابدأ بها.
- الأسطر التي تبدأ بـ `v/v` ملفات افتراضية تصنعها TSK لتسهل عليك الوصول إلى جدول الأقسام وجداول FAT، وليست ملفات حقيقية على القرص.

وإذا أردت الملفات المحذوفة فقط فأضف الخيار `-d`، ومع `-p` يعرض المسار الكامل:

```bash
fls -r -d -p -o 2048 evidence.dd
```

```text
r/r * 5:	_lan.txt
```

### استرجاع الملف المحذوف

وقد يتساءل البعض: إذا كان الملف محذوفاً فكيف نسترجعه؟ والإجابة أن الحذف في أغلب أنظمة الملفات لا يمسح البيانات نفسها، فهو يعلم المدخل بأنه محذوف ويعلم المساحة التي كان يشغلها بأنها فارغة يمكن الكتابة عليها، وتبقى البايتات في مكانها إلى أن يكتب فوقها ملف جديد. والصورة التالية تبين ذلك في FAT:

![مقارنة قبل الحذف وبعده: قبل الحذف يشير مدخل المجلد PLAN.TXT إلى سلسلة في جدول FAT تشير بدورها إلى خانات البيانات، وبعد الحذف يتغير أول بايت في الاسم إلى 0xE5 فيظهر _LAN.TXT وتصبح خانات السلسلة في جدول FAT أصفاراً أي فارغة، ولكن خانات البيانات تبقى كما هي، وفي الأسفل تنبيه بأن أي كتابة جديدة قد تستخدم الخانات الفارغة](https://arabroot.io/content/images/2026/10/forensics-tools-03-deleted-file.webp)

الحذف يغير الاسم ويحرر الخانات في جدول FAT، والبيانات تبقى إلى أن يكتب فوقها شيء

نبدأ بقراءة البيانات الوصفية للمدخل رقم 5 بالأداة [istat](https://www.sleuthkit.org/sleuthkit/man/istat.html?ref=arabroot.io):

```bash
istat -o 2048 evidence.dd 5
```

```text
Directory Entry: 5
Not Allocated
File Attributes: File, Archive
Size: 29492
Name: _lan.txt

Directory Entry Times:
Written:	2026-10-03 22:05:00 (UTC)
Accessed:	2026-10-03 00:00:00 (UTC)
Created:	2026-10-03 22:05:00 (UTC)

Sectors:
2022 2023 2024 2025 2026 2027 2028 2029
2030 2031 2032 2033 2034 2035 2036 2037
2038 2039 2040 2041 2042 2043 2044 2045
2046 2047 2048 2049 2050 2051 2052 2053
2054 2055 2056 2057 2058 2059 2060 2061
2062 2063 2064 2065 2066 2067 2068 2069
2070 2071 2072 2073 2074 2075 2076 2077
2078 2079
```

المدخل يحفظ الحجم 29492 بايت وأوقات الكتابة والإنشاء، والقطاعات 2022 إلى 2079 هي التي كانت تحمل محتوى الملف. ولاحظ أن وقت الوصول Accessed يظهر بالساعة 00:00:00، والسبب أن FAT يحفظ تاريخ آخر وصول دون ساعة، فلا تبن استنتاجاً على هذه الساعة. والآن نخرج المحتوى بالأداة [icat](https://www.sleuthkit.org/sleuthkit/man/icat.html?ref=arabroot.io) ونقارن الهاش بالهاش الذي حفظناه قبل الحذف:

```bash
icat -o 2048 evidence.dd 5 > recovered-plan.txt
head -3 recovered-plan.txt
sha256sum recovered-plan.txt src/plan.txt
```

```text
line 1: Q4 migration plan, customer list export scheduled, do not share
line 2: Q4 migration plan, customer list export scheduled, do not share
line 3: Q4 migration plan, customer list export scheduled, do not share
3078424596f1189ca4922b09dd410f935b09d8e69d2656f17f41ae903a3f616f  recovered-plan.txt
3078424596f1189ca4922b09dd410f935b09d8e69d2656f17f41ae903a3f616f  src/plan.txt
```

وبهذا الشكل نكون قد استرجعنا الملف المحذوف كاملاً، والهاش المتطابق يثبت أنه الملف نفسه وليس جزءاً منه أو ملفاً آخر. ولكن تذكر أن هذا أفضل الأحوال، فالقرص صغير ولم يكتب عليه شيء بعد الحذف وبيانات الملف متصلة في قطاعات متتالية، وفي الواقع قد تجد الملف المحذوف ناقصاً أو مكتوباً فوق جزء منه، ولذلك يكون التحقق بالهاش أو بفتح الملف خطوة لا تتركها قبل أن تكتب في التقرير أنك استرجعت شيئاً. وإذا أردت أن تخرج كل الملفات المحذوفة دفعة واحدة إلى مجلد فاستخدم [tsk\_recover](https://www.sleuthkit.org/sleuthkit/man/tsk%5Frecover.html?ref=arabroot.io)، فهي تخرج الملفات غير المخصصة افتراضياً، ومع الخيار `-e` تخرج كل الملفات.

### Autopsy: الواجهة الرسومية فوق TSK

إذا كان سطر الأوامر ثقيلاً على فريقك فـ [Autopsy](https://www.sleuthkit.org/autopsy/?ref=arabroot.io) هو الواجهة الرسومية التي بناها فريق TSK نفسه فوقها، وفيه ما فعلناه أعلاه بنقرات، مع وحدات إضافية للبحث بالكلمات وفي سجل المتصفح والصور وملفات الهاش المعروفة، ورخصته Apache-2.0، وآخر إصدار له 4.23.1 في مايو 2026\. وعلى Windows يأتي بملف تثبيت MSI، أما على Linux وmacOS فتنزل ملف zip وتشغل سكربت التثبيت بعد أن تثبت TSK بنفسك. ولم نشغل Autopsy في هذا المقال، والسبب أنه برنامج سطح مكتب بلغة Java لا يعمل داخل Container دون واجهة رسومية، فلا نعرض له صوراً لم نأخذها بأنفسنا.

## الخط الزمني: ماذا حدث ومتى؟

أغلب أسئلة التحقيق أسئلة عن الوقت: متى دخل المخترق؟ ما الذي تغير بعد ذلك بدقائق؟ هل حذف الموظف الملف قبل استقالته أو بعدها؟ والخط الزمني Timeline هو الجواب، أي ترتيب كل الأحداث التي لها وقت في جدول واحد. وأبسط خط زمني تبنيه TSK نفسها في خطوتين: `fls -m` يكتب ملفاً يسمى Body File فيه سطر لكل ملف مع أوقاته، ثم [mactime](https://www.sleuthkit.org/sleuthkit/man/mactime.html?ref=arabroot.io) يرتب هذه الأوقات:

```bash
fls -r -m / -o 2048 evidence.dd > body.txt
cat body.txt
mactime -b body.txt -d -z UTC 2026-09-30..2026-10-31
```

```text
0|/EVIDENCE    (Volume Label Entry)|3|r/rrwxrwxrwx|0|0|0|1791158400|1791238256|0|1791238256
0|/docs|4|d/drwxrwxrwx|0|0|512|1791158400|1791238258|0|1791238258
0|/docs/meeting.txt|21|r/rrwxrwxrwx|0|0|62|1790812800|1790846100|0|1790846100
0|/docs/invoices.csv|22|r/rrwxrwxrwx|0|0|67|1790899200|1790948400|0|1790948400
0|/_lan.txt (deleted)|5|r/rrwxrwxrwx|0|0|29492|1790985600|1791065100|0|1791065100
0|/$MBR|2032099|v/v---------|0|0|512|0|0|0|0
0|/$FAT1|2032100|v/v---------|0|0|508416|0|0|0|0
0|/$FAT2|2032101|v/v---------|0|0|508416|0|0|0|0
0|/$OrphanFiles|2032102|V/V---------|0|0|0|0|0|0|0

Date,Size,Type,Mode,UID,GID,Meta,File Name
Thu Oct 01 2026 00:00:00,62,.a..,r/rrwxrwxrwx,0,0,21,"/docs/meeting.txt"
Thu Oct 01 2026 09:15:00,62,m..b,r/rrwxrwxrwx,0,0,21,"/docs/meeting.txt"
Fri Oct 02 2026 00:00:00,67,.a..,r/rrwxrwxrwx,0,0,22,"/docs/invoices.csv"
Fri Oct 02 2026 13:40:00,67,m..b,r/rrwxrwxrwx,0,0,22,"/docs/invoices.csv"
Sat Oct 03 2026 00:00:00,29492,.a..,r/rrwxrwxrwx,0,0,5,"/_lan.txt (deleted)"
Sat Oct 03 2026 22:05:00,29492,m..b,r/rrwxrwxrwx,0,0,5,"/_lan.txt (deleted)"
Mon Oct 05 2026 00:00:00,0,.a..,r/rrwxrwxrwx,0,0,3,"/EVIDENCE    (Volume Label Entry)"
Mon Oct 05 2026 00:00:00,512,.a..,d/drwxrwxrwx,0,0,4,"/docs"
Mon Oct 05 2026 22:10:56,0,m..b,r/rrwxrwxrwx,0,0,3,"/EVIDENCE    (Volume Label Entry)"
Mon Oct 05 2026 22:10:58,512,m..b,d/drwxrwxrwx,0,0,4,"/docs"
```

في المخرج أعلاه لاحظ التالي:

- الأوقات في الـ Body File بصيغة Unix Epoch، أي عدد الثواني منذ 1970، وmactime حولها إلى تواريخ مقروءة.
- العمود Type يقول أي وقت هذا: `m` للتعديل Modified و`a` للوصول Accessed و`c` لتغيير البيانات الوصفية و`b` للإنشاء Born، فالسطر `m..b` يعني أن وقت التعديل ووقت الإنشاء متساويان.
- الملف المحذوف يظهر في الخط الزمني مع بقية الملفات وبجانبه `(deleted)`، وهذا ما يجعل الخط الزمني أقوى من قائمة الملفات، فهو يضع الحذف في سياقه.
- أضفنا `-z UTC` عمداً، وهذا أهم خيار في الأمر كله، والتفصيل في الفقرة التالية.

نظام FAT [يحفظ الأوقات بالتوقيت المحلي](https://learn.microsoft.com/en-us/windows/win32/sysinfo/file-times?ref=arabroot.io) للجهاز الذي كتب الملف ولا يحفظ معها المنطقة الزمنية، بعكس NTFS وext4 اللذين يحفظان الوقت بتوقيت UTC. وهذا يعني أن الساعة 22:05 في فلاشة كتبها جهاز في الرياض ليست 22:05 بتوقيت UTC وإنما 19:05، وأن TSK لا تعرف ذلك من القرص، فهي تفترض المنطقة التي تعطيها لها بالخيار `-z` في fls وmactime، أو منطقة جهاز التحليل إذا لم تعطها شيئاً. ونحن كتبنا الملفات من Container يعمل بتوقيت UTC فكانت النتيجة صحيحة، ولكن في قضية حقيقية يجب أن تعرف المنطقة الزمنية للجهاز الأصلي أولاً وتكتبها في التقرير، وقد شرحنا UTC والمناطق الزمنية وأخطاءها الشائعة في [دليل التاريخ والوقت](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D9%88%D8%A7%D9%84%D9%88%D9%82%D8%AA-utc-%D9%88%D8%A7%D9%84%D9%85%D9%86%D8%A7%D8%B7%D9%82-%D8%A7%D9%84%D8%B2%D9%85%D9%86%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%82%D9%88%D9%8A%D9%85-%D8%A7%D9%84%D9%87%D8%AC%D8%B1%D9%8A/).

### الخط الزمني الشامل مع Plaso

mactime يرتب أوقات نظام الملفات فقط، ولكن الحادثة الحقيقية تترك أثرها في أماكن كثيرة: سجلات الدخول، وسجلات خادم الويب، وسجلات Docker، وسجل التدقيق عند مزود السحابة، وسجل المتصفح، وسجلات أحداث Windows. و[Plaso](https://github.com/log2timeline/plaso?ref=arabroot.io)، واسم أداتها الرئيسية log2timeline، تقرأ كل هذه المصادر وتضعها في خط زمني واحد يسمى الخط الزمني الشامل Super Timeline، ورخصتها Apache-2.0، وآخر إصدار مستقر لها 20260720\. والصورة التالية تبين الفكرة:

![مخطط تدفق: مصادر كثيرة على اليمين هي صورة القرص وauth.log وjournal وسجل Apache وسجلات Docker وسجلات التدقيق في AWS وGCP وAzure وسجلات Windows EVTX، تدخل إلى log2timeline التي تحول كل الأوقات إلى UTC وتكتبها في ملف case.plaso، ثم يرتبها psort في جدول CSV أو تفتح في Timesketch للبحث والمشاركة مع الفريق](https://arabroot.io/content/images/2026/10/forensics-tools-04-super-timeline.webp)

Plaso يحول كل الأوقات إلى UTC ويجمعها في ملف واحد، ثم يخرجها psort جدولاً مرتباً

وفي النسخة التي استخدمناها وجدنا محللات Parsers لكل المصادر في الصورة، ومنها `syslog` و`systemd_journal` و`apache_access` و`docker_container_log` و`aws_cloudtrail_log` و`gcp_log` و`azure_activity_log` و`winevtx` و`bash_history`، ويمكنك أن ترى القائمة كاملة بالأمر `log2timeline.py --parsers list`. والطريقة الأسهل لتشغيلها هي [Docker Image الرسمية](https://plaso.readthedocs.io/en/latest/sources/user/Installing-with-docker.html?ref=arabroot.io)، فشغلناها على النسخة نفسها:

```bash
docker run --rm --name lab-forensics-plaso -v "$PWD":/data log2timeline/plaso:latest \
  log2timeline.py --status_view none --storage-file /data/case.plaso /data/evidence.dd
docker run --rm -v "$PWD":/data log2timeline/plaso:latest \
  psort.py --status_view none -o dynamic -w /data/timeline.csv /data/case.plaso
cat timeline.csv
```

```text
datetime,timestamp_desc,source,source_long,message,parser,display_name,tag
2026-11-01T00:00:00.000000+00:00,Last Access Time,FILE,File stat,FAT:\docs\meeting.txt Type: file,filestat,FAT:\docs\meeting.txt,-
2026-11-01T09:15:00.000000+00:00,Content Modification Time,FILE,File stat,FAT:\docs\meeting.txt Type: file,filestat,FAT:\docs\meeting.txt,-
2026-11-01T09:15:00.000000+00:00,Creation Time,FILE,File stat,FAT:\docs\meeting.txt Type: file,filestat,FAT:\docs\meeting.txt,-
2026-11-02T00:00:00.000000+00:00,Last Access Time,FILE,File stat,FAT:\docs\invoices.csv Type: file,filestat,FAT:\docs\invoices.csv,-
2026-11-02T13:40:00.000000+00:00,Content Modification Time,FILE,File stat,FAT:\docs\invoices.csv Type: file,filestat,FAT:\docs\invoices.csv,-
2026-11-02T13:40:00.000000+00:00,Creation Time,FILE,File stat,FAT:\docs\invoices.csv Type: file,filestat,FAT:\docs\invoices.csv,-
2026-11-05T00:00:00.000000+00:00,Last Access Time,FILE,File stat,FAT:\docs Type: directory,filestat,FAT:\docs,-
2026-11-05T22:10:58.000000+00:00,Content Modification Time,FILE,File stat,FAT:\docs Type: directory,filestat,FAT:\docs,-
2026-11-05T22:10:58.000000+00:00,Creation Time,FILE,File stat,FAT:\docs Type: directory,filestat,FAT:\docs,-
```

هل لاحظت المشكلة؟ كل التواريخ في نوفمبر، والملفات كتبناها في أكتوبر، وmdir وTSK أعطيانا 2026-10-01 للملف `meeting.txt` بينما Plaso يقول 2026-11-01، أي أن هناك فرق شهر كامل في كل سطر، والملف المحذوف لا يظهر أصلاً. والسبب أن Plaso يقرأ أنظمة الملفات افتراضياً بمكتبات مشروع libyal (في نسختنا dfVFS 20260717 وpyfsfat 20260717)، فأعدنا التشغيل وطلبنا منه أن يقرأ القرص بمكتبة TSK بدلاً منها بالخيار `--vfs_back_end tsk`:

```bash
docker run --rm --name lab-forensics-plaso -v "$PWD":/data log2timeline/plaso:latest \
  log2timeline.py --status_view none --vfs_back_end tsk --storage-file /data/case-tsk.plaso /data/evidence.dd
```

والمخرج بعد psort سوف يكون كما يلي، بعد أن حذفنا الأسطر التسعة للملفات الافتراضية `$MBR` و`$FAT1` و`$FAT2` التي ليس لها وقت:

```text
2026-10-01T00:00:00.000000+00:00,Last Access Time,FILE,File stat,TSK:/docs/meeting.txt Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/meeting.txt,-
2026-10-01T09:15:00.000000+00:00,Content Modification Time,FILE,File stat,TSK:/docs/meeting.txt Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/meeting.txt,-
2026-10-01T09:15:00.000000+00:00,Creation Time,FILE,File stat,TSK:/docs/meeting.txt Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/meeting.txt,-
2026-10-02T00:00:00.000000+00:00,Last Access Time,FILE,File stat,TSK:/docs/invoices.csv Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/invoices.csv,-
2026-10-02T13:40:00.000000+00:00,Content Modification Time,FILE,File stat,TSK:/docs/invoices.csv Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/invoices.csv,-
2026-10-02T13:40:00.000000+00:00,Creation Time,FILE,File stat,TSK:/docs/invoices.csv Type: file Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs/invoices.csv,-
2026-10-05T00:00:00.000000+00:00,Last Access Time,FILE,File stat,TSK:/docs Type: directory Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs,-
2026-10-05T22:10:58.000000+00:00,Content Modification Time,FILE,File stat,TSK:/docs Type: directory Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs,-
2026-10-05T22:10:58.000000+00:00,Creation Time,FILE,File stat,TSK:/docs Type: directory Owner identifier: 0 Group identifier: 0 Mode: 0o777 Number of links: 1,filestat,TSK:/docs,-
```

الآن تطابقت التواريخ مع TSK ومع ما كتبناه، ولكن الملف المحذوف ما زال غائباً، فـ Plaso هنا يجمع أوقات الملفات التي يراها في شجرة المجلدات، والملفات المحذوفة تحتاج TSK أو Autopsy. والدرس من هذه التجربة أهم من الأداة نفسها: لا تعتمد على أداة واحدة في رقم سوف تكتبه في تقرير، وقارن الأوقات المهمة بأداة ثانية، وإذا اختلفت الأداتان فاكتب ذلك وابحث عن السبب قبل أن تبني عليه استنتاجاً. ولاحظ أن كل تشغيل لـ log2timeline استغرق عندنا أكثر من خمس دقائق على قرص حجمه 64 MiB، لأن الأداة تفحص كل ملف بكل المحللات، فعلى قرص حقيقي بمئات الجيجابايت خطط لساعات وليس لدقائق، واستخدم الخيار `--parsers` لتحديد ما تحتاجه.

وعندما يكبر الخط الزمني إلى ملايين الأسطر لن يكفيك ملف CSV، وهنا يأتي دور [Timesketch](https://github.com/google/timesketch?ref=arabroot.io) من Google، وهو تطبيق ويب برخصة Apache-2.0 يثبت بـ Docker، ترفع إليه ملف Plaso فيبحث فيه الفريق كله ويضع العلامات والتعليقات على الأحداث المهمة، وآخر إصدار له 20260630\. ولم نثبته في هذا المقال لأن ملف Docker Compose الرسمي له يشغل معه OpenSearch وPostgreSQL وRedis وNginx، وهو يستحق دليل تثبيت مستقلاً.

## تحليل الذاكرة مع Volatility 3

إذا كان عندك نسخة من الذاكرة من LiME أو AVML أو WinPmem فالأداة التي تقرؤها هي [Volatility 3](https://github.com/volatilityfoundation/volatility3?ref=arabroot.io) من مؤسسة Volatility، وهي مكتوبة بلغة Python وتحلل ذاكرة Windows وLinux وmacOS، وآخر إصدار لها 2.28.2 في سبتمبر 2026\. ولاحظ أن الإصدار القديم Volatility 2 الذي تجده في أغلب المقالات القديمة [أرشف مستودعه](https://github.com/volatilityfoundation/volatility?ref=arabroot.io) في مايو 2025 وأصبح للقراءة فقط، فلا تبدأ به اليوم. ثبتناها في Container من `python:3.12-slim` بالأمر `pip install volatility3`، ثم عرضنا المساعدة:

```bash
vol -h
```

```text
Volatility 3 Framework 2.28.2
usage: vol [-h] [-c CONFIG] [--parallelism [{processes,threads,off}]]
           [-e EXTEND] [-p PLUGIN_DIRS] [-s SYMBOL_DIRS] [-v] [-l LOG]
           [-o OUTPUT_DIR] [-q] [-f FILE] [--write-config]
           [--save-config SAVE_CONFIG] [--clear-cache]
           [--cache-path CACHE_PATH] [--offline | -u URL] [--filters FILTERS]
           [--hide-columns [HIDE_COLUMNS ...]] [-r RENDERER]
           [--single-location SINGLE_LOCATION] [--stackers [STACKERS ...]]
           [--single-swap-locations [SINGLE_SWAP_LOCATIONS ...]]
           PLUGIN ...

An open-source memory forensics framework
```

وفي هذه النسخة عددنا 91 إضافة Plugin لـ Windows و59 لـ Linux و23 لـ macOS، وهذه أشهرها كما تصفها المساعدة نفسها:

```text
    linux.pslist.PsList
                        Lists the processes present in a particular linux
                        memory image.
    linux.sockstat.Sockstat
                        Lists all network connections for all processes.
    linux.bash.Bash     Recovers bash command history from memory.
    linux.malware.malfind.Malfind
                        Lists process memory ranges that potentially contain
                        injected code.
    windows.pslist.PsList
                        Lists the processes present in a particular windows
                        memory image.
    windows.netscan.NetScan
                        Scans for network objects present in a particular
                        windows memory image.
    windows.cmdline.CmdLine
                        Lists process command line arguments.
    windows.malware.malfind.Malfind
                        Lists process memory ranges that potentially contain
                        injected code.
```

ولاحظ أن الاسم القديم `windows.malfind.Malfind` ما زال موجوداً ولكن المساعدة تصفه بأنه مهجور Deprecated، والاسم الجديد تحت `malware`، فإذا نسخت أمراً من مقال قديم ولم يعمل فابحث عن الاسم الجديد في `vol -h`. وطريقة العمل المعتادة كما يلي:

1. ابدأ بقائمة البرامج `pslist` و`pstree` وابحث عن برنامج باسم غريب، أو برنامج معروف من مسار غريب، أو أب لا يتوقع منه أن يشغل هذا الابن، مثل خادم ويب يشغل Shell.
2. ثم الاتصالات `netscan` في Windows أو `sockstat` في Linux، وقارن العناوين البعيدة بما تعرفه من سجلات الجدار الناري.
3. ثم سطر الأوامر لكل برنامج مشكوك فيه `cmdline`، وسجل Bash في الذاكرة `linux.bash`، فقد يكون المخترق مسح الملف `.bash_history` من القرص وبقيت أوامره في الذاكرة.
4. ثم `malfind` للبحث عن مناطق في الذاكرة تحمل كوداً محقوناً، وهذه نتائجها تحتاج خبرة لقراءتها لأن فيها نتائج إيجابية كاذبة False Positives كثيرة.

وتحليل ذاكرة Linux بالذات يحتاج ملف رموز Symbols مطابقاً لنسخة الـ Kernel التي أخذت منها الذاكرة، وهذا أكثر ما يتعثر فيه المبتدئ، ولذلك سوف نخصص لتحليل الذاكرة مقالاً مستقلاً بإذن الله، نأخذ فيه نسخة من سيرفر تجريبي ونحللها خطوة خطوة.

## جمع الأدلة من سيرفر Linux حي مع UAC

في أغلب حوادث السيرفرات لن تبدأ بنسخة كاملة للقرص، وإنما بجمع سريع لما يهم من السيرفر وهو يعمل، ويسمى ذلك الفرز Triage، والسبب أن نسخ قرص حجمه 500 GB قد يستغرق ساعات، بينما البرامج العاملة والاتصالات والمستخدمون المتصلون قد تختفي في دقائق. والطريقة البسيطة أن تكتب الأوامر بيدك واحداً بعد الآخر، وهذه تنسى فيها نصف الأوامر وتكتب مخرجها في أماكن متفرقة ولا تحسب له هاشاً. والحل الأنسب هو أداة جمع جاهزة تنفذ قائمة ثابتة من الأوامر وتنسخ قائمة ثابتة من الملفات وتحسب الهاش وتسجل كل شيء.

و[UAC](https://github.com/tclahr/uac?ref=arabroot.io)، واسمها الكامل Unix-like Artifacts Collector، هي هذه الأداة لأنظمة Linux وmacOS وFreeBSD وغيرها، وهي سكربت Shell لا يحتاج تثبيت أي شيء على السيرفر، ورخصتها Apache-2.0، وآخر إصدار لها 3.4.0 في سبتمبر 2026\. وشغلناها على Container من Debian 13 باسم المضيف `web01` يمثل سيرفراً مشكوكاً فيه، بعد أن تحققنا من هاش الملف الذي نزلناه من صفحة الإصدارات:

```bash
sha256sum uac-3.4.0.tar.gz      # compare with uac-3.4.0.tar.gz.sha256 from the release page
tar xzf uac-3.4.0.tar.gz -C /opt
cd /opt/uac-3.4.0
./uac --version
./uac -p ir_triage /evidence
```

```text
UAC (Unix-like Artifacts Collector) 3.4.0
...
[217/219] 2026-10-05 22:55:22 +0000 files/system/vyatta.yaml
[218/219] 2026-10-05 22:55:22 +0000 files/system/xdg_autostart.yaml
[219/219] 2026-10-05 22:55:28 +0000 files/system/xsession_errors.yaml
--------------------------------------------------------------------------------
Artifacts collection completed in 300 seconds
Filtering non-regular files...
Creating the output file...
Output file created: '/evidence/uac-web01-linux-20261005225027.tar.gz'
Calculating output file hash...
Acquisition log created: '/evidence/uac-web01-linux-20261005225027.log'
```

في الإعداد أعلاه لاحظ التالي:

- الخيار `-p ir_triage` يختار ملف الإعداد Profile الخاص بالفرز في الاستجابة للحوادث، وفي هذه النسخة أربعة ملفات: `full` و`ir_triage` و`offline` و`offline_ir_triage`، والأخيران لتحليل قرص مربوط من نظام آخر وليس للنظام الحي.
- الأداة نفذت 219 خطوة في 300 ثانية على Container صغير، فعلى سيرفر حقيقي فيه ملفات كثيرة سوف تستغرق أكثر.
- الوجهة `/evidence` هنا مجلد في الـ Container نفسه لأنها تجربة، أما في حادثة حقيقية فاكتب إلى قرص خارجي أو مجلد مشترك على جهاز آخر، كما ذكرنا في [قائمة الساعة الأولى](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/#first-hour)، حتى لا تكتب فوق مساحة قد تحمل ملفات محذوفة.

والسجل الذي كتبته الأداة بجانب الملف المضغوط فيه ما تحتاجه لسلسلة الحيازة:

```text
Created by UAC (Unix-like Artifacts Collector) 3.4.0

[Case Information]
Case Number:
Evidence Number:
Description:
Examiner:
Notes:

[System Information]
Operating System: linux
System Architecture: x86_64
Hostname: web01

[Acquisition Information]
Mount Point: /
Acquisition Started: Mon Oct 05 22:50:29 2026 +0000
Acquisition Finished: Mon Oct 05 22:55:29 2026 +0000

[Output Information]
File: uac-web01-linux-20261005225027.tar.gz
Format: tar

[Computed Hashes]
MD5 checksum: 28fb8e1543e0441ecf2a240fb59cac30
SHA1 checksum: be0902e8c8afd3bc7d060ecc1efa4225f999e044
```

حقول القضية فارغة لأننا لم نعطها شيئاً، ويمكنك تعبئتها عند التشغيل بالخيارات `--case-number` و`--evidence-number` و`--examiner` و`--description` و`--notes`. ولاحظ أن الأداة حسبت MD5 وSHA1 فقط افتراضياً، فاحسب SHA-256 للملف بنفسك واكتبه في السجل. ثم عرضنا ما في الملف المضغوط مجمعاً حسب المجلد:

```bash
tar tzf uac-web01-linux-20261005225027.tar.gz | cut -d/ -f1-2 | sort | uniq -c | sort -rn
```

```text
    130 [root]/etc
    113 live_response/system
     80 live_response/process
     22 live_response/network
     11 live_response/storage
     10 [root]/usr
      9 [root]/var
      9 [root]/lib
      3 [root]/home
      2 [root]/root
      1 uac.log
      1 system/world_writable_not_sticky_directories.txt
      1 system/world_writable_files.txt
      1 system/world_writable_directories.txt
      1 system/user_name_unknown_files.txt
      1 system/user_name_unknown_directories.txt
      1 system/suid.txt
      1 system/socket_files.txt
      1 system/sgid.txt
      1 system/hidden_files.txt
      1 system/hidden_directories.txt
      1 system/group_writable_files.txt
      1 system/group_writable_directories.txt
      1 system/group_name_unknown_files.txt
      1 system/group_name_unknown_directories.txt
      1 live_response/packages
      1 live_response/hardware
      1 hash_executables/hash_executables.sha1
      1 hash_executables/hash_executables.md5
      1 bodyfile/bodyfile.txt
```

والمجموع 409 ملفات في ملف مضغوط حجمه 465 KiB، وفيها ما يلي:

- `live_response/process` و`live_response/network`: مخرج `ps` و`ss -tanp` و`ip addr` و`ip route`، ومجلد لكل برنامج عامل فيه سطر الأوامر والملفات المفتوحة ومتغيرات البيئة، وقائمة بالبرامج المخفية عن أمر `ps`، وهاش ملف كل برنامج عامل.
- `[root]/etc` و`[root]/var` و`[root]/home`: نسخ من ملفات الإعداد والسجلات مثل `wtmp` و`btmp` و`lastlog` وسجل apt، وملفات Shell للمستخدمين، وهي الملفات نفسها التي ذكرناها في [خريطة الأدلة على السيرفر](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/#evidence-map).
- `system`: قوائم بملفات SUID وSGID والملفات المخفية والملفات التي يكتب فيها الجميع، وهي أماكن يحب المخترق أن يترك فيها شيئاً.
- `bodyfile/bodyfile.txt`: Body File بالصيغة نفسها التي صنعناها بـ `fls -m`، فتعطيها لـ mactime مباشرة وتحصل على خط زمني لنظام الملفات دون نسخ القرص.

وهناك أداة قريبة الفكرة اسمها [CyLR](https://github.com/orlikoski/CyLR?ref=arabroot.io) ما زالت تذكر في مقالات كثيرة، ولكن آخر إصدار لها 2.2.0 في فبراير 2021 وآخر تعديل على كودها في أكتوبر 2021، فلا ينصح بالبدء بها اليوم. أما [osquery](https://osquery.io/?ref=arabroot.io) فهي ليست أداة جمع للحوادث، وإنما أداة تعرض النظام كجداول تسألها بـ SQL، ورخصتها Apache-2.0 أو GPL-2.0 حسب اختيارك، وفائدتها في التحقيق أنها إذا كانت مثبتة قبل الحادثة على أجهزة الموظفين فتستطيع أن تسأل كل الأجهزة سؤالاً واحداً مثل «من عنده هذا البرنامج يعمل الآن؟»، وقد ذكرنا دورها في [دليل إدارة أجهزة الموظفين](https://arabroot.io/articles/%D8%A7%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D9%85%D9%88%D8%B8%D9%81%D9%8A%D9%86-%D9%88%D8%AA%D8%A3%D9%85%D9%8A%D9%86%D9%87%D8%A7-mdm/).

## Velociraptor: الاستجابة على عشرات الأجهزة

UAC ممتازة لسيرفر واحد أو ثلاثة، ولكن ماذا لو كان السؤال «هل يوجد هذا الملف أو هذا الاتصال على أي جهاز من 300 جهاز في الشركة؟». تشغيل سكربت يدوياً على كل جهاز غير مناسب، وهنا تأتي أدوات الاستجابة الحية على نطاق واسع Live Response at Scale، وأشهرها المفتوحة [Velociraptor](https://github.com/Velocidex/velociraptor?ref=arabroot.io)، وهو ملف تنفيذي واحد يعمل سيرفراً أو عميلاً على Windows وLinux وmacOS، ورخصته AGPL-3.0، وقد [استحوذت عليه Rapid7](https://www.rapid7.com/about/press-releases/rapid7-acquires-digital-forensics-and-incident-response-open-source-project-velociraptor/?ref=arabroot.io) في أبريل 2021 وبقي المشروع مفتوح المصدر تحت اسم Velocidex على GitHub، وآخر إصدار له v0.77.3 في 5 أكتوبر 2026، وهي النسخة التي استخدمناها في التجربة. والصورة التالية تبين طريقة عمله:

![مخطط Velociraptor: المحلل يختار من المتصفح عبر الواجهة على المنفذ 8889 مجموعة جمع مثل Linux.Sys.Pslist، والسيرفر يحفظ المهمة، والعملاء على سيرفرات Linux وحاسوب Windows وحاسوب macOS يفتحون اتصال TLS إلى السيرفر على المنفذ 8000 وينتظرون، فينفذون استعلام VQL محلياً ويرفعون النتائج، وفي الزاوية جامع دون سيرفر Offline Collector يعمل من فلاشة ويخرج ملف ZIP](https://arabroot.io/content/images/2026/10/forensics-tools-05-velociraptor.webp)

العميل هو الذي يتصل بالسيرفر، فلا تحتاج أن تفتح منافذ على أجهزة الموظفين

ولاحظ في الصورة أن العميل هو الذي يفتح الاتصال إلى السيرفر وليس العكس، والسبب أن أجهزة الموظفين تكون خلف NAT وجدران حماية، فالاتصال الخارج منها أسهل بكثير من الداخل إليها. وكل ما يجمعه Velociraptor مكتوب بلغة استعلام خاصة به اسمها VQL، ومجمع في وحدات جاهزة اسمها Artifacts، فـ `Linux.Sys.Pslist` مثلاً تعرض البرامج العاملة، وهناك المئات غيرها لسجلات Windows والمتصفحات وYARA وغيرها.

وللتجربة السريعة يوفر Velociraptor ما يسميه [Instant Velociraptor](https://docs.velociraptor.app/docs/deployment/?ref=arabroot.io#instant-velociraptor)، أي الأمر `velociraptor gui` الذي يشغل السيرفر وعميلاً واحداً في العملية نفسها على جهازك، وينشئ مستخدماً باسم `admin` وكلمة المرور `password` كما تذكر الوثائق. شغلناه داخل Container باسم `lab-forensics-vr`، وعدلنا في ملف الإعداد الذي أنشأه عنوان الواجهة إلى `0.0.0.0` حتى نصل إليها من خارج الـ Container عبر `127.0.0.1:28889` فقط:

```bash
docker run -d --name lab-forensics-vr -p 127.0.0.1:28889:8889 -v "$PWD":/case debian:trixie sleep infinity
docker exec lab-forensics-vr bash -c "cp /case/velociraptor /usr/local/bin/ && chmod +x /usr/local/bin/velociraptor && mkdir -p /vr"
docker exec -d lab-forensics-vr velociraptor gui --datastore /vr --nobrowser
# after the first start: GUI.bind_address 127.0.0.1 -> 0.0.0.0 in /vr/server.config.yaml, then start it again
```

وفي سجل التشغيل ترى العميل يتصل بالسيرفر على المنفذ 8000:

```text
[INFO] 2026-10-05T22:04:23Z Sender: Connected to wss://localhost:8000/control after waiting for limiter for 5.201µs
```

ثم فتحنا صفحة العميل في الواجهة، واخترنا New Collection، وبحثنا عن `Linux.Sys.Pslist`، والصورة التالية تبين الشاشة قبل التشغيل، ولاحظ أنها تعرض لك استعلام VQL الذي سوف ينفذ على الجهاز قبل أن ترسله:

![نافذة New Collection في واجهة Velociraptor وفيها البحث عن Linux.Sys.Pslist، ووصفها بأنها تعرض البرامج العاملة والملفات التنفيذية الخاصة بها، والمعامل processRegex، واستعلام VQL الذي يختار رقم البرنامج والأب والاسم وسطر الأوامر والمسار والهاش والمستخدم ووقت الإنشاء، وفي الأسفل خطوات Select Artifacts وConfigure Parameters وSpecify Resources وReview وLaunch](https://arabroot.io/content/images/2026/10/forensics-tools-06-velociraptor-new-collection.webp)

اختيار مجموعة الجمع في Velociraptor، مع الاستعلام الذي سوف ينفذ على الجهاز

وبعد Launch انتهت المجموعة في ثلاث ثوان تقريباً، والصورة التالية تبين النتيجة، وهي البرامج العاملة في الـ Container مع الهاش لكل ملف تنفيذي:

![نتائج المجموعة Linux.Sys.Pslist في Velociraptor: جدول فيه مجموعتان مكتملتان، وتحتهما تبويب Results يعرض البرامج العاملة مثل sleep برقم 1 وbash برقم 87 مع سطر الأوامر والمسار وقيم MD5 وSHA1 وSHA256 والمستخدم root ووقت الإنشاء والذاكرة المستخدمة](https://arabroot.io/content/images/2026/10/forensics-tools-07-velociraptor-results.webp)

نتائج المجموعة: كل برنامج عامل مع سطر الأوامر والهاش ووقت الإنشاء

🛑

وضع `velociraptor gui` للتجربة والتعلم فقط، فكلمة المرور فيه معروفة للجميع، ولا تقم بتعريض واجهته على الإنترنت أبداً. وفي التشغيل الحقيقي ولد الإعداد بالأمر `velociraptor config generate` واربط الدخول بمزود الهوية عندك، والسبب أن من يدخل إلى واجهة Velociraptor يستطيع أن ينفذ استعلامات على كل أجهزة الشركة، فهي من أخطر الحسابات المميزة عندك، وقد شرحنا حماية هذه الحسابات في [دليل IAM وPAM](https://arabroot.io/articles/%D8%A7%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%87%D9%88%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-iam-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D8%A7%D9%84%D9%85%D9%85%D9%8A%D8%B2-pam/). ولاحظ أيضاً أن موقع الوثائق كان يعرض عند كتابة هذا المقال تنبيهاً بالتحديث إلى 0.77.3 لإصلاح عدة ثغرات CVE، فحدث السيرفر والعملاء دائماً.

وإذا لم يكن عندك سيرفر Velociraptor قبل الحادثة فلا تستطيع أن تثبت عميلاً على كل جهاز في ساعتها غالباً، وهنا يفيدك [الجامع دون سيرفر Offline Collector](https://docs.velociraptor.app/docs/deployment/offline%5Fcollections/?ref=arabroot.io)، وهو ملف تنفيذي واحد تبنيه من الواجهة (الرابط Build an Offline Collector في الصفحة الرئيسية) وتختار فيه المجموعات مسبقاً، ثم تشغله على الجهاز المشكوك فيه من فلاشة فيكتب النتائج في ملف ZIP.

والبديل الأقدم هو [GRR Rapid Response](https://github.com/google/grr?ref=arabroot.io) من Google برخصة Apache-2.0، وهو ما زال يطور، فآخر إصدار له 4.0.0.0 في ديسمبر 2025 وآخر تعديل في أكتوبر 2026، ولكن Velociraptor ملف تنفيذي واحد يعمل سيرفراً وعميلاً وفيه وضع للتجربة بأمر واحد، ولذلك نراه الأسهل لفريق صغير يبدأ اليوم.

## ماذا عن أجهزة Windows؟

هذا المقال يركز على السيرفرات، ولكن أغلب الحوادث في المؤسسات تبدأ من حاسوب موظف عليه Windows، فهذه الأدوات المفتوحة التي تحققنا منها وتعمل معه:

- **الجمع:** عميل Velociraptor أو الجامع دون سيرفر، فكلاهما يعمل على Windows ويجمع سجلات الأحداث والريجستري وملفات النظام، وWinPmem لنسخ الذاكرة.
- **القرص:** The Sleuth Kit وAutopsy يفهمان NTFS، وAutopsy يأتي بملف تثبيت جاهز لـ Windows.
- **سجلات الأحداث EVTX:** [Hayabusa](https://github.com/Yamato-Security/hayabusa?ref=arabroot.io) برخصة AGPL-3.0 و[Chainsaw](https://github.com/WithSecureOpenSource/chainsaw?ref=arabroot.io) برخصة GPL-3.0، وكلاهما يبحث في سجلات Windows بقواعد Sigma ويخرج خطاً زمنياً للأحداث المشكوك فيها، وPlaso نفسه يقرأ ملفات EVTX بالمحلل `winevtx`.
- **الذاكرة:** Volatility 3 بإضافات `windows.*` التي ذكرناها.

ولم نجرب أدوات Windows في هذا المقال، فاعتبر هذه القائمة نقطة بداية تختبرها على جهاز تجريبي قبل الحادثة وليس أثناءها.

## أدوات مساعدة للملفات

بعد أن تخرج الملفات من القرص سوف تحتاج أدوات صغيرة تسأل بها كل ملف عن نفسه:

- [**YARA**](https://github.com/VirusTotal/yara?ref=arabroot.io) **و**[**YARA-X**](https://github.com/VirusTotal/yara-x?ref=arabroot.io)**:** لغة قواعد من VirusTotal تصف بها نمطاً في الملفات أو الذاكرة، مثل نص أو تسلسل بايتات معروف في برنامج ضار، ثم تبحث عنه في آلاف الملفات، والاثنتان برخصة BSD-3-Clause. ولاحظ أن YARA الأصلية أصبحت في وضع الصيانة Maintenance Mode كما يذكر مستودعها، وأن YARA-X المكتوبة بلغة Rust هي الإصدار الذي يطور اليوم.
- [**ExifTool**](https://exiftool.org/?ref=arabroot.io)**:** تقرأ البيانات الوصفية Metadata من الصور والمستندات والفيديو، مثل نوع الكاميرا وتاريخ التصوير والإحداثيات واسم البرنامج الذي كتب المستند، ورخصتها بشروط Perl نفسها، وآخر إصدار لها 13.59.
- [**binwalk**](https://github.com/ReFirmLabs/binwalk?ref=arabroot.io)**:** تبحث عن ملفات مدمجة داخل ملف آخر، مثل نظام ملفات داخل برنامج جهاز Firmware، ورخصتها MIT، وأعيدت كتابتها بلغة Rust في الإصدار 3.
- [**bulk\_extractor**](https://github.com/simsong/bulk%5Fextractor?ref=arabroot.io)**:** تمسح صورة القرص كلها دون أن تفهم نظام الملفات، وتستخرج منها عناوين البريد والروابط وأرقام البطاقات وغيرها، حتى من المساحة غير المستخدمة، وآخر إصدار لها v2.2.0 في أغسطس 2026، ورخصة الكود الجديد فيها GPL-3.0 أو أحدث.

## توزيعات جاهزة: SIFT وCAINE وTsurugi

تثبيت كل هذه الأدوات واحدة واحدة يأخذ يوماً كاملاً، ولذلك هناك توزيعات Linux تأتي بها مثبتة ومعدة، وتشغلها من فلاشة أو كجهاز افتراضي:

- [**SIFT Workstation**](https://www.sans.org/tools/sift-workstation?ref=arabroot.io)**:** من معهد SANS، مجانية، وتأتي كجهاز افتراضي OVA أو تثبتها على Ubuntu 22.04 بالأداة `cast`، وهي الأشهر في الدورات التدريبية.
- [**CAINE**](https://www.caine-live.net/?ref=arabroot.io)**:** توزيعة إيطالية آخر إصدار لها 14.0 في مارس 2025 مبنية على Ubuntu 24.04، ومن مزاياها أنها تربط الأقراص للقراءة فقط افتراضياً، فلا تكتب على قرص الدليل إذا أقلعت منها على الجهاز المشكوك فيه.
- [**Tsurugi Linux**](https://tsurugi-linux.org/downloads.php?ref=arabroot.io)**:** توزيعة مجانية مفتوحة المصدر للتحقيق، آخر إصدار لها 26.03 في أبريل 2026، ولها نسخة صغيرة للنسخ فقط اسمها Tsurugi Acquire.

وقد يتساءل البعض: إذا كانت التوزيعة جاهزة فلماذا لا نكتفي بها؟ والإجابة أنها ممتازة لمحطة التحليل في مكتبك، ولكنها لا تكفي للجمع من سيرفر حي في السحابة، فلن تقلع من فلاشة على سيرفر عند مزود الخدمة، وهناك تحتاج UAC أو Velociraptor.

## حقيبة الاستجابة Jump Kit

الوقت الذي تقع فيه الحادثة هو أسوأ وقت لتنزيل الأدوات وقراءة وثائقها، ولذلك جهز حقيبة الاستجابة Jump Kit مسبقاً، وهي ما تأخذه معك أو ما تجده جاهزاً عندما يرن الهاتف:

1. **قرص خارجي فارغ ومشفر** بحجم أكبر من أكبر قرص عندك، تكتب عليه النسخ والمخرجات، مع قرص ثان للنسخة الاحتياطية من الأدلة.
2. **فلاشة أدوات للقراءة فقط** فيها UAC وجامع Velociraptor دون سيرفر لـ Windows وLinux، وAVML وWinPmem، مع ملف بالهاش لكل أداة حتى تثبت أن أدواتك لم تتغير.
3. **محطة تحليل** عليها SIFT أو CAINE، أو Docker مع Image الخاصة بـ Plaso، وVolatility 3 وTSK مثبتة ومجربة.
4. **سيرفر Velociraptor جاهز** إن استطعت، وعملاؤه مثبتون على الأجهزة قبل الحادثة، فهذا يوفر عليك أكثر من أي أداة أخرى.
5. **مانع كتابة Write Blocker** لأقراص USB وSATA إذا كنت سوف تنسخ أقراصاً فعلية.
6. **أوراق**: نموذج سلسلة الحيازة، وقائمة الساعة الأولى، وأرقام التواصل، وصلاحيات الدخول إلى لوحات مزودي الخدمة، مطبوعة وليست على السيرفر الذي قد يكون مخترقاً.

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

## جدول مقارنة الأدوات

الجدول التالي يجمع الأدوات التي تحققنا منها في هذا المقال، والصعوبة تقدير منا لمستخدم يعرف Linux وليس محققاً محترفاً:

| الأداة               | المرحلة                       | المنصة                        | الرخصة                      | الصعوبة                          |
| -------------------- | ----------------------------- | ----------------------------- | --------------------------- | -------------------------------- |
| dd / dc3dd / dcfldd  | النسخ                         | Linux وUnix                   | GPL                         | سهلة، والخطر في الخطأ في الاتجاه |
| ewfacquire (libewf)  | النسخ بصيغة E01               | Linux وWindows وmacOS         | LGPL-3.0                    | متوسطة                           |
| LiME                 | نسخ الذاكرة                   | Linux وAndroid                | GPL-2.0                     | صعبة، تبنى لكل Kernel            |
| AVML                 | نسخ الذاكرة                   | Linux                         | MIT                         | سهلة                             |
| WinPmem              | نسخ الذاكرة                   | Windows                       | Apache-2.0                  | متوسطة                           |
| The Sleuth Kit       | تحليل القرص                   | Linux وWindows وmacOS         | IPL / CPL وأجزاء Apache-2.0 | متوسطة                           |
| Autopsy              | تحليل القرص بواجهة رسومية     | Windows، وLinux وmacOS بسكربت | Apache-2.0                  | سهلة                             |
| Volatility 3         | تحليل الذاكرة                 | أي نظام عليه Python           | VSL 1.0 (ليست من رخص OSI)   | صعبة                             |
| Plaso (log2timeline) | الخط الزمني                   | Docker أو Python              | Apache-2.0                  | متوسطة                           |
| Timesketch           | الخط الزمني للفريق            | تطبيق ويب على Docker          | Apache-2.0                  | متوسطة في التثبيت                |
| UAC                  | الجمع من النظام الحي          | Linux وmacOS وBSD وغيرها      | Apache-2.0                  | سهلة                             |
| Velociraptor         | الاستجابة الحية على نطاق واسع | Windows وLinux وmacOS         | AGPL-3.0                    | متوسطة، وVQL تحتاج تعلماً        |
| GRR                  | الاستجابة الحية على نطاق واسع | Windows وLinux وmacOS         | Apache-2.0                  | صعبة في التثبيت                  |
| osquery              | الفرز والمراقبة               | Windows وLinux وmacOS         | Apache-2.0 أو GPL-2.0       | سهلة لمن يعرف SQL                |
| Hayabusa / Chainsaw  | سجلات Windows                 | Windows وLinux وmacOS         | AGPL-3.0 / GPL-3.0          | سهلة                             |
| YARA-X               | البحث بالقواعد                | Windows وLinux وmacOS         | BSD-3-Clause                | متوسطة                           |
| bulk\_extractor      | تحليل القرص دون نظام الملفات  | Linux وmacOS وWindows         | GPL-3.0 أو أحدث             | سهلة                             |

## كتابة التقرير

التقرير هو المنتج الوحيد الذي يراه المدير والمستشار القانوني وربما المحكمة، فكل ما فعلته أعلاه لا قيمة له إذا لم يكتب بطريقة يستطيع شخص آخر أن يكررها ويصل إلى النتيجة نفسها. ولذلك اكتب في التقرير:

- **الأدلة:** كل نسخة وكل ملف جمعته، مع الهاش ووقت الجمع بتوقيت UTC، ومن جمعه، كما في سجل سلسلة الحيازة الذي شرحناه في [دليل DFIR](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/#chain-of-custody).
- **الأدوات:** اسم كل أداة ورقم إصدارها كما تطبعه، والأمر الذي شغلته كاملاً، مثل `icat -o 2048 evidence.dd 5`، حتى يعيده غيرك.
- **الوقائع منفصلة عن الاستنتاجات:** «الملف `_lan.txt` حجمه 29492 بايت ووقت كتابته 2026-10-03 22:05:00 بافتراض أن ساعة الجهاز UTC» واقعة، و«الموظف حذف خطة الترحيل قبل تسليم الفلاشة» استنتاج تذكر ما يدعمه.
- **ما لم تستطع معرفته:** مثل المنطقة الزمنية الأصلية للفلاشة، أو أن الملف المسترجع قد يكون ناقصاً، أو أن أداتين اختلفتا على تاريخ كما رأينا مع Plaso.

## حدود هذه الأدوات ومتى تستعين بمختص

الأدوات المفتوحة في هذا المقال هي نفسها التي يستخدمها المحترفون، ولكن الأداة لا تصنع المحقق، وهناك حالات يجب أن تتوقف فيها وتطلب مختصاً قبل أن تلمس شيئاً:

- عندما يكون هناك احتمال قضية أمام المحكمة أو جهة رسمية، فالمحكمة تسأل عن مؤهلات من جمع الدليل وطريقته، وخطأ واحد في الجمع قد يسقط الدليل كله.
- عندما تكون هناك بيانات شخصية تسربت، فهناك التزامات إبلاغ في نظام حماية البيانات الشخصية تحتاج مستشاراً قانونياً، كما ذكرنا في [الجانب القانوني](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/#legal).
- عندما يكون الهجوم برنامج فدية Ransomware أو مخترقاً ما زال داخل الشبكة، فهنا تحتاج فريق استجابة لديه خبرة في الاحتواء وليس في التحليل فقط.
- عندما يكون الدليل هاتفاً محمولاً، فتحليل الهواتف الحديثة يحتاج أدوات وخبرة خارج ما في هذا المقال.
- عندما تكون الأقراص مشفرة بالكامل أو من نوع SSD، فأوامر TRIM في أقراص SSD قد تمسح البيانات المحذوفة بعد قليل من الحذف، فلا تتوقع أن تسترجع ما استرجعناه من الفلاشة.

وما يمكنك أن تفعله بنفسك هو أن تكون جاهزاً: حقيبة استجابة مجربة، وسجلات مركزية محفوظة خارج السيرفرات، وسيرفرات مؤمنة من البداية كما في [دليل تأمين VPS](https://arabroot.io/articles/%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%AE%D8%A7%D8%AF%D9%85-vps-%D9%85%D9%86-%D8%A3%D9%88%D9%84-%D8%AF%D8%AE%D9%88%D9%84/)، فهذا ما يجعل عمل المختص أسرع وأرخص إذا احتجت إليه.

## الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

- أدوات التحقيق لا تتنافس، فكل أداة لمرحلة: dc3dd وewfacquire للنسخ، وAVML وLiME وWinPmem للذاكرة، وThe Sleuth Kit وAutopsy للقرص، وVolatility 3 لتحليل الذاكرة، وPlaso وTimesketch للخط الزمني، وUAC وVelociraptor للجمع من الأنظمة الحية.
- النسخة الجنائية بت ببت مع الهاش وليس نسخ الملفات، لأن الملفات المحذوفة والمساحة غير المستخدمة لا تنسخ بالطريقة العادية.
- في FAT يبقى الملف المحذوف حتى يكتب فوقه، واسترجعناه بـ fls وistat وicat وتطابق الهاش مع الأصل.
- FAT يحفظ الوقت بالتوقيت المحلي دون منطقة زمنية، فحدد المنطقة بالخيار `-z` واكتبها في التقرير، وقارن الأوقات المهمة بأداتين، فقد رأينا Plaso يعطي فرق شهر في إعداده الافتراضي على قرصنا.
- انتبه للرخص والصيانة: Volatility 3 برخصة VSL الخاصة، وFTK Imager مجانية ولكنها مغلقة المصدر، وVolatility 2 مؤرشف، وCyLR متوقف منذ 2021، وYARA في وضع الصيانة لصالح YARA-X.
- جهز حقيبة الاستجابة وجربها قبل الحادثة، واستعن بمختص عندما يكون هناك قضية أو بيانات شخصية أو مخترق ما زال داخل الشبكة.

[![](https://arabroot.io/content/images/2026/10/dfir-basics-cover-cover.webp)دليلالتحقيق الرقمي DFIR للمبتدئين: احفظ الأدلة قبل أن تنظف السيرفرماذا تفعل عندما تشك أن سيرفرك مخترق، ولماذا تمسح إعادة التشغيل والتنظيف الأدلة التي تحتاجها لتعرف ما حدث.](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-dfir/)[![](https://arabroot.io/content/images/2026/10/device-management-cover-cover.webp)دليلMDM: إدارة أجهزة الموظفين وتأمينها بأدوات مفتوحةكيف تدير الشركة حواسيب موظفيها وهواتفهم وتفرض عليها التشفير والتحديث، وما الذي تستطيع أن تراه فعلاً على كل جهاز.](https://arabroot.io/articles/%D8%A7%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D9%85%D9%88%D8%B8%D9%81%D9%8A%D9%86-%D9%88%D8%AA%D8%A3%D9%85%D9%8A%D9%86%D9%87%D8%A7-mdm/)[![](https://arabroot.io/content/images/2026/10/iam-pam-cover-cover.webp)دليلإدارة الهوية والوصول IAM والوصول المميز PAMمن يملك صلاحية root على سيرفراتك ومنذ متى، وكيف تضبط حسابات المديرين بصلاحيات مؤقتة وجلسات مسجلة.](https://arabroot.io/articles/%D8%A7%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%87%D9%88%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-iam-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D8%A7%D9%84%D9%85%D9%85%D9%8A%D8%B2-pam/)[![](https://arabroot.io/content/images/2026/10/secure-vps-cover-cover-2.webp)دليلتأمين سيرفر VPS على Ubuntu من أول دخولقبل أن تثبت أي تطبيق على سيرفرك الجديد، هذه الخطوات تغلق أبرز الثغرات وأولها الدخول بمفتاح SSH بدل كلمة المرور.](https://arabroot.io/articles/%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%AE%D8%A7%D8%AF%D9%85-vps-%D9%85%D9%86-%D8%A3%D9%88%D9%84-%D8%AF%D8%AE%D9%88%D9%84/)[![](https://arabroot.io/content/images/2026/10/date-time-cover-cover.webp)دليلالتاريخ والوقت للمطورين ومديري الأنظمةلماذا يتأخر التقرير ثلاث ساعات ولا تعمل المهمة المجدولة ليلة تغيير التوقيت، وكيف تضبط الوقت في السيرفر والكود.](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D9%88%D8%A7%D9%84%D9%88%D9%82%D8%AA-utc-%D9%88%D8%A7%D9%84%D9%85%D9%86%D8%A7%D8%B7%D9%82-%D8%A7%D9%84%D8%B2%D9%85%D9%86%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%82%D9%88%D9%8A%D9%85-%D8%A7%D9%84%D9%87%D8%AC%D8%B1%D9%8A/)

## سجل التحديثات

- أكتوبر 2026: كتابة المقال، وتنفيذ التجربة على قرص FAT32 تجريبي بـ dc3dd وThe Sleuth Kit 4.12.1 وPlaso 20260720، والجمع بـ UAC 3.4.0، وتشغيل Velociraptor 0.77.3 وVolatility 3 2.28.2.