38,4
рейтинг
16 октября 2015 в 14:29

Разработка → О безопасности UEFI, часть заключительная

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

Если вам интересно, чем безопасности прошивки могут помочь STM, SGX и PSP — жду вас под катом.

Желая показать бунтарский дух и наплевательство на традиции, ссылки на предыдущие части не даю — сами ищите их там.

Часть седьмая. Технологии будущего


Несмотря на то, что все описываемые далее технологии уже давно представлены официально, рассказывать о них я все равно буду как о возможностях завтрашнего дня, по весьма прозаической причине — даже в такой быстроразвивающейся среде как UEFI от представления какой-то технологии до ее внедрения могут пройти годы (достаточно вспомнить PFAT, появившуюся еще в Haswell, но не внедренную толком до сих пор).

Про SGX и STM я уже упоминал в конце третьей части, поэтому начну рассказ с PSP, которым теперь без вариантов комплектуются все новые AMD APU.

AMD Platform Security Processor

Наблюдая за успехами Intel Management Engine, которым последние 5 лет оборудован каждый чипсет и SoC Intel, в AMD тоже решили не отставать от прогресса и встроить в свои SoC'и чего-нибудь эдакого.

Еще бы — хочется иметь аппаратный корень доверия, хочется нормальный генератор случайных чисел, хочется криптоускоритель и эмулятор TPM 2.0, в общем — много всего хочется, и реализовать это все не трудно — купи IP Core у какого-нибудь поставщика, напиши к нему прошивку и навесь на него побольше системных функций, чтобы пользователь твоей платформы даже не вздумал отключить то, за что столько денег уплочено.

В итоге в качестве IP Core купили ядро ARM Cortex-A5 с поддержкой технологии TrustZone, для эмуляции TPM 2.0 приобрели у Trustonic код TEE, остальное реализовали сами и представили получившийся SoC-внутри-SoC'а в 2013 году на очередном UEFI Plugfest.


Оригинальная схема PSP, про эмуляцию TPM речи тогда еще не шло.

Для обеспечения безопасности UEFI этот самый PSP предоставляет следующее: подсистему HVB, внутреннее хранилище для S3 BootScript, эмулятор TPM для реализации Measured Boot, генератор случайных чисел и ускоритель криптографических операций.

Hardware Validated Boot

Про эту технологию я уже рассказывал в первой части, теперь расскажу более подробно. Суть ее простая — PSP получает управление до старта BSP и проверяет, чтобы содержимое второй стадии его прошивки и стартового кода не было изменено, в случае успеха BSP стартует с ResetVector'а и машина загружается как обычно, а в случае неудачи пользователю показывают код ошибки на POST-кодере, а BSP крутит мертвый цикл до hard reset'а, после которого все повторяется заново.

HVB, таким образом, является аппаратным корнем доверия для системы, но защищает эта технология только PEI-том, проверка же всего остального — на совести авторов прошивки.


Оригинальная схема AMD HVB

По умолчанию HVB отключен на всех платформах и для включения необходима достаточно нетривиальное его конфигурирование, поэтому я пока и сам не испытывал технологию на практике (хотя непосредственно работаю с прошивками для второго поколения процессоров с PSP), и машин с включенным HVB на открытом рынке не видел.

Integrated TPM 2.0

К релизу Windows 10 рабочая группа TCG подготовила интересное нововведение: вместо использовавшегося ранее интерфейса TIS для взаимодействия с модулями TPM теперь можно использовать вызовы ACPI, что позволяет производителям процессоров реализовать TPM не на внешнем чипе, а прямо в чипсете, да еще и половину реализации сделать программной. Такое решение имеет как преимущества (заменить чипсет сложнее, чем чип TPM в корпусе SSOP-28), так и недостатки (vendor lock-in), но реализовали его на данный момент и Intel (в Skylake) и AMD (в APU с PSP). Стандарт TPM 2.0 поддерживается обоими решениями не целиком, а только настолько, чтобы система со встроенным TPM могла использовать BitLocker и получить сертификат Windows 10 Ready. Тем не менее, теперь полку пользователей TPM однозначно прибудет. Вместе с встроенным TPM появились также аппаратный ГСЧ и криптоускоритель, которые, при желании, можно использовать отдельно.

Secure S3 BootScript Storage

