🦇 ЧТО ТАКОЕ C2-ФРЕЙМВОРК? РАЗБИРАЕМ НА ИСХОДНИКАХ
Я стал замечать, что некоторые стажёры и джуны не могут внятно ответить на вроде бы простой вопрос:
Чё такое C2-фреймворк?
Частый ответ:
🤯 Ну типа это такая штука, где много эксплойтов…
Похоже, во всём виноват Metasploit 😐
У многих первый опыт выглядит примерно так: открыл msfconsole, нашёл модуль, ёбнул по клаве бдумс-бдыщ - получил флаг😶
После этого человек начинает думать, что любой offensive framework - это просто огромная база эксплойтов. Нет ну нет сука нет⚠️
Эксплойты вообще не главная идея C2. Точнее оно к ним вообще почти никакого отношения не имеет🦋
Поэтому сегодня не будем просто учить определение. Возьмём реальный небольшой open-source C2 - MalvexC2 и посмотрим, как всё устроено внутри💀
Автор специально сделал проект простым для изучения архитектуры C2. Внутри основные компоненты разделены на:
🐈⬛Client
🐈⬛Server
🐈⬛Implant
🐈⬛Common
Давайте разбираться на великой и проверенной временем аналогии с сервером Minecraft 👍
🐱 1. SERVER - МАЙНКРАФТ-СЕРВЕР
Представь, что вы с друзьями решили поднять Minecraft-сервер.
Каждый может подключиться со своего компа, но состояние мира находится не у одного конкретного игрока.
Оно общее.
Примерно похожую роль играет C2 Server.
Оператор отправляет команды не напрямую из своего терминала в каждый заражённый хост.
Есть центральная инфраструктура, которая:
☠️ принимает соединения от агентов;
☠️ хранит информацию о подключённых машинах;
☠️ передаёт задания;
☠️ принимает результаты;
☠️ хранит логи;
☠️ позволяет нескольким операторам работать с общей инфраструктурой.
Наверняка у кого-то была ситуация на CTF:
🤡 Я SHELL ПОЛУЧИЛ, БЛЯ БУДУ!
- Дай посмотреть.
- Эээ… ну... пуньк среньк, смотри на мой моник в дс.
Пздц удобство 😁
C2 решает именно эту организационную проблему.
В MalvexC2 начинать изучение сервера советую отсюда:
Source/Server/server.cpp
Сначала не пытайся понять каждую строку.
Ответьте себе на вопросы:
❔ Где начинается программа?
❔ Какие компоненты сервер создаёт при запуске?
❔ Где поднимаются API эндпоинты?
❔ Какие объекты отвечают за жертв команды и результаты?
После этого переходишь в:
Source/Server/Endpoints/
Особенно:
BeaconEndpoint.cpp
Здесь уже начинается самое интересное: сервер получает сообщение от импланта, обрабатывает его данные и возвращает команды.
После этого посмотри на:
Source/Server/Services/CommandService.hpp
Source/Server/Services/ResultService.hpp
Source/Server/Services/VictimService.hpp
Не надо сразу пытаться разобраться во всей архитектуре.
Ваша задача на первом этапе — увидеть три сущности:
Victim -> Command -> Result
То есть:
машина появилась -> оператор создал задачу -> агент её выполнил -> результат вернулся на сервер.
Уже после понимания этой цепочки сервер перестанет выглядеть как магический чёрный ящик.
🐈⬛ 2. CLIENT - ТВОЙ MINECRAFT НА КОМПЬЮТЕРЕ
Сервер Minecraft может работать где-нибудь в подвале у Васи.
Но вы же не подключаетесь к его базе данных через SQL и не отправляете вручную сетевые пакеты 💪
Ты запускаешь Minecraft-клиент.
Примерно так же работает клиент C2.
Client - интерфейс оператора.
Через него человек:
💀 авторизуется;
💀 видит подключённые машины;
💀 выбирает нужную сессию;
💀 отправляет команды;
💀 получает результаты;
💀 просматривает логи;
💀 собирает имплант с нужной конфигурацией.
В MalvexC2 логика клиента находится здесь:
Source/Client/
Начни с:
Client.cpp
Это хороший центральный файл.
Посмотрите, какие менеджеры использует класс Client:
☺️ CommandManager
☺️ ResultManager
☺️ VictimManager
☺️ SessionManager
После этого переходишь к:
☺️ RestGateway.cpp
Вот здесь полезно остановиться.
Попытайся понять:
как клиент оператора вообще разговаривает с сервером?
Обрати внимание на запросы авторизации, получение victims, команд, результатов и логов.
После этого:
CommandManager.cpp
И уже затем:
UiTerminalTab.cpp
Почему UI я ставлю почти в конец?
Потому что новичок часто совершает ошибку:
открывает красивый интерфейс -> смотрит кнопочки -> нихуя не понимает архитектуру👍