Эксплойт-паки в настоящее время не так распространены, как раньше. В прошлом они полагались на использование уже закрытых уязвимостей, однако более новые и безопасные браузеры с функцией автоматического обновления эксплуатировать известные уязвимости просто не позволяют. Ситуация обстояла немного иначе во времена популярности Adobe Flash: поскольку он представляет собой плагин, то даже если у пользователя установлен самый современный браузер, сохранялась вероятность, что Adobe Flash будет уязвим для эксплойтов первого дня. Теперь Adobe Flash отключен по умолчанию во всех браузерах и по большей части вытеснен открытыми стандартами, такими как HTML5, WebGL и WebAssembly, а к концу 2020 года его официально снимают с поддержки. Со снижением популярности Adobe Flash можно связывать и уменьшение количества эксплойт-паков. Но они не исчезли полностью, а адаптировались и переключились на пользователей Internet Explorer, не установивших последние обновления безопасности.
В 2015 году, с выходом Windows 10, на смену Internet Explorer в качестве браузера по умолчанию пришел Microsoft Edge. Но Internet Explorer все еще установлен для обеспечения обратной совместимости на машинах под управлением Windows 10 и остается браузером по умолчанию в Windows 7/8/8.1. То, что разработчики переключились на Microsoft Edge, означало, помимо прочего, что Internet Explorer больше не развивается активно и будет получать только исправления уязвимостей, без каких-либо общих улучшений в плане безопасности. Тем не менее Internet Explorer все еще остается относительно популярным браузером. По данным NetMarketShare, по состоянию на апрель 2020 г. Internet Explorer использовался на 5,45 % настольных компьютеров (для сравнения: доля Firefox — 7,25 %, Safari — 3,94 %, Edge — 7,76 %).
При этом Internet Explorer на пять лет отстает от современных браузеров в плане безопасности и поддерживает целый ряд устаревших скриптовых движков. Например, CVE-2018-8174 — это уязвимость в устаревшем движке VBScript, которая эксплуатировалась на момент обнаружения. В большинстве эксплойт-паков она быстро заняла место основной уязвимости. С момента обнаружения CVE-2018-8174 было выявлено еще несколько уязвимостей нулевого дня для Internet Explorer эксплуатированных на момент обнаружения: CVE-2018-8653, CVE-2019-1367, CVE-2019-1429 и CVE-2020-0674. Все они использовали другой устаревший компонент Internet Explorer — движок JScript. Появление эксплойтов к этим уязвимостям в составе эксплойт-паков оставалось лишь вопросом времени.
Эксплойт-паки все еще играют заметную роль в современном ландшафте угроз и продолжают развиваться. В рамках подготовки этого исследования я в течение года изучал и анализировал эволюцию одного из самых продвинутых эксплойт-паков — Magnitude.
Кратко о моих находках:
- Эксплойт-пак Magnitude продолжает поставлять шифровальщики в страны Азиатско-Тихоокеанского региона (АТР) посредством вредоносной рекламы.
- Изучение активности эксплойт-пака в течение 12 месяцев показывает, что Magnitude активно поддерживается и непрерывно развивается.
- В феврале этого года авторы Magnitude перешли на использование эксплойта для более свежей уязвимости CVE-2019-1367 в Internet Explorer (изначально обнаруженной как уязвимость нулевого дня).
- Magnitude использует ранее неизвестный эксплойт повышения привилегий для уязвимости CVE-2018-8641, разработанный известным автором эксплоитов.
Введение
Magnitude — один из старейших эксплойт-паков. Его предлагали на подпольных форумах с 2013 года, а позднее ушел в частные руки. Со сменой оператора эксплойт-пак был переориентирован на доставку программ-вымогателей пользователям из отдельных стран Азиатско-Тихоокеанского региона (АТР) с помощью вредоносной рекламы.
Активные атаки с использованием эксплойт-пака Magnitude в 2019 году по данным Kaspersky Security Network (KSN) (скачать)
Активные атаки с использованием эксплойт-пака Magnitude в 2020 году по данным Kaspersky Security Network (KSN) (скачать)
Наша статистика показывает, что страны АТР остаются мишенью до сих пор, и в течение упомянутого года эксплойт-пак Magnitude всегда использовал программы-вымогатели собственной разработки в качестве полезной нагрузки.
Вектор заражения
Как и большинство существующих эксплойт-паков, Magnitude в 2019 году использовал уязвимость CVE-2018-8174. Однако злоумышленники, стоящие за Magnitude, одними из первых перешли на более свежую уязвимость CVE-2019-1367 и с 11 февраля 2020 года используют эксплойт к ней в качестве основного. Как и в случае с CVE-2018-8174, они не разрабатывали свой собственный эксплойт для CVE-2019-1367, а вместо этого взяли за основу оригинальный эксплойт нулевого дня и модифицировали его, добавив собственный шелл-код и обфускацию.
CVE-2019-1367 является уязвимостью типа Use-After-Free, возникающей из-за того, что в устаревшем движке JavaScript jscript.dll сборщик мусора не отслеживает не привязанное значение. По умолчанию Internet Explorer 11 использует Jscript9.dll, однако в нем есть возможность выполнить скрипт с помощью устаревшего движка, включив режим совместимости с Internet Explorer 7/8. Это можно сделать с помощью следующих атрибутов скрипта:
1 2 3 4 5 |
<meta http-equiv="x-ua-compatible" content="IE=EmulateIE8" /> <script language="JScript.Compact">…</script> <meta http-equiv="x-ua-compatible" content="IE=EmulateIE8" /> <script language="JScript.Encode">…</script> |
Оригинальный эксплойт использует JScript.Compact — специальный профиль для встраиваемых устройств. Но JScript.Encode гораздо интереснее, поскольку он был разработан Microsoft для защиты скриптов и предотвращения копирования исходного кода. Этот атрибут позволяет выполнять скрипты, закодированные с помощью Microsoft Script Encoder (screnc.exe), а также отключает отладку скриптов. По сути, это своего рода DRM для JavaScript. Авторы Magnitude изменили первоначальный эксплойт, чтобы в полной мере воспользоваться этой функцией.
Эксплойт, упакованный с применением JScript.Encode
Распакованный эксплойт; шелл-код, имена и некоторые строки обфусцированы
Шелл-код
Шелл-код вызвал у меня особый интерес. Злоумышленники используют огромное количество различных кодировщиков шелл-кода, начиная с классического Metasploit shikata_ga_nai и DotNetToJScript и заканчивая разнообразными специализированными кодировщиками и вспомогательными модулями (т. н. stagers) для доставки основной полезной нагрузки.
Также невозможно было не заметить изменений, происходящих с их основным шелл-кодом, который отвечает за запуск программы-вымогателя, выступающей в качестве полезной нагрузки. Злоумышленники постоянно совершенствуют свой инструментарий.
Эксплойт-пак Magnitude существует по крайней мере с 2013 года, но ниже показаны изменения в полезной нагрузке / шелл-коде, которые произошли только в течение года (с июня 2019 по июнь 2020 гг.). В этот период мы наблюдали атаки, которые происходили практически каждый день.
Хронология изменения шелл-кода / полезной нагрузки
Дата | Описание |
Июнь 2019 г. | Шелл-код загружает полезную нагрузку, которая дешифруется с помощью авторского алгоритма на основе xor. Все строки собираются на стеке, и для изменения URL полезной нагрузки необходимо перекомпилировать шелл-код. Полезная нагрузка представляет собой PE-модуль. Имя экспортируемой функции модуля жестко прописано в коде: GrfeFVGRe. Полезная нагрузка выполняется в процессе Internet Explorer. Она содержит эксплойт повышения привилегий с поддержкой 32- и 64-разрядных версий Windows, а также зашифрованную программу-вымогатель в качестве полезной нагрузки. После повышения привилегий эксплойт внедряет программу-вымогатель в другие процессы, порождает процесс wuapp.exe и в него тоже внедряет полезную нагрузку. Если создать процесс не удается, он также запускает шифровальщик из текущего процесса. |
20 июля 2019 г. | Имя функции экспорта модуля полезной нагрузки генерируется автоматически. |
11 ноября 2019 г. | Шелл-код пытается внедрить полезную нагрузку в другие процессы. Если функция API Process32First дает сбой, порождается процесс wuapp.exe из директории Windows, и полезная нагрузка внедряется туда. В качестве метода внедрения используется WriteProcessMemory + CreateRemoteThread.
Полезной нагрузкой является программа-вымогатель без повышения привилегий. Имя функции экспорта модуля полезной нагрузки снова жестко прописано в коде, но в этот раз в виде lssrcdxhg. |
20 ноября 2019 г. | Похоже, разработчики перепутали папки с шелл-кодами: в одних атаках они используют июньский шелл-код, а в других, в тот же день, переходят на ноябрьский шелл-код с новым жестко закодированным именем функции экспорта by5eftgdbfgsq323. |
23 ноября 2019 г. | Они снова начинают использовать эксплойт повышения привилегий, но теперь также выполняется проверка уровня целостности процесса. Если речь идет о процессе с низким уровнем целостности, то полезная нагрузка выполняется эксплойтом в текущем процессе; если это не так, то она внедряется в другие процессы. Новый процесс больше не создается из шелл-кода, но все еще создается из полезной нагрузки. Имя функции экспорта модуля полезной нагрузки жестко закодировано как gv65eytervsawer2. |
17 января 2020 г. | Похоже, что в начале года у злоумышленников были небольшие каникулы. Шелл-код остался прежним, но имя функции экспорта модуля полезной нагрузки теперь выглядит как i4eg65tgq3f4. Полезная нагрузка слегка изменилась. Имя созданного процесса теперь собирается на стеке. Изменилось и имя процесса — процесс wuapp.exe больше не порождается, а запускается калькулятор calc.exe, и туда уже внедряется шифровальщик. |
27 января 2020 г. | В роли полезной нагрузки выступает теперь не PE-модуль, а обычный шелл-код. Полезной нагрузкой является программа-вымогатель без повышения привилегий. |
4 февраля 2020 г. | Полезной нагрузкой снова становится PE-модуль, но имя функции экспорта снова генерируется автоматически. |
10 февраля 2020 г. | Шелл-код содержит два URL для различных полезных нагрузок. Шелл-код проверяет уровень целостности процесса и в зависимости от него выполняет полезную нагрузку для повышения привилегий или же использует программу-вымогатель напрямую. Все строки и импорты функций в эксплойте теперь обфусцированы. Полезная нагрузка не порождает новый процесс, а только внедряется в другие процессы. |
11 февраля 2020 г. | Magnitude начинает использовать эксплойт к CVE-2019-1367 в качестве основного. Злоумышленники используют шелл-код от 27 января 2020 г., но теперь они изменили его для проверки имени отдельного процесса. Если такой процесс существует, то они не запускают полезную нагрузку из Internet Explorer. Имя процесса — ASDSvc (AhnLab, Inc.). |
17 февраля 2020 г. | Злоумышленники переключаются на шелл-код от 10 февраля 2020 г., но имя функции экспорта модуля полезной нагрузки теперь жестко прописано в коде как xs324qsawezzse. |
28 февраля 2020 г. | Шелл-код больше не шифруется. Имя функции экспорта модуля полезной нагрузки жестко закодировано как sawd6vf3y5. |
1 марта 2020 г. | Строки больше не хранятся в стеке. |
6 марта 2020 г. | Возврат к шелл-коду от 17 февраля 2020 г. |
10 марта 2020 г. | Злоумышленники добавляют часть функциональности, реализованной после 17 февраля 2020 г.: полезная нагрузка не шифруется, а строки больше не хранятся в стеке. Имя функции экспорта модуля полезной нагрузки все еще жестко закодировано как xs324qsawezzse. |
16 марта 2020 г. | Добавлена функциональность, исключающая внедрение в определенный процесс (explorer.exe). Метод внедрения также изменен на NtCreateSection + NtMapViewOfSection + RtlCreateUserThread. |
2 апреля 2020 г. | Злоумышленники добавляют некоторые функции, похожие на те, что использовались в ноябре 2019 г. Они проверяют уровень целостности процесса, и если это процесс с низким уровнем целостности, то они выполняют полезную нагрузку из текущего процесса. Если это не так, полезная нагрузка внедряется в другие процессы (кроме explorer.exe), а в конце создается новый процесс, куда также внедряется полезная нагрузка. Создается процесс C:\Program Files\Windows Media Player\wmlaunch.exe или C:\Program Files (x86)\Windows Media Player\wmlaunch.exe в зависимости от того, работает ли текущий процесс под WOW64. |
4 апреля 2020 г. | Шелл-код обновлен для использования новой техники внедрения: NtQueueApcThread. Данный шелл-код также поставляется с URL для скачивания полезной нагрузки: программы-вымогателя без повышения привилегий. Данный шелл-код проверяет уровень целостности процесса, и при низком уровне целостности вызывает ExitProcess(). Использование жестко закодированного имени функции экспорта xs324qsawezzse также приостановлено. |
7 апреля 2020 г. | Возврат к шелл-коду от 2 апреля 2020 г. |
5 мая 2020 г. | Раньше злоумышленники корректировали свой метод внедрения полезной нагрузки, но теперь они возвращаются к технике WriteProcessMemory + CreateRemoteThread. |
6 мая 2020 г. | Злоумышленники продолжают вносить изменения в методы внедрения кода. С этого момента они используют NtCreateThreadEx. |
Эксплойт повышения привилегий
Эксплойт повышения привилегий, который используется в Magnitude, весьма интересен. Когда я впервые его увидел, то не смог распознать в нем известный мне эксплойт. Он использовал уязвимость в драйвере ядра win32k, и более тщательный анализ показал, что эта конкретная уязвимость была исправлена в декабре 2018 г. По данным Microsoft, в этот период было исправлено только две уязвимости, связанные с повышением привилегий в win32k — CVE-2018-8639 и CVE-2018-8641. Ранее Microsoft поделилась с нами более подробной информацией о CVE-2018-8639, поэтому можно с некоторой долей уверенности сказать, что обнаруженный нами эксплойт использует уязвимость CVE-2018-8641. Код данного эксплойта имеет огромное сходство с еще одним эксплойтом нулевого дня, который мы обнаружили ранее — CVE-2019-0859. Основываясь на этом сходстве, мы приписываем авторство этого эксплойта достаточно плодовитому «писателю» эксплойтов, известному как Volodya, Volodimir или BuggiCorp. Он знаменит тем, что продает эксплойты нулевого дня APT-группировкам и самостоятельным преступникам. В прошлом Volodya рекламировал свои услуги на exploit(dot)in, том же подпольном форуме, где когда-то рекламировался и эксплойт-пак Magnitude. В настоящее время мы не знаем, использовался ли эксплойт для CVE-2018-8641 изначально как эксплойт нулевого дня или он был разработан как эксплойт первого дня путем сравнения уязвимой и исправленной версий. Важно отметить, что публичный эксплойт для CVE-2018-8641 также существует, но он неправильно приписывается CVE-2018-8639 и эксплуатирует уязвимость другим способом — то есть для одного и того же бага существуют два совершенно разных эксплойта.
Программа-вымогатель
Эксплойт-пак Magnitude использует в качестве конечной полезной нагрузки собственную программу-вымогатель. Вымогатель поставляется с временным ключом шифрования и списком доменных имен, которые злоумышленники часто меняют. Файлы шифруются с помощью Microsoft CryptoAPI, при этом злоумышленники используют улучшенный криптопровайдер Microsoft для RSA и AES (PROV_RSA_AES). Вектор инициализации (IV) генерируется псевдослучайно для каждого файла, а в конец файла добавляется двоичный большой объект (BLOB) размером 0x100 байт с зашифрованным IV. Программа-вымогатель не шифрует файлы, расположенные в общих папках, таких как Documents and settings, Appdata, Local settings, Образцы музыки, Tor Browser и т. д. Перед шифрованием расширения файлов проверяются по хэш-таблице разрешенных расширений, которая содержит 715 записей. В каждой папке с зашифрованными файлами программа оставляет записку с требованием выкупа, а в конце создается процесс notepad.exe для отображения этой записки. Чтобы скрыть происхождение выполняемого процесса, программа-вымогатель использует одну из двух техник: wmic process call create или pcalua.exe –a … -c …. После шифрования программа-вымогатель также пытается удалить теневые копии файлов с помощью команды wmic shadowcopy delete, которая выполняется с обходом UAC.
Пример записки Magnitude с требованием выкупа
В течение года ядро программы-вымогателя не претерпевало значительных изменений. Если сравнить старые образцы с более поздними версиями, то заметных изменений будет всего несколько:
- В более старых версиях сразу при запуске полезная нагрузка получает язык интерфейса операционной системы по умолчанию с помощью функции API GetSystemDefaultUILanguage и сравнивает возвращаемое значение с парой жестко прописанных в коде языковых идентификаторов (например, zh-HK — САР Гонконг, zh-MO — САР Макао, zh-CN — Китайская Народная Республика, zh-SG — Сингапур, zh-TW — Тайвань, ko-KR — Корея, ms-BN — Бруней-Даруссалам, ms-MY — Малайзия). Если идентификатор языка не совпадает, то выполняется функция ExitProcess(). В более новых версиях проверку идентификатора языка убрали.
- В предыдущих версиях программа-вымогатель удаляет резервные копии файлов с помощью команды cmd.exe /c «%SystemRoot%\system32\wbem\wmic shadowcopy delete с помощью обхода UAC в eventvwr.exe. В более новой версии команда обфусцирована со вставкой символов перевода строки cmd.exe /c «%SystemRoot%\system32\wbem\wmic ^s^h^a^d^o^w^c^o^p^y^ ^d^e^l^e^t^e и выполняется с помощью обхода UAC в CompMgmtLauncher.exe.
Выводы
Общее количество атак с использованием эксплойт-паков уменьшилось, но они все еще существуют, активны и представляют собой серьезную угрозу. Magnitude — не единственный активный эксплойт-пак. Мы видим, что и другие переходят на более новые эксплойты для Internet Explorer. Потому мы рекомендуем устанавливать обновления безопасности, переходить на новую операционную систему (убедитесь, что вы используете актуальные сборки Windows 10), а также не использовать Internet Explorer в качестве браузера. На протяжении всей кампании Magnitude мы обнаруживали использование эксплойтов Internet Explorer с вердиктом PDM:Exploit.Win32.Generic.
Эволюция эксплойт-пака Magnitude