You are here: Home » Sniffing и Spoofing » Инструкция по использованию SSLStrip+ и dns2proxy для обхода HSTS

Инструкция по использованию SSLStrip+ и dns2proxy для обхода HSTS

Есть презентация по использованию SSLStrip+ и dns2proxy, а также несколько видео от энтузиастов по данному вопросу, но полной пошаговой инструкции, как и что делать я не нашёл. Поэтому эта заметка восполняет пробел, здесь я попытался максимально полно и пошагово описать запуск SSLStrip+ и dns2proxy. Я делал тестирование на BlackArch, но характер команд таков, что они должны также работать, например, на Kali Linux.

В процессе тестов мне удалось заменить протоколы HTTPS на HTTP для таких сайтов как google.com, yandex.ru, vk.com, не удалось для facebook.com, mail.ru (другие не пробовал).

Установим необходимые нам пакеты:

sudo pacman -S python2-service-identity ettercap-gtk

Обратите внимание, я не стал ставить из репозиториев ни SSLStrip, ни dns2proxy. Поскольку dns2proxy в репозиториях BlackArch отсутствует, а SSLStrip представлена в своей обычной версии (не SSLStrip+).

Все последующие команды я выполнял залогинившись под рутом.

Переключите вашу машину в режим пересылки (форвардинга).

sudo echo "1" > /proc/sys/net/ipv4/ip_forward

Настройте iptables для редиректа HTTP трафика:

sudo iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 2000
sudo 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/
sudo python2 ./sslstrip.py -l 2000

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

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

Далее меня постигли неудачи с arpspoof и LANs. В BlackArch, кстати, arpspoof называется smikims-arpspoof. У меня по каким-то причинам команда не сработала.

С LANs я делал так. Искал IP жертвы:

sudo nmap -sn 192.168.1.0/24

И запускал программу со следующими аргументами:

sudo lans -u -p -d -ip 192.168.1.33 -i enp0s3

В принципе, спуфинг и сниффинг шёл, поскольку с помощью Net-Creds я могу видеть перехваченные логины и пароли, но всё это шло в обход SSLStrip+ и dns2proxy:

sudo net-creds -i enp0s3

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

Тогда для спуфинга я решил использовать Ettercap. Делал по классической схеме:

Запускаем графический интерфейс (-G):

sudo ettercap -G

В меню выбираем Sniff, далее Unified, выбираем желаемый интерфейс:

Теперь выбираем Hosts, в нём подпункт Scan for hosts. После окончания сканирования выберите Hosts list.

В качестве Цели1 выберите роутер (Add to Target 1), в качестве Цели2 выберите устройство, которое будете атаковать (Add to Target 2).

Теперь переходим к пункту меню Mitm. Там выберите ARP poisoning… Поставьте галочку на Sniff remote connections.

На этом я остановился, поскольку SSLStrip+ и dns2proxy заработали. Хоть SSLStrip+ явно работала (понижала протокол до HTTP), но в окне программы постоянно появлялись ошибки – возможно, это нормальное поведение.

