Ловушка для фишинга: 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 и ждем сигналы.

@makrushin

Ловушка для фишинга: JS и CSS-канарейки | Сетка — социальная сеть от hh.ru