Фишинг ушёл в картинки: три кампании обходят проверку разметки

Фишинг ушёл в картинки: три кампании обходят проверку разметки

Три фишинговые кампании полгода собирали учётные данные и не оставили в разметке страниц ни одного слова приманки. С мая по октябрь 2026 года исследователи насчитали 1740 срабатываний. Вместо текста и полей формы жертва видит изображение: бренд, банковскую квитанцию или QR-код для перехвата сессии. Правила, которые ищут фишинговые слова в HTML, на таких страницах не находят ничего. Приманка при этом видна на экране - просто она не текст.

Описание

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

Крупнейшая кампания собрала 1188 срабатываний. Ссылка ведёт на предпросмотр документа в популярном сервисе совместной работы. По ней открывается карточка проверки аккаунта онлайн-магазина с жёлтой кнопкой продолжения под случайным названием документа. Название при этом выглядит случайным. Карточку страница подгружает как картинку-превью с облачного адреса и вставляет в контейнер предпросмотра. Верхний слой разметки остаётся пустым: ни видимых слов, ни полей ввода в нём нет. Он весит 83 214 байта, но содержит ноль видимых слов, ноль полей ввода и ноль элементов canvas. Единственный SVG в разметке пустой и занимает 1,4 КБ. Картинка приходит в размере 1200 на 630 пикселей, а в запросе указан параметр =w1200-h630-p.

Вторая кампания, 361 срабатывание, рисует размытую квитанцию межбанковского перевода на HTML5 canvas. Кнопка предпросмотра поверх рисунка открывает системный диалог с запросом пароля. Пароль просят под предлогом разблокировки зашифрованного PDF. После ввода появляется второй диалог - с предложением установить мобильное приложение. Так приманка собирает учётные данные и подталкивает жертву к установке полезной нагрузки. Сама страница закрыта от индексации. Её HTML весит 18 666 байт, запрещает индексацию и архивное копирование, отключает передачу referrer и подключает стили PDF.js. Модули добавляются динамически, а квитанция рисуется на canvas 974 на 1260 пикселей рядом со скрытым вторым canvas.

Третья кампания, 191 срабатывание, выдаёт себя за вход в MAX Messenger по QR-коду. Код собран не картинкой и не рисунком, а векторными фигурами внутри SVG-файла. Из множества мелких элементов со ссылками на общие фигуры строится матрица, а по центру вставлен логотип. Со стороны это обычный QR-код. Его содержимое нельзя прочитать как текст страницы, поэтому проверка разметки видит лишь набор векторных команд.

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

Кто стоит за кампаниями, на какие организации и регионы они нацелены, не сообщается. Открытым остаётся и вопрос, удалось ли похитить учётные данные.

Индикаторы компрометации

Комментарии: 0