• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья SVG файлы как вектор фишинговой атаки

Нужны ли PDF версии статей/переводов?

  • Нет

    Голосов: 3 20.0%
  • Да

    Голосов: 7 46.7%
  • Мне без разницы, главное чтоб был текст

    Голосов: 5 33.3%

  • Всего проголосовало
    15
  • Опрос закрыт .

ordinaria1

(L1) cache
Забанен
Регистрация
14.04.2019
Сообщения
832
Решения
2
Реакции
870
Гарант сделки
4
Депозит
5 Ł
Пожалуйста, обратите внимание, что пользователь заблокирован
Сурсы:
https://asec.ahnlab.com/en/87078/
https://asec.ahnlab.com/en/84720/
https://news.sophos.com/en-us/2025/02/05/svg-phishing/ - невошедшее

PDF версия - http://**************************************************************/b/47KqS6Z1qwRyblgqUlBPeY (смотрим опрос).
SHA-256: 03330172f1b35f2b13482855401ad0b7a3d73a31f34a349c7797d8a4dec296d6

Введение​

В период с ноября 2024 года по март 2025 года было зафиксировано значительное увеличение случаев распространения вредоносного ПО в формате SVG (Scalable Vector Graphics).

SVG представляет собой XML-формат векторной графики, который традиционно используется для создания масштабируемых изображений - иконок, диаграмм и графиков. Особенность данного формата заключается в возможности внедрения CSS и JavaScript непосредственно в код файла, чем и пользуются злоумышленники.

1744308020551.png

Рисунок 1. Пример фишингового письма с вложением в формате SVG

Эволюция​

Начальный период (ноябрь 2024)​

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

1744308058048.png

Рисунок 2. Два основных типа SVG-вредоносов: загрузчик и фишинг

1. Тип загрузчика (Downloader):
Этот тип SVG внешне представляет собой уведомление о необходимости загрузки PDF-документа. При детальном анализе внутреннего кода было обнаружено, что в элементах контента изображения содержались скрытые гиперссылки, которые при нажатии загружали вредоносное ПО (AsyncRat).

1744308779466.png

Рисунок 3. Структура SVG типа "загрузчик"

Злоумышленники преимущественно использовали легитимные файловые хостинги, такие как Dropbox и Bitbucket, для размещения вредоносных файлов. Загружаемый файл представлял собой защищённый паролем архив, пароль к которому предоставлялся в тексте, отображаемом при открытии SVG-файла. Внутри архива находилось ПО семейства AsyncRat.
2. Фишинговый тип:
Этот тип SVG побуждал пользователей ввести учётные данные для якобы получения доступа к документу Excel. Внутри SVG-файла содержался обфусцированный JavaScript-код, который кодировал введённую пользователем информацию в формате Base64 и отправлял её на серверы злоумышленников.

1744308803350.png

Рисунок 4. Структура SVG фишингового типа

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

Усовершенствованные версии (март 2025)​

К марту 2025 года вредоносное ПО в формате SVG приобрело значительно более сложные механизмы обхода систем защиты и противодействия анализу. Были выявлены следующие усовершенствования:
1. Усложнённая обфускация кода:
Вместо прямого внедрения JavaScript-кода, новые версии вредоносов использовали атрибут src тега script с данными, закодированными в Base64. Этот метод, изначально предназначенный для вставки изображений в веб-страницы без дополнительных запросов к серверу, был адаптирован злоумышленниками для обхода сигнатурного детектирования.

1744308875126.png

Рисунок 5. Вредоносный скрипт, закодированный в Base64

2. Система редиректов:
Декодированный скрипт содержал обфусцированные URL-адреса редиректоров.

1744308884429.png

Рисунок 6. Декодированный вредоносный код с редирект-линком

3. Фишинговая страница под видом CAPTCHA:
Конечной целью цепочки редиректов стала страница, имитирующая капчу, но содержащая кучу механизмов анти-дебага.

1744308898222.png

Рисунок 7. Фишинговая страница, маскирующаяся под Cloudflare CAPTCHA

После прохождения капчи, следует редирект на сторонний домен (в других семплах) либо открытие фишинговой страницы на текущем.

Технические особенности вредоносных SVG​

Распространённые имена файлов​

В ходе анализа было установлено, что SVG-файлы чаще всего распространялись под подобными наименованиями:
  • Play Voicemail Transcription. (387.KB).svg
  • MT103_0296626389_.svg
  • DOC217_3052.svg
  • ATT78683.svg
  • Access Document Remittance_RECEIPT6534114638.svg
Названия файлов разработаны таким образом, чтобы создать впечатление деловой или финансовой документации, что повышает вероятность открытия пользователями в корпоративной среде.

Параметры редиректов и URLs​

При анализе цепочки взаимодействий были выявлены следующие URL-адреса:

