
صندوق رمل لينكس متعدد المنصات
ديتوكس هو صندوق رمل تم تطويره لإجراء تحليل حركة المرور للبرامج الضارة لنظام لينكس والتقاط IOCs من خلال ذلك. يتم استخدام مشرف QEMU لمحاكاة لينكس (ديبيان) لمختلف معماريات وحدة المعالجة المركزية.
المعالجات التالية مدعومة حالياً:
استخدم النسخة المباشرة الآن: http://detux.org
يحتوي هذا الإصدار من ديتوكس على السكريبت لتنفيذ ملف ثنائي/سكريبت لنظام لينكس في معمارية CPU محددة. لا تقلق إذا كنت لا تعرف المنصة، فالأمر موجود في السكريبت، تساعد حزمة Magic في اختيار معمارية CPU بطريقة آلية. x86 هي إصدار CPU الافتراضي، ويمكن تعديله إلى آخر مختلف في ملف الإعدادات.
يوفر هذا الإصدار تقرير التحليل بتنسيق DICT، والذي يمكن تخصيصه بسهولة لإدراجه في قواعد بيانات NOSQL.
تم توفير سكريبت مثال يوضح استخدام مكتبة الصندوق الرملي.
- التحليل الثابت
-- السلاسل الأساسية المستخرجة من الملف الثنائي
-- معلومات ELF الناتجة عن أوامر readelf
-- يمكن تعديل report.py لإضافة المزيد من الأوامر من طرف ثالث لتحليل الملف الثنائي وإضافة النتيجة إلى DICT.
- التحليل الديناميكي
-- يتم تحليل ملفات pcap الملتقطة باستخدام DPKT لاستخراج IOCs والمعلومات القابلة للقراءة من الحزم.
حزم النظام
مكتبات بايثون (يفضل استخدام بيئة افتراضية)
يرجى التأكد من تلبية المتطلبات المذكورة أعلاه قبل استخدام ديتوكس. قد تختلف بعض التبعيات من نظام تشغيل لآخر.
- NIC1: هذه الواجهة للوصول إلى المضيف
- NIC2: واجهة موصولة مع أجهزة QEMU الافتراضية للصندوق الرملي. يمكن توجيه حركة المرور من الواجهة إلى WHONIX أو REMNUX أو بوابة مخصصة لتصفية/السماح بالوصول إلى الإنترنت للأجهزة الافتراضية في الصندوق الرملي.
شكر خاص لـ aurel الذي قام برفع صور أجهزة افتراضية مبنية مسبقًا لـ QEMU Debian لجميع معماريات CPU الممكنة. توجد صور الأجهزة الافتراضية على الرابط: https://people.debian.org/~aurel32/qemu/، ويحتوي نفس الرابط على أمثلة أوامر لاستدعاء صور الأجهزة الافتراضية.
يمكنك استخدام السكريبت التالي لتنزيل صور الأجهزة الافتراضية تلقائيًا إلى مجلد "qemu" الخاص بديتوكس.
#x86
wget https://people.debian.org/~aurel32/qemu/i386/debian_wheezy_i386_standard.qcow2 -P qemu/x86/1/
#x86-64
wget https://people.debian.org/~aurel32/qemu/amd64/debian_wheezy_amd64_standard.qcow2 -P qemu/x86-64/1/
#arm
wget https://people.debian.org/~aurel32/qemu/armel/debian_wheezy_armel_standard.qcow2 -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/initrd.img-3.2.0-4-versatile -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/vmlinuz-3.2.0-4-versatile -P qemu/arm/1/
#mips
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-3.2.0-4-4kc-malta -P qemu/mips/1/
wget https://people.debian.org/~aurel32/qemu/mips/debian_wheezy_mips_standard.qcow2 -P qemu/mips/1/
#mipsel
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta -P qemu/mipsel/1/
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2 -P qemu/mipsel/1/
يستخدم ديتوكس SSH للتواصل مع الأجهزة الافتراضية، وبالتالي، هذا مطلوب حاليًا لكي تتمكن الأجهزة الافتراضية من امتلاك قدرة الشبكات. بالنظر إلى أن الملفات الثنائية المدرجة في نفس المسار، يمكنك إضافة الأسطر التالية إلى /etc/sudoers (فقط إذا كنت مستخدمًا غير جذر):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<your detux username here> ALL = (ALL) NOPASSWD: QEMU_CMD
قم بتغيير مسارات الملفات الثنائية إذا كانت مختلفة لديك.
أضف الإعدادات التالية إلى /etc/qemu-ifup، وقم بعمل نسخة احتياطية من الأصل إذا كان لديك واحد:
#! /bin/sh
# Script to bring a network (tap) device for qemu up.
# The idea is to add the tap device to the same bridge
# as we have default routing to.
# in order to be able to find brctl
PATH=$PATH:/sbin:/usr/sbin
ip=$(which ip)
ifconfig=$(which ifconfig)
echo "Starting" $1
if [ -n "$ip" ]; then
ip link set "$1" up
else
brctl=$(which brctl)
if [ ! "$ip" -o ! "$brctl" ]; then
echo "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2
exit 0
fi
ifconfig "$1" 0.0.0.0 up
fi
switch=$(ip route ls | \
awk '/^default / {
for(i=0;i<NF;i++) { if ($i == "dev") { print $(i+1); next; } }
}'
)
if [ -d /sys/class/net/br0/bridge/. ]; then
if [ -n "$ip" ]; then
ip link set "$1" master br0
else
brctl addif br0 "$1"
fi
exit # exit with status of the previous command
fi
echo "W: $0: no bridge for guest interface found" >&2
بالنظر إلى أن eth0 هي الواجهة التي تريد ربط أجهزتك الافتراضية بها، يمكنك إزالة إعدادات eth0 واستخدام الإعدادات التالية في /etc/network/interfaces:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
يمكنك أيضًا تحديد عنوان ثابت استخدمته لـ eth0.
انتقل إلى المجلد الذي توجد به صور الأجهزة الافتراضية الخاصة بك لكل صورة من صور QEMU، على سبيل المثال لـ ARM هو:
<your detux folder>/qemu/arm/1/
لكل صورة، اتبع تعليمات إقلاع الجهاز الافتراضي المعطاة في "https://people.debian.org/~aurel32/" لبدء تشغيل الجهاز الافتراضي. ومع ذلك، إذا كنت مستخدمًا غير جذر، فسيتعين عليك استخدام sudo.
أوامر إقلاع الأجهزة الافتراضية (استبدل بعنوان MAC الذي ترغب فيه):
#x86
sudo qemu-system-i386 -hda qemu/x86/1/debian_wheezy_i386_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#x86-64
sudo qemu-system-x86_64 -hda qemu/x86-64/1/debian_wheezy_amd64_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#arm
sudo qemu-system-arm -M versatilepb -kernel qemu/arm/1/vmlinuz-3.2.0-4-versatile -initrd qemu/arm/1/initrd.img-3.2.0-4-versatile -hda qemu/arm/1/debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mips
sudo qemu-system-mips -M malta -kernel qemu/mips/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mips/1/debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mipsel
sudo qemu-system-mipsel -M malta -kernel qemu/mipsel/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mipsel/1/debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
يتطلب ديتوكس لقطة حالة جهاز افتراضي مهيأة مسبقًا مع عناوين IP وإعداد ssh.
(qemu)
(qemu) savevm init
(qemu) q
-- كرر الخطوة 1 لجميع الأجهزة الافتراضية
لكي يتمكن المستخدم غير الجذر من التقاط الحزم، يحتاج Dumpcap إلى صلاحيات الالتقاط. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
قد يمكنك الأمر التالي من ذلك:
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <your user name>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
ضع في اعتبارك أنه قد يتعين عليك تسجيل الخروج والدخول مرة أخرى أو إعادة تشغيل المضيف لتطبيق الأذونات. إذا كنت غير قادر على التقاط الحزم أو واجهت أخطاء متعلقة بـ dumpcap، فأنت بحاجة إلى التحقق من تعيين أذونات المستخدمين لديك بشكل صحيح وأن مسار dumpcap صحيح.
يحتاج ملف detux.cfg الموجود في الدليل الرئيسي إلى التهيئة. يجب تكوين كل قسم جهاز افتراضي مع معلمات الشبكة الصحيحة وبيانات اعتماد SSH. يمكنك اختيار مستخدم جذر/غير جذر حسب حاجتك.
يمكن استخدام مكتبة ديتوكس الموجودة في دليل "core" لتناسب حاجتك من التحليل. يحتوي المستودع على "detux.py" الذي يقوم بتحليل الملف الثنائي المعطى وحفظ pcap في مجلد pcap وكتابة مخرجات JSON إلى مسار ملف محدد.
usage: detux.py [-h] --sample SAMPLE [--cpu {x86,x86-64,arm,mips,mipsel}]
[--int {python,perl,sh,bash}] --report REPORT
optional arguments:
-h, --help show this help message and exit
--sample SAMPLE Sample path (default: None)
--cpu {x86,x86-64,arm,mips,mipsel}
CPU type (default: auto)
--int {python,perl,sh,bash}
Architecture type (default: None)
--report REPORT JSON report output path (default: None)
مثال:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
شكر لـ Aurélien Jarno (@aurel32) (https://www.aurel32.net/) على صور الأجهزة الافتراضية المبنية مسبقًا.