
Lenovo не раскрывает информацию об уязвимости, однако, очевидно, что речь идет именно о той уязвимости, детали которой несколько дней назад были опубликованы security-ресерчером под ником Cr4sh. Исследователь представил свои результаты исследования защищенности прошивки ноутбуков ThinkPad и опубликовал информацию об уязвимости в реализации механизмов защиты BIOS_CNTL и SPI Protected Ranges (PRx), которые позволяют коду прошивки защищать регионы SPI flash-памяти чипа (NVRAM) от перезаписи. Такая защита не позволяет модифицировать легитимный исполняемый код прошивки или интегрировать в SMRAM память посторонний код, например, бэкдор.

Продемонстрированный экспертом эксплойт позволяет не только обойти механизм защиты SPI Protected Ranges для записи своего SMM-кода, но также исполнить его с использованием 0day уязвимости в прошивке Lenovo. Механизм защиты SPI Protected Ranges вводит понятие специальных регистров с названиями PRx, которые позволяют коду прошивки задавать защищаемые от записи регионы SPI flash памяти. Так как регистры PRx недоступны для записи никому кроме кода прошивки, эксплойт использует специальный метод для их установки, аналогичный тому как это выполняет сам код прошивки.
Так как сброс системных регистров PRx возможен при переходе компьютера в режим S3 sleep, код прошивки сохраняет их в специальную структуру под названием Boot Script Table для последующего восстановления их оттуда после возврата из этого режима. Модифицируя эту структуру и имитируя возврат из режима S3, код атакующего может загрузить в регистры новые значения после пробуждения, т. е. обнулить их. Однако, для защиты от такого метода эксплуатации, стандарт UEFI регламентирует использование специального защитного механизма Boot Script Table под названием SMM LockBox. Защита SMM LockBox успешно обходится эксплойтом с использованием специальных системных операций.

Рис. Демонстрация работы эксплойта, успешная модификация регистров PRx.
Снятие защиты на модификацию памяти чипа используется эксплойтом с привлечением 0day уязвимости в прошивке Lenovo, которая и позволяет исполнить произвольный SMM-код с использованием механизма функций обратного вызова (callback) для обхода защиты SMM LockBox. Уязвимость присутствует в UEFI-драйвере Lenovo под названием SystemSmmRuntimeRt, который может вызвать функцию по указателю в передаваемой ему структуре, не проверяя этот указатель на принадлежность легитимному коду.

Рис. Уязвимый драйвер в UEFI прошивке Lenovo, который выполняет функцию по указателю из структуры не проверяя его.
Согласно опубликованной Lenovo информации, компания сама не занимается разработкой прошивок для своих компьютеров, делегируя эти обязанности на производителей BIOS/UEFI, которые, в свою очередь, обращаются за разработками и кодовой базе компаний Intel и AMD.
Since that time, Lenovo has actively undertaken its own investigation, which remains ongoing. At this point, Lenovo knows that vulnerable SMM code was provided to Lenovo by at least one of our Independent BIOS Vendors (IBVs). Independent BIOS vendors (IBVs) are software development firms that specialize in developing the customized BIOS firmware that is loaded into the PCs of original equipment manufacturers, including Lenovo. Following industry standard practice, IBVs start with the common code base created by chip vendors, such as Intel or AMD, and add additional layers of code that are specifically designed to work with a particular computer. Lenovo currently works with the industry’s three largest IBVs.
Согласно информации Cr4sh, уязвимость относится к прошивке производства Intel и присутствовала в ней еще до 2014 г. Уязвимый драйвер включен в состав новейшей версии прошивки ноутбуков ThinkPad T450s (1.22), а также ThinkPad X220 (1.42). Также потенциально он может располагаться в компьютерах производства Lenovo: ThinkCentre, ThinkStation, ThinkServer
Продемонстрированная уязвимость позволяет атакующим обойти такие современные механизмы защиты как Secure Boot, Virtual Secure Mode, а также Credential Guard на Windows 10. Защитная мера Secure Boot не позволяет вредоносному ПО типа буткитов получать контроль над системой пользователя на самом раннем этапе ее загрузки. Отключение Secure Boot снимает защитную меру проверки подлинности загрузчика ОС со стороны прошивки.

