Иследование от: Eyal Itkin and Itay Cohen
Введение
Эксплойты всегда были важной и неотъемлемой частью вредоносных атак. Они позволяют злоумышленникам получить возможности, которые иначе было бы нелегко достичь. Независимо от того, стремятся ли злоумышленники получить более высокие привилегии на данном компьютере или перемещаться по сети, эксплойты часто играют ключевую роль в их плане. Хотя обычные эксплойты используются во многих семействах вредоносных программ, наибольшее внимание уделяется авторам вредоносных
программ, а разработчики эксплойтов остаются вне поля зрения.
В рамках этой статьи мы сосредоточились на самих разработчиках эксплойтов, мы ранее делились нашей методологией и техникой поиска следов и отслеживания разработчиков эксплойтов. В нашей *предыдущей публикации мы подробно объяснили
нашу методологию и сосредоточились на Володе, известном разработчике эксплойтов, за которым мы наблюдали, используя уникальные следы, оставленные в их эксплойтах. Теперь мы сосредоточимся на другом разработчике эксплойтов,
известном как PlayBit или luxor2008.
*Перевод уже есть на форуме
Первоначальный образец - CVE-2018-8453
Поскольку наша методика исследования авторов эксплойтов превзошла наши первоначальные ожидания, мы искали новые эксплойты для исследования....Достаточно скоро мы наткнулись на это сообщение в блоге Касперского,
в котором подробно описывается, как Sodin (он же Sodinokibi или REvil), известная программа-вымогатель, использует 1-day эксплойт для CVE-2018-8453.
CVE-2018-8453 - интересный случай, поскольку раньше он был обнаружен в дикой природе Касперским, когда использовался FruityArmor. Из их отчета было ясно, что этот эксплойт был повторно реализован другим действующим лицом.
Хотя мы предпочли бы исследовать эксплойт, разработанный актором эксплойта 0-Day, нам пришлось довольствоваться эксплойтом, используемым REvil.
Даже из одного этого примера было ясно, что этот новый автор использует совершенно другой шаблон эксплойта, чем тот, который использовал Володя. К счастью для нас, автор решил реализовать новые функции,
которых не было в шаблоне эксплойта Володи, что дало нам более широкий выбор артефактов для поиска. После того, как мы создали несколько правил охоты, мы начали преследовать нашу добычу.
Эксплойт
Все обнаруженные нами эксплойты, связанные с этим субъектом, были 1-day эксплойтами для локальных уязвимостей повышения привилегий (LPE) в Windows. Этот список из 5 различных CVE, которые использовались,
в конечном итоге привел нас к идентичности нашего автора: PlayBit (a.k.a luxor2008). Полный профиль автора можно найти позже в этом сообщении в разделе «Отчет разведки».
CVE-2013-3660
Тип: 1-day
Краткое описание: Неинициальзированный указатель в ядре в
Использовалась в: Dyre, Ramnit
Предистория уязвимости:
Эта уязвимость была первоначально обнаружена Тэвисом Орманди из Google и попала в заголовки газет из-за необычного процесса раскрытия информации -
Microsoft была уведомлена об уязвимости всего за 5 дней до полного раскрытия информации.
CVE-2015-0057
Тип: 1-day
Краткое описание: UAF в
Использовалась в: Dyre, Evotob
Предистория уязвимости:
Эта уязвимость, также известная как MS15-010, была обнаружена Уди Яво, техническим директором enSilo. Публичное раскрытие уязвимости включало техническое объяснение уязвимости, а также план эксплуатации.
Кроме того, авторы специально упомянули, что они могут использовать эту уязвимость во всех версиях Windows, и даже предоставили демонстрационное видео.
Несмотря на то, что раскрытие не содержало кода эксплойта, этого было достаточно, чтобы привлечь внимание нашего а. Через три месяца после патча у PlayBit уже был рабочий эксплойт,
а через месяц этот эксплойт был использован трояном Dyre Banking. Исключительный случай этой уязвимости более подробно описан в презентации FireEye Black Hat на CVE-2015-0057.
CVE-2015-1701
Тип: 1-day
Краткое описание: Ошибка проверки обратного вызова в
Использовалась в: Locky
Предистория уязвимости:
Эта уязвимость, также известная как MS15-051, изначально использовалась в качестве 0-day в операции, приписываемой APT28.
CVE-2016-7255
Тип: 1-day
Краткое описание: Повреждение памяти в
Использовалась в: [/B]LockCrypt
Предистория уязвимости:
Первоначально использовался как 0-Day, снова приписывается APT28. Этот 0-Day был обнаружен и использован Володей, а затем снова использован и продан PlayBit.
CVE-2018-8453
Тип: 1-day
Краткое описание: UAF в
Использовалась в: REvil (Sodinokibi), Maze, Neshta
Предистория уязвимости:
Первоначально использовался как 0-Day и приписывался FruityArmor.
Как сообщает bitdefender, программа-вымогатель Maze использует два разных эксплойта LPE: CVE-2016-7255 и CVE-2018-8453. Что интересно, они используют эксплойт Володи для CVE-2016-7255 (например, GandCrab и многие
другие семейства вредоносныхпрограмм), переходя на использование эксплойта PlayBit для CVE-2018-8453. Мы не только видим, как Володя и PlayBit продают свои эксплойты одному и тому же злоумышленнику,
но и можем воспользоваться этой возможностью, чтобы узнать об этойдинамике. PlayBit продает собственный эксплойт для CVE-2016-7255, а Maze решил использовать эксплойт Володи,
хотя они также приобрели эксплойт у PlayBit (CVE-2018-8453).
Кажется немного необычным, что при покупке эксплойтов LPE участники Maze решили покупать у двух разных продавцов, тем более что PlayBit продает оба этих эксплойта. Однако важно помнить,
что программа-вымогатель Maze была впервые обнаруженав 2019 году. Таким образом, наша теория состоит в том, что, по крайней мере, в некоторых кампаниях операторы Maze просто «унаследовали» первый эксплойт,
а позже приобрели еще один, чтобы нацелить больше жертв.
Мышление продавца 1-day эксплойтов
Просматривая список CVE, которые использовались PlayBit, мы обнаружили уникальную закономерность, которую все они разделяют: все уязвимости были уже «известными» до того, как PlayBit решила реализовать для них эксплойт.
похоже, что это помогло PlayBit рекламировать свои эксплойты на подпольных форумах.
Еще одна характеристика, которую мы обнаружили во всех эксплойтах PlayBit, которых не хватало у Володи, - это проверка на возможность использования. PlayBit предоставляет клиенту тонкую оболочку для эксплойта,
которая проверяет, действительно ли целевой компьютер уязвим. Хотя проверка немного различается для разных эксплойтов и версий, основы те же: проверяется дата модификации уязвимого драйвера win32k,
чтобы определить, был ли установлен патч.
Это оперативное решение было очень полезным с нашей точки зрения, поскольку эксплойт эффективно сообщает нам, в каком Patch Tuesday была исправлена эксплуатируемая уязвимость:
Теперь, когда мы обнаружили 5 различных эксплойтов PlayBit, мы можем рассмотреть их более подробно и ознакомиться с рабочими привычками автора. Как и в случае с Володей, нам с самого начала было ясно, что PlayBit,
вероятно, имеет простой шаблон для развертывания различных эксплойтов.
Поскольку некоторые характеристики автора уже использовались в предыдущем сравнении с Володей, мы решили вместо этого сосредоточиться на других решениях по реализации, некоторые из которых даже не включены в эксплойты Володи.
с помощью
Вот короткий фрагмент кода Python, который выполняет это вычисление «хэша» (больше похоже на контрольную сумму / CRC):
Этот метод импорта на основе хешей используется не только во всех эксплойтах автора, мы также смогли найти его в других инструментах, которые они продавали на протяжении многих лет, начиная с 2012 года.
Изучая функции, импортированные с помощью этого механизма, мы обнаружили, что все они имеют общую черту. Все эти функции используются «шеллкодом», частью эксплуатации, которая выполняется с высокими
привилегиями и отвечаетза повышение разрешений целевого процесса. Это также означает, что в каждом эксплойте относительно легко найти шелл-код, поскольку он ссылается на глобальные переменные,
в которых хранятся адреса специально импортированных функций.
Определение ОС
Как и любой другой опытный разработчик эксплойтов, пытающийся настроить таргетинг на как можно больше версий ОС, нашему субъекту необходимо определить точную версию непосредственной цели.
Это означает, что эксплойт идентифицирует и калибрует себя для целевой версии Windows. В отличие от Володи, PlayBit, похоже, интересует все, что можно узнать о цели:
при запросе пакета обновления и типа ОС. И старший, и младший номер ОС Windows теперь запрашиваются с использованием другой техники.
Доступ к PEB
Переходя с устаревшего GetVersionEx (), PlayBit решил запросить Process-Environment-Block (PEB).
Это явная разница в способах работы PlayBit по сравнению с Володей. Мало того, что они извлекают одну и ту же информацию по-разному, Володя также интересуется гораздо меньшим объемом информации, чем PlayBit,
даже когда они оба используют одну и ту же уязвимость (CVE-2016-7255).
В общем, оба участника содержат подробные конфигурации для конкретных версий, из которых они загружают соответствующую информацию после определения версии ОС. Основное различие между ними заключается в том,
что поток кода в эксплойтах Володи редко зависит от версии ОС, в то время как PlayBit включает несколько поворотов с использованием различных if-проверок, которые зависят от версии ОС.
Утечка адресов ядра
В отличие от того, что мы думали изначально, более тщательное изучение эксплойтов PlayBit показало, что они действительно содержат примитив утечки указателя ядра. Мало того, что эксплойты содержат такую утечку,
выбранный примитив утечки намекает на высокий уровень понимания внутреннего устройства Windows. PlayBit напрямую обращается к куче рабочего стола, хранящейся в пользовательском режиме, через поле
По мере того как Microsoft постепенно исправляла проблему дизайна, которая допускала эту утечку указателя, PlayBit пришлось внедрять некоторые обновления, чтобы эта техника продолжала работать. Например,
Creators Update удалил поле
Примитив утечки позволяет PlayBit узнавать адреса ядра окон, созданных во время эксплуатации. В свою очередь, эта информация используется в нескольких этапах эксплуатации:
Обход SMEP
Поколение 0 - без обхода
В начальных версиях более ранних эксплойтов, таких как эксплойт для CVE-2013-3660 и некоторых версиях CVE-2015-0057, эксплойт заставлял ядро выполнять шелл-код с заменой токенов, хранящийся в пользовательском режиме.
Обратной стороной этой формы повышения привилегий является то, что SMEP запрещает ядру выполнять код, который хранится в пользовательском режиме. Вместо того, чтобы изменять способ выполнения обмена токенами,
PlayBit решил добавить дополнительный уровень, отключающий SMEP. Таким образом, проблема сводится к той же проблеме с заменой токенов, которую уже решали ранние эксплойты. Классическое академическое решение.
Поколение 1 - Шеллкод ядра
В этот набор эксплойтов был добавлен дополнительный шелл-код ядра. Этот код загрузчика копируется в пространство ядра и сохраняется как «имя окна» одного из окон, поврежденных эксплойтом.
После выполнения код изменяет CR4, чтобы отключить поддержку SMEP, а затем возвращается к исходной полезной нагрузке пользовательского режима
Эксплойт копирует полезную нагрузку в ядро с помощью системного вызова
Обратите внимание, что этот обход SMEP основан на том факте, что приведенный выше фрагмент кода может быть выполнен в режиме ядра, даже если это должно быть имя окна. Тот факт, что пулы памяти были помечены как «исполняемые» (или, точнее, не были помечены как «неисполняемые»), использовался многими злоумышленниками. В конце концов, Microsoft заметила этот недостаток в конструкции памяти ядра и представила пулы Non-eXecutable (NX).
И снова PlayBit решил преодолеть это добавленное ограничение, используя еще одно сокращение, реализованное в эксплойте для CVE-2018-8453.
Поколение 2 - Отключение бита NX в шеллкоде ядра
Это дополнительное изменение было более сложным, чем предыдущее, так как оно также требовало использования примитивов ядра произвольного чтения и произвольной записи. Хотя использование этих примитивов позволяет начать с более чистого
эксплойта, как это делал Володя с 2015 года, PlayBit добавил его только как дополнительный шаг в сокращении базовой полезной нагрузки обмена токенов в пользовательском режиме.
Во время этого шага просматриваются записи таблицы страниц в поисках записи, связанной с шеллкодом ядра. После обнаружения запись маскируется из бита XD (eXecute Disable) и сохраняется обратно в таблицу.
С этого момента страница памяти, содержащая шелл-код ядра, является исполняемой, и поэтому может начаться цепочка повышения привилегий.
Фреймворк эксплойтов
После обнаружения достаточного количества образцов, соответствующих шаблону эксплойта PlayBit для LPE с повреждением памяти Windows, мы решили выполнить еще одну проверку.
Используя специфические для эксплойтов артефакты от каждого эксплойта, мы создали дополнительный набор правил охоты и провели еще один поиск.
В этом дополнительном поиске мы нашли образцы Ramnit, которые содержат эксплойт для CVE-2013-3660, но с некоторыми изменениями:
В нашем образце Ramnit используются как CVE-2013-3660 (от PlayBit), так и CVE-2014-4113 (с использованием того же кода эксплойта, который изначально был найден как 0-Day). Исходный эксплойт для CVE-2014-4113 был частью инфраструктуры эксплойтов,
в которой API передает аргумент командной строки, и эта команда выполняется как SYSTEM. Поскольку это не был исходный API для эксплойта PlayBit, были внесены некоторые изменения, и эксплойты PlayBit были скорректированы таким образом,
чтобы они получали аргумент командной строки, который будет выполняться после повышения.
При дальнейшем изучении этого нового фреймворка мы увидели, что он соответствует отчету FireEye о банковском троянце Dyre. Поскольку Дайр эксплуатировал CVE-2013-3660 и CVE-2015-0057, оба из которых были написаны PlayBit,
это означает, что за время существования этого фреймворка эксплойтов он включал по крайней мере следующие 3 эксплойта:
Отчет разведки
В отличие от предыдущего сообщения о Володе, на этот раз мы решили провести дополнительную «проверку фона» на PlayBit. Не зная этого автора, мы подумали, что это хороший шанс лучше понять, как они работают.
Кроме того, мы могли проверить, насколько хорошо работает наша техника охоты, основанная на эксплойтах, сравнив найденный список рекламных объявлений с реальными образцами, которые мы поймали.
По неизвестной причине на самом деле существует два канала YouTube: один для более ранних эксплойтов, а другой (все еще активный) для более недавних эксплойтов. Поскольку в видеороликах открыто говорится,
какая CVE используется, процесс атрибуции был очень коротким.
Пытаясь узнать больше об этом авторе, мы нашли только один тонкий отчет. Поэтому мы решили включить подробный профиль автора в этот пост
Реклама автора
Помимо каналов YouTube, о которых мы упоминали ранее, актер использовал несколько платформ для рекламы уязвимостей.
Независимо от того, размещалась ли реклама на подпольных форумах, YouTube или даже в Pastebin, все они имели общий шаблон:
Эти обширные рекламные объявления подчеркивают тот факт, что эксплойт не обнаруживается поставщиками антивирусных программ и что общедоступные POC не существуют или имеют низкое качество по сравнению с эксплойтом.
Также очевиден широкий спектр поддерживаемых версий Windows: если данная версия Windows уязвима для эксплуатируемой уязвимости, вы можете быть уверены, что эксплойт PlayBit поддерживает ее.
Годы активности
Мы успешно отследили PlayBit до различных эксплойтов и инструментов еще в 2012 году. В среднем актер продает один эксплойт Windows LPE 1-Day в год, включая недавние эксплойты для CVE-2019-1069 (уязвимость SandboxEscaper)
и CVE-2020-0787 (еще одна логическая уязвимость).
Переход к эксплуатации логических уязвимостей
Хотя мы выявили 5 образцов уязвимостей Windows LPE, приводящих к повреждению памяти, реклама показывает, что примерно за последний год их интерес изменился. Оба недавно проданных эксплойта теперь носят более логичный характер и могут
указывать на тенденцию на рынке эксплуатации. Зная, что предыдущие эксплойты PlayBit основывались на недостатке дизайна, который был исправлен Microsoft в Windows 10 RS 4 (выпущенной 30 апреля 2018 г.), вполне возможно, что меры Microsoft
по снижению рисков являются одной из причин такого смещения фокуса.
Цены
Как ранее сообщал «Касперский», Володя продавал эксплойты 0-Day по ценам от 85 000 долларов (эксплойт с 2016 года) до 200 000 долларов. Хотя мы не знаем, какова была цена продажи однодневных эксплойтов, мы ожидали, что цены будут примерно
такими же. Однако, просматривая различные объявления, публикуемые PlayBit, мы увидели большой разрыв в ценах по сравнению с Володей.
Все эксплойты Windows LPE рекламировались с ценой от 5000 до 10000 долларов. Мы даже обнаружили, что актер использовал поддельный псевдоним и заявлял, что продает эксплойт 0-Day, который на самом деле был эксплойтом 1-Day для CVE-2016-7255.
Запрашиваемая цена за этот «нулевой день» все еще составляла 35 000 долларов, что намного ниже 85 000 долларов, за которые Володя продал настоящий эксплойт нулевого дня той же уязвимости. Кроме того, мы не смогли найти тенденции ценообразования
для различных эксплойтов, поскольку с 2015 по 2020 год все они продавались по одинаковой цене.
Подведение итогов разведывательного отчета
Хотя поначалу это не было интуитивно понятно, тот факт, что мы не видели рекламы других CVE (с тем же шаблоном эксплуатации), на самом деле является хорошей новостью. Это означает, что наша методика сработала лучше, чем ожидалось:
полностью техническая охота на эксплойты PlayBit без какого-либо интеллекта все же смогла охватить все их эксплойты, которые возникли из шаблона эксплойтов, с которого мы изначально начали.
Помимо Windows LPE, мы обнаружили еще два интересных инструмента, которые PlayBit разрабатывает/с которыми сотрудничает.
Клиенты
«Клиенты», то есть вредоносные программы, которые используют эксплойт PlayBit либо напрямую, либо с помощью инфраструктуры эксплойтов, являются преступным ПО. Наиболее известными являются популярные программы-вымогатели, которые
используют эксплойты PlayBit для повышения своих привилегий перед шифрованием диска жертвы. Эти программы-вымогатели включают Maze, Locky, LockCrypt и REvil (Sodin, Sodinokibi). Другим вредоносным ПО являются популярные трояны,
такие как Ramnit и Dyre.
Заключение
В этой статье мы продемонстрировали другой случай, когда мы смогли идентифицировать разработчика эксплойта, не имея предварительных сведений о разработчике или каких-либо общедоступных профилях. Все, с чего мы начали, - это единственный
образец. Мы показали, что PlayBit, как и Володя, обладает уникальным набором вариантов, подходов, методологий и комбинаций решений по реализации. Собрав все части, нам удалось понять и профилировать PlayBit, а также приписать образцы к актеру.
Мы также воспользовались возможностью, чтобы сравнить PlayBit и Volodya, и выделить различия между их стилями кодирования и предпочтениями.
Помимо технических аспектов, исследователи впервые подробно описали PlayBit. Мы изучили рынок эксплойтов, рекламу, каналы YouTube и сотрудничество между разработчиками эксплойтов и авторами вредоносных программ.
Разработка эксплойта - это только начало. Следующим шагом является монетизация «продукта» и продажа клиентам высококачественного программного обеспечения, которое является относительно стабильным и поддерживает как можно больше версий.
После успешного профилирования PlayBit и Володи мы считаем, что нашу методологию исследования можно использовать также для выявления дополнительных авторов эксплойтов.
Поэтому мы рекомендуем другим исследователям попробовать наш подход и добавить его в свой инструментарий.
От ТС
Эта статья являеться переводом - этой статьи
В очередной раз спасибо weaver за материал
Если есть предложения, что перевести, вам сюда
Перевод:
Azrv3l cпециально для xss.pro
Введение
Эксплойты всегда были важной и неотъемлемой частью вредоносных атак. Они позволяют злоумышленникам получить возможности, которые иначе было бы нелегко достичь. Независимо от того, стремятся ли злоумышленники получить более высокие привилегии на данном компьютере или перемещаться по сети, эксплойты часто играют ключевую роль в их плане. Хотя обычные эксплойты используются во многих семействах вредоносных программ, наибольшее внимание уделяется авторам вредоносных
программ, а разработчики эксплойтов остаются вне поля зрения.
В рамках этой статьи мы сосредоточились на самих разработчиках эксплойтов, мы ранее делились нашей методологией и техникой поиска следов и отслеживания разработчиков эксплойтов. В нашей *предыдущей публикации мы подробно объяснили
нашу методологию и сосредоточились на Володе, известном разработчике эксплойтов, за которым мы наблюдали, используя уникальные следы, оставленные в их эксплойтах. Теперь мы сосредоточимся на другом разработчике эксплойтов,
известном как PlayBit или luxor2008.
*Перевод уже есть на форуме
Первоначальный образец - CVE-2018-8453
Поскольку наша методика исследования авторов эксплойтов превзошла наши первоначальные ожидания, мы искали новые эксплойты для исследования....Достаточно скоро мы наткнулись на это сообщение в блоге Касперского,
в котором подробно описывается, как Sodin (он же Sodinokibi или REvil), известная программа-вымогатель, использует 1-day эксплойт для CVE-2018-8453.
CVE-2018-8453 - интересный случай, поскольку раньше он был обнаружен в дикой природе Касперским, когда использовался FruityArmor. Из их отчета было ясно, что этот эксплойт был повторно реализован другим действующим лицом.
Хотя мы предпочли бы исследовать эксплойт, разработанный актором эксплойта 0-Day, нам пришлось довольствоваться эксплойтом, используемым REvil.
Даже из одного этого примера было ясно, что этот новый автор использует совершенно другой шаблон эксплойта, чем тот, который использовал Володя. К счастью для нас, автор решил реализовать новые функции,
которых не было в шаблоне эксплойта Володи, что дало нам более широкий выбор артефактов для поиска. После того, как мы создали несколько правил охоты, мы начали преследовать нашу добычу.
Эксплойт
Все обнаруженные нами эксплойты, связанные с этим субъектом, были 1-day эксплойтами для локальных уязвимостей повышения привилегий (LPE) в Windows. Этот список из 5 различных CVE, которые использовались,
в конечном итоге привел нас к идентичности нашего автора: PlayBit (a.k.a luxor2008). Полный профиль автора можно найти позже в этом сообщении в разделе «Отчет разведки».
CVE-2013-3660
Тип: 1-day
Краткое описание: Неинициальзированный указатель в ядре в
EPATHOBJ::pprFlattenRecИспользовалась в: Dyre, Ramnit
Предистория уязвимости:
Эта уязвимость была первоначально обнаружена Тэвисом Орманди из Google и попала в заголовки газет из-за необычного процесса раскрытия информации -
Microsoft была уведомлена об уязвимости всего за 5 дней до полного раскрытия информации.
CVE-2015-0057
Тип: 1-day
Краткое описание: UAF в
win32k!xxxEnableWndSBArrowsИспользовалась в: Dyre, Evotob
Предистория уязвимости:
Эта уязвимость, также известная как MS15-010, была обнаружена Уди Яво, техническим директором enSilo. Публичное раскрытие уязвимости включало техническое объяснение уязвимости, а также план эксплуатации.
Кроме того, авторы специально упомянули, что они могут использовать эту уязвимость во всех версиях Windows, и даже предоставили демонстрационное видео.
Несмотря на то, что раскрытие не содержало кода эксплойта, этого было достаточно, чтобы привлечь внимание нашего а. Через три месяца после патча у PlayBit уже был рабочий эксплойт,
а через месяц этот эксплойт был использован трояном Dyre Banking. Исключительный случай этой уязвимости более подробно описан в презентации FireEye Black Hat на CVE-2015-0057.
CVE-2015-1701
Тип: 1-day
Краткое описание: Ошибка проверки обратного вызова в
CreateWindowИспользовалась в: Locky
Предистория уязвимости:
Эта уязвимость, также известная как MS15-051, изначально использовалась в качестве 0-day в операции, приписываемой APT28.
CVE-2016-7255
Тип: 1-day
Краткое описание: Повреждение памяти в
NtUserSetWindowLongPtr[B]Использовалась в: [/B]LockCrypt
Предистория уязвимости:
Первоначально использовался как 0-Day, снова приписывается APT28. Этот 0-Day был обнаружен и использован Володей, а затем снова использован и продан PlayBit.
CVE-2018-8453
Тип: 1-day
Краткое описание: UAF в
win32kfull!xxxDestroyWindowИспользовалась в: REvil (Sodinokibi), Maze, Neshta
Предистория уязвимости:
Первоначально использовался как 0-Day и приписывался FruityArmor.
Как сообщает bitdefender, программа-вымогатель Maze использует два разных эксплойта LPE: CVE-2016-7255 и CVE-2018-8453. Что интересно, они используют эксплойт Володи для CVE-2016-7255 (например, GandCrab и многие
другие семейства вредоносныхпрограмм), переходя на использование эксплойта PlayBit для CVE-2018-8453. Мы не только видим, как Володя и PlayBit продают свои эксплойты одному и тому же злоумышленнику,
но и можем воспользоваться этой возможностью, чтобы узнать об этойдинамике. PlayBit продает собственный эксплойт для CVE-2016-7255, а Maze решил использовать эксплойт Володи,
хотя они также приобрели эксплойт у PlayBit (CVE-2018-8453).
Кажется немного необычным, что при покупке эксплойтов LPE участники Maze решили покупать у двух разных продавцов, тем более что PlayBit продает оба этих эксплойта. Однако важно помнить,
что программа-вымогатель Maze была впервые обнаруженав 2019 году. Таким образом, наша теория состоит в том, что, по крайней мере, в некоторых кампаниях операторы Maze просто «унаследовали» первый эксплойт,
а позже приобрели еще один, чтобы нацелить больше жертв.
Мышление продавца 1-day эксплойтов
Просматривая список CVE, которые использовались PlayBit, мы обнаружили уникальную закономерность, которую все они разделяют: все уязвимости были уже «известными» до того, как PlayBit решила реализовать для них эксплойт.
- CVE-2013-3660 - попал в заголовки газет из-за необычного процесса раскрытия информации.
- CVE-2015-0057 - публичное раскрытие уязвимости включало подробное объяснение уязвимости и план эксплуатации, и по сей день все еще высоко ценится как новый метод эксплуатации.
- CVE-2015-1701 - изначально использовался как 0-Day.
- CVE-2016-7255 - изначально использовался как 0-Day.
- CVE-2018-8453 - изначально использовался как 0-Day.
похоже, что это помогло PlayBit рекламировать свои эксплойты на подпольных форумах.
Еще одна характеристика, которую мы обнаружили во всех эксплойтах PlayBit, которых не хватало у Володи, - это проверка на возможность использования. PlayBit предоставляет клиенту тонкую оболочку для эксплойта,
которая проверяет, действительно ли целевой компьютер уязвим. Хотя проверка немного различается для разных эксплойтов и версий, основы те же: проверяется дата модификации уязвимого драйвера win32k,
чтобы определить, был ли установлен патч.
Это оперативное решение было очень полезным с нашей точки зрения, поскольку эксплойт эффективно сообщает нам, в каком Patch Tuesday была исправлена эксплуатируемая уязвимость:
- CVE-2013-3660 - первый образец эксплойта еще не содержал такой проверки.
- CVE-2015-0057 - win32k.sys проверяется на наличие модификации 10 февраля 2015 г.
- CVE-2015-1701 - win32k.sys проверяется на наличие модификации 13 мая 2015 г.
- CVE-2016-7255 - win32k.sys проверено на наличие модификации 8 ноября 2016 г.
- CVE-2018-8453 - win32k.sys/win32kfull.sys проверяется на наличие даты модификации 11 сентября 2018 г.
Теперь, когда мы обнаружили 5 различных эксплойтов PlayBit, мы можем рассмотреть их более подробно и ознакомиться с рабочими привычками автора. Как и в случае с Володей, нам с самого начала было ясно, что PlayBit,
вероятно, имеет простой шаблон для развертывания различных эксплойтов.
Поскольку некоторые характеристики автора уже использовались в предыдущем сравнении с Володей, мы решили вместо этого сосредоточиться на других решениях по реализации, некоторые из которых даже не включены в эксплойты Володи.
Hash-Based Imports
В каждом эксплойте PlayBit выбирает несколько важных функций и скрывает их использование. Вместо того, чтобы просто импортировать эти функции на уровень PE или использовать их строки открытого текста и импортировать ихс помощью
GetProcAddress(), PlayBit разработал свой собственный метод импорта.
Вот короткий фрагмент кода Python, который выполняет это вычисление «хэша» (больше похоже на контрольную сумму / CRC):
Python:
from malduck import ror
def calc_hash(export_str):
crc_value = 0
for c in export_str:
cur_value = ord(c)
# convert lower case back to upper case
if cur_value >= ord('a'):
cur_value -= 0x20 # 'a' - 'A' = 0x20
crc_value = ror(crc_value, 13) + cur_value
return crc_value
Этот метод импорта на основе хешей используется не только во всех эксплойтах автора, мы также смогли найти его в других инструментах, которые они продавали на протяжении многих лет, начиная с 2012 года.
Изучая функции, импортированные с помощью этого механизма, мы обнаружили, что все они имеют общую черту. Все эти функции используются «шеллкодом», частью эксплуатации, которая выполняется с высокими
привилегиями и отвечаетза повышение разрешений целевого процесса. Это также означает, что в каждом эксплойте относительно легко найти шелл-код, поскольку он ссылается на глобальные переменные,
в которых хранятся адреса специально импортированных функций.
Определение ОС
Как и любой другой опытный разработчик эксплойтов, пытающийся настроить таргетинг на как можно больше версий ОС, нашему субъекту необходимо определить точную версию непосредственной цели.
Это означает, что эксплойт идентифицирует и калибрует себя для целевой версии Windows. В отличие от Володи, PlayBit, похоже, интересует все, что можно узнать о цели:
- Основной номер ОС
- Младший номер ОС
- Пакет обновления
- Сервер или автономный компьютер
- Номер сборки Windows 10
GetVersionEx()
Хотя этот вызов API используется во всех эксплойтах, он использовался исключительно в эксплойте CVE-2013-3660. Поскольку этот API стал устаревшим, эксплойты с 2015 года и позже используют его толькопри запросе пакета обновления и типа ОС. И старший, и младший номер ОС Windows теперь запрашиваются с использованием другой техники.
Доступ к PEB
Переходя с устаревшего GetVersionEx (), PlayBit решил запросить Process-Environment-Block (PEB).
Это явная разница в способах работы PlayBit по сравнению с Володей. Мало того, что они извлекают одну и ту же информацию по-разному, Володя также интересуется гораздо меньшим объемом информации, чем PlayBit,
даже когда они оба используют одну и ту же уязвимость (CVE-2016-7255).
В общем, оба участника содержат подробные конфигурации для конкретных версий, из которых они загружают соответствующую информацию после определения версии ОС. Основное различие между ними заключается в том,
что поток кода в эксплойтах Володи редко зависит от версии ОС, в то время как PlayBit включает несколько поворотов с использованием различных if-проверок, которые зависят от версии ОС.
Утечка адресов ядра
В отличие от того, что мы думали изначально, более тщательное изучение эксплойтов PlayBit показало, что они действительно содержат примитив утечки указателя ядра. Мало того, что эксплойты содержат такую утечку,
выбранный примитив утечки намекает на высокий уровень понимания внутреннего устройства Windows. PlayBit напрямую обращается к куче рабочего стола, хранящейся в пользовательском режиме, через поле
Win32ClientInfo, хранящееся в блоке Thread-Environment-Block (TEB).
По мере того как Microsoft постепенно исправляла проблему дизайна, которая допускала эту утечку указателя, PlayBit пришлось внедрять некоторые обновления, чтобы эта техника продолжала работать. Например,
Creators Update удалил поле
ulClientDelta из Win32ClientInfo, обязав эксплойт для CVE-2018-8453 вычислить его вручную. Этот метод был наконец исправлен Microsoft в Windows 10 RS4.Примитив утечки позволяет PlayBit узнавать адреса ядра окон, созданных во время эксплуатации. В свою очередь, эта информация используется в нескольких этапах эксплуатации:
- Адреса используются для указания / создания поддельных объектов ядра.
- Формирование памяти ядра измеряется расстоянием между адресами утечки.
- Эксплойты обычно вызывают шелл-код ядра, и нам нужно знать, где он хранится.
Обход SMEP
Поколение 0 - без обхода
В начальных версиях более ранних эксплойтов, таких как эксплойт для CVE-2013-3660 и некоторых версиях CVE-2015-0057, эксплойт заставлял ядро выполнять шелл-код с заменой токенов, хранящийся в пользовательском режиме.
Обратной стороной этой формы повышения привилегий является то, что SMEP запрещает ядру выполнять код, который хранится в пользовательском режиме. Вместо того, чтобы изменять способ выполнения обмена токенами,
PlayBit решил добавить дополнительный уровень, отключающий SMEP. Таким образом, проблема сводится к той же проблеме с заменой токенов, которую уже решали ранние эксплойты. Классическое академическое решение.
Поколение 1 - Шеллкод ядра
В этот набор эксплойтов был добавлен дополнительный шелл-код ядра. Этот код загрузчика копируется в пространство ядра и сохраняется как «имя окна» одного из окон, поврежденных эксплойтом.
После выполнения код изменяет CR4, чтобы отключить поддержку SMEP, а затем возвращается к исходной полезной нагрузке пользовательского режима
Эксплойт копирует полезную нагрузку в ядро с помощью системного вызова
NtUserDefSetText, который объясняет, почему этот системный вызов включен в конфигурацию каждой версии всех соответствующих эксплойтов.Обратите внимание, что этот обход SMEP основан на том факте, что приведенный выше фрагмент кода может быть выполнен в режиме ядра, даже если это должно быть имя окна. Тот факт, что пулы памяти были помечены как «исполняемые» (или, точнее, не были помечены как «неисполняемые»), использовался многими злоумышленниками. В конце концов, Microsoft заметила этот недостаток в конструкции памяти ядра и представила пулы Non-eXecutable (NX).
И снова PlayBit решил преодолеть это добавленное ограничение, используя еще одно сокращение, реализованное в эксплойте для CVE-2018-8453.
Поколение 2 - Отключение бита NX в шеллкоде ядра
Это дополнительное изменение было более сложным, чем предыдущее, так как оно также требовало использования примитивов ядра произвольного чтения и произвольной записи. Хотя использование этих примитивов позволяет начать с более чистого
эксплойта, как это делал Володя с 2015 года, PlayBit добавил его только как дополнительный шаг в сокращении базовой полезной нагрузки обмена токенов в пользовательском режиме.
Во время этого шага просматриваются записи таблицы страниц в поисках записи, связанной с шеллкодом ядра. После обнаружения запись маскируется из бита XD (eXecute Disable) и сохраняется обратно в таблицу.
С этого момента страница памяти, содержащая шелл-код ядра, является исполняемой, и поэтому может начаться цепочка повышения привилегий.
Фреймворк эксплойтов
После обнаружения достаточного количества образцов, соответствующих шаблону эксплойта PlayBit для LPE с повреждением памяти Windows, мы решили выполнить еще одну проверку.
Используя специфические для эксплойтов артефакты от каждого эксплойта, мы создали дополнительный набор правил охоты и провели еще один поиск.
В этом дополнительном поиске мы нашли образцы Ramnit, которые содержат эксплойт для CVE-2013-3660, но с некоторыми изменениями:
- При проверке уязвимости цели или наличия исправлений вместо поиска даты модификации драйвера эксплойт ищет в реестре идентификатор определенного исправления, как показано на рисунке 10 ниже.
- Импортированные функции PlayBit на основе хешей больше не используются; Вместо этого используется GetProcAddress ().
В нашем образце Ramnit используются как CVE-2013-3660 (от PlayBit), так и CVE-2014-4113 (с использованием того же кода эксплойта, который изначально был найден как 0-Day). Исходный эксплойт для CVE-2014-4113 был частью инфраструктуры эксплойтов,
в которой API передает аргумент командной строки, и эта команда выполняется как SYSTEM. Поскольку это не был исходный API для эксплойта PlayBit, были внесены некоторые изменения, и эксплойты PlayBit были скорректированы таким образом,
чтобы они получали аргумент командной строки, который будет выполняться после повышения.
При дальнейшем изучении этого нового фреймворка мы увидели, что он соответствует отчету FireEye о банковском троянце Dyre. Поскольку Дайр эксплуатировал CVE-2013-3660 и CVE-2015-0057, оба из которых были написаны PlayBit,
это означает, что за время существования этого фреймворка эксплойтов он включал по крайней мере следующие 3 эксплойта:
- CVE-2013-3660 – PlayBit.
- CVE-2014-4113 – Неизвестного автора
- CVE-2015-0057 – PlayBit.
- Наша охота в основном основана на шаблоне эксплойта, заданном актером.
- При работе с другими партнерами и совместной работе над заданной структурой эксплуатации этот шаблон заменяется согласованными модификациями дизайна.
- Учитывая исходный образец среды эксплуатации, легче найти похожие образцы, связанные с платформой, чем найти независимые эксплойты одного из авторов, внесших вклад в эту среду.
Отчет разведки
В отличие от предыдущего сообщения о Володе, на этот раз мы решили провести дополнительную «проверку фона» на PlayBit. Не зная этого автора, мы подумали, что это хороший шанс лучше понять, как они работают.
Кроме того, мы могли проверить, насколько хорошо работает наша техника охоты, основанная на эксплойтах, сравнив найденный список рекламных объявлений с реальными образцами, которые мы поймали.
PlayBit (a.k.a luxor2008)
Как ни странно, приписать эксплойты нашему автору эксплойтов было довольно просто. Оказывается, помимо использования многочисленных подпольных форумов, существуют также публичные YouTube-каналы, рекламирующие подвиги автора.
По неизвестной причине на самом деле существует два канала YouTube: один для более ранних эксплойтов, а другой (все еще активный) для более недавних эксплойтов. Поскольку в видеороликах открыто говорится,
какая CVE используется, процесс атрибуции был очень коротким.
Пытаясь узнать больше об этом авторе, мы нашли только один тонкий отчет. Поэтому мы решили включить подробный профиль автора в этот пост
Реклама автора
Помимо каналов YouTube, о которых мы упоминали ранее, актер использовал несколько платформ для рекламы уязвимостей.
Независимо от того, размещалась ли реклама на подпольных форумах, YouTube или даже в Pastebin, все они имели общий шаблон:
Код:
“
Ring0 LPE Exploit CVE-2015-0057 [All win versions]
Vulnerability: CVE-2015-0057 (Published: February 10, 2015)
Supported versions: XP/2003/Vista/2008/W7/W8/2012/W8.1/2012R2/W10TP
Supported architecture: x86/x64
Development stage: v1.1.1900 (stable)
Shellcode size x86: 13Kb
Shellcode size x64: 16Kb
Bypass all possible Windows security defences:
SMEP
Kernel DEP
KASLR
Integrity Level (escape from Low)
NULL Dereference Protection
UAC
There are no public POCs on this vulnerability. Shellcode has ready for immediate use in your projects. The test demo sources are supplied. Exploit is extremely stable, no bsods or error messages. Can be run under Guest account from Low Integrity Level.
Successfully bypasses proactive defences of:
KIS 2015
Avast IS 2015
ESET Smart Security 8
“
Эти обширные рекламные объявления подчеркивают тот факт, что эксплойт не обнаруживается поставщиками антивирусных программ и что общедоступные POC не существуют или имеют низкое качество по сравнению с эксплойтом.
Также очевиден широкий спектр поддерживаемых версий Windows: если данная версия Windows уязвима для эксплуатируемой уязвимости, вы можете быть уверены, что эксплойт PlayBit поддерживает ее.
Годы активности
Мы успешно отследили PlayBit до различных эксплойтов и инструментов еще в 2012 году. В среднем актер продает один эксплойт Windows LPE 1-Day в год, включая недавние эксплойты для CVE-2019-1069 (уязвимость SandboxEscaper)
и CVE-2020-0787 (еще одна логическая уязвимость).
Переход к эксплуатации логических уязвимостей
Хотя мы выявили 5 образцов уязвимостей Windows LPE, приводящих к повреждению памяти, реклама показывает, что примерно за последний год их интерес изменился. Оба недавно проданных эксплойта теперь носят более логичный характер и могут
указывать на тенденцию на рынке эксплуатации. Зная, что предыдущие эксплойты PlayBit основывались на недостатке дизайна, который был исправлен Microsoft в Windows 10 RS 4 (выпущенной 30 апреля 2018 г.), вполне возможно, что меры Microsoft
по снижению рисков являются одной из причин такого смещения фокуса.
Цены
Как ранее сообщал «Касперский», Володя продавал эксплойты 0-Day по ценам от 85 000 долларов (эксплойт с 2016 года) до 200 000 долларов. Хотя мы не знаем, какова была цена продажи однодневных эксплойтов, мы ожидали, что цены будут примерно
такими же. Однако, просматривая различные объявления, публикуемые PlayBit, мы увидели большой разрыв в ценах по сравнению с Володей.
Все эксплойты Windows LPE рекламировались с ценой от 5000 до 10000 долларов. Мы даже обнаружили, что актер использовал поддельный псевдоним и заявлял, что продает эксплойт 0-Day, который на самом деле был эксплойтом 1-Day для CVE-2016-7255.
Запрашиваемая цена за этот «нулевой день» все еще составляла 35 000 долларов, что намного ниже 85 000 долларов, за которые Володя продал настоящий эксплойт нулевого дня той же уязвимости. Кроме того, мы не смогли найти тенденции ценообразования
для различных эксплойтов, поскольку с 2015 по 2020 год все они продавались по одинаковой цене.
Подведение итогов разведывательного отчета
Хотя поначалу это не было интуитивно понятно, тот факт, что мы не видели рекламы других CVE (с тем же шаблоном эксплуатации), на самом деле является хорошей новостью. Это означает, что наша методика сработала лучше, чем ожидалось:
полностью техническая охота на эксплойты PlayBit без какого-либо интеллекта все же смогла охватить все их эксплойты, которые возникли из шаблона эксплойтов, с которого мы изначально начали.
Помимо Windows LPE, мы обнаружили еще два интересных инструмента, которые PlayBit разрабатывает/с которыми сотрудничает.
Avatar Rootkit
- Упомянут ESET в 2013
- Использует тот же импорт на основе хэшей, который до сих пор присутствует в PlayBit:
get_module_by_hash()/get_func_by_hash(). - В этой рекламе Pastebin специально упоминается PlayBit как партнер.
EternalBlack
- Самостоятельная реализация EternalRomance
- Опять же, используются функции, представленные во всех остальных примерах.
Клиенты
«Клиенты», то есть вредоносные программы, которые используют эксплойт PlayBit либо напрямую, либо с помощью инфраструктуры эксплойтов, являются преступным ПО. Наиболее известными являются популярные программы-вымогатели, которые
используют эксплойты PlayBit для повышения своих привилегий перед шифрованием диска жертвы. Эти программы-вымогатели включают Maze, Locky, LockCrypt и REvil (Sodin, Sodinokibi). Другим вредоносным ПО являются популярные трояны,
такие как Ramnit и Dyre.
Заключение
В этой статье мы продемонстрировали другой случай, когда мы смогли идентифицировать разработчика эксплойта, не имея предварительных сведений о разработчике или каких-либо общедоступных профилях. Все, с чего мы начали, - это единственный
образец. Мы показали, что PlayBit, как и Володя, обладает уникальным набором вариантов, подходов, методологий и комбинаций решений по реализации. Собрав все части, нам удалось понять и профилировать PlayBit, а также приписать образцы к актеру.
Мы также воспользовались возможностью, чтобы сравнить PlayBit и Volodya, и выделить различия между их стилями кодирования и предпочтениями.
Помимо технических аспектов, исследователи впервые подробно описали PlayBit. Мы изучили рынок эксплойтов, рекламу, каналы YouTube и сотрудничество между разработчиками эксплойтов и авторами вредоносных программ.
Разработка эксплойта - это только начало. Следующим шагом является монетизация «продукта» и продажа клиентам высококачественного программного обеспечения, которое является относительно стабильным и поддерживает как можно больше версий.
После успешного профилирования PlayBit и Володи мы считаем, что нашу методологию исследования можно использовать также для выявления дополнительных авторов эксплойтов.
Поэтому мы рекомендуем другим исследователям попробовать наш подход и добавить его в свой инструментарий.
От ТС
Эта статья являеться переводом - этой статьи
В очередной раз спасибо weaver за материал
Если есть предложения, что перевести, вам сюда
Перевод:
Azrv3l cпециально для xss.pro
Вложения
Последнее редактирование:
??