• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

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

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,167
Розыгрыши
0
Реакции
508
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сурсы:
https://asec.ahnlab.com/en/87078/
https://asec.ahnlab.com/en/84720/
https://news.sophos.com/en-us/2025/02/05/svg-phishing/ - невошедшее


SHA-256: 03330172f1b35f2b13482855401ad0b7a3d73a31f34a349c7797d8a4dec296d6

Введение​

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

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

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

Эволюция​

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1744727393157.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

1744727407878.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-файлы через foreignObject (Для просмотра ссылки Войди или Зарегистрируйся)
можно вполне законно встраивать любой html-код. А сами svg-файлы можно заливать на множество платформ и сервисов как любые изображения наровне с gif и jpg.
И тут открывается невероятный просто для фишинга:
Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или ЗарегистрируйсяСами по себе xss не интересны, т.к. куки, необходимые для авторизации почти всегда под флагом httpOnly, но ничего не мешает отрисовать свою страницу логина, и собирать пароли. И спамить такие ссылки куда удобнее, бо это доверенные домены.


Семплы​

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

Вложения

  • samples.zip
    233.2 KB · Просмотры: 0
  • SVG файлы как вектор фишинговой атаки.pdf
    2.6 MB · Просмотры: 0
Activity
So far there's no one here
Сверху Снизу