Как рас­ширить воз­можнос­ти C2-маяка, не перепи­сывая его код и не под­став­ляясь под анти­виру­сы? В статье раз­бира­ем Beacon Object Files — лег­кий модуль­ный спо­соб добав­лять новые фун­кции пря­мо на лету. С помощью BOF мож­но про­водить пос­тэкс­плу­ата­цию, зак­репле­ние, эксфиль­тра­цию и выпол­нять любые кас­томные задачи без доработ­ки самого маяка.

Нап­ример, для про­веде­ния фишин­говой ата­ки тебе нуж­но раз­работать маяки, которые запус­кают­ся на зах­вачен­ной машине и отсту­кива­ют какому‑то 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.c. Спер­ва прос­то соз­дадим фун­кцию, которая будет точ­кой опо­ры:

void go()
{
}

Для ком­пиляции нуж­но исполь­зовать MinGWGCC. В Linux я буду ком­пилиро­вать так:

x86_64-w64-mingw32-gcc -c -o example.o example.c

Здесь -c — опция, которая сооб­щает ком­пилято­ру о том, что это объ­ектный файл.

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

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии