MosaicRegressor: угроза в недрах UEFI. Часть 1

MosaicRegressor: угроза в недрах UEFI. Часть 1

Life-Hack [Жизнь-Взлом]/Хакинг

#Обучение

UEFI (Unified Extensible Firmware Interface, унифицированный расширяемый микропрограммный интерфейс) — это передовая технология, используемая в некоторых чипах современных компьютерных систем. Она пришла на смену традиционной системе BIOS, обычно применяется для ускорения начальной загрузки компьютера и операционной системы и обладает богатыми функциональными возможностями. К сожалению, она также стала мишенью для атак злоумышленников, стремящихся прочно закрепиться в системе. 

Одна из таких атак и стала предметом нашего исследования. Мы обнаружили скомпрометированный образ прошивки UEFI, содержащий вредоносный имплант для установки дополнительного вредоносного ПО на компьютеры жертв. Насколько мы знаем, это второй общеизвестный случай обнаружения активного заражения в прошивке UEFI. 

В этой статье мы подробно остановимся на следующих основных моментах: 

  • Мы обнаружили образы прошивок UEFI, которые были модифицированы по сравнению с оригиналами и включали несколько вредоносных модулей.
  • Эти модули использовались для установки вредоносного ПО на компьютеры жертв. Вредоносное ПО входило в состав более масштабного вредоносного фреймворка, который мы назвали MosaicRegressor.
  • Компоненты этого фреймворка использовались в ряде атак на дипломатов и членов неправительственных организаций из Африки, Азии и Европы, так или иначе связанных с Северной Кореей.
  • Артефакты, которые мы нашли в коде компонентов фреймворка, и частичное совпадение инфраструктуры командных серверов позволяют предположить, что за этими атаками стоит китайскоязычная группа, возможно, связанная с группировками, использующими бэкдор Winnti. 

Атака была обнаружена с помощью сканера прошивок, встроенного в продукты «Лаборатории Касперского» с начала 2019 года. Эта технология была разработана специально для обнаружения угроз, скрывающихся в ROM BIOS, в том числе в образах прошивок UEFI. 

Текущее положение дел 

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

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

Учитывая вышесказанное, прошивка UEFI представляет собой идеальный механизм для закрепления вредоносных программ в системе на продолжительное время. Злоумышленник с определенными навыками может модифицировать прошивку так, чтобы она развертывала вредоносный код, который будет запускаться после загрузки операционной системы. А поскольку прошивка обычно хранится на флэш-памяти SPI, припаиваемой к материнской плате компьютера, внедренные таким образом вредоносные программы будут устойчивы к переустановке операционной системы и замене жесткого диска. 

Атаки такого типа фиксировали последние несколько лет. Яркий пример — имплант для LowJax, обнаруженный нашими коллегами из ESET в 2018 году. С помощью модифицированных модулей UEFI программы защиты от кражи LoJack (также известной как Computrace) на несколькие компьютеры установили вредоносный компонент Sofacy/Fancy Bear. Угрозы при использовании собственно Computrace были описаны нашими коллегами из Global Research and Analysis Team (GReaT) еще в 2014 году. 

Еще пример — исходный код буткита UEFI под названием VectorEDK, который был обнаружен в утечках Hacking Team в 2015 году. Код состоял из набора UEFI-модулей, которые можно встроить в прошивку платформы, чтобы она развертывала бэкдор при загрузке операционной системы и восстанавливала его в случае удаления. Хотя код VectorEDK был обнародован и в настоящее время доступен на Github, до последнего времени мы не располагали реальными доказательствами его использования на практике. 

Результаты исследования 

При расследовании атаки мы заметили несколько подозрительных образов прошивки UEFI. Более глубокая проверка показала, что они содержат четыре компонента, у которых похожи значения GUID, что очень необычно. Это были два DXE-драйвера и два UEFI-приложения. При дальнейшем анализе мы смогли установить, что они основаны на исходном коде буткита VectorEDK с небольшими доработками.

Поддельные компоненты, обнаруженные в скомпрометированной прошивке UEFI

Эти добавленные модули инициируют цепочку событий, в результате которых в папку автозагрузки на устройстве жертвы будет записан вредоносный исполняемый файл под названием IntelUpdate.exe. Таким образом, при запуске Windows будет также запускаться и этот файл. Кроме того, в случае удаления вредоносного файла с диска модули восстанавливают его. Поскольку эти действия выполняются с флэш-памяти SPI, избежать их можно только путем удаления вредоносной прошивки. 

