DEFCON 21. Одних паролей недостаточно, или почему «ломается» шифрование диска и как это можно исправить. Часть 1
Существуют забавные штуки, такие, как монотонно возрастающие счетчики, с помощью которых можно контролировать активность TMP, а затем проверять полученные значения. Есть небольшой диапазон энергонезависимой памяти, который можно использовать для ваших нужд, он не такой большой, как килобайт, но тоже может быть полезен. Там имеется счётчик тактов, который позволяет определить, как долго система работает с момента последнего запуска. Имеются команды, которые вы могли бы дать TMP, чтобы заставить его делать вещи от вашего имени, в том числе очистку собственной памяти при необходимости.
Затем мы хотим разработать протокол, который пользователь может запустить на компьютере, чтобы убедиться, что компьютер не был взломан, прежде он аутентифицируется на компьютере и начнёт им пользоваться. Что полезного для такого протокола мы можем попробовать «запечатать» в регистры конфигурации платформы?
У меня имеется пара предложений: это токены для разовых паролей пользователя, уникальное изображение или анимация, например, ваша фотография, что-то оригинальное, что нелегко найти в другом месте. Вы также можете отключить «video out» на вашем компьютере, когда находитесь в режиме запроса и проверки подлинности аутентификации.
Вы также можете захотеть «запечатать» часть дискового ключа, и есть несколько причин, по которым вы захотите это сделать. В рамках определенных предположений безопасности это гарантирует, что система будет загружаться только в некоторую утвержденную конфигурацию программного обеспечения, которую вы контролируете как владелец компьютера. В конечном счете, это означает, что любой, кто захочет атаковать вашу систему, должен сделать это либо через взлом TMP, либо сделать это в песочнице, которую вы для них создали. Конечно, это не особо сильная криптографическая защита, потому что у вас не будет протокола, который позволяет пользователю безопасно аутентифицироваться с тем же уровнем безопасности, которых предоставляет, скажем, AES. Но если вы не способны организовать что-то вроде шифрования RSA в своей собственной голове, это никогда не будет совершенным.
Я упоминал, что в TPM есть команда self-erase, которую можно выполнить через программное обеспечение. Поскольку TPM требует определённой конфигурации системы, прежде чем она выдаст «секреты», вы можете сделать что-то интересное, например, самоуничтожение. Вы можете разработать программное обеспечение и создать свой протокол, чтобы ограничить число неудачных запусков компьютера, можете установить тайм-аут после того, как пароль пробыл на экране в течение некоторого периода времени, или ограничить количество попыток ввода неправильного пароля.
Можно установить предельное время повторного запуска компьютера после предыдущего рабочего цикла, если компьютер был в «замороженном состоянии» одну-две недели, ограничить доступ к компьютеру на период времени, когда вы собираетесь выехать за границу – вы блокируете его на то время, пока будете в дороге, чтобы разблокировать не раньше, чем попадёте в отель.
Вы также можете сделать некоторые забавные вещи, например, оставить маленьких «канареек» на диске, который содержит критические данные с точки зрения безопасности. На самом деле это будут просто «растяжки», срабатывание которых приведёт к изменению значений монотонного счётчика внутри TPM.
Можно также создать пароль самоуничтожения или принудительный код для автоматического выполнения команды сброса. Поскольку злоумышленник может атаковать двумя способами: взломать доверенный платформенный модуль или запустить вредоносное программное обеспечение, вы можете заставить его играть по этим правилам и фактически выполнить эффективное самоуничтожение.
Доверенный платформенный модуль специально разработан, чтобы его было очень трудно скопировать, поэтому его не возможно просто клонировать. Таким образом, вы можете использовать такие вещи, как монотонные счетчики, чтобы обнаружить любые атаки восстановления или воспроизведения диска. И как только в TPM будет выполнена команда «clear», для злоумышленника, который захотел получить доступ к вашим данным, наступит конец игры.
Существуют некоторые сходства с системой, которую Якоб Аппельбаум обсуждал на конференции Chaos Communication Congress много лет назад, в 2005. Он предложил использовать удаленный сетевой сервер для реализации многих из этих вариантов, но признал, что это будет трудно использовать на практике. Поскольку TPM — это интегрированный компонент системы, вы можете получить много преимуществ только с помощью встроенного модуля TPM, а не модуля, расположенного на удалённом сервере. Потенциально возможен гибридный подход. Вы могли бы настроить систему, скажем, как в ИТ-отделе, когда вы временно блокируете систему, и она может стать доступной только после того, как вы подключите ее к сети, позвоните своему ИТ-администратору, и он её разблокируют. Я не решаюсь выставлять сетевой стек в начале процесса загрузки, просто потому, что он значительно увеличивает поверхность атаки. Но это все еще возможно.
Хочу уточнить, что злоумышленник может сделать только это, предполагая, что он не сможет легко сломать TPM. На следующем слайде показан снимок конструкции микросхемы ТPM, сделанный Крисом Тарновским с помощью микроскопа. Крис выступал на DefCon в прошлом году и несколько лет назад делал презентацию на конференции BlackHat по поводу безопасности TPM.
Он действительно проделал большую работу, чтобы понять, насколько трудно сломать эту вещь. Он перечислил контрмеры, выяснил, что потребуется, чтобы на самом деле сломать эту штуку, а затем протестировал всю микросхему. На плате TPM имеются детекторы света, активные сетки, реализованы разные совершенно сумасшедшие схемы, чтобы ввести злоумышленника в заблуждение относительно того, что на самом деле делает этот модуль.
Но если вы потратите достаточно времени и ресурсов и при этом будете достаточно осторожны, то сможете обойти большинство из защитных мер. Вы сможете изъять чип, поместить его с помощью электронного микроскопа в рабочую станцию, найти, где находится шина с незашифрованными данными и вытянуть из неё все секреты. Тем не менее, такая атака, даже если вы тщательно к ней подготовились и разберётесь, что где расположено, используя дорогой микроскоп, всё равно потребует затрат времени и сил на то, чтобы устранить физическую защиту чипа и случайно не «поджарить» его во время демонтажа.
Рассмотрим атаки методом перезагрузки. Я упоминал ранее, что почти во всех случаях TPM — это отдельная микросхема на материнской плате. Это очень низкое звено в системной иерархии. Она не входит в состав ЦП, как это сделано с DRM в видеоконсолях. Поэтому если хакеру удастся перезагрузить TPM, это не окажет на систему необратимого влияния. Это плохо, потому что подобная атака может остаться для вас незамеченной.
Обычно это чип, который находится вне компьютерной шины LPC, которая сама по себе является устаревшей шиной и расположена вне Южного моста материнской платы. В современных системах единственные вещи, расположенные на поверхности материнских плат – это TPM, модуль BIOS, контроллеры клавиатуры, но я думаю, что на самом деле гибкие контроллеры уже не используют. И если вы найдете способ перезагрузить шину с небольшим количеством контактов, вы сбросите TPM в состояние загрузки «свежей операционной системы». Вероятно, вы потеряете доступ к клавиатуре через разъём PS/2, но это не большая проблема, зато сможете воспроизвести последовательность загрузки TPM, в котором «запечатаны» секретные данные, без фактического выполнения безопасной последовательности, и сможете воспользоваться этим для извлечения данных.
Существует несколько атак, которые пытаются использовать этот способ. Если в TPM используется старый режим, который называется «статический корень измерения доверия» Static Root of Trust for Measurement (SRTM), то вы можете сделать это довольно легко. Я не встречал никаких исследований по поводу успешных атак против новых надежных технологий выполнения вариантов активации модуля Intel. Вероятно, все еще возможно захватить шину LPC и то, что она передает центральному процессору, это область, которая нуждается в большем исследовании. Это может стать ещё одним способом атаковать доверенный платформенный модуль.
Итак, давайте посмотрим на схему того, что мы должны иметь для холодной загрузки системы при наличии надёжной конфигурации. В архитектуре PC имеется много довольно уязвимых компонентов.
Например, в BIOS можно захватить таблицу векторов прерываний и модифицировать права чтения диска, или перехватить ввод с клавиатуры, замаскировать все функции регистров CPU – существует множество вариантов атаки. На мой взгляд, вам не нужно делать проверку безопасности в режиме реальной загрузки BIOS, вам нужно просто измерять показатели процесса загрузки.
Как только вы попадаете в режим «предварительной загрузки», который на самом деле является просто вашей операционной системой, например, такой, как начальный RAM-диск Linux, вы начинаете выполнять свой протокол и делать эти вещи. Я имею в виду, как только вы начнёте использовать ресурсы операционной системы, то, что кто-то делает на уровне BIOS, оперируя с таблицей прерываний, на вас никак не повлияет. Вам действительно будет все равно.
Вы сможете проверить работоспособность регистров. Например, если работаете с процессором Core i5, то вы знаете, что он будет поддерживать такие вещи, как бит запрета исполнения, отладочные регистры и другие вещи, которые люди могут попытаться замаскировать в возможностях регистров.
На этом слайде показано, как должна выглядеть схема системы, запускаемой в рабочей конфигурации.
Существовал проект под названием BitVisor, который реализовал многие аспекты безопасности шифрования диска с использованием регистров процессора и защиты IOMMU в вашей основной памяти. Проблема в том, что BitVisor довольно специфичная и редко используемая программа.
Xen — это своего рода канонический гипервизор с открытым исходным кодом, участвующий во многих исследованиях в области безопасности, во время которых люди убеждались в его работоспособности. На мой взгляд, мы должны использовать гипервизор Xen в качестве аппаратного интерфейса «голого» уровня, а затем добавить к нему административный домен Linux dom0, чтобы выполнить инициализацию вашего оборудования.
Опять же, в Xen все ваши виртуализированные домены работают в непривилегированном режиме, поэтому у вас фактически нет прямого доступа к регистрам отладки, это одна из вещей, которая уже сделана. Xen осуществляет гипервызововы, которые предоставляют вам доступ к подобным вещам, но эту функцию можно отключить в программном обеспечении.
Итак, подход, который я использую, заключается в том, что мы размещаем мастер-ключ в регистрах отладки. Мы выделяем два первых регистра отладки для хранения 128-битного ключа AES, который является нашим мастер-ключом.
Эта вещь никогда не покидает регистры ЦП после того, как она вводится процессом, который принимает учетные данные пользователя. Затем мы используем два вторых регистра в качестве специфичных регистров виртуальной машины – они могут использоваться как обычные отладочные регистры либо, как в данном случае, мы можем использовать их для шифрования основной памяти. В этом конкретном случае нам необходимо иметь несколько устройств, которые напрямую подключены к административному домену. Это графический процессор, который является устройством PCI, клавиатура, TPM – все это должно находиться в непосредственном доступе.
Вы не сможете использовать для этих вещей защиту IOMMU, но можете настроить эту защиту для сетевого контроллера, контроллера хранилища, произвольных устройств на шине PCI, то есть для компонентов, которые не имеют никакого доступа к административному домену или пространствам памяти гипервизора. Вы можете получить доступ к таким вещам, как сеть, фактически помещая сетевой контроллер в выделенные виртуальные машины Net VM. Эти вещи будут сопоставлены конкретным устройствам, имеющим настроенную защиту IOMMU, так что такое устройство сможет получить доступ только к области памяти этой виртуальной машины.
То же самое можно сделать с контроллером хранилища Storage Controller, а затем запустить все приложения на виртуальных машинах APP VM с абсолютно нулевым прямым доступом к оборудованию. Таким образом, даже если кто-то завладеет вашим веб-браузером или отправит вам вредоносный PDF-файл, он не получит ничего, что позволило бы серьезно скомпрометировать шифрование диска.
Я не могу взять на себя ответственность за этот архитектурный дизайн, потому что на самом деле он является основой отличного проекта под названием Qubes OS.
Его разработчики описывают этот проект как прагматичное формирование из Xen, Linux и нескольких пользовательских инструментов для осуществления многих вещей, о которых я только что говорил. Qubes OS реализует политику непривилегированных гостей и создаёт унифицированную системную среду, так, что создаётся впечатление, что вы работаете с одной системой, но на самом деле это куча разных виртуальных машин «под одним капотом». Я использую эту идею для реализации моей кодовой базы.
Итак, инструмент, который я разрабатываю — это экспериментальный код, подтверждающий данную концепцию, я назвал его Phalanx. Это пропатченный Xen, позволяющий реализовать шифрование диска по описанной мною технологии.
В 2-х первых отладочных регистрах DR1-2 расположен мастер-ключ, вторые два регистра отладки DR2-3 абсолютно не ограничены domU. По соображениям безопасности регистры XMM 0-12, используемые в качестве операционной памяти, DR2-3 и ключ шифруются при переключении контекста виртуальной машиной. Я также сделал очень простую реализацию шифрования с помощью модуля ядра Linux zRAM, потому что это встроенный элемент, который делает практически все, кроме криптографии, поэтому для шифрования я просто добавил поверх него очень маленький кусочек кода. Как известно, самый безопасный код — это код, который вам не нужно писать. Хорошее свойство zRAM заключается в том, что он предоставляет вам кучу бит, которые нужны для безопасной реализации таких вещей, как AES Counter-Mode.
У нас имеется несколько требований к аппаратному обеспечению. Вам нужна система, которая поддерживает новые инструкции AES, достаточно распространенные, однако не каждая система их имеет. Скорее всего, если у вас процессор Intel i5 или i7, эти инструкции поддерживаются.
Но остальное «железо» необходимо проверить, чтобы убедиться, что оно поддерживает все необходимые функции. Аппаратные расширения виртуализации HVE получили широкое распространение примерно в 2006 году. Немного сложнее будет найти компьютер с IOMMU. Это не указано в спецификации системного блока, и вам потребуется покопаться в его характеристиках, и также узнать, в чём разница между VTX и VTD и так далее. Так что, возможно, вам придется искать систему, которая поддерживает эти вещи. И вам, конечно, нужна система с доверенным платформенным модулем TPM, потому что иначе вы вообще не сможете реализовать измерение показателей загрузки. Обычно вы смотрите на компьютеры бизнес — класса, в которых можно проверить наличие необходимых компонентов. Если вы найдёте Intel TXT с технологией Trusted Execution, то он будет иметь почти все, что вам нужно. Команда Qubes в своей Вики представляет отличный список совместимости оборудования, в котором указаны детали для многих систем, реализующих такие вещи.
Итак, для обеспечения безопасности у нас имеется несколько допущений о некоторых компонентах системы. ТРМ, конечно, является очень важным компонентом для обеспечения целостности загрузки. Вам нужно убедиться, что нет бэкдора, способного сбрасывать NVRAM, манипулировать монотонными счетчиками или заставлять систему думать, что она использует доверенное состояние, хотя в действительности это не так. Основываясь на замечаниях Тарновского, который выполнил реверсный инжиниринг этих чипов, я устанавливаю ограничение примерно в 12 часов эксклюзивного доступа к компьютеру, которое требуется, если вы хотите совершить на него атаку TPM, чтобы выудить все секреты.
\
Есть несколько допущений относительно процессора, контроллера памяти и IOMMU, главным образом касающихся того, что они не взломаны и правильно реализуют свои функции. Некоторые из этих допущений не обязательно должны быть очень строгими, потому что Intel может легко обойти некоторые из этих вещей, и у нас не найдётся способа об этом узнать.
Некоторые из допущений безопасности касаются Xen. Это часть программного обеспечения, которая на самом деле имеет очень мощную систему безопасности, но ничто не идеально, и иногда уязвимости возникают даже в безопасной системе. Учитывая, что Xen имеет привилегированное положение в системе, очень важно убедиться, что он пребывает в безопасном состоянии.
Таким образом, при таких допущениях безопасности у нас есть своего рода основа модели угроз. Мы хотим провести реалистичную оценку угроз, понимая, что не каждая система является неуязвимой, особенно когда есть так много унаследованных компонентов, которые были разработаны без какого-либо учета безопасности. Но в то же время не все теоретические атаки осуществимы на практике, и вы не можете объединить очень простые и очень сложные аппаратные атаки. Однао следует помнить, что наши допущения могут быть неверными.
Я думаю, что хорошая аналогия – это безопасность обычного сейфа. Все мы знаем, что каждый сейф в конечном итоге может быть сломан, вопрос в том, сколько времени у вас есть на реверсный инжиниринг, каков ваш запас времени на взлом.
Я думаю, что нам нужно думать о наших системах в контексте физической защиты с точки зрения часов, а не минут, которые у нас есть прямо сейчас. И, как всегда, если я облажался, если я сделал неверное допущение — докажите это, перепроверьте меня, чтобы убедиться, прав я или неправ.
Ожидаемая безопасность — это то, что вы получите на самом деле. Атака методом холодной перезагрузки не будет эффективной против ключей FDE и информации пользователя, зашифрованной в RAM.
Аппаратный захват оперативной памяти не будет эффективным, потому что она будет изолирована в песочнице IOMMU, и такой захват не позволит овладеть состоянием приложения или состоянием системы. Даже если вы планируете извлечь секреты из доверенного платформенного модуля TPM NVRAM, все, у вас получиться – это вернуться в первоначальное состояние, и хотя его легко сломать, вы все равно придёте к нулю.
Я допускаю, что если у вас имеется хорошая привычка проверять безопасность, вы сможете обнаружить чужое вмешательство в свой компьютер, если оставили его без присмотра хотя бы на 12 часов. Пока вы достаточно бдительны, вы будете в порядке.
Существует несколько основных методов атаки, которые я бы использовал, пытаясь взломать систему. Эффективной защиты от кейлоггеров до сих пор не существует, и даже использование одноразовых токенов будет несовершенной защитой.
Достаточно опасны упомянутые ранее атаки TPM — извлечение NVRAM, либо перехват/сброс оборудования шины LPC. Можно найти способ обмануть TPM относительно безопасной конфигурации, которая, по его мнению, заслуживает доверия, но на самом деле не является доверенной.
Манипуляции с памятью RAM также угрожают безопасности. Если у вас имеется нечто, выглядящее как RAM и ведущее себя как RAM, но на самом деле ею не являющееся, потому что извне подверглось вредоносному воздействию, вы ничего не сможете с этим поделать. Злоумышленник может попробовать такие вещи, как временную импульсную закачку, с помощью которой Джордж Хоц сломал защиту гипервизора игровой приставки Sony PS3.
Поскольку я не юрист, то очень кратко упомяну о юридических аспектах проблемы. Насколько я знаю, самоуничтожение системы не является незаконным действием. Это незаконно в некоторых странах, где вы не можете использовать доверенный платформенный модуль и сильное шифрование, как, скажем, в Китае, и вы также не можете использовать TPM в России. В некоторых странах, таких, как Великобритания, раскрытие ключа шифрования является обязательным, и вы можете попасть в тюрьму, если не раскроете свой ключ по требованию RIPA – Закона Великобритании о регулировании следственных действий, позволяющем перехват сообщений.
Немного расскажу о моей дальнейшей работе и улучшениях. Версия моей программы пока что не стабильна, например, если вы переведёте свой компьютер в режим сна, моя программа может начать стирать ваши данные. Сейчас я работаю над решением этой проблемы.
Есть еще кое-что, что может быть интересно сделать в будущем. Так как ключи OpenSSL действительно интересная и важная вещь, я собираюсь разработать API, который позволит очень быстро поменять содержимое памяти.
Я также собираюсь подумать над легкоустанавливаемым вариантом системы на основе Qubes OS.
Из моего выступления можно сделать такие выводы: даже самая лучшая в мире модель безопасности не может использоваться, если она непригодна к эксплуатации. Модель безопасности должна учитывать возможность её практического использования в реальных условиях.
Одного лишь шифрования диска не достаточно – настоящая защита приходит с полным шифрованием всей системы.
Системное шифрование требует наличия соответствующего аппаратного обеспечения, но это в любом случае лучше, чем существующее на сегодня статус-кво. Это сложно сделать, но я думаю, что возможно, и мы должны это попробовать. Спасибо за внимание!
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до весны бесплатно при оплате на срок от полугода, заказать можно тут.
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Существуют забавные штуки, такие, как монотонно возрастающие счетчики, с помощью которых можно контролировать активность TMP, а затем проверять полученные значения. Есть небольшой диапазон энергонезависимой памяти, который можно использовать для ваших нужд, он не такой большой, как килобайт, но тоже может быть полезен. Там имеется счётчик тактов, который позволяет определить, как долго система работает с момента последнего запуска. Имеются команды, которые вы могли бы дать TMP, чтобы заставить его делать вещи от вашего имени, в том числе очистку собственной памяти при необходимости.
Затем мы хотим разработать протокол, который пользователь может запустить на компьютере, чтобы убедиться, что компьютер не был взломан, прежде он аутентифицируется на компьютере и начнёт им пользоваться. Что полезного для такого протокола мы можем попробовать «запечатать» в регистры конфигурации платформы?
У меня имеется пара предложений: это токены для разовых паролей пользователя, уникальное изображение или анимация, например, ваша фотография, что-то оригинальное, что нелегко найти в другом месте. Вы также можете отключить «video out» на вашем компьютере, когда находитесь в режиме запроса и проверки подлинности аутентификации.
Вы также можете захотеть «запечатать» часть дискового ключа, и есть несколько причин, по которым вы захотите это сделать. В рамках определенных предположений безопасности это гарантирует, что система будет загружаться только в некоторую утвержденную конфигурацию программного обеспечения, которую вы контролируете как владелец компьютера. В конечном счете, это означает, что любой, кто захочет атаковать вашу систему, должен сделать это либо через взлом TMP, либо сделать это в песочнице, которую вы для них создали. Конечно, это не особо сильная криптографическая защита, потому что у вас не будет протокола, который позволяет пользователю безопасно аутентифицироваться с тем же уровнем безопасности, которых предоставляет, скажем, AES. Но если вы не способны организовать что-то вроде шифрования RSA в своей собственной голове, это никогда не будет совершенным.
Я упоминал, что в TPM есть команда self-erase, которую можно выполнить через программное обеспечение. Поскольку TPM требует определённой конфигурации системы, прежде чем она выдаст «секреты», вы можете сделать что-то интересное, например, самоуничтожение. Вы можете разработать программное обеспечение и создать свой протокол, чтобы ограничить число неудачных запусков компьютера, можете установить тайм-аут после того, как пароль пробыл на экране в течение некоторого периода времени, или ограничить количество попыток ввода неправильного пароля.
Можно установить предельное время повторного запуска компьютера после предыдущего рабочего цикла, если компьютер был в «замороженном состоянии» одну-две недели, ограничить доступ к компьютеру на период времени, когда вы собираетесь выехать за границу – вы блокируете его на то время, пока будете в дороге, чтобы разблокировать не раньше, чем попадёте в отель.
Вы также можете сделать некоторые забавные вещи, например, оставить маленьких «канареек» на диске, который содержит критические данные с точки зрения безопасности. На самом деле это будут просто «растяжки», срабатывание которых приведёт к изменению значений монотонного счётчика внутри TPM.
Можно также создать пароль самоуничтожения или принудительный код для автоматического выполнения команды сброса. Поскольку злоумышленник может атаковать двумя способами: взломать доверенный платформенный модуль или запустить вредоносное программное обеспечение, вы можете заставить его играть по этим правилам и фактически выполнить эффективное самоуничтожение.
Доверенный платформенный модуль специально разработан, чтобы его было очень трудно скопировать, поэтому его не возможно просто клонировать. Таким образом, вы можете использовать такие вещи, как монотонные счетчики, чтобы обнаружить любые атаки восстановления или воспроизведения диска. И как только в TPM будет выполнена команда «clear», для злоумышленника, который захотел получить доступ к вашим данным, наступит конец игры.
Существуют некоторые сходства с системой, которую Якоб Аппельбаум обсуждал на конференции Chaos Communication Congress много лет назад, в 2005. Он предложил использовать удаленный сетевой сервер для реализации многих из этих вариантов, но признал, что это будет трудно использовать на практике. Поскольку TPM — это интегрированный компонент системы, вы можете получить много преимуществ только с помощью встроенного модуля TPM, а не модуля, расположенного на удалённом сервере. Потенциально возможен гибридный подход. Вы могли бы настроить систему, скажем, как в ИТ-отделе, когда вы временно блокируете систему, и она может стать доступной только после того, как вы подключите ее к сети, позвоните своему ИТ-администратору, и он её разблокируют. Я не решаюсь выставлять сетевой стек в начале процесса загрузки, просто потому, что он значительно увеличивает поверхность атаки. Но это все еще возможно.
Хочу уточнить, что злоумышленник может сделать только это, предполагая, что он не сможет легко сломать TPM. На следующем слайде показан снимок конструкции микросхемы ТPM, сделанный Крисом Тарновским с помощью микроскопа. Крис выступал на DefCon в прошлом году и несколько лет назад делал презентацию на конференции BlackHat по поводу безопасности TPM.
Он действительно проделал большую работу, чтобы понять, насколько трудно сломать эту вещь. Он перечислил контрмеры, выяснил, что потребуется, чтобы на самом деле сломать эту штуку, а затем протестировал всю микросхему. На плате TPM имеются детекторы света, активные сетки, реализованы разные совершенно сумасшедшие схемы, чтобы ввести злоумышленника в заблуждение относительно того, что на самом деле делает этот модуль.
Но если вы потратите достаточно времени и ресурсов и при этом будете достаточно осторожны, то сможете обойти большинство из защитных мер. Вы сможете изъять чип, поместить его с помощью электронного микроскопа в рабочую станцию, найти, где находится шина с незашифрованными данными и вытянуть из неё все секреты. Тем не менее, такая атака, даже если вы тщательно к ней подготовились и разберётесь, что где расположено, используя дорогой микроскоп, всё равно потребует затрат времени и сил на то, чтобы устранить физическую защиту чипа и случайно не «поджарить» его во время демонтажа.
Рассмотрим атаки методом перезагрузки. Я упоминал ранее, что почти во всех случаях TPM — это отдельная микросхема на материнской плате. Это очень низкое звено в системной иерархии. Она не входит в состав ЦП, как это сделано с DRM в видеоконсолях. Поэтому если хакеру удастся перезагрузить TPM, это не окажет на систему необратимого влияния. Это плохо, потому что подобная атака может остаться для вас незамеченной.
Обычно это чип, который находится вне компьютерной шины LPC, которая сама по себе является устаревшей шиной и расположена вне Южного моста материнской платы. В современных системах единственные вещи, расположенные на поверхности материнских плат – это TPM, модуль BIOS, контроллеры клавиатуры, но я думаю, что на самом деле гибкие контроллеры уже не используют. И если вы найдете способ перезагрузить шину с небольшим количеством контактов, вы сбросите TPM в состояние загрузки «свежей операционной системы». Вероятно, вы потеряете доступ к клавиатуре через разъём PS/2, но это не большая проблема, зато сможете воспроизвести последовательность загрузки TPM, в котором «запечатаны» секретные данные, без фактического выполнения безопасной последовательности, и сможете воспользоваться этим для извлечения данных.
Существует несколько атак, которые пытаются использовать этот способ. Если в TPM используется старый режим, который называется «статический корень измерения доверия» Static Root of Trust for Measurement (SRTM), то вы можете сделать это довольно легко. Я не встречал никаких исследований по поводу успешных атак против новых надежных технологий выполнения вариантов активации модуля Intel. Вероятно, все еще возможно захватить шину LPC и то, что она передает центральному процессору, это область, которая нуждается в большем исследовании. Это может стать ещё одним способом атаковать доверенный платформенный модуль.
Итак, давайте посмотрим на схему того, что мы должны иметь для холодной загрузки системы при наличии надёжной конфигурации. В архитектуре PC имеется много довольно уязвимых компонентов.
Например, в BIOS можно захватить таблицу векторов прерываний и модифицировать права чтения диска, или перехватить ввод с клавиатуры, замаскировать все функции регистров CPU – существует множество вариантов атаки. На мой взгляд, вам не нужно делать проверку безопасности в режиме реальной загрузки BIOS, вам нужно просто измерять показатели процесса загрузки.
Как только вы попадаете в режим «предварительной загрузки», который на самом деле является просто вашей операционной системой, например, такой, как начальный RAM-диск Linux, вы начинаете выполнять свой протокол и делать эти вещи. Я имею в виду, как только вы начнёте использовать ресурсы операционной системы, то, что кто-то делает на уровне BIOS, оперируя с таблицей прерываний, на вас никак не повлияет. Вам действительно будет все равно.
Вы сможете проверить работоспособность регистров. Например, если работаете с процессором Core i5, то вы знаете, что он будет поддерживать такие вещи, как бит запрета исполнения, отладочные регистры и другие вещи, которые люди могут попытаться замаскировать в возможностях регистров.
На этом слайде показано, как должна выглядеть схема системы, запускаемой в рабочей конфигурации.
Существовал проект под названием BitVisor, который реализовал многие аспекты безопасности шифрования диска с использованием регистров процессора и защиты IOMMU в вашей основной памяти. Проблема в том, что BitVisor довольно специфичная и редко используемая программа.
Xen — это своего рода канонический гипервизор с открытым исходным кодом, участвующий во многих исследованиях в области безопасности, во время которых люди убеждались в его работоспособности. На мой взгляд, мы должны использовать гипервизор Xen в качестве аппаратного интерфейса «голого» уровня, а затем добавить к нему административный домен Linux dom0, чтобы выполнить инициализацию вашего оборудования.
Опять же, в Xen все ваши виртуализированные домены работают в непривилегированном режиме, поэтому у вас фактически нет прямого доступа к регистрам отладки, это одна из вещей, которая уже сделана. Xen осуществляет гипервызововы, которые предоставляют вам доступ к подобным вещам, но эту функцию можно отключить в программном обеспечении.
Итак, подход, который я использую, заключается в том, что мы размещаем мастер-ключ в регистрах отладки. Мы выделяем два первых регистра отладки для хранения 128-битного ключа AES, который является нашим мастер-ключом.
Эта вещь никогда не покидает регистры ЦП после того, как она вводится процессом, который принимает учетные данные пользователя. Затем мы используем два вторых регистра в качестве специфичных регистров виртуальной машины – они могут использоваться как обычные отладочные регистры либо, как в данном случае, мы можем использовать их для шифрования основной памяти. В этом конкретном случае нам необходимо иметь несколько устройств, которые напрямую подключены к административному домену. Это графический процессор, который является устройством PCI, клавиатура, TPM – все это должно находиться в непосредственном доступе.
Вы не сможете использовать для этих вещей защиту IOMMU, но можете настроить эту защиту для сетевого контроллера, контроллера хранилища, произвольных устройств на шине PCI, то есть для компонентов, которые не имеют никакого доступа к административному домену или пространствам памяти гипервизора. Вы можете получить доступ к таким вещам, как сеть, фактически помещая сетевой контроллер в выделенные виртуальные машины Net VM. Эти вещи будут сопоставлены конкретным устройствам, имеющим настроенную защиту IOMMU, так что такое устройство сможет получить доступ только к области памяти этой виртуальной машины.
То же самое можно сделать с контроллером хранилища Storage Controller, а затем запустить все приложения на виртуальных машинах APP VM с абсолютно нулевым прямым доступом к оборудованию. Таким образом, даже если кто-то завладеет вашим веб-браузером или отправит вам вредоносный PDF-файл, он не получит ничего, что позволило бы серьезно скомпрометировать шифрование диска.
Я не могу взять на себя ответственность за этот архитектурный дизайн, потому что на самом деле он является основой отличного проекта под названием Qubes OS.
Его разработчики описывают этот проект как прагматичное формирование из Xen, Linux и нескольких пользовательских инструментов для осуществления многих вещей, о которых я только что говорил. Qubes OS реализует политику непривилегированных гостей и создаёт унифицированную системную среду, так, что создаётся впечатление, что вы работаете с одной системой, но на самом деле это куча разных виртуальных машин «под одним капотом». Я использую эту идею для реализации моей кодовой базы.
Итак, инструмент, который я разрабатываю — это экспериментальный код, подтверждающий данную концепцию, я назвал его Phalanx. Это пропатченный Xen, позволяющий реализовать шифрование диска по описанной мною технологии.
В 2-х первых отладочных регистрах DR1-2 расположен мастер-ключ, вторые два регистра отладки DR2-3 абсолютно не ограничены domU. По соображениям безопасности регистры XMM 0-12, используемые в качестве операционной памяти, DR2-3 и ключ шифруются при переключении контекста виртуальной машиной. Я также сделал очень простую реализацию шифрования с помощью модуля ядра Linux zRAM, потому что это встроенный элемент, который делает практически все, кроме криптографии, поэтому для шифрования я просто добавил поверх него очень маленький кусочек кода. Как известно, самый безопасный код — это код, который вам не нужно писать. Хорошее свойство zRAM заключается в том, что он предоставляет вам кучу бит, которые нужны для безопасной реализации таких вещей, как AES Counter-Mode.
У нас имеется несколько требований к аппаратному обеспечению. Вам нужна система, которая поддерживает новые инструкции AES, достаточно распространенные, однако не каждая система их имеет. Скорее всего, если у вас процессор Intel i5 или i7, эти инструкции поддерживаются.
Но остальное «железо» необходимо проверить, чтобы убедиться, что оно поддерживает все необходимые функции. Аппаратные расширения виртуализации HVE получили широкое распространение примерно в 2006 году. Немного сложнее будет найти компьютер с IOMMU. Это не указано в спецификации системного блока, и вам потребуется покопаться в его характеристиках, и также узнать, в чём разница между VTX и VTD и так далее. Так что, возможно, вам придется искать систему, которая поддерживает эти вещи. И вам, конечно, нужна система с доверенным платформенным модулем TPM, потому что иначе вы вообще не сможете реализовать измерение показателей загрузки. Обычно вы смотрите на компьютеры бизнес — класса, в которых можно проверить наличие необходимых компонентов. Если вы найдёте Intel TXT с технологией Trusted Execution, то он будет иметь почти все, что вам нужно. Команда Qubes в своей Вики представляет отличный список совместимости оборудования, в котором указаны детали для многих систем, реализующих такие вещи.
Итак, для обеспечения безопасности у нас имеется несколько допущений о некоторых компонентах системы. ТРМ, конечно, является очень важным компонентом для обеспечения целостности загрузки. Вам нужно убедиться, что нет бэкдора, способного сбрасывать NVRAM, манипулировать монотонными счетчиками или заставлять систему думать, что она использует доверенное состояние, хотя в действительности это не так. Основываясь на замечаниях Тарновского, который выполнил реверсный инжиниринг этих чипов, я устанавливаю ограничение примерно в 12 часов эксклюзивного доступа к компьютеру, которое требуется, если вы хотите совершить на него атаку TPM, чтобы выудить все секреты.
\
Есть несколько допущений относительно процессора, контроллера памяти и IOMMU, главным образом касающихся того, что они не взломаны и правильно реализуют свои функции. Некоторые из этих допущений не обязательно должны быть очень строгими, потому что Intel может легко обойти некоторые из этих вещей, и у нас не найдётся способа об этом узнать.
Некоторые из допущений безопасности касаются Xen. Это часть программного обеспечения, которая на самом деле имеет очень мощную систему безопасности, но ничто не идеально, и иногда уязвимости возникают даже в безопасной системе. Учитывая, что Xen имеет привилегированное положение в системе, очень важно убедиться, что он пребывает в безопасном состоянии.
Таким образом, при таких допущениях безопасности у нас есть своего рода основа модели угроз. Мы хотим провести реалистичную оценку угроз, понимая, что не каждая система является неуязвимой, особенно когда есть так много унаследованных компонентов, которые были разработаны без какого-либо учета безопасности. Но в то же время не все теоретические атаки осуществимы на практике, и вы не можете объединить очень простые и очень сложные аппаратные атаки. Однао следует помнить, что наши допущения могут быть неверными.
Я думаю, что хорошая аналогия – это безопасность обычного сейфа. Все мы знаем, что каждый сейф в конечном итоге может быть сломан, вопрос в том, сколько времени у вас есть на реверсный инжиниринг, каков ваш запас времени на взлом.
Я думаю, что нам нужно думать о наших системах в контексте физической защиты с точки зрения часов, а не минут, которые у нас есть прямо сейчас. И, как всегда, если я облажался, если я сделал неверное допущение — докажите это, перепроверьте меня, чтобы убедиться, прав я или неправ.
Ожидаемая безопасность — это то, что вы получите на самом деле. Атака методом холодной перезагрузки не будет эффективной против ключей FDE и информации пользователя, зашифрованной в RAM.
Аппаратный захват оперативной памяти не будет эффективным, потому что она будет изолирована в песочнице IOMMU, и такой захват не позволит овладеть состоянием приложения или состоянием системы. Даже если вы планируете извлечь секреты из доверенного платформенного модуля TPM NVRAM, все, у вас получиться – это вернуться в первоначальное состояние, и хотя его легко сломать, вы все равно придёте к нулю.
Я допускаю, что если у вас имеется хорошая привычка проверять безопасность, вы сможете обнаружить чужое вмешательство в свой компьютер, если оставили его без присмотра хотя бы на 12 часов. Пока вы достаточно бдительны, вы будете в порядке.
Существует несколько основных методов атаки, которые я бы использовал, пытаясь взломать систему. Эффективной защиты от кейлоггеров до сих пор не существует, и даже использование одноразовых токенов будет несовершенной защитой.
Достаточно опасны упомянутые ранее атаки TPM — извлечение NVRAM, либо перехват/сброс оборудования шины LPC. Можно найти способ обмануть TPM относительно безопасной конфигурации, которая, по его мнению, заслуживает доверия, но на самом деле не является доверенной.
Манипуляции с памятью RAM также угрожают безопасности. Если у вас имеется нечто, выглядящее как RAM и ведущее себя как RAM, но на самом деле ею не являющееся, потому что извне подверглось вредоносному воздействию, вы ничего не сможете с этим поделать. Злоумышленник может попробовать такие вещи, как временную импульсную закачку, с помощью которой Джордж Хоц сломал защиту гипервизора игровой приставки Sony PS3.
Поскольку я не юрист, то очень кратко упомяну о юридических аспектах проблемы. Насколько я знаю, самоуничтожение системы не является незаконным действием. Это незаконно в некоторых странах, где вы не можете использовать доверенный платформенный модуль и сильное шифрование, как, скажем, в Китае, и вы также не можете использовать TPM в России. В некоторых странах, таких, как Великобритания, раскрытие ключа шифрования является обязательным, и вы можете попасть в тюрьму, если не раскроете свой ключ по требованию RIPA – Закона Великобритании о регулировании следственных действий, позволяющем перехват сообщений.
Немного расскажу о моей дальнейшей работе и улучшениях. Версия моей программы пока что не стабильна, например, если вы переведёте свой компьютер в режим сна, моя программа может начать стирать ваши данные. Сейчас я работаю над решением этой проблемы.
Есть еще кое-что, что может быть интересно сделать в будущем. Так как ключи OpenSSL действительно интересная и важная вещь, я собираюсь разработать API, который позволит очень быстро поменять содержимое памяти.
Я также собираюсь подумать над легкоустанавливаемым вариантом системы на основе Qubes OS.
Из моего выступления можно сделать такие выводы: даже самая лучшая в мире модель безопасности не может использоваться, если она непригодна к эксплуатации. Модель безопасности должна учитывать возможность её практического использования в реальных условиях.
Одного лишь шифрования диска не достаточно – настоящая защита приходит с полным шифрованием всей системы.
Системное шифрование требует наличия соответствующего аппаратного обеспечения, но это в любом случае лучше, чем существующее на сегодня статус-кво. Это сложно сделать, но я думаю, что возможно, и мы должны это попробовать. Спасибо за внимание!
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до весны бесплатно при оплате на срок от полугода, заказать можно тут.
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Комментарии (7)
AEP
06.01.2019 15:51TPM в Windows 10 нужен только для BitLocker. Информация о его запрете на территории России действительно устарела.
dartraiden
06.01.2019 22:48Это доклад 5.5-летней давности. Сейчас уже TPM есть в любом чипсете Intel, начиная с Sunrise Point.
snizovtsev
Это почему? Насколько я знаю, TPM является обязательным требованием для Windows 10 и Chromebook, где он активно используется для ключевых компонент из коробки. Получается в России нельзя легально использовать Windows 10?
keddad
Он не обязателен в Win10, но шифрование загрузочного диска без него безидейно, конечно, и Windows будет активно о этом напоминать.
snizovtsev
Тык. Собственно поэтому многие вендоры (вроде Dell) выпустили прошивку-апгрейд TPM 1.2 => 2.0 даже для старых ноутбуков.
dartraiden
Точнее, она вам откажет в шифровании, пока вы не включите соответствующую политику, разрешающую шифрование загрузочного тома без TPM.