Как прячут эксплойт-паки во Flash-объекте
Одной из важнейших составляющих любой вредоносной атаки является ее незаметность как для систем защиты, так и для жертвы. Основную роль в осуществлении скрытой атаки играют эксплойты к уязвимостям в ПО, с помощью которых можно незаметно загрузить на компьютер жертвы вредоносный код. Эксплойты, как правило, распространяются в эксплойт-паках, которые представляют собой плагин-детект (определяет, какое ПО и каких версий установлено у пользователя) и набор из нескольких эксплойтов, один из которых выдается пользователю в случае обнаружения подходящей уязвимости.
Не так давно мы обнаружили новый способ скрыть атаку с использованием эксплойтов — злоумышленники упаковали эксплойт-пак во Flash-файл.
Загрузка эксплойтов Стандартный способ осуществления drive-by атаки — размещение на веб-странице ссылки на страницу с эксплойт-паком (лендинг), подгружающим пользователю нужный эксплойт. С точки зрения защитного ПО данная схема демаскирует все компоненты эксплойт-пака, поскольку они просто подгружаются на странице, в результате эксплойты и сам плагин-детект присутствуют в трафике. Чтобы атака осталась незамеченной, злоумышленникам приходится отдельно маскировать все компоненты.
Новый нестандартный подход с использованием Flash-упаковки определенно является более эффективным для злоумышленников. Стандартная лендинг-страница отсутствует. Пользователь по ссылке попадает на страницу с упакованным Flash-объектом, который является эксплойт-паком, и файлом конфигурации в виде картинки. Упакованный Flash-файл с эксплойт-паком загружается на страницу в браузере с правами доступа к странице на чтение и модификацию, то есть может дописывать на страницу эксплойты, которые впоследствии будут исполняться.
Разберем как это работает на конкретном примере эксплойт-пака Neutrino.
Вот как выглядит упакованный Flash-объект:
Упакованный Flash-объект (эксплойт-пак)
И вот как он выглядит без обфускации
Flash-объект (эксплойт-пак) без обфускации
Упаковка должна защитить вредоносный объект от детекта. Автоматически большинством распространенных деобфускаторов такой Flash-объект не вскрывается. Например, SWF Decompiler подвисает и выдает ошибку.
Последствия применения одного из стандартных деобфускаторов к Flash-объекту эксплойт-пака Neutrino
При этом Flash-объект записывается на страницу в браузере пользователя с параметром allowscriptaccess = «always», позволяющим модифицировать страницу, даже если сам объект подгружен с другого домена. С одной стороны, не очень безопасно давать Flash доступ на модификацию страницы, так как назначение Flash-объектов зачастую не требует таких возможностей, и это наводит на подозрение. В то же время это вполне легальная опция, и очень много Flash-контента грузится именно так. Благодаря этой опции вредоносный Flash-объект из своих бинарных данных просто дописывает на страницу эксплойты.
Таким образом, вредоносного контента нет ни в трафике, ни на странице, передаваемой браузеру. Все скрыто за хорошим упаковщиком, а эксплойты появляются по ходу обработки страницы браузером.
Содержимое Flash-объекта Посмотрим, что содержит в себе изучаемый Flash-объект и что он пишет на веб-страницу. После распаковки мы видим шесть вложенных бинарных объектов. Эти бинарные объекты закодированы RC4, а некоторые еще и сжаты стандартным алгоритмом deflate.
Закодированные бинарные объекты внутри Flash-объекта
Вот как расшифровывается и отдается один из объектов:
Код расшифровки и вставки эксплойта на страницу
Остальные объекты раскрываются аналогично.
Перечислим бинарные объекты, содержащиеся во Flash-паке:
Эксплойт к уязвимости CVE-2013–2551 в Internet Explorer
Эксплойт к уязвимости CVE-2013–2551
Вредоносная .dll, которая входит и в другие версии эксплойт-пака Neutrino (о ней будет рассказано ниже). Два эксплойта к уязвимости CVE-2014–6332 в обработчике vbs IE:
Эксплойты к уязвимости CVE-2014–6332
Эксплойт к уязвимости 2014–0569 в Adobe Flash
Эксплойт к уязвимости 2014–0569
Эксплойт к уязвимости CVE-2014–0515 в Adobe Flash
Эксплойт к уязвимости CVE-2014–0515
Кстати, плагин-детекта для эксплойтов к Adobe Flash в данном эксплойт-паке нет, версия Adobe Flash проверяется средствами ActionScript. Версии Adobe Flash, подходящие для атаки с использованием эксплойтов, прописаны в коде Flash-пака:
В последних модификациях внесены изменения во Flash-пак, в том числе, добавлен еще один эксплойт к уязвимости CVE-2015–0536 в Adobe Flash.
Конфигурационный файл Посмотрим на одну интересную функцию во Flash-паке.
Напомним, что вместе с Flash-объектом на странице лендинга размещена картинка (конфигурационный файл).
Картинка, вставленная на страницу
Специальная функция считывает эту картинку со страницы лендинга, раскодирует ее Base64 и RC4 и получает конфигурационный файл.
Функция получения конфигурационного файла
Конфигурационный файл содержит ключи и идентификаторы рассмотренных выше эксплойтов, которые можно загружать пользователю. Наличие файла конфигурации позволяет злоумышленникам работать гибко: они могут, не меняя самого эксполойт-пака, задавать параметры его работы, оптимальные в определенный период времени. Например, указывать приоритетные эксплойты или хранить отдельно ключи для расшифровки объектов в паке.
Расшифрованный из картинки конфигурационный файл
Впрочем, в последующих модификациях Flash-пака файл конфигурации выполнен уже не в виде отдельной картинки, а содержится в самом эксплойт-паке.
Получение нагрузки Шелкод одного из эксплойто в— код vbs с бинарным кодом в строке, который выполняется в результате эксплуатации уязвимости CVE-2014–6332 в обработчике vbs IE. В результате в папку »%temp%/System32/ загружается файл shell32.dll.
Путь и имя загруженного файла похожи на адрес и имя стандартных библиотек Windows. Это позволяет, применив стандартную технику dll hijacking, не использовать функции run, start, open и т.д. и таким образом скрыть от антивируса запуск вредоносной .dll.
Использование dll hijacking shell32.dll
Эксплойт меняет переменную окружения sysdir и пытается подгрузить System.ShellApplication — тем самым стартует вредоносная .dll.
Запущенная .dll — это дропер, который загружает на компьютер жертвы и запускает скрипт «p.js».
Основная часть кода shell32.dll
Запускаемый скрипт p.js
Этот скрипт и является загрузчиком целевого вредоносного файла.
Распространение Версия Flash-пака, описанная в данной статье, появилась в конце 2014 года и активно распространялась в течение первого квартала 2015 года. Появились и новые модификации Flash-пака, однако принцип их работы остался прежним.
Только в марте 2015 года мы зафиксировали атаки Flash-пака Neutrino на компьютерах 60451 пользователей. В среднем каждый день атаке подвергались около 2 тысяч пользователей, а в отдельные дни число потенциальных жертв увеличивалось до 5–6 тысяч.
Количество уникальных пользователей, атакованных Flash-паком Neutrino
Преимущественно этот эксплойт-пак используется в атаках на пользователей в США и Канаде.
География атак Flash-пака Neutrino (март 2015)
Заключение Относительно новая техника распространения эксплойтов с использованием Flash-пака для злоумышленников оказалась довольно удачной. Стандартные свойства Flash позволяют им упаковать эксплойт-пак во Flash-объект и скрыть его обфускатором. А возможность Flash задавать параметры доступа к странице позволяет записать эксплойты на страницу в браузере пользователя. При этом в трафике и подгружаемой странице компонентов эксплойт-пака нет.
Несмотря на то, что вирусописатели постоянно обновляют эксплойт-пак и модифицируют код вредоносной Flash, чтобы сбить детектирование, «Лаборатория Касперского» вовремя реагирует на эти угрозы. Помимо стандартных методов защиты, наши продукты используют специальный компонент «Защита от эксплойтов» (AEP), который детектирует данную угрозу с помощью поведенческого анализа.
«Лаборатория Касперского» детектирует данный Flash-пак как HEUR: Exploit.Script.Blocker, HEUR: Exploit.SWF.Generic.
Полный текст статьи читайте на Лаборатория Касперского