Ниже приводится краткое описание выявленных нами компонентов: 

  • SmmInterfaceBase: DXE-драйвер, основанный на компоненте rkloader группы Hacking Team и предназначенный для развертывания дополнительных компонентов буткита для последующего выполнения. Для этого регистрируется обратный вызов, инициируемый при событии типа EFI_EVENT_GROUP_READY_TO_BOOT. Это событие происходит в момент, когда управление может быть передано загрузчику операционной системы, что позволяет осуществить обратный вызов до загрузки ОС. Обратный вызов, в свою очередь, загружает и вызывает компонент SmmAccessSub.
  • Ntfs: написанный Hacking Team драйвер для обнаружения и парсинга файловой системы NTFS таким образом, чтобы в дальнейшем можно было выполнять операции с файлами и каталогами на диске.
  • SmmReset: приложение UEFI, предназначенное для маркировки образа прошивки как инфицированного. Для этого переменной fTA задается значение жестко прописанного GUID. Приложение базируется на компоненте из оригинальной кодовой базы VectorEDK, который называется ReSetfTA.

Установка переменной fTA с заранее определенным GUID для обозначения выполнения буткита

SmmAccessSub: основной компонент буткита, выполняющий роль закрепившегося в системе дроппера для вредоносных программ пользовательского режима. Он выполняется в результате обратного вызова, зарегистрированного компонентом SmmInterfaceBase, и записывает встроенный в него бинарный код в виде файла с именем IntelUpdate.exe в каталог автозагрузки на диске. В результате этот двоичный файл выполняется сразу после запуска Windows.

Среди компонентов, которые мы изучили, только этот представляет собой оригинальный код, по большей части написанный с нуля и лишь слегка использующий элементы кода из приложения fsbg, которое входит в состав VectorEDK. Чтобы записать файл на диск, компонент выполняет следующие действия:

  • Выполняет инициализацию указателей для глобальных структур SystemTable, BootServices и RuntimeServices.
  • Пытается получить дескриптор к загруженному в данный момент образу, вызывая метод HandleProtocol с аргументом EFI_LOADED_IMAGE_PROTOCOL_GUID.
  • После получения дескриптора текущего образа модуль пытается найти корневой диск, на котором установлена Windows, путем перебора всех дисков и проверки наличия на них директории \Windows\System32. На этом этапе создается глобальный объект EFI_FILE_PROTOCOL, соответствующий найденному диску, после чего на него делается ссылка, чтобы остальные файлы и директории открывать именно на нем.
  • Если модулю на предыдущем этапе удалось найти корневой диск, он ищет файл маркера под названием setupinf.log в директории Windows. Если файл существует, модуль прекращает работу, а если нет — создает его.
  • Если создание setupinf.log прошло успешно, модуль проверяет, есть ли на том же диске директория Users.
  • Если она существует, то в директорию ProgramData\Microsoft\Windows\Start Menu\Programs\Startup на корневом диске модуль записывает файл IntelUpdate.exe (внедренный в двоичный файл UEFI-приложения).
Код из SmmAccessSub, используемый для записи внедренного двоичного файла IntelUpdate.exe в каталог автозагрузки Windows

К сожалению, нам не удалось определить точный вектор заражения, который позволил злоумышленникам перезаписать оригинальную прошивку UEFI. Наши журналы детектирования показывают, что сама прошивка была признана вредоносной, но никаких подозрительных событий этому не предшествовало. В связи с этим мы можем только предполагать, как могло произойти заражение. 

Один из вариантов — это физический доступ к компьютеру жертвы. Эта гипотеза основана на утекших материалах Hacking Team, где говорится, что для установки прошивки, инфицированной VectorEDK, необходимо загрузить целевую машину с USB-носителя. На таком USB-носителе должна находиться специальная утилита для обновления, которую можно сгенерировать с помощью соответствующего компоновщика, предоставляемого компанией. В изученной нами прошивке мы обнаружили утилиту для обновления Q-flash, которая могла быть использована для этой цели. 

