Содержание статьи
Например, для проведения фишинговой атаки тебе нужно разработать маяки, которые запускаются на захваченной машине и отстукивают какому‑то C2-серверу. Да, по своей сути маяк просто должен сохранять соединение с C2, и ты получаешь удаленный доступ к тачке. Но, как правило, тебе придется заниматься постэксплуатацией, эксфильтрацией, делать закреп на машине.
Тебе, конечно, не захочется переписывать маяк, раздувать его код и добавлять туда новые функции. Любую активность к тому же может запалить антивирус. Хорошо бы использовать инструмент, который уже будет обладать необходимыми фичами, а еще лучше, чтобы его можно было расширять в режиме онлайн. Именно для этого придумали Beacon Object File, или сокращенно BOF.
Beacon Object File — это концепция, которая впервые засветилась в 2021 году — в Cobalt Strike, самом известном фреймворке для постэксплуатации. Beacon Object File — это скомпилированная программа на языке C, которая может выполняться в процессе работы маяка и использовать внутренние Beacon API. BOF — это способ быстрого расширения агента новыми функциями.
BOF позволяет загружать в память нативный код во время выполнения маяка. Процесс похож на загрузку и выполнение DLL, но позволяет оставаться более незаметным. Сами BOF — это не исполняемые файлы, они представлены в форме Microsoft Common Object File Format (сокращенно COFF).
info
Common Object File Format (COFF) — это формат исполняемых файлов, файлов объектного кода и динамических библиотек.
Я решил проверить свой BOF на C2 Adaptix, который разработал RalfHacker. Это достойная замена для Cobalt Strike и опенсорсного Havoc. Adaptix — это расширяемый фреймворк для постэксплуатации, разработанный специально для пентестеров. Сервер Adaptix написан на Golang, клиентский графический интерфейс — на C++ и Qt, что позволяет использовать его в Linux, Windows и macOS.
Что ж, давай сядем за клавиатуру и начнем писать свой первый простенький BOF.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Создаем скелет
Для начала создам директорию, которая называется bofs, и сделаю файл для BOF под названием example.. Сперва просто создадим функцию, которая будет точкой опоры:
void go(){}Для компиляции нужно использовать MinGWGCC. В Linux я буду компилировать так:
x86_64-w64-mingw32-gcc -c -o example.o example.c
Здесь -c — опция, которая сообщает компилятору о том, что это объектный файл.

Теперь введу file и получу информацию о том, что это COFF .

Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
