Эта статья нацелена на людей, которые постепенно вырастают из тасков на CTF категории PWN и Reverse, хотят пощупать реальные программы и понять, что такое настоящий анализ бинаря. Ресерчи, которые пишут специалисты известных компаний, хороши, но большинство новичков не знают, с чего начинать делать такое исследование, как тренироваться и как заполучить стенд. Сегодня мы с тобой это исправим.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Примерный порядок действий для бинарного ресерча
Давай разложим по пунктам все действия, которые ресерчер может производить с анализируемым бинарным файлом.
-
Сбор информации о таргете:
- что за бинарь, для чего он предназначен, для какой платформы, есть ли исходный код в открытом доступе, или это «черный ящик»;
- как собирать бинарь — есть ли
setup.
илиsh install.
, может, нужно просто скомпилить при помощи GCC;sh - как им пользоваться: посмотреть возможности программы, что она делает и как с ней взаимодействует пользователь.
-
Знакомство с бинарем — применение средств первичного анализа. Вот самые ходовые тулзы:
- file — системная утилита, которая позволяет узнать тип данных внутри файла;
- checksec — утилита, которая проверяет первичные средства безопасности в бинаре;
- xxd — отображает файл в виде шестнадцатеричных кодов или выполняет обратное преобразование;
- strings — утилита, применяемая для поиска печатаемых строк в двоичных файлах;
- VirusTotal — бесплатная служба, анализирующая подозрительные файлы и ссылки на предмет наличия вирусов, червей, троянов и всевозможных вредоносных программ;
- DIE — утилита для определения типов файлов. Кто читал книгу «Вскрытие покажет! Практический анализ вредоносного ПО», тот должен знать утилиту.
-
Фаззинг программы (если это требуется). Это техника поиска потенциальных уязвимостей в автоматическом или полуавтоматическом режиме. Здесь нам помогут:
- AFL++ — собирает информацию о покрытии для каждого измененного входного значения и помогает обнаружить новые пути выполнения и потенциальные баги;
- LibFuzzer — фреймворк для обнаружения ошибок в коде, созданный в основном для тестирования программ на C/C++, но поддерживает и другие языки;
- самописный фаззер — этот метод используется, когда программа специфичная или использовать известные фаззеры не имеет смысла или нет возможности. Пример можешь посмотреть в посте на codeby.net;
- ручной фаззинг — по сути, просто тыкание программы, как в тасках на CTF. Ресерчер просто подает случайные данные программе вручную.
-
Реверс. Этот шаг важен, и думаю, что пояснения тут не нужны. Информации в интернете полно, смотри, например, подборку статей «Реверс малвари». Здесь же перечислю основные утилиты:
- IDA Pro — это самая известная программа для дизассемблирования, в представлении она не нуждается. Как ей пользоваться, можно почитать, например, в книге Рикардо Нарвахи The IDA Pro Book (доступен любительский перевод);
- ImmunityDBG — отладчик программ для ОС Windows. Скачать можно на официальном сайте;
- EDB Debugger — кросс‑платформенный отладчик для AArch32/x86/x86-64. В данный момент официально доступен только на Linux, но уже готовятся порты для FreeBSD, OpenBSD, macOS и Windows;
- GDB Debugger — переносимый отладчик проекта GNU, работает на многих UNIX-подобных системах и помогает отлаживать многие языки программирования, включая C/C++, Free Pascal, FreeBASIC, Ada, фортран и Rust;
- Ghidra — этот фреймворк для реверса создан в АНБ США и включает в себя набор полнофункциональных высококлассных инструментов анализа программ. Работает на Windows, macOS и Linux. Подробнее о нем можно прочесть в статьях «Ghidra vs IDA Pro» и «Ghidra vs crackme»;
- radare2 — свободный кросс‑платформенный фреймворк для реверс‑инжиниринга, включает дизассемблер, шестнадцатеричный редактор, анализатор кода и прочие полезности. Используется при реверсе, отладке вредоносного ПО и прошивок. Скачать можно с GitHub;
- Eclipse-CDT — это программа для реверса, в которой можно посмотреть место падения программы в исходном коде по файлу, который вызывает краш.
- Написание эксплоита. Пишем код, который будет эксплуатировать уязвимость. Здесь все зависит от твоих умений и предпочтений, а также от того, что мы эксплуатируем и на какой платформе.
Сбор информации о таргете и знакомство с бинарем
Из названия статьи ты уже знаешь, что будем пывнить libexif
версии 0.6.14. Давай познакомимся с нашим таргетом поближе.
Libexif — это библиотека для разбора, редактирования и сохранения данных EXIF, то есть зашитых в некоторые изображения метаданных.
Давай теперь найдем какую‑нибудь программу с этой библиотекой на роль подопытного. Благо на просторах GitHub этого добра сколько угодно. Один из самых простых вариантов — программа exif. Это небольшая утилита командной строки для отображения информации EXIF. Написана она как раз для того, чтобы демонстрировать возможности libexif.
Для начала скачаем и соберем таргет:
Собираем и устанавливаем libexif
:
Библиотека готова, теперь скачаем и соберем использующую ее программу:
Собираем exif:
После сборки можно запускать программу.
Давай попробуем и посмотрим, как программа работает. Из описания понятно, что на вход нужно подать картинку, поэтому скачаем из того же репозитория примеры картинок.
Команда mkdir
создаст две директории: /
и /
, а затем перейдет в директорию /
. Эти папки потом понадобятся нам при фаззинге.
Запускаем программу:
И видим результат ее работы.
Отлично! С работой программы разобрались.
Фаззинг
Теперь настало время фаззинга. Он поможет нам напасть на след потенциальных багов.