Кроме того, из материалов утечек можно узнать, что возможность заражения UEFI (Hacking Team называет это «постоянной установкой») была протестирована на ноутбуках ASUS X550C. В них используются прошивки UEFI компании AMI, которые очень похожи на те, что мы исследовали. Поэтому можно предположить, что метод модификации прошивки Hacking Team будет работать и в нашем случае.

Выдержка из руководства Hacking Team для развертывания зараженной прошивки UEFI, также известной как persistent installation (постоянная установка)

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

Добавим перспективы: фреймворк MosaicRegressor 

Оригинальный буткит Hacking Team записывал на диск один из бэкдоров этой же компании, известный как Soldier, Scout или Elite, однако UEFI-зловред, который мы исследовали, устанавливает другую вредоносную программу, с которой мы до сих пор не сталкивались. Мы решили поискать похожие образцы, схожие по реализации или содержащие аналогичные строки. Количество найденных образцов указывает на то, что эта конкретная вредоносная программа — лишь один из вариантов, реализованный на базе более крупного фреймворка, который мы назвали MosaicRegressor. 

MosaicRegressor представляет собой многоступенчатый модульный фреймворк, предназначенный для кибершпионажа и сбора данных. Он состоит из загрузчиков, а иногда — также из нескольких промежуточных загрузчиков, предназначенных для доставки и исполнения полезной нагрузки на компьютерах жертв. Модульная структура помогает злоумышленникам скрыть от анализа весь фреймворк, разворачивая компоненты на целевых машинах только по требованию. И действительно, в ходе расследования нам удалось получить лишь несколько компонентов полезной нагрузки. 

У модулей загрузчиков MosaicRegressor есть общая логика работы, в соответствии с которой внедряемые модули связываются с командным сервером и скачивают с него дополнительные DLL, а затем загружают и вызывают из них определенные экспортируемые функции. В результате исполнения загруженных модулей обычно формируется отчет, который, в свою очередь, отправляется обратно на командный сервер. 

При этом компоненты, которые мы обнаружили, использовали различные механизмы обмена данными со своими командными серверами: 

  • библиотека CURL (HTTP/HTTPS)
  • служба передачи данных BITS
  • WinHTTP API
  • POP3S/SMTPS/IMAPS, «полезная нагрузка» передается по электронной почте 

Последний вариант в списке отличается от остальных тем, что для получения «полезной нагрузки» использует почтовые ящики. Отчёт, который формируется после исполнения нагрузки, впоследствии отправляется на почтовый адрес для обратной связи, и уже оттуда, вероятно, его забирают злоумышленники. 

Используемые для этой цели почтовые ящики находятся в домене mail.ru, учётные данные для доступа к ним зашиты в теле модуля . Чтобы получить файл из входящих писем, MailReg каждые 20 минут пытается подключиться к серверу pop.mail.ru и перебирает вшитые учетные данные, пока не удастся авторизоваться. Адреса электронной почты (без паролей), используемые для входа в систему, и соответствующие адреса для обратной связи указаны в таблице ниже:

Загрузчики также можно разделить на два типа: «обычные» просто скачивают и запускают «полезную нагрузку», а «расширенные» также собирают информацию о системе.

Структура лог-файла, записанного BitsRegEx. Строки, выделенные красным цветом — это оригинальные поля, которые появляются в этом файле

Нам удалось обнаружить только один вариант следующей ступени — «полезной нагрузки». Этот модуль устанавливает в реестре значения для автозапуска и работает как еще один загрузчик для компонентов, которые предположительно доставляются первичным загрузчиком. Эти компоненты также являются лишь промежуточными загрузчиками для доставки DLL следующего этапа. Постоянные компоненты на диске не содержат конкретной бизнес-логики, так как ее им отправляет командный сервер в DLL-файлах, в основном временных. 

Мы получили одну из таких библиотек — load.rem. Она представляет собой простую программу для кражи документов: собирает файлы из папки «Недавние документы» в зашифрованный архив с паролем . Скорее всего, таким образом она готовит их к отправке на командный сервер, но отправляет их уже другой компонент. 

Ниже приведена схема взаимодействия между известными нам компонентами. Цветом выделены те компоненты, которые нам удалось получить и проанализировать, а все остальные представлены на сером фоне.

Процесс атаки: от BitsRegEx и запуска промежуточных загрузчиков до доставки полезной нагрузки

Продолжение следует…

Источник


Report Page