URL редиректа (редиректор):
hxxp://oK2Nv4ZWX6.moydow[.]de/aRghs76TyPdTWwfkOLkGoZRvtAKfi7SZIhk9vgovyVtf0Fl6Q86sq9CsNroQKjXHfbTWmJC49a5xoN1LdzgLlvse0zrGoqwJoaxHrElkA3a9Jn5xQbixSnS5KtaP3Hsj8j6usck0gto5qZoL44dKVbO6uQUwpokCD9qIQncUphBywUx8wta38JwOJcHKTKF6mbsxwNXG/MZz8BcXH4eB0RMRSQ5VqnN2doConZCsLAfBulS7bWQG7kNXIU2etgBMMODIaetz92FvV84lE36zALE52Z2qJBiGHbrUhnXd98X0PxQpDjc6nXZSW7GkWk6mHfLYx88VemLE678FkIXkK4ILAxSVW5yiMkWuMVe1sFdBc2lD4HlBqWWOfHT2D0REEiZFeYEMQOaQLaY33/[Email Account]

Конечный URL:
hxxps://[Account Domain].islaxw[.]es/jfWNu1IAW/#[Email Account]

Примечательно, что URL содержит параметр [Email Account], который заменяется на электронный адрес жертвы, что позволяет злоумышленникам отслеживать и подстраиваться под конкретные жертвы.
Дополнительно, после взаимодействия со страницой Cloudflare CAPTCHA, происходит отправка GET-запроса на hxxps://w2cc.pnkptj[.]ru/kella@aok5y.

Скан живого vchus3.zaisanmobvnj.es/eGErfD/$jzaleski@shb.com (с кодом): https://urlquery.net/report/2c1be694-bf34-4fae-b22e-6096830e8e5b

1744308914370.png

Рисунок 8. Фишинговая страница Microsoft Office 365, после прохождения капчи и цепочки редиректов

Анализ кода фишинговой страницы​

Механизмы противодействия анализу​

Особым технологическим интересом представляют продвинутые механизмы противодействия анализу, интегрированные в фишинговую страницу. Были выявлены следующие технические решения:

1. Блокировка инструментов автоматизации​

JavaScript:
if (navigator.webdriver || window.callPhantom || window._phantom || navigator.userAgent.includes("Burp")) {
    window.location = "about:blank";
}
Код 1. Код блокировки инструментов автоматизации

Этот компонент вредоносного кода предназначен для анализа UserAgent и переменных окружения с целью выявления:
  • Веб-драйверов (используемых для автоматизированного тестирования).
  • Инструментов автоматизации (таких как PhantomJS).
  • Прокси-инструментов и средств перехвата трафика (например, Burp Suite).
При обнаружении любого из перечисленных инструментов, скрипт автоматически перенаправляет пользователя на пустую страницу, что предотвращает дальнейший анализ.

2. Блокировка ввода специфических комбинаций клавиш​

JavaScript:
document.addEventListener("keydown", function (event) {
    function MocYDHwucV(event) {
        const hOwyvLKGbc = [
            { keyCode: 123 },
            { ctrl: true, keyCode: 85 },
            { ctrl: true, shift: true, keyCode: 73 },
            { ctrl: true, shift: true, keyCode: 67 },
            { ctrl: true, shift: true, keyCode: 74 },
            { ctrl: true, shift: true, keyCode: 75 },
            { ctrl: true, keyCode: 72 }, // Ctrl + H
            { meta: true, alt: true, keyCode: 73 },
            { meta: true, alt: true, keyCode: 67 },
            { meta: true, keyCode: 85 }
        ];
        return hOwyvLKGbc.some(qQzywYiOGI =>
            (!qQzywYiOGI.ctrl || event.ctrlKey) &&
            (!qQzywYiOGI.shift || event.shiftKey) &&
            (!qQzywYiOGI.meta || event.metaKey) &&
            (!qQzywYiOGI.alt || event.altKey) &&
            event.keyCode === qQzywYiOGI.keyCode
        );
    }
    if (MocYDHwucV(event)) {
        event.preventDefault();
        return false;
    }
});
Код 2. Код блокировки ввода специфических комбинаций клавиш

Этот механизм противодействует использованию стандартных комбинаций клавиш, которые применяются для доступа к инструментам разработчика, просмотру исходного кода и другим методам анализа. Блокируются следующие комбинации:
| Клавиша | Функция |
|---------|---------|
| F12 (keycode:123) | Открытие инструментов разработчика |
| Ctrl + U (keycode:85) | Просмотр исходного кода |
| Ctrl + Shift + I (keycode:73) | Открытие инструментов разработчика |
| Ctrl + Shift + C (keycode:67) | Открытие инструментов разработчика + выбор элемента |
| Ctrl + Shift + J (keycode:74) | Открытие инструментов разработчика + выбор консоли |
| Ctrl + Shift + K (keycode:75) | Открытие инструментов разработчика + выбор консоли (Firefox) |
| Ctrl + H (keycode:72) | Открытие истории просмотра |
| Command + Alt + I (keycode:73) | Открытие инструментов разработчика (Mac) |
| Command + Alt + C (keycode:67) | Открытие инструментов разработчика + выбор консоли (Mac) |
| Command + U (keycode:85) | Просмотр исходного кода (Mac) |
Примечательно, что данный механизм адаптирован как для пользователей Windows, так и для пользователей MacOS.

