Содержание статьи
Эта статья нацелена на людей, которые постепенно вырастают из тасков на 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.
Для начала скачаем и соберем таргет:
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
создаст две директории: /
и /
, а затем перейдет в директорию /
. Эти папки потом понадобятся нам при фаззинге.
Запускаем программу:
./exif Canon_400.jpg
И видим результат ее работы.
Отлично! С работой программы разобрались.
Фаззинг
Теперь настало время фаззинга. Он поможет нам напасть на след потенциальных багов.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее