Firmware Analysis
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
ПЗП є основним програмним забезпеченням, яке дозволяє пристроям працювати правильно, керуючи та полегшуючи зв'язок між апаратними компонентами та програмним забезпеченням, з яким взаємодіють користувачі. Воно зберігається в постійній пам'яті, що забезпечує доступ пристрою до важливих інструкцій з моменту його ввімкнення, що призводить до запуску операційної системи. Аналіз та потенційне модифікування ПЗП є критичним кроком у виявленні вразливостей безпеки.
Збір інформації є критично важливим початковим кроком у розумінні складу пристрою та технологій, які він використовує. Цей процес включає збір даних про:
Архітектуру ЦП та операційну систему, на якій він працює
Специфікації завантажувача
Схему апаратного забезпечення та технічні характеристики
Метрики кодової бази та місця розташування джерел
Зовнішні бібліотеки та типи ліцензій
Історії оновлень та регуляторні сертифікації
Архітектурні та потокові діаграми
Оцінки безпеки та виявлені вразливості
Для цієї мети інструменти відкритих джерел (OSINT) є безцінними, як і аналіз будь-яких доступних компонентів програмного забезпечення з відкритим кодом через ручні та автоматизовані процеси перевірки. Інструменти, такі як Coverity Scan та Semmle’s LGTM, пропонують безкоштовний статичний аналіз, який можна використовувати для виявлення потенційних проблем.
Отримання ПЗП можна здійснити різними способами, кожен з яких має свій рівень складності:
Безпосередньо від джерела (розробників, виробників)
Створюючи його з наданих інструкцій
Завантажуючи з офіційних сайтів підтримки
Використовуючи Google dork запити для знаходження розміщених файлів ПЗП
Доступаючи до хмарного сховища безпосередньо, за допомогою інструментів, таких як S3Scanner
Перехоплюючи оновлення за допомогою технік "людина посередині"
Витягуючи з пристрою через з'єднання, такі як UART, JTAG або PICit
Слухаючи запити на оновлення в межах зв'язку пристрою
Визначаючи та використовуючи жорстко закодовані кінцеві точки оновлень
Скидаючи з завантажувача або мережі
Видаляючи та читаючи чіп пам'яті, коли все інше не спрацювало, використовуючи відповідні апаратні інструменти
Тепер, коли ви отримали ПЗП, вам потрібно витягти інформацію про нього, щоб знати, як з ним працювати. Різні інструменти, які ви можете використовувати для цього:
Якщо ви не знайдете багато з цими інструментами, перевірте ентропію зображення за допомогою binwalk -E <bin>
, якщо ентропія низька, то, ймовірно, воно не зашифроване. Якщо ентропія висока, ймовірно, воно зашифроване (або стиснуте якимось чином).
Крім того, ви можете використовувати ці інструменти для витягування файлів, вбудованих у прошивку:
File/Data Carving & Recovery ToolsАбо binvis.io (code), щоб перевірити файл.
З попередніми коментованими інструментами, такими як binwalk -ev <bin>
, ви повинні були змогти витягти файлову систему.
Binwalk зазвичай витягує її в папку, названу на честь типу файлової системи, яка зазвичай є однією з наступних: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Іноді binwalk не має магічного байта файлової системи у своїх сигнатурах. У цих випадках використовуйте binwalk, щоб знайти зсув файлової системи та вирізати стиснуту файлову систему з бінарного файлу та вручну витягти файлову систему відповідно до її типу, використовуючи наведені нижче кроки.
Виконайте наступну dd команду, щоб вирізати файлову систему Squashfs.
Альтернативно, також можна виконати наступну команду.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Для squashfs (використано в наведеному вище прикладі)
$ unsquashfs dir.squashfs
Файли будуть у директорії "squashfs-root
" після цього.
Файли архіву CPIO
$ cpio -ivd --no-absolute-filenames -F <bin>
Для файлових систем jffs2
$ jefferson rootfsfile.jffs2
Для файлових систем ubifs з NAND flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Як тільки ПЗ отримано, важливо його розібрати для розуміння його структури та потенційних вразливостей. Цей процес передбачає використання різних інструментів для аналізу та витягування цінних даних з образу ПЗ.
Набір команд надається для початкової перевірки бінарного файлу (який називається <bin>
). Ці команди допомагають у визначенні типів файлів, витягуванні рядків, аналізі бінарних даних та розумінні деталей розділів і файлової системи:
Щоб оцінити статус шифрування зображення, перевіряється ентропія за допомогою binwalk -E <bin>
. Низька ентропія вказує на відсутність шифрування, тоді як висока ентропія свідчить про можливе шифрування або стиснення.
Для витягування вбудованих файлів рекомендуються інструменти та ресурси, такі як документація file-data-carving-recovery-tools та binvis.io для перевірки файлів.
Використовуючи binwalk -ev <bin>
, зазвичай можна витягти файлову систему, часто в каталог, названий на честь типу файлової системи (наприклад, squashfs, ubifs). Однак, коли binwalk не може розпізнати тип файлової системи через відсутні магічні байти, необхідно виконати ручне витягування. Це передбачає використання binwalk
для визначення зсуву файлової системи, а потім команди dd
для вирізання файлової системи:
Після цього, в залежності від типу файлової системи (наприклад, squashfs, cpio, jffs2, ubifs), використовуються різні команди для ручного витягування вмісту.
З витягнутою файловою системою починається пошук вразливостей безпеки. Увага приділяється небезпечним мережевим демонів, жорстко закодованим обліковим даним, API-інтерфейсам, функціональності серверів оновлень, некомпільованому коду, скриптам запуску та скомпільованим двійковим файлам для офлайн-аналізу.
Ключові місця та елементи для перевірки включають:
etc/shadow та etc/passwd для облікових даних користувачів
SSL сертифікати та ключі в etc/ssl
Конфігураційні та скриптові файли на предмет потенційних вразливостей
Вбудовані двійкові файли для подальшого аналізу
Загальні веб-сервери IoT-пристроїв та двійкові файли
Кілька інструментів допомагають виявити чутливу інформацію та вразливості у файловій системі:
LinPEAS та Firmwalker для пошуку чутливої інформації
The Firmware Analysis and Comparison Tool (FACT) для комплексного аналізу прошивок
FwAnalyzer, ByteSweep, ByteSweep-go та EMBA для статичного та динамічного аналізу
Як вихідний код, так і скомпільовані двійкові файли, знайдені у файловій системі, повинні бути ретельно перевірені на вразливості. Інструменти, такі як checksec.sh для двійкових файлів Unix та PESecurity для двійкових файлів Windows, допомагають виявити незахищені двійкові файли, які можуть бути використані в атаках.
Процес емулювання прошивки дозволяє динамічний аналіз або роботи пристрою, або окремої програми. Цей підхід може стикатися з проблемами залежностей апаратного забезпечення або архітектури, але перенесення кореневої файлової системи або конкретних двійкових файлів на пристрій з відповідною архітектурою та порядком байтів, наприклад, Raspberry Pi, або на попередньо зібрану віртуальну машину, може полегшити подальше тестування.
Для аналізу окремих програм важливо визначити порядок байтів програми та архітектуру ЦП.
Щоб емулювати двійковий файл архітектури MIPS, можна використовувати команду:
І щоб встановити необхідні інструменти емуляції:
Для MIPS (великого порядку), використовується qemu-mips
, а для бінарних файлів маленького порядку, вибір буде qemu-mipsel
.
Для бінарних файлів ARM процес подібний, з використанням емулятора qemu-arm
.
Інструменти, такі як Firmadyne, Firmware Analysis Toolkit та інші, полегшують повну емуляцію прошивки, автоматизуючи процес і допомагаючи в динамічному аналізі.
На цьому етапі використовується або реальне, або емульоване середовище пристрою для аналізу. Важливо підтримувати доступ до оболонки ОС та файлової системи. Емуляція може не ідеально відтворювати взаємодію з апаратним забезпеченням, що потребує періодичних перезапусків емуляції. Аналіз повинен повторно перевіряти файлову систему, експлуатувати відкриті веб-сторінки та мережеві сервіси, а також досліджувати вразливості завантажувача. Тести цілісності прошивки є критично важливими для виявлення потенційних вразливостей бекдора.
Аналіз в реальному часі передбачає взаємодію з процесом або бінарним файлом у його операційному середовищі, використовуючи інструменти, такі як gdb-multiarch, Frida та Ghidra для встановлення точок зупинки та виявлення вразливостей через фуззинг та інші техніки.
Розробка PoC для виявлених вразливостей вимагає глибокого розуміння цільової архітектури та програмування на мовах нижчого рівня. Захисти бінарного виконання в вбудованих системах рідкісні, але коли вони присутні, можуть знадобитися такі техніки, як програмування, орієнтоване на повернення (ROP).
Операційні системи, такі як AttifyOS та EmbedOS, надають попередньо налаштовані середовища для тестування безпеки прошивки, оснащені необхідними інструментами.
AttifyOS: AttifyOS - це дистрибутив, призначений для допомоги у проведенні оцінки безпеки та тестування на проникнення пристроїв Інтернету речей (IoT). Він економить ваш час, надаючи попередньо налаштоване середовище з усіма необхідними інструментами.
EmbedOS: Операційна система для тестування безпеки вбудованих систем на базі Ubuntu 18.04, попередньо завантажена інструментами для тестування безпеки прошивки.
Щоб практикувати виявлення вразливостей у прошивці, використовуйте наступні вразливі проекти прошивки як відправну точку.
OWASP IoTGoat
Проект Damn Vulnerable Router Firmware
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)