3. Блокировка правой кнопки мыши​

Код:
document.addEventListener('contextmenu', function(event) {
    event.preventDefault();
    return false;
});
Код 3. Код блокировки правой кнопки мыши

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

4. Обнаружение отладки​

Код:
(function NiZagrnkbF() {
    let mYJIRhWvKC = false;
    const fQFDBmEIUe = 100;
    setInterval(function() {
        const eXxwMSnQEu = performance.now();
        debugger;
        const NmLHWPJQxa = performance.now();
        if (NmLHWPJQxa - eXxwMSnQEu > fQFDBmEIUe && !mYJIRhWvKC) {
            XbueTstztD = true;
            mYJIRhWvKC = true;
            window.location.replace('https://www.etsy.com');
        }
    }, 100);
})();
Код 4. Код обнаружения процесса отладки

Особо изощрённым механизмом противодействия анализу является система обнаружения отладки, которая измеряет время выполнения скрипта с использованием функции performance.now(). Принцип работы основан на том, что при активной отладке время выполнения кода значительно увеличивается из-за дополнительных операций, выполняемых отладчиком.
Если время выполнения превышает определённый порог, скрипт делает вывод о наличии активного отладчика и перенаправляет пользователя на легитимный сайт, предотвращая дальнейший анализ.

Другие компоненты кода​

5. Декодирование полезной нагрузки​

JavaScript:
function kBNCNVowXP(mMbhoWHQEo, ybMIijzNPc) {
    let KFlaCSmBmB = '';
    mMbhoWHQEo = atob(mMbhoWHQEo);
    let ydMmJjvPRF = ybMIijzNPc.length;
    for (let i = 0; i < mMbhoWHQEo.length; i++) {
        KFlaCSmBmB += String.fromCharCode(mMbhoWHQEo.charCodeAt(i) ^ ybMIijzNPc.charCodeAt(i % ydMmJjvPRF));
    }
    return KFlaCSmBmB;
}
Код 5. Функция для декодирования полезной нагрузки

Этот компонент отвечает за расшифровку полезной нагрузки, которая будет внедрена в веб-страницу. Функция kBNCNVowXP принимает два параметра:
  • mMbhoWHQEo: строка, закодированная в base64, содержащая зашифрованные данные.
  • ybMIijzNPc: ключ, используемый для декодирования.
Как работает функция:
1. Декодирование base64: Входная строка mMbhoWHQEo преобразуется из base64 в двоичный формат с помощью atob().
2. XOR-операция: Каждый символ декодированной строки подвергается операции XOR с соответствующим символом ключа ybMIijzNPc. Ключ повторяется циклически, чтобы соответствовать длине строки.
3. Формирование результата: Итог операции преобразуется в читаемую строку и возвращается.
Механизм скрывает истинное содержимое полезной нагрузки до момента её выполнения, что усложняет анализ кода без знания ключа.

6. Внедрение полезной нагрузки в страницу​

JavaScript:
var MwnNQihyLC = kBNCNVowXP(`UhgqeQJj...длинная строка...`, `n9n6A7jQQC`);
document.write(MwnNQihyLC);
Код 6. Вызов функции декодирования и внедрение полезной нагрузки

Этот фрагмент выполняет две задачи:
1. Декодирование: Вызывает функцию kBNCNVowXP с зашифрованной строкой и ключом, сохраняя результат в переменной MwnNQihyLC.
2. Внедрение: Использует document.write() для записи декодированного содержимого в HTML.

7. Самоуничтожение скрипта​

JavaScript:
var DnKKzRShdc = document.currentScript;
DnKKzRShdc.parentNode.removeChild(DnKKzRShdc);
Код 7. Код для удаления скрипта из DOM

Этот фрагмент:
1. Идентифицирует себя: Использует document.currentScript для получения ссылки на текущий <script>-элемент.
2. Удаляет себя: Удаляет элемент из DOM с помощью parentNode.removeChild().
После выполнения задач (декодирования и внедрения) скрипт самоуничтожается.

Семплы​

Семплы .svg можно скачать здесь или в теме на форуме. Пароль местный.
 

Вложения

  • SVG файлы как вектор фишинговой атаки.pdf
    2.6 МБ · Просмотры: 24
  • samples.zip
    233.2 КБ · Просмотры: 21
Тема была бы не полной, если не упомянуть, что в svg-файлы через foreignObject (https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/foreignObject)
можно вполне законно встраивать любой html-код. А сами svg-файлы можно заливать на множество платформ и сервисов как любые изображения наровне с gif и jpg.
И тут открывается невероятный просто для фишинга:
Сами по себе xss не интересны, т.к. куки, необходимые для авторизации почти всегда под флагом httpOnly, но ничего не мешает отрисовать свою страницу логина, и собирать пароли. И спамить такие ссылки куда удобнее, бо это доверенные домены.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх