Использование вложенных HTML-документов в фишинговых рассылках — один из стандартных приемов злоумышленников. Он позволяет мошенникам не вставлять в тело письма ссылки, которые, как правило, легко детектируются антиспам-движками и почтовыми антивирусами. HTML дает больше возможностей замаскировать фишинговый контент, чем само письмо.
Есть два основных типа HTML-вложений, которые используют злоумышленники: HTML-файлы со ссылкой на мошеннический сайт или полноценные фишинговые страницы. В первом случае злоумышленники могут не только прятать ссылку в файл, но и автоматически перенаправлять пользователя на мошеннический сайт при открытии этого файла. Второй тип HTML-вложений позволяет обходиться без сайтов и экономить на оплате хостинга: фишинговая форма и скрипт, собирающий данные, содержатся непосредственно во вложении. К тому же HTML-файл, как и письмо, можно изменять в зависимости от предполагаемой жертвы и вектора атаки, добиваясь более точной персонализации фишингового контента.
Рис. 1. Пример письма с HTML-вложением
Как устроены фишинговые HTML-вложения
Обычно фишинговые элементы в HTML-вложениях реализованы с помощью JavaScript, который и отвечает за перенаправление пользователя на фишинговый сайт или сбор и отправку учетных данных мошенникам.
Рис. 2. Фишинговая HTML-страница и ее исходный код
Чаще всего в качестве адреса, на который HTML-страница отправляет данные, злоумышленники используют вредоносный сайт, URL которого прописан в скрипте. Некоторые вложения целиком или почти целиком состоят из JS-скрипта.
В исходном коде письма HTML-вложение выглядит как обычный текст, закодированный, как правило, в base64.
Рис. 3. Вид HTML-вложения в исходном коде письма
Если в файле присутствуют вредоносные скрипты или ссылки в виде простого текста, защитному ПО ничто не мешает быстро его распарсить и заблокировать. Чтобы избежать блокировки, злоумышленники прибегают к различным трюкам.
JavaScript-обфускация
JavaScript-обфускация — один из самых популярных приемов для зашумления HTML-вложений. Чтобы URL в файле нельзя было идентифицировать и быстро заблокировать, фишеры сильно искажают и зашумляют либо непосредственно фишинговую ссылку, либо скрипт целиком, а иногда и весь HTML-файл. В некоторых случаях злоумышленники обфусцируют код вручную, но часто они используют готовые инструменты, которых довольно много в открытом доступе, например JavaScript Obfuscator.
Если открыть в текстовом редакторе HTML-вложение из фишингового письма от имени банка HSBC, приведенного на рис. 1, то мы увидим довольно запутанный JS-код, в котором, казалось бы, нет и намека ни на открытие ссылки, ни на другое осмысленное действие.
Рис. 4. Пример обфускации в HTML-вложении
Однако в действительности это обфусцированный скрипт, перенаправляющий пользователя на фишинговый сайт. Для маскировки фишинговой ссылки злоумышленники использовали готовый инструмент, поэтому нам не составило труда деобфусцировать скрипт.
Рис. 5. Деобфусцированный скрипт из вложения в письме от имени банка HSBC: ссылка для перенаправления пользователя на фишинговый сайт
Если скрипт, ссылка или HTML-страница обфусцированы вручную, восстановить исходный код значительно сложнее. Чтобы обнаружить фишинговый контент в таком файле, может потребоваться динамический анализ — запуск и отладка кода.
Кодирование
Иногда злоумышленники используют и более интересные методы. В одном из фишинговых писем нам попалось необычное HTML-вложение. В нем, как и в примере выше, использовался JavaScript. Поскольку код был очень компактным, можно было подумать, что он делает примерно то же, что и код в поддельном письме от HSBC — перенаправляет пользователя на фишинговый сайт. Но при его запуске выяснилось, что в этом маленьком скрипте закодирована полноценная фишинговая страница.
Рис. 6. HTML-файл с использованием метода unescape() — исходный код файла содержит всего пять строк, включая пустую
Рис. 7. Фишинговая страница в HTML-вложении
Трюк, который используют злоумышленники, весьма интересен — они прибегли к устаревшему JS-методу unescape(). При передаче ему последовательности символов %xx она заменяется на эквивалент из кодировки ASCII. Если запустить скрипт и посмотреть на исходный код получившейся страницы, то мы увидим обычный HTML.
Рис. 8. «Декодированный» HTML-файл
Сейчас вместо unescape() в JavaScript используются методы decodeURI() и decodeURIComponent(), но большинство современных браузеров до сих пор поддерживают unescape(). Мы не можем сказать наверняка, почему злоумышленники обратились именно к устаревшему методу, однако это может быть связано с тем, что современные методы с большей вероятностью интерпретируются и детектируются антиспам-движками.
Статистика
За первые четыре месяца 2022 года защитные решения «Лаборатории Касперского» обнаружили почти 2 миллиона писем, содержащих вредоносные HTML-вложения. Чуть менее половины из них были выявлены и заблокированы в марте — 851 328 писем. Январь был самым тихим месяцем, за который наши антиспам-решения обнаружили 299 859 писем с фишинговыми HTML-вложениями.
Заключение
Фишеры используют различные уловки, чтобы избежать блокировки рассылок и заманить на мошенническую страницу как можно больше пользователей. HTML-вложения с частично или полностью обфусцированным кодом — один из распространенных их приемов. HTML-файлы позволяют злоумышленникам использовать скрипты, обфусцировать вредоносный контент, чтобы затруднить его обнаружение, и рассылать фишинговую страницу в виде вложения, а не ссылки.
Защитные решения «Лаборатории Касперского» детектируют HTML-вложения, содержащие скрипты, вне зависимости от степени обфускации кода.
Использование HTML-вложений в фишинговых письмах