Еще одна фишка PSP — встроенный NVRAM, в котором можно безопасно хранить какие-то пользовательские данные. На данный момент AMD сохраняет туда S3 BootScript, что хорошо защищает систему от атак на него. При этом немного страдает время выхода из S3, но лишние 50-100 мс ради безопасности вполне можно терпеть.

К сожалению, у AMD с открытой документацией на PSP очень грустно, поэтому дать полезных ссылок не могу, все, что мог рассказать без нарушения NDA — уже рассказал.

Intel Software Guard Extensions

Вернемся теперь к технологиям Intel. Об SGX начали говорить около года назад, но для конечного пользователя она стала доступна всего несколько недель назад, когда Intel включила ее для процессоров Skylake в очередном обновлении микрокода. SGX — это новый набор инструкций, позволяющих приложениям создавать т.н. «анклавы», т.е. регионы памяти для кода и данных, аппаратно защищенные от доступа извне, даже если этот доступ производится из более привилегированных режимов исполнения вроде ring 0 и SMM.

Технология достаточно сложная для понимания и использования (почти 200 страниц Programming Reference), но потенциально очень мощная, поэтому Intel начала заниматься ее продвижением.


Принципиальная схема работы SGX, один из более 200 слайдов вот этой презентации, она же в виде 80-минутного видео.

Intel называет SGX «обратной песочницей», т.е вместо того, чтобы пытаться изолировать потенциально вредоносное или недоверенное ПО, при помощи SGX программа может изолировать себя от всего остального мира. Идея сходна с ARM TrustZone, но если у ARM мир делится на обычный и доверенный и они выполняются на разных ядрах, взаимодействуя только через вызов инструкции SMC, то у Intel ядро одно и то же, зато память делится обычную и безопасную:


Безопасный анклав посреди обычной памяти.

Мое отношение к этой технологии пока еще не сформировалось — я ее просто еще не пробовал, т.к. не работаю над Skylake в данный момент. Тем не менее, стараюсь не отставать от прогресса слишком уж сильно, поэтому читаю краем уха все, что пишут про SGX, к примеру:
Портал об SGX на сайте Intel.
Обзорная лекция об SGX с сайта Дармштадтского Технического Университета.
Обзорная статья NccGroup с кучей интересных ссылок.
Открытая платформа для написания своего кода для SGX.
И вообще, весь раздел про SGX на firmwaresecury.com.

Intel SMI Transfer Monitor

Вторая технология Intel, о которой я уже упоминал — STM. Первые упоминания о нем датированы 2009 годом, и после 6 лет разработки технология наконец-то была представлена в августе 2015. Суть ее простая: вместо диспетчера SMM в SMRAM запускается гипервизор, и все обработчики SMI выполняются в виртуализованном окружении, что позволяет запретить им вредоносные действия вроде изменения данных в памяти ядра и тому подобные.


Слайд из презентации STM на IDF2015.

Технология позволяет значительно уменьшить как «поверхность атаки» на обработчики SMM, так и разрушительность последствий взлома обработчиков SMI. К примеру, запретив доступ к MMIO чипсета для всех обработчиков, кроме используемого для обновления прошивки, можно защитить ее от остальных обработчиков, путь даже они взломаны атакующим и он имеет возможность выполнить в них произвольный код.
Самое главное преимущество — неприхотливость, для работы STM нужны только включенные VT-x/AMDV и правильные настройки уровней доступа. На данный момент предварительная поддержка STM реализована в EDK2 только для тестовой платы MinnowBoard Max, но в ближайшие полгода-год IBV адаптируют ее для своих платформ, и взлома SMM можно будет опасаться гораздо меньше. Понятно, что бесплатной безопасности не бывает, и STM вносит дополнительную сложность в итак не самый простой процесс инициализации SMM, плюс обработка SMI занимает больше времени (страшнее, на самом деле, то, что оно занимает еще более неопределенное время, опять страдают пользователи жестких ОСРВ), плюс виртуализацию незнающий пользователь платформы может отключить и STM не получится использовать в таких условиях. Тем не менее, я потыкал в STM веткой на MinnowBoard и могу сказать: чем скорее IBV внедрят её — тем лучше.

Дополнительная информация для желающих:
Пост Винсента Циммера с анонсом STM.
Портал об STM на сайте Intel, с полезными ссылками.

Заключение


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

В следующей статье будем укрощать SecureBoot — сгенерируем свои ключ PK и KEK, а параноики смогут запретить загрузку любых вещей, не подписанных их ключами. Спасибо за внимание.

