Производитель компьютеров Lenovo выпустил для своих пользователей уведомление безопасности Lenovo Security Advisory LEN-8324. Речь идет об уязвимости в firmware (прошивке) выпускаемых компанией компьютеров, в т. ч. в известной серии ноутбуков ThinkPad. Уязвимость можно отнести к типу Local Privilege Escalation, поскольку она позволяет атакующему исполнить код в режиме микропроцессора System Management Mode (SMM). Код SMM является самым привилегированным с точки зрения системы, так как его приоритет исполнения даже выше чем у запущенной в системе ОС или гипервизора, который может контролировать виртуальные машины.



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)


  1. ValdikSS
    01.07.2016 23:59

    Да он и здесь есть, могли бы заменшнить
    d_olex


  1. Rampages
    10.11.2016 18:20
    -3

    А если найду? ?(????)


  1. bull1251
    10.11.2016 18:21

    Следуя вашей логики в моем примере получиться, что если детектор холостых фотонов включен, то две полосы на экране мы сможем увидеть только после того как холостой фотон достигнет детектора, а если посмотрим на экран до этого момента, то увидим интерференцию, потому как холостой фотон еще на подлете к детектору? Но раз мы заранее смотрели на экран, то стели из нашей реальности холостой фотон, и потому он никогда не достигнет детектора?


    1. esetnod32
      02.07.2016 12:43

      Правильно ли я понимаю, что первая часть ресерча, которая относится к обходу механизма безопасности SPI Protected Ranges используется для снятия защиты на запись той части памяти чипа, где будет размещен SMM-код, а вторая часть посвящена 0day уязвимости в драйвере, с помощью которой можно передать на SMM-код управление. Если да, то это и имелось в виду.


      1. maslyaev
        10.11.2016 20:44

        Наблюдение всегда происходит в «сейчас». Имея некоторые (в целом верные) представления о том, как устроен мир вокруг нас, мы делаем выводы о том, где и когда происходили наблюдаемые события. То есть определяем и пространственную, и временную координату. Но только если пространственная координата — это реальность (теоретически мы можем туда отправиться), то временная — условность. Очень полезная, но условность.

        Пример. «А.С.Пушкин родился в Москве в Немецкой слободе в 1799 году». Можно отправиться в Москву, приехать на станцию Бауманская и побывать в том самом месте, где родился Пушкин. А в том самом времени побывать нельзя. А почему нельзя? Объяснений может быть два:
        1. Потому что ещё не изобрели машину времени, которая нас туда могла бы переместить.
        2. Потому что в нашей грешной физической реальности не существует (обратите внимание, глагол в настоящем времени) никакого такого места «1799 год». Когда календарик показывал 1799 год, это была та самая точка «сейчас», в которой и мы с вами сейчас с удовольствием обитаем.

        Мне больше нравится второе объяснение. В нём меньше путаницы и логических косяков. Хотя, конечно, с наглядностью и привычностью у него большие проблемы.

        Событий, которые происходили в прошлом, уже нет. Но есть в нашем «сейчас» их последствия. Чтобы сориентироваться в том, что мы сейчас имеем (например, стихи Пушкина), нам удобно к трём пространственным измерениям добавить четвёртое, тем самым свести воедино «где» и «когда», и получить возможность оперировать динамикой. И то, что прошлых событий уже нет (есть только их последствия в «сейчас»), а будущих ещё нет (есть только наши намерения, которые тоже в «сейчас»), нас не должно расстраивать.

        Временная шкала, визуализирующая прошлое, настоящее и будущее — чрезвычайно полезная абстракция. Отказываться от неё ни в коем случае не нужно. Но нужно понимать, что это всего лишь абстракция, а никак не реально существующая какая-то там (где?) ось.


        1. esetnod32
          02.07.2016 15:56

          Я подправлю несколько моментов в посте сегодня.


          1. d_olex
            02.07.2016 17:20

            Подпись под последней фоткой еще подправьте, это исполнение произвольного кода в SMM а не обход PRx.


  1. d_olex
    02.07.2016 07:42
    +3

    Ну и да, вот небольшой прогноз по реакции индустрии на эту 0day уязвимость:
    Intel будет продолжать молчать, в своей кодовой базе они исправили это два года назад, а дальше — хоть трава не расти.
    Lenovo выпустит обновление фирмвари в течении следующих 2-х месяцев.
    Другие вендоры в продуктах которых присутствует этот же уязвимый код (в настоящий момент подтверждено его наличие в лептопах от HP) ничего не будут делать до тех пор, пока их не начнут тыкать в эту уязвимость носом (а тыкать носом их скорее всего не будут потому что некому).
    Security has no market value, baby.


    1. CodeRush
      09.07.2016 00:31

      Дим, у всех продуктов, которые затронуты, EOL либо уже позади, либо завтра наступит. Это не SHNMV, это бизнес и ничего личного. Да и смысл реагировать на любые уязвимости в EDK1+, если там и без них — решето…


      1. d_olex
        09.07.2016 06:07

        За всех вендоров не скажу, но многие уязвимые модели Lenovo будут еще как минимум пару лет поддерживаться — они тот старый код только в скайлейковских машинах выкинули которые вышли на рынок считай недавно.


  1. gecube
    04.07.2016 16:18

    > Прошивка для Lenovo могла быть разработана Intel или AMD.

    фейс-палм. Перевод не соответствует оригинальному тексту. Подчеркну, что там написано, что Леново использует наработки трех основных вендоров БИОСов (АМИ? Phoenix? Insyde?), которые в основе своего кода берут код от производителей процессоров — Интел и АМД.

    Статья из серии alizar такой alizar.


    1. esetnod32
      04.07.2016 17:09

      Да, это правильно. Текст исправлен.


      1. gecube
        04.07.2016 17:31

        спасибо!