9 комментариев

  1. Интересно, а это можно применить при атаке dns hijacking? С тем же Router Scan by Stas? 

    Или в таком случае мало привилегий в "контроле трафика" и ничего не выйдет?
    Автор, можете ответить? Развернуто желательно) Интересует как подменить запрос dns (гугла например) чтобы загрузить beef на "аналитику" , по https конечно же)))

    • Если есть доступ к настройкам роутера, то алгоритм примерно следующий:

      • в настройках DNS роутера прописывается IP вашего сервера имён (DNS)
      • на вашем сервере вы поднимаете веб-сервер и сервер имен (DNS)
      • для веб-сервера создаёте виртуальные хосты (например, google.com)
      • настраиваете ваш DNS так, что при DNS запросах для google.com вместо реального IP отправляете IP вашего сервера

      Здесь я описывал это, приводил настройки для виртуальных хостов веб-сервера и для DNS прокси.

      Через HTTPS и HSTS вряд ли это можно сделать в современных браузерах. Но для некоторых сайтов можно обойти HSTS и понизить HTTPS до HTTP.

      Описанная выше схема хорошо подходит, например, для кражи учётных данных через созданные клоны сайтов (в статье, на которую дана ссылка, это и описывается).

      Если нужно подцепить на BeEF, то алгоритм примерно соответствует вышеописанному. Многие сайты используют jQuery, при этом библиотека размещена не на самом сайте, а делается ссылка на CDN, например:

      <script src="http://code.jquery.com/jquery-3.1.1.slim.min.js" </script>

      На вашем сервере поднимается виртуальный хост code.jquery.com и подменяются DNS ответы для code.jquery.com. На своём веб-сервере вы размещаете библиотеку jQuery (чтобы сайты продолжали работать), но в файл к оригинальной библиотеке добавляете код для подцепления на BeEF.

      • Спасибо за такой развернутый ответ!

        Через HTTPS и HSTS вряд ли это можно сделать в современных браузерах. Но для некоторых сайтов можно обойти HSTS и понизить HTTPS до HTTP.

        Это зависит от сайта или от браузера? В одной из статей тут я читал что удалось понизить https на http для гугла, ссылока на статью и меня конкретно интересует возможность на сервисах гугла или яндекса с условием что есть возможность контроля только DNS.

        В чем принципиальное отличие dns2proxy, DNSchef ну и коробочного dnsmasq для этих целей?

        • HSTS и HTTPS – это не одно и то же. При HSTS сайт включён в браузере в статический список сайтов (HSTS preload list). Суть в том, что если сайт не включён в этот список, то злоумышленник может перехватить первое подключение по протоколу http. После такого перехвата злоумышленник может вырезать из ответов сервера заголовки Strict-Transport-Security или перенаправлять на свой мошеннический сервер, который также будет отправлять ответы без этих заголовков. Т.е. при этом HSTS полностью нивелируется.

          У современных браузеров есть этот список сайтов с HSTS, и если злоумышленник понижает протокол до HTTP или использует невалидный сертификат, то браузер просто прекращает это соединение и пишет сообщение об ошибке.

          Т.е. дело и в браузере и сайте.

          Для SSLStrip+ нужен именно dns2proxy (если есть намерения обходить HSTS). Поскольку суть обхода заключается в том, что адрес сайта (тот, который в адресной строке браузера) меняется на заведомо отсутствующий в HSTS preload list, чтобы это сработало, нужен специальный DNS прокси (dns2proxy). А для DNS спуфинга (DNS hijacking) любая из этих программ подходит. Только у dnsmasq стопятьсот опций – возможно, кому-то её будет труднее настроить. Вообще можно поднять обычный сервер имён (DNS) и использовать его для этого – разницы никакой нет. Смысл dns2proxy и DNSchef в том, что их легче настраивать.

          Ещё в этой заметке я в качестве примеров понижал HTTPS до HTTP для Google и YouTube – на момент написания это срабатывало — там есть скриншоты, обратите внимание на название субдоменов (Bettercap также использует связку dns2proxy и SSLStrip+).

          • Очень интересно, я вижу что упустил многие основы, вы прекрасно все разъяснили! 
            Возможно у вас есть теоретически материал чтобы я мог пройти все с нуля? ) 
            Я заметил что в рунете мало действительно крутой информации, многие вещи приходиться делать по зарубежным инструкциям или по материалам конференций и если практический результата часто позитивный то теория почти всегда хромает)

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

  2. Доброго времени суток, отличная документация. Хотел бы больше прояснить по поводу прдуепления beef. Он как я понимаю может выполнять все действия только если человек на сайте подложного домена. Просто уходит в оффлайн и больше ни чего не выйдет сделать если он не посетит ещё раз эту страницу?

    • Да, если пользователь уходит со страницы, на которой размещён JavaScript BeEF, то он теряется для атакующего.

  3. Спасибо за ответ!!! А если в такой связке как вы писали ранее про библиотеку jquery , будет ли работать- я делаю хост jquery.com и там подцепляю код beef. После чего вижу как появился браузер и нажимаю загрузка флеш например. То я как понимаю на том сайте где у него подружаются эти библиотеки постоянно будет выдавать обновления? Мне по сути нужно в учебных целях в сетях научиться внедрению бэкдоров через dns. С beef это самый лучший способ? Можете посоветовать другие какие то действенные методы с помощью dns. Если говорить про связку dns2proxy то у меня не получилось понизить протокол до htttp. В режиме мониторинга конечно можно это сделать и найти сайт http, но мне важна информация для таких ресурсов как Гугл. Спасибо вам большое за ответы, с уважением

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

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