
مجموعة أدوات لمحاكاة البرامج الثابتة وتحليلها بحثًا عن الثغرات الأمنية
FAT هي مجموعة أدوات تم بناؤها لمساعدة باحثي الأمن على تحليل وتحديد الثغرات في البرامج الثابتة لأجهزة إنترنت الأشياء والأجهزة المضمنة. تُستخدم هذه المجموعة أيضًا في تدريب "استغلال ثغرات إنترنت الأشياء الهجومي" الذي تقدمه Attify.
ملاحظة:
في الوقت الحالي، هو مجرد نص برمجي لأتمتة Firmadyne وهي أداة تستخدم لمحاكاة البرامج الثابتة. في حالة وجود أي مشاكل مع المحاكاة الفعلية، يرجى نشر مشاكلك في مشاكل firmadyne.
في حالة مواجهتك لمشاكل، يمكنك تجربة AttifyOS الذي يحتوي على مجموعة أدوات تحليل البرامج الثابتة وأدوات أخرى مثبتة مسبقًا وجاهزة للاستخدام.
مجموعة أدوات تحليل البرامج الثابتة (FAT من الآن فصاعدًا) مبنية على Firmadyne مع بعض التغييرات. يستخدم Firmadyne قاعدة بيانات PostgreSQL لتخزين المعلومات حول الصور المُحاكاة. ولكن فقط للوظيفة الأساسية أي محاكاة البرامج الثابتة، فإن PostgreSQL ليست ضرورية حقًا. لذلك لا تستخدمها FAT.
تم تطوير FAT باستخدام Python 3. ومع ذلك، يجب أن يكون لديك كل من Python 3 و Python 2 مثبتين لأن أجزاء من Firmadyne وتبعياته تستخدم Python 2. يُوصى بشدة بتثبيت FAT داخل جهاز افتراضي.
للتثبيت، ما عليك سوى استنساخ المستودع وتشغيل النص البرمجي ./setup.sh.
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
بعد اكتمال التثبيت، قم بتحرير ملف fat.config وقم بتوفير كلمة مرور sudo كما هو موضح أدناه. يتطلب Firmadyne صلاحيات sudo لبعض عملياته. يتم توفير كلمة مرور sudo لأتمتة العملية.
[DEFAULT]
sudo_password=attify123
firmadyne_path=/home/attify/firmadyne
$ ./fat.py <ملف البرنامج الثابت>
قم بتوفير اسم ملف البرنامج الثابت كوسيطة للنص البرمجي.
سيعرض النص البرمجي عناوين IP المخصصة لواجهات الشبكة المُنشأة. قم بتدوينها.
أخيرًا، سيقول أن المحاكاة قيد التشغيل. اضغط على ENTER وانتظر حتى يتم تشغيل البرنامج الثابت. قم بتنفيذ ping على عنوان IP الذي ظهر في الخطوة السابقة، أو افتحه في المتصفح.
تهانينا! تمت محاكاة البرنامج الثابت بنجاح.
لإزالة جميع صور البرامج الثابتة التي تم تحليلها، قم بتشغيل الأمر التالي:
$ ./reset.py
$ ./fat.py DIR-601_REVB_FIRMWARE_2.01.BIN
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.3
Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitation
By Attify - https://attify.com | @attifyme
[+] Firmware: DIR-601_REVB_FIRMWARE_2.01.BIN
[+] Extracting the firmware...
[+] Image ID: 1
[+] Identifying architecture...
[+] Architecture: mipseb
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('br0', '192.168.0.1')]
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate qemu
عرض Asciicast
$ ./fat.py DIR890A1_FW103b07.bin --qemu 2.5.0
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.3
Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitation
By Attify - https://attify.com | @attifyme
[+] Firmware: DIR890A1_FW103b07.bin
[+] Extracting the firmware...
[+] Image ID: 2
[+] Identifying architecture...
[+] Architecture: armel
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('br0', '192.168.0.1'), ('br1', '192.168.7.1')]
[+] Using qemu-system-arm from /home/attify/firmware-analysis-toolkit/qemu-builds/2.5.0
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate qemu
في الوقت الحالي، لا تعمل نواة firmware الخاصة بـ ARM مع أحدث إصدار من Qemu (2.11.1) المتاح في المستودع الرسمي لـ Ubuntu 18.04. ومع ذلك، فإن Qemu (2.5.0) على Ubuntu 16.04 يعمل. بدلاً من ذلك، يمكنك أيضًا استخدام Qemu المرفق (2.5.0) المقدم مع firmadyne كما هو موضح في المثال 2.
إذا لم يتم اكتشاف أي واجهات شبكة، حاول زيادة قيمة المهلة من 60 في scripts/inferNetwork.sh كما هو موضح أدناه
echo "Running firmware ${IID}: terminating after 60 secs..."
timeout --preserve-status --signal SIGINT 60 "${SCRIPT_DIR}/run.${ARCH}.sh" "${IID}"
يتضمن المستودع بالفعل بناءات ثابتة لـ qemu 2.0.0 و 2.5.0 و 3.0.0 (في الإصدارات) ولكن إذا كنت تريد بناء خاصتك، اتبع الخطوات أدناه.
على جهاز افتراضي نظيف Ubuntu 16.04، قم بتشغيل. (من المهم استخدام 16.04، الإصدارات الأحدث بها مشاكل مع التجميع الثابت).
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-2.0.0.tar.bz2
tar xf qemu-2.0.0.tar.bz2
mkdir qemu-2.0.0-build
cd qemu-2.0.0
./configure --prefix=$(realpath ../qemu-2.0.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard-nss --disable-spice --disable-libusb --disable-usb-redir
make
make install
يمكن العثور على الملفات الثنائية المترجمة في دليل qemu-2.0.0-build.
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-2.5.0.tar.bz2
tar xf qemu-2.5.0.tar.bz2
mkdir qemu-2.5.0-build
cd qemu-2.5.0
./configure --prefix=$(realpath ../qemu-2.5.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard --disable-libusb --disable-usb-redir
make
make install
يمكن العثور على الملفات الثنائية المترجمة في دليل qemu-2.5.0-build.
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-3.0.0.tar.bz2
tar xf qemu-3.0.0.tar.bz2
mkdir qemu-3.0.0-build
cd qemu-3.0.0
./configure --prefix=$(realpath ../qemu-3.0.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard --disable-libusb --disable-usb-redir
make
make install
يمكن العثور على الملفات الثنائية المترجمة في دليل qemu-3.0.0-build.
ملاحظة: يجب أن يكون من الممكن أيضًا تجميع qemu بشكل ثابت على نظام alpine ولكن لم يتم اختبار ذلك. بشكل عام، يُفضل التجميع على alpine بدلاً من Ubuntu لأن الأول يأتي مع musl libc وهو أفضل في الربط الثابت من glibc على Ubuntu.