Firmware Analysis
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS:Навчання AWS Red Team Expert (ARTE) від HackTricks Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks
Прошивка є важливим програмним забезпеченням, яке дозволяє пристроям працювати належним чином, керуючи та сприяючи комунікації між апаратними компонентами та програмним забезпеченням, з яким користувачі взаємодіють. Вона зберігається в постійній пам'яті, забезпечуючи доступ пристрою до важливих інструкцій з моменту ввімкнення живлення, що призводить до запуску операційної системи. Аналіз та, можливо, модифікація прошивки є важливим кроком у виявленні уразливостей безпеки.
Збір інформації є критичним початковим кроком у розумінні структури пристрою та використовуваних технологій. Цей процес включає збір даних про:
Архітектуру ЦП та операційну систему, яку вона виконує
Конкрети завантажувача
Апаратне забезпечення та технічні описи
Метрики кодової бази та місця розташування джерел
Зовнішні бібліотеки та типи ліцензій
Історії оновлень та регуляторні сертифікати
Архітектурні та блок-схеми
Оцінки безпеки та виявлені уразливості
Для цієї мети інструменти відкритого джерела інформації (OSINT) є невід'ємними, так само як аналіз будь-яких доступних компонентів програмного забезпечення з використанням ручних та автоматизованих процесів перегляду. Інструменти, такі як Coverity Scan та LGTM від Semmle, пропонують безкоштовний статичний аналіз, який можна використовувати для виявлення потенційних проблем.
Отримання прошивки можна здійснити різними способами, кожен з яких має свій рівень складності:
Прямо від джерела (розробники, виробники)
Побудова за наданими інструкціями
Завантаження з офіційних сайтів підтримки
Використання запитів 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-пам'яттю
$ 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
Файли конфігурації та скрипти для потенційних вразливостей
Вбудовані бінарні файли для подальшого аналізу
Загальні веб-сервери та бінарні файли пристроїв Інтернету речей
Декілька інструментів допомагають виявляти чутливу інформацію та вразливості в межах файлової системи:
LinPEAS та Firmwalker для пошуку чутливої інформації
Інструмент аналізу та порівняння прошивки (FACT) для комплексного аналізу прошивки
FwAnalyzer, ByteSweep, ByteSweep-go та EMBA для статичного та динамічного аналізу
Як джерело коду, так і компільовані бінарні файли, знайдені в файловій системі, повинні бути ретельно перевірені на вразливості. Інструменти, такі як checksec.sh для бінарних файлів Unix та PESecurity для бінарних файлів Windows, допомагають виявляти незахищені бінарні файли, які можуть бути використані для атак.
Процес емуляції прошивки дозволяє проводити динамічний аналіз роботи пристрою або окремої програми. Цей підхід може зіткнутися з викликами апаратного забезпечення або залежностями від архітектури, але передача кореневої файлової системи або конкретних бінарних файлів на пристрій з відповідною архітектурою та порядком байтів, такий як Raspberry Pi, або на попередньо побудовану віртуальну машину, може сприяти подальшому тестуванню.
Для вивчення окремих програм важливо визначити порядок байтів та архітектуру ЦП.
Для емуляції бінарного файлу з архітектурою MIPS можна використовувати команду:
І для встановлення необхідних інструментів емуляції:
Для архітектури MIPS (big-endian) використовується qemu-mips
, а для little-endian бінарних файлів вибір падає на qemu-mipsel
.
Для ARM бінарних файлів процес схожий, з використанням емулятора qemu-arm
.
Інструменти, такі як Firmadyne, Firmware Analysis Toolkit та інші, сприяють повній емуляції прошивки, автоматизуючи процес та допомагаючи у динамічному аналізі.
На цьому етапі для аналізу використовується реальне або емульоване середовище пристрою. Важливо забезпечити доступ до оболонки ОС та файлової системи. Емуляція може не ідеально відтворювати апаратні взаємодії, що може вимагати періодичного перезапуску емуляції. Аналіз повинен переглядати файлову систему, використовувати вразливі веб-сторінки та мережеві сервіси, досліджувати вразливості завантажувача. Тести на цілісність прошивки є критичними для виявлення потенційних вразливостей задніх дверей.
Аналіз в реальному часі передбачає взаємодію з процесом або бінарним файлом у його робочому середовищі, використовуючи інструменти, такі як gdb-multiarch, Frida та Ghidra для встановлення точок зупинки та ідентифікації вразливостей за допомогою фаззингу та інших технік.
Розробка PoC для виявлених вразливостей вимагає глибокого розуміння цільової архітектури та програмування на мовах низького рівня. Захист від виконання коду вбудованих систем рідко зустрічається, але у разі його наявності можуть знадобитися техніки, такі як Return Oriented Programming (ROP).
Операційні системи, такі як AttifyOS та EmbedOS, надають попередньо налаштовані середовища для тестування безпеки прошивки, обладнані необхідними інструментами.
AttifyOS: AttifyOS - це дистрибутив, призначений для допомоги у проведенні оцінки безпеки та тестування на проникнення пристроїв Інтернету речей (IoT). Він заощаджує час, надаючи попередньо налаштоване середовище з усіма необхідними завантаженими інструментами.
EmbedOS: Операційна система для тестування безпеки вбудованих систем на основі Ubuntu 18.04, попередньо завантажена інструментами для тестування безпеки прошивки.
Для практики виявлення вразливостей у прошивці використовуйте наступні проекти вразливих прошивок як вихідну точку.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)