Интерфейсы UEFI, загружающие устройства Windows и Linux, могут быть взломаны с помощью вредоносных изображений логотипов. Миллиарды компьютеров под управлением Windows и Linux практически от всех производителей уязвимы к новой атаке, которая запускает вредоносную микропрограмму на ранних этапах загрузки. Таким образом система оказывается заражена вирусом, который практически невозможно обнаружить или удалить с помощью существующих механизмов защиты.
Атака, названная исследователями LogoFAIL, отличается относительной простотой осуществления, широтой охвата моделей потребительского и корпоративного класса, которые подвержены ей, и высоким уровнем контроля над ними. Во многих случаях LogoFAIL может быть удалённо выполнен через эксплойт с использованием техник, которые не могут быть обнаружены традиционными продуктами для защиты конечных точек. А поскольку эксплойты запускаются на самых ранних стадиях процесса загрузки, они способны обойти множество защитных средств, включая общепринятую в отрасли систему Secure Boot и другие средства защиты от Intel, AMD и других производителей железа, разработанные для предотвращения заражения так называемыми буткитами.
LogoFAIL представляет собой совокупность двух десятков недавно обнаруженных уязвимостей, которые годами, если не десятилетиями, скрывались в унифицированных расширяемых интерфейсах встроенного ПО, отвечающих за загрузку современных устройств, работающих под управлением Windows или Linux. Обнаружение этих уязвимостей — результат почти годовой работы компании Binarly, которая помогает клиентам выявлять и защищать уязвимые системы.
Затронуты продукты компаний, которые представляют почти всю экосистему x64-86 и ARM. Это и такие поставщики UEFI, как AMI, Insyde и Phoenix (их ещё называют IBV или независимыми поставщиками BIOS); производители устройств, такие как Lenovo, Dell и HP; и производители процессоров, включая Intel, AMD и разработчиков Arm-процессоров. Исследователи обнародовали информацию об атаке в среду на конференции по безопасности Black Hat в Лондоне.
Как следует из названия, LogoFAIL затрагивает логотипы, в частности логотипы продавца оборудования, которые отображаются на экране устройства в самом начале процесса загрузки, пока UEFI еще работает. Парсеры изображений в UEFI всех трех основных поставщиков UEFI имеют около десятка критических уязвимостей, которые до сих пор оставались незамеченными. Заменяя легитимные изображения логотипов на идентичные, специально созданные для использования этих ошибок, LogoFAIL позволяет выполнить вредоносный код на самом ответственном этапе процесса загрузки, который известен как DXE (Driver Execution Environment).
«Если на этапе DXE удается выполнить произвольный код, то для безопасности платформы все кончено, — утверждают в своём отчёте исследователи из компании Binarly, обнаружившей уязвимости. — С этого этапа мы получаем полный контроль над памятью и диском целевого устройства, включая операционную систему, которая будет запущена».
После этого LogoFAIL может доставить «полезную нагрузку» второго этапа, которая сбрасывает исполняемый файл на жёсткий диск ещё до запуска основной ОС. В следующем видеоролике показан пробный вариант эксплойта, созданный исследователями. На заражённом устройстве — Lenovo ThinkCentre M70s 2-го поколения, работающем на 11-м поколении Intel Core с UEFI, выпущенным в июне, — работают стандартные средства защиты прошивки, включая Secure Boot и Intel Boot Guard.
В своём письме основатель и генеральный директор Binarly Алекс Матросов (Alex Matrosov) написал: «LogoFAIL — это недавно обнаруженный набор уязвимостей высокого уровня безопасности, затрагивающих различные библиотеки парсинга изображений, используемые в системных прошивках различных производителей в процессе загрузки устройства. В большинстве случаев эти уязвимости присутствуют в эталонном коде, что оказывает влияние не на одного производителя, а на всю экосистему, включающую этот код и производителей устройств, в которых он используется. Эта атака может дать угрожающему агенту преимущество в обходе большинства решений по защите конечных точек и предоставить скрытый буткит прошивки, который будет сохраняться в капсуле прошивки с изменённым изображением логотипа».
Существует несколько способов использования LogoFAIL. Удалённые атаки осуществляются путем использования непропатченной уязвимости в браузере, медиаплеере или другом приложении и использования полученного административного контроля для замены легитимного изображения логотипа, обрабатываемого в начале процесса загрузки, на идентичное, использующее дефект парсера. Другой способ — получить короткий доступ к уязвимому устройству, пока оно разблокировано, и заменить легитимный файл изображения на вредоносный.
В любом случае вредоносный логотип заставляет UEFI выполнять созданный злоумышленником код во время важной фазы DXE при каждой загрузке устройства. Выполняя код на этом раннем этапе, когда происходит большая часть инициализации системы, эксплойт перехватывает весь последующий поток выполнения, что позволяет ему обойти такие средства защиты, как Secure Boot и аппаратные механизмы проверки загрузки, такие как Intel Boot Guard, AMD Hardware-Validated Boot или ARM TrustZone-based Secure Boot.
В зависимости от того, как настроен UEFI, простая команда копировать/вставить, выполняемая вредоносным образом или с физическим доступом, во многих случаях является всем необходимым для помещения вредоносного образа в так называемый ESP (сокращение от EFI System Partition) — область жёсткого диска, где хранятся загрузчики, образы ядра и любые драйверы устройств, системные утилиты и другие файлы данных, необходимые до загрузки основной ОС.
У такого подхода есть серьёзные преимущества. Во-первых, на жёсткий диск никогда не попадает исполняемый код — этот метод известен как «бесфайловое вредоносное ПО», которое затрудняет обнаружение антивирусами и другими типами программного обеспечения для защиты конечных точек. Ещё одно преимущество: после создания образа устройство остается заражённым даже при переустановке операционной системы или замене основного жёсткого диска.
Если системная прошивка на базе UEFI настроена на корректное использование таких средств защиты, как Intel Boot Guard, и имеет немодифицируемый логотип, подбросить вредоносный образ в ESP невозможно. Однако во многих случаях можно запустить свободно распространяемый программный инструмент с сайта IBV или производителя устройства, который «перезаливает» прошивку из операционной системы. Чтобы пройти проверку безопасности, инструмент устанавливает ту же самую прошивку UEFI с криптографической подписью, которая уже используется, изменяя только изображение логотипа, которое не требует действительной цифровой подписи. Во многих случаях инструмент IBV имеет цифровую подпись, что снижает вероятность вмешательства средств защиты конечных точек.
В презентации, представленной в среду, исследователи привели следующее изображение, иллюстрирующее работу атак LogoFAIL.
В документе, сопровождающем презентацию, исследователи отмечают следующее:
«Как видно из предыдущего рисунка, атаку LogoFAIL можно разделить на три разных этапа. Сначала злоумышленник готовит образ вредоносного логотипа, сохраняет его в ESP или в неподписанном разделе обновления прошивки и перезагружает устройство. В процессе загрузки уязвимая прошивка загружает вредоносный логотип из ESP и разбирает его с помощью уязвимого парсера изображений, что позволяет злоумышленнику перехватить поток выполнения, используя уязвимость в самом парсере. Используя эту угрозу, злоумышленник может добиться выполнения произвольного кода на этапе DXE, что означает полный крах безопасности платформы.
Вкратце, каково же влияние наших находок и что делает LogoFAIL таким опасным? Как мы видим на предыдущем рисунке:
LogoFAIL не требует физического доступа к устройству. Поскольку он может быть выполнен полностью из операционной системы, он полностью разрушает любые границы безопасности между ОС и прошивкой. Современные средства защиты «под ОС», такие как Secure Boot, также совершенно неэффективны для борьбы с этой угрозой.
Атаки, начинающиеся на уровне прошивки, позволяют установить буткит и подорвать любой механизм безопасности на уровне ОС, оставаясь при этом совершенно необнаружимыми для решений по обнаружению систем безопасности.
Поскольку LogoFAIL нацелен на код, специфичный для UEFI, эта новая угроза не ограничивается одной архитектурой, а является еще одним примером межкремниевой эксплуатации, которая затрагивает как x86, так и ARM-устройства».
Исследователи обнаружили уязвимости, прогнав парсеры образов UEFI через инструмент, известный как фаззер. Фаззеры предназначены для выявления ошибок в программировании путем многократного выполнения небольших фрагментов кода с небольшими изменениями входных данных. Каждый раз, когда происходит сбой, фаззер отмечает адрес памяти, где он произошел, и входные данные, которые его вызвали. Дальнейший анализ с использованием других инструментов и процессов позволил исследователям выделить ошибки, позволяющие выполнить произвольный код или другие типы уязвимостей.
«Когда кампания завершилась, мы были ошеломлены количеством найденных сбоев — настолько, что сортировать их вручную было довольно сложно», — пишут исследователи. В общей сложности они выявили 24 уникальные первопричины, 13 из которых, по их мнению, можно использовать.
Полученные результаты поднимают сложный вопрос: если фаззеры выявили так много уязвимостей, которые можно использовать, почему разработчики UEFI (часто называемые IBV или независимыми поставщиками BIOS) и OEM-производители, продающие устройства, не воспользовались этими инструментами и не исправили основные ошибки? Исследователи Binarly продолжили:
«Этот процесс сортировки дал нам хорошее понимание первопричин, лежащих в основе этих ошибок. Хотя они охватывают широкий спектр проблем безопасности программного обеспечения, основной темой является отсутствие проверки данных, предоставляемых злоумышленниками. Например, на первом скриншоте показана ошибка в BMP-парсере AMI: указатель «Image» инициализируется путем добавления к начальному адресу изображения (&Header->CharB) поля заголовка «ImageOffset».
Поскольку это смещение может быть задано злоумышленником произвольно, переменная «Image» может указывать практически на любое место в памяти. Второй скриншот взят из парсера PNG в AMI, и он содержит не одну ошибку, а две. Первая ошибка — это отсутствие проверки на возвращаемое значение функции «EfiLibAllocateZeroPool», которая в случае неудачи возвращает NULL. Вторая ошибка — это целочисленное переполнение 32-битного целого числа, представляющего размер выделения. Когда злоумышленник устанавливает переменную «PngWidth» в большое значение, умножение на два приводит к тому, что результат переполняется и становится маленьким значением (например: 0x80000200 * 2 = 0x400).
Таким образом, злоумышленник может принудительно выделить буфер, который слишком мал для хранения декодированных PNG-данных, и таким образом переполнить буфер, когда он будет использоваться. Результаты нашей фаззинговой кампании однозначно говорят о том, что ни один из этих парсеров изображений никогда не тестировался IBV или OEM-производителями. Мы можем с уверенностью утверждать это, потому что фаззер смог найти несколько сбоев после нескольких секунд работы, и мы обнаружили сбои почти в каждом парсере, который мы тестировали».
Поскольку уязвимости парсера изображений, используемые LogoFAIL, находятся в UEFI, компьютеры Mac, смартфоны и другие устройства, использующие альтернативные механизмы загрузки, не пострадали. Интересно, что даже когда Apple использовала UEFI для загрузки предыдущего поколения компьютеров Mac с процессорами Intel, они все равно не были уязвимы к LogoFAIL. Причина: Apple жёстко закодировала файлы образов в UEFI, что сделало невозможным подмену легитимного образа на вредоносный аналог. Будучи разработчиком как аппаратного, так и программного обеспечения для компьютеров Mac, Apple имела такую возможность. Разнообразие экосистем, вращающихся вокруг платформ Windows и Linux, требует большей гибкости.
Многие устройства, продаваемые Dell, не поддаются прямой эксплуатации, поскольку файлы образов защищены Intel Boot Guard, что делает невозможным их замену даже при физической атаке. В качестве дополнительной меры многие устройства Dell не позволяют настраивать логотип. Несмотря на то, что эти меры эффективно закрывают поверхность атаки LogoFAIL, Binarly рекомендует исправлять уязвимости, связанные с разбором изображений высокой степени опасности, «поскольку они представляют собой опасность, которая может случайно превратиться в проблему безопасности».
LogoFAIL основывается на большом массиве исследований, проведённых более чем за десять лет. Впервые перехват последовательности загрузки путём использования ошибок разбора изображений в UEFI был продемонстрирован в 2009 году в презентации Black Hat исследователями Рафалом Войтчуком (Rafal Wojtczuk) и Александром Терешкиным (Alexander Tereshkin). С тех пор постоянно появляются новые открытия, как в последующих исследованиях, так и, в некоторых случаях, в атаках, обнаруженных в реальном мире.
Первый известный случай реальной атаки с использованием возможностей UEFI произошел в 2018 году с обнаружением вредоносного ПО, получившего название LoJax. LoJax, представляющий собой переработанную версию легального противоугонного программного обеспечения, известного как LoJack, был создан хакерской группой, известной под такими названиями, как Sednit, Fancy Bear и APT 28. Вредоносная программа была установлена удалённо с помощью инструментов, способных считывать и перезаписывать части флэш-памяти прошивки UEFI.
В 2020 году исследователи обнаружили второй известный случай атаки реального вредоносного ПО на UEFI. При каждой перезагрузке заражённого устройства UEFI проверял наличие вредоносного файла в папке запуска Windows и, если его не было, устанавливал его. Исследователи из компании Kaspersky, обнаружившей вредоносную программу и назвавшей её «MosaicRegressor», до сих пор не знают, как произошло заражение UEFI. Один из вариантов — ПК получили поддельное обновление UEFI. Другой вариант — получение короткого физического доступа к устройству и использование специально разработанного USB-накопителя для заражения UEFI.
С тех пор стало известно о нескольких новых буткитах UEFI. Их отслеживают под такими названиями, как ESpecter, FinSpy и MoonBounce. В ответ на эти угрозы производители устройств начали внедрять меры по защите процесса загрузки UEFI.
Ключевым средством защиты является Secure Boot — общепромышленный стандарт, использующий криптографические подписи, чтобы гарантировать, что каждая часть программного обеспечения, используемого при загрузке, доверена производителем компьютера. Secure Boot призван создать цепочку доверия, которая не позволит злоумышленникам заменить предназначенную для загрузки вредоносную микропрограмму. Если хоть одно звено в цепочке запуска не распознано, Secure Boot не позволит устройству запуститься.
В начале этого года исследователи из компании ESET обнаружили первый известный случай вредоносного ПО UEFI, которое обходит Secure Boot. Способность буткита UEFI, получившего название Black Lotus, обойти защиту, существующую уже 12 лет, была впечатляющей, но у него было одно ключевое ограничение — его можно было уничтожить, выполнив простую переустановку основной операционной системы. LogoFAIL не имеет такого ограничения. Пока вредоносный образ исполняется в UEFI, машина, на которой установлена прошивка, будет оставаться зараженной. На следующем изображении, приведенном ранее в этой статье, показаны различия между LogoFAIL и Black Lotus.
Нет никаких признаков того, что уязвимости LogoFAIL активно использовались в реальной практике злоумышленниками, и об этом вряд ли можно узнать, поскольку заражение очень сложно обнаружить с помощью традиционных инструментов и методов. Однако один из признаков компрометации можно получить, изучив файл изображения, который разбирается при загрузке. Если криптографический хэш этого файла отличается от хэша файла, который производители устройств обычно предоставляют бесплатно, устройство можно дополнительно проанализировать на предмет наличия признаков эксплуатации.
Уязвимости LogoFAIL отслеживаются под следующими обозначениями: CVE-2023-5058, CVE-2023-39538, CVE-2023-39539 и CVE-2023-40238. В настоящее время этот список неполный. Консультации доступны примерно от дюжины сторон. Неполный список компаний, выпустивших рекомендации, включает AMI, Insyde, Phoenix и Lenovo. Полный список на момент публикации был недоступен. Те, кто хочет узнать, уязвимо ли конкретное устройство, должны обратиться к его производителю.
Лучший способ предотвратить атаки LogoFAIL — установить обновления безопасности UEFI, которые будут выпущены в рамках скоординированного процесса раскрытия информации в среду. Эти исправления будут распространяться производителем устройства или материнской платы, установленной в устройстве. Также, по возможности, рекомендуется настраивать UEFI на использование нескольких уровней защиты. Помимо Secure Boot, это включает в себя Intel Boot Guard и, если доступно, Intel BIOS Guard. Аналогичные дополнительные средства защиты доступны для устройств с процессорами AMD или ARM.