Рис. Демонстрация исполнения произвольного кода в SMM.
Мы рекомендуем владельцам компьютеров Lenovo дождаться выхода соответствующего обновления firmware и установить его как только оно будет доступно.
Комментарии (13)
bull1251
10.11.2016 18:21Следуя вашей логики в моем примере получиться, что если детектор холостых фотонов включен, то две полосы на экране мы сможем увидеть только после того как холостой фотон достигнет детектора, а если посмотрим на экран до этого момента, то увидим интерференцию, потому как холостой фотон еще на подлете к детектору? Но раз мы заранее смотрели на экран, то стели из нашей реальности холостой фотон, и потому он никогда не достигнет детектора?
esetnod32
02.07.2016 12:43Правильно ли я понимаю, что первая часть ресерча, которая относится к обходу механизма безопасности SPI Protected Ranges используется для снятия защиты на запись той части памяти чипа, где будет размещен SMM-код, а вторая часть посвящена 0day уязвимости в драйвере, с помощью которой можно передать на SMM-код управление. Если да, то это и имелось в виду.
maslyaev
10.11.2016 20:44Наблюдение всегда происходит в «сейчас». Имея некоторые (в целом верные) представления о том, как устроен мир вокруг нас, мы делаем выводы о том, где и когда происходили наблюдаемые события. То есть определяем и пространственную, и временную координату. Но только если пространственная координата — это реальность (теоретически мы можем туда отправиться), то временная — условность. Очень полезная, но условность.
Пример. «А.С.Пушкин родился в Москве в Немецкой слободе в 1799 году». Можно отправиться в Москву, приехать на станцию Бауманская и побывать в том самом месте, где родился Пушкин. А в том самом времени побывать нельзя. А почему нельзя? Объяснений может быть два:
1. Потому что ещё не изобрели машину времени, которая нас туда могла бы переместить.
2. Потому что в нашей грешной физической реальности не существует (обратите внимание, глагол в настоящем времени) никакого такого места «1799 год». Когда календарик показывал 1799 год, это была та самая точка «сейчас», в которой и мы с вами сейчас с удовольствием обитаем.
Мне больше нравится второе объяснение. В нём меньше путаницы и логических косяков. Хотя, конечно, с наглядностью и привычностью у него большие проблемы.
Событий, которые происходили в прошлом, уже нет. Но есть в нашем «сейчас» их последствия. Чтобы сориентироваться в том, что мы сейчас имеем (например, стихи Пушкина), нам удобно к трём пространственным измерениям добавить четвёртое, тем самым свести воедино «где» и «когда», и получить возможность оперировать динамикой. И то, что прошлых событий уже нет (есть только их последствия в «сейчас»), а будущих ещё нет (есть только наши намерения, которые тоже в «сейчас»), нас не должно расстраивать.
Временная шкала, визуализирующая прошлое, настоящее и будущее — чрезвычайно полезная абстракция. Отказываться от неё ни в коем случае не нужно. Но нужно понимать, что это всего лишь абстракция, а никак не реально существующая какая-то там (где?) ось.
d_olex
02.07.2016 07:42+3Ну и да, вот небольшой прогноз по реакции индустрии на эту 0day уязвимость:
Intel будет продолжать молчать, в своей кодовой базе они исправили это два года назад, а дальше — хоть трава не расти.
Lenovo выпустит обновление фирмвари в течении следующих 2-х месяцев.
Другие вендоры в продуктах которых присутствует этот же уязвимый код (в настоящий момент подтверждено его наличие в лептопах от HP) ничего не будут делать до тех пор, пока их не начнут тыкать в эту уязвимость носом (а тыкать носом их скорее всего не будут потому что некому).
Security has no market value, baby.CodeRush
09.07.2016 00:31Дим, у всех продуктов, которые затронуты, EOL либо уже позади, либо завтра наступит. Это не SHNMV, это бизнес и ничего личного. Да и смысл реагировать на любые уязвимости в EDK1+, если там и без них — решето…
d_olex
09.07.2016 06:07За всех вендоров не скажу, но многие уязвимые модели Lenovo будут еще как минимум пару лет поддерживаться — они тот старый код только в скайлейковских машинах выкинули которые вышли на рынок считай недавно.
gecube
04.07.2016 16:18> Прошивка для Lenovo могла быть разработана Intel или AMD.
фейс-палм. Перевод не соответствует оригинальному тексту. Подчеркну, что там написано, что Леново использует наработки трех основных вендоров БИОСов (АМИ? Phoenix? Insyde?), которые в основе своего кода берут код от производителей процессоров — Интел и АМД.
Статья из серии alizar такой alizar.
ValdikSS
Да он и здесь есть, могли бы заменшнить
d_olex