P.S. Обещал в последней части итоговую таблицу, но не смог в нее. Кодить — могу, писать по-русски — туда-сюда, красиво размечать таблицы — не выходит каменный цветок. Прошу искреннего пардону.
Николай Шлей @CodeRush
карма
189,0
рейтинг 38,4
Firmware Engineer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (12)

  • 0
    Спасибо за интересный цикл, прочитал с большим удовольствием.

    Как Вы считаете, почему до сих пор не внедрена защита кода (или данных) от неавторизированной модификации через использование криптографических средст? Например, подпись страниц памяти (либо односторонее шифрование) с использованием публичного ключа производителя процессора. Думается, Microsoft много бы отдала за такую фичу, чтобы контролировать распространение пиратских виндовс… Троянам было бы сложнее внедряться и т.д. и т.п.
    • +3
      Пожалуйста, спасибо, что читате.
      Технология внедерна уже давно, только для ее использования нужно еще одно вычислительное устройство помимо процессорных ядер общего назначения. ME, к примеру, начиная с первых Core способно выполнять подписанные Intel Java-апплеты в безопасном окружении, но популярности это решение не снискало, т.к. для его использования нужно покупать не самую дешевую лицензию и SDK, да и доверие пользователя к системе такая односторонняя криптография подрывает окончательно.
      Дело в том, что Intel не готова вот так взять и отказаться от рынка тех, кому ОС Microsoft не нужны и даром, да и поддержка PKI, необходимой для такого рода защиты, будет стоить Intel слишком дорого, плюс многие откажутся покупать такие процессоры из за недоверия. Я бы тоже не стал доверять Intel подписывать ни мою прошивку, ни мою ОС, если ключами в криптографической защите нельзя управлять — это защита от пользователя, а не от вредоносного кода.
  • 0
    Правильно ли я понимаю что Intel Software Guard Extensions это обоюдоустрый меч который так же могут использовать и зловреды для скрытия своих зловредных модулей?
    Получается что скажем запуск самого зловремя отследить можно, а вот если он уже в памяти оно уже недоступно для антивироснуго по.
    • 0
      Правильно вполне, но я не думаю, что дело зайдет дальше PoC в обозримом будущем — технология слишком новая и не слишком распространенная, писать для нее зловредные модули просто слишком дорого.
  • 0
    Не расскажете подробнее про TPM 2.0 и почему MS так хочет его внедрения?
    • +2
      Расскажу отдельно, если хотите, после статьи о SecureBoot. Изменений там с 1.2. не слишком много, самые заметные: смена алгоритма хеширования на SHA-256, добавление интерфейса через ACPI, появление «программных» TPM внутри SoC'ов. Есть еще некоторые, но чтобы рассказать о них что-то конкретное, мне нужно освежить в голове прочитанную полгода назад спецификацию, сейчас я их просто уже не помню.
      Про то, зачем оно все MS — они усиленно продвигают безопасность, начинающуюся с аппаратного уровня: measure boot, шифрование дисков, вот это все. Особенно сильно хотят закрыть Windows Mobile, где SecureBoot и TPM 2.0 — теперь обязательное требование, и обе технологии даже отключить не позволяют на консумерских устройствах.
      • 0
        SHA-256 всё ставит на свои места, спасибо!
        А то меня смутило требование TPM 2.0 для ПК через год после выхода Windows 10, ведь сейчас их даже нет на рынке — только в спеках производителей чипов заявлены модели с ним.
        • 0
          У меня сейчас очень сдвинутое представление о том, что уже есть на рынке, а чего еще нет, т.к. большая часть железа попадает ко мне почти сразу после появления инженерных семплов. Т.е. сначала ты отлаживаешь какой-нибудь SoC полгода, и сыт им уже по горло, а потом вдруг выясняется, что его даже не представили официально еще. :)
          • 0
            Похоже невнимательно читал, Infineon заявляет поддержку 2.0 с обновлением прошивки, теперь надо его как-то получить. Пока в свободном доступен нашел только текущую 3.17 на сайте HP.
            • 0
              Заявляют они это давно уже, а по факту даже «особы, приближенные к императору» не получили ни самих прошивок, ни софта для их обновления. Если в конце концов поддержка все-таки будет — отлично, но пока я бы на нее не надеялся.
              • 0
                Не получилось новостей про обновление или хотя бы про отказ от него?
                • +2
                  Обновляют понемногу, но только для определенных ревизий, и только после подписания соглашений. Можно считать, что нет, в общем.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.