Reverse engineering, реверс или по-просту обратная разработка для самых маленьких и ленивых. Часть 3. Binwalk – разбираем контейнеры и прошивки
Сегодня мы поговорим об очень полезном инструменте, существенно облегчающим жизнь при разборе содержимого файлов и контейнеров – binwalk.
Любителям “копнуть поглубже” и действительно разобраться со вскрытием различных прошивок роутеров, IoT устройств, мобильников и прочей мобильно-портативной техники, рекомендуем ознакомиться с Attify OS. Помимо Binwalk, о котором мы поговорим сегодня, Attify содержит набор инструментальных средств, созданных для того, чтобы помочь исследователям безопасности анализировать и выявлять уязвимости в прошивках IoT и встроенных (embedded) устройств.
IoT устройства и встроенные системы используют прошивку, в которой частенько хранится много полезной, а зачастую и критичной для аналитика ИБ информации. Это могут быть «захардкоженные» учетные данные, триггеры для получения отладочной и системной информации, недокументированные возможности, бэкдоры и многое другое.
Про Attify мы поговорим в другой раз, а пока вернемся к нашим баранам, а вернее, binwalk-ам.
Этот инструмент позиционируется, как инструмент для анализа прошивок и поиска в них различных констант, которые помогут определить, что есть внутри прошивки, какие алгоритмы упаковки использовались, какая микропроцессорная архитектура и многое другое.
Он работает на основе сигнатурного поиска, задаваемого через регулярные выражения (можно почитать исходный код на github’e проекта – https://github.com/ReFirmLabs/binwalk).
Часто binwalk используют, чтобы примерно определить, какие файлы находятся в некотором контейнере или просто бинарном файле, который сложно отнести к какому-либо известному формату. Binwalk сможет определить склейку двух файлов в один, отобразив сигнатуры обоих форматов файлов. Также, он сможет распаковать найденные файлы (нужно добавить ключ -e). Описывать все функции достаточно муторно и бессмысленно, главное, чтобы было понятно основное назначение, а про все функции можно почитать в “help” или на гитхабе. Поэтому перейдём к практике и рассмотрим пару примеров.
Практика
Попробуем использовать binwalk на различные файлы.
Исполняемый файл под Linux.
Ничего интересного, нашёл заголовок формата ELF и строчку с копирайтом.
Попробуем запустить binwalk на прошивку роутера. Возьмём прошивку для Dlink Dir 300 (ссылка на прошивку – тык)
Видим, что был обнаружен алгоритм сжатия данных – достаточно типично для прошивок. Попробуем распаковать с помощью ключа “-e”.
При распаковке были ошибки, однако директория создалась, значит какие-то данные смогли распаковаться, посмотрим, что мы получили.
Видим 2 файла и директорию (она пуста), посмотрим что из себя представляют данные файлы.
Один файл является исполняемым модулем (по сути ядром), а второй представляет собой файловую систему. Попробуем определить микропроцессорную архитектуру для первого файла, которые предположительно содержит код.
Как и ожидалось, было найдено значительное количество вхождений. Значит данный файл содержит в себе код и логику работы прошивки, то есть исследовать и искать уязвимости нужно в нём.
binwalk также может находить другую важную и полезную информацию для исследователя или ревёрсера. Он достаточно прост в освоении и очень удобен для ряда задач. Также его можно тонко настроить благодаря Python API, но это уже тема для другого поста.
Итог
Этот инструмент достаточно прост и полезен для анализа контейнеров, прошивок. Будет не лишним в арсенале ревёрс-инженера, специалиста по компьютерной криминалистики и исследователя различного встраиваемого ПО.
Для тех же, кто всерьёз заинтересовался темой, ещё раз настоятельно рекомендуем ознакомится с Attify OS.