Содержание статьи
- Примерный порядок действий для бинарного ресерча
- Сбор информации о таргете и знакомство с бинарем
- Фаззинг
- Установка AFL++
- Реверс
- Eclipse-CDT
- GDB
- IDA Pro
- Выводы
Когда я только начал вливаться в мир хакерства, мне дико не хватало информации, ее приходилось собирать по крупицам. В этом материале я постарался изложить то, чего мне тогда не доставало, — всю информацию по реверсу в сжатом и систематизированном виде. А для наглядности мы с тобой разберем боевую задачу — реверс программы libexif.
Эта статья нацелена на людей, которые постепенно вырастают из тасков на CTF категории PWN и Reverse, хотят пощупать реальные программы и понять, что такое настоящий анализ бинаря. Ресерчи, которые пишут специалисты известных компаний, хороши, но большинство новичков не знают, с чего начинать делать такое исследование, как тренироваться и как заполучить стенд. Сегодня мы с тобой это исправим.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Примерный порядок действий для бинарного ресерча
Давай разложим по пунктам все действия, которые ресерчер может производить с анализируемым бинарным файлом.
Сбор информации о таргете:
- что за бинарь, для чего он предназначен, для какой платформы, есть ли исходный код в открытом доступе, или это «черный ящик»;
- как собирать бинарь — есть ли
setup.sh
или install.sh
, может, нужно просто скомпилить при помощи GCC;
- как им пользоваться: посмотреть возможности программы, что она делает и как с ней взаимодействует пользователь.
Знакомство с бинарем — применение средств первичного анализа. Вот самые ходовые тулзы:
- 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.
Для начала скачаем и соберем таргет:
mkdir libexif && cd libexif/ wget https://github.com/libexif/libexif/archive/refs/tags/libexif-0_6_14-release.tar.gz tar -xzvf libexif-0_6_14-release.tar.gz
Собираем и устанавливаем libexif
:
cd libexif-libexif-0_6_14-release/ sudo apt-get install autopoint libtool gettext libpopt-dev autoreconf -fvi./configure --enable-shared=no --prefix="$PWD/fuzzing_libexif/install/"make make install
Библиотека готова, теперь скачаем и соберем использующую ее программу:
cd $PWD/fuzzing_libexif wget https://github.com/libexif/exif/archive/refs/tags/exif-0_6_15-release.tar.gz tar -xzvf exif-0_6_15-release.tar.gz
Собираем exif:
cd exif-exif-0_6_15-release/ autoreconf -fvi./configure --enable-shared=no --prefix="$PWD/fuzzing_libexif/install/" PKG_CONFIG_PATH=$PWD/fuzzing_libexif/install/lib/pkgconfig make make install
После сборки можно запускать программу.
Давай попробуем и посмотрим, как программа работает. Из описания понятно, что на вход нужно подать картинку, поэтому скачаем из того же репозитория примеры картинок.
mkdir in; mkdir out; cd inwget https://github.com/ianare/exif-samples/archive/refs/heads/master.zip unzip master.zip
Команда mkdir in; mkdir out; cd in
создаст две директории: /in
и /out
, а затем перейдет в директорию /in
. Эти папки потом понадобятся нам при фаззинге.
Запускаем программу:
./exif Canon_400.jpg
И видим результат ее работы.
Отлично! С работой программы разобрались.
Фаззинг
Теперь настало время фаззинга. Он поможет нам напасть на след потенциальных багов.
Источник: xakep.ru