Ловушка для фишинга: JS и CSS-канарейки
Основной сценарий фишинг-атак с использованием reverse proxy выглядит примерно так:
1. Атакующий регистрирует доменное имя, похожее на доменное имя целевого веб-портала, который жертва использует для логина. 2. Размещает на фишинговом домене прокси и перенаправляет со своего домена все запросы от браузера пользователя к целевому ресурсу и обратно. 3. Перехватывает весь процесс аутентификации и извлекает из HTTP-запросов ценные данные: пароли и сессионные куки. 4. Использует перехваченные сессионные куки для обхода процесса мультифакторной аутентификации.
Ключевое отличие AitM-фишинга от «классического»: атакующему не нужно создавать фейковую страницу логина, которая полностью копирует оригинал. В случае с AitM злодей демонстрирует жертве оригинальную страницу без изменений. Поэтому классические методы выявления фиш-китов в этом случае не помогут.
Использование reverse proxy между браузером пользователя и порталом MFA можно обнаружить с помощью JS-скрипта, встроенного в веб-страницу. Этот скрипт может выполнять роль канарейки и сигнализировать владельцу MFA-приложения и аналитику Blue Team о попытке проведения фишинга:
1. Жертва открывает фишинговую ссылку, и в ее браузере срабатывает JS-скрипт. 2. Скрипт определяет контекст, в котором исполняется (например, URL), и сопоставляет актуальное доменное имя с ожидаемым доменным именем. 3. В случае несовпадения контекста скрипт отправляет сигнал на сервер Blue Team
Делаем похожую канарейку на CSS: 1. Для невидимого глазу изображения (пиксель) создаем атрибут url(), который делает обращение к серверу Blue Team. 2. В HTTP-заголовке обращения передается значение Referer. 3. В случае несовпадения значения Referer с заданным отправляем сигнал аналитику Blue Team.
Добавляем в белый список разрешенных URL различные CDN и ждем сигналы.