Хабрахабр

[Перевод] DEFCON 21. Одних паролей недостаточно, или почему «ломается» шифрование диска и как это можно исправить. Часть 2

DEFCON 21. Одних паролей недостаточно, или почему «ломается» шифрование диска и как это можно исправить. Часть 1

Есть небольшой диапазон энергонезависимой памяти, который можно использовать для ваших нужд, он не такой большой, как килобайт, но тоже может быть полезен. Существуют забавные штуки, такие, как монотонно возрастающие счетчики, с помощью которых можно контролировать активность TMP, а затем проверять полученные значения. Имеются команды, которые вы могли бы дать TMP, чтобы заставить его делать вещи от вашего имени, в том числе очистку собственной памяти при необходимости. Там имеется счётчик тактов, который позволяет определить, как долго система работает с момента последнего запуска.

Что полезного для такого протокола мы можем попробовать «запечатать» в регистры конфигурации платформы? Затем мы хотим разработать протокол, который пользователь может запустить на компьютере, чтобы убедиться, что компьютер не был взломан, прежде он аутентифицируется на компьютере и начнёт им пользоваться.

Вы также можете отключить «video out» на вашем компьютере, когда находитесь в режиме запроса и проверки подлинности аутентификации. У меня имеется пара предложений: это токены для разовых паролей пользователя, уникальное изображение или анимация, например, ваша фотография, что-то оригинальное, что нелегко найти в другом месте.

В рамках определенных предположений безопасности это гарантирует, что система будет загружаться только в некоторую утвержденную конфигурацию программного обеспечения, которую вы контролируете как владелец компьютера. Вы также можете захотеть «запечатать» часть дискового ключа, и есть несколько причин, по которым вы захотите это сделать. Конечно, это не особо сильная криптографическая защита, потому что у вас не будет протокола, который позволяет пользователю безопасно аутентифицироваться с тем же уровнем безопасности, которых предоставляет, скажем, AES. В конечном счете, это означает, что любой, кто захочет атаковать вашу систему, должен сделать это либо через взлом TMP, либо сделать это в песочнице, которую вы для них создали. Но если вы не способны организовать что-то вроде шифрования RSA в своей собственной голове, это никогда не будет совершенным.

Поскольку TPM требует определённой конфигурации системы, прежде чем она выдаст «секреты», вы можете сделать что-то интересное, например, самоуничтожение. Я упоминал, что в TPM есть команда self-erase, которую можно выполнить через программное обеспечение. Вы можете разработать программное обеспечение и создать свой протокол, чтобы ограничить число неудачных запусков компьютера, можете установить тайм-аут после того, как пароль пробыл на экране в течение некоторого периода времени, или ограничить количество попыток ввода неправильного пароля.

Можно установить предельное время повторного запуска компьютера после предыдущего рабочего цикла, если компьютер был в «замороженном состоянии» одну-две недели, ограничить доступ к компьютеру на период времени, когда вы собираетесь выехать за границу – вы блокируете его на то время, пока будете в дороге, чтобы разблокировать не раньше, чем попадёте в отель.

На самом деле это будут просто «растяжки», срабатывание которых приведёт к изменению значений монотонного счётчика внутри TPM. Вы также можете сделать некоторые забавные вещи, например, оставить маленьких «канареек» на диске, который содержит критические данные с точки зрения безопасности.

Поскольку злоумышленник может атаковать двумя способами: взломать доверенный платформенный модуль или запустить вредоносное программное обеспечение, вы можете заставить его играть по этим правилам и фактически выполнить эффективное самоуничтожение. Можно также создать пароль самоуничтожения или принудительный код для автоматического выполнения команды сброса.

Таким образом, вы можете использовать такие вещи, как монотонные счетчики, чтобы обнаружить любые атаки восстановления или воспроизведения диска. Доверенный платформенный модуль специально разработан, чтобы его было очень трудно скопировать, поэтому его не возможно просто клонировать. Он предложил использовать удаленный сетевой сервер для реализации многих из этих вариантов, но признал, что это будет трудно использовать на практике. И как только в TPM будет выполнена команда «clear», для злоумышленника, который захотел получить доступ к вашим данным, наступит конец игры.
Существуют некоторые сходства с системой, которую Якоб Аппельбаум обсуждал на конференции Chaos Communication Congress много лет назад, в 2005. Потенциально возможен гибридный подход. Поскольку TPM — это интегрированный компонент системы, вы можете получить много преимуществ только с помощью встроенного модуля TPM, а не модуля, расположенного на удалённом сервере. Я не решаюсь выставлять сетевой стек в начале процесса загрузки, просто потому, что он значительно увеличивает поверхность атаки. Вы могли бы настроить систему, скажем, как в ИТ-отделе, когда вы временно блокируете систему, и она может стать доступной только после того, как вы подключите ее к сети, позвоните своему ИТ-администратору, и он её разблокируют. Но это все еще возможно.

На следующем слайде показан снимок конструкции микросхемы ТPM, сделанный Крисом Тарновским с помощью микроскопа. Хочу уточнить, что злоумышленник может сделать только это, предполагая, что он не сможет легко сломать TPM. Он перечислил контрмеры, выяснил, что потребуется, чтобы на самом деле сломать эту штуку, а затем протестировал всю микросхему. Крис выступал на DefCon в прошлом году и несколько лет назад делал презентацию на конференции BlackHat по поводу безопасности TPM.
Он действительно проделал большую работу, чтобы понять, насколько трудно сломать эту вещь. На плате TPM имеются детекторы света, активные сетки, реализованы разные совершенно сумасшедшие схемы, чтобы ввести злоумышленника в заблуждение относительно того, что на самом деле делает этот модуль.

Вы сможете изъять чип, поместить его с помощью электронного микроскопа в рабочую станцию, найти, где находится шина с незашифрованными данными и вытянуть из неё все секреты. Но если вы потратите достаточно времени и ресурсов и при этом будете достаточно осторожны, то сможете обойти большинство из защитных мер. Тем не менее, такая атака, даже если вы тщательно к ней подготовились и разберётесь, что где расположено, используя дорогой микроскоп, всё равно потребует затрат времени и сил на то, чтобы устранить физическую защиту чипа и случайно не «поджарить» его во время демонтажа.

Я упоминал ранее, что почти во всех случаях TPM — это отдельная микросхема на материнской плате. Рассмотрим атаки методом перезагрузки. Она не входит в состав ЦП, как это сделано с DRM в видеоконсолях. Это очень низкое звено в системной иерархии. Это плохо, потому что подобная атака может остаться для вас незамеченной. Поэтому если хакеру удастся перезагрузить TPM, это не окажет на систему необратимого влияния.

В современных системах единственные вещи, расположенные на поверхности материнских плат – это TPM, модуль BIOS, контроллеры клавиатуры, но я думаю, что на самом деле гибкие контроллеры уже не используют. Обычно это чип, который находится вне компьютерной шины LPC, которая сама по себе является устаревшей шиной и расположена вне Южного моста материнской платы. Вероятно, вы потеряете доступ к клавиатуре через разъём PS/2, но это не большая проблема, зато сможете воспроизвести последовательность загрузки TPM, в котором «запечатаны» секретные данные, без фактического выполнения безопасной последовательности, и сможете воспользоваться этим для извлечения данных. И если вы найдете способ перезагрузить шину с небольшим количеством контактов, вы сбросите TPM в состояние загрузки «свежей операционной системы».

Если в TPM используется старый режим, который называется «статический корень измерения доверия» Static Root of Trust for Measurement (SRTM), то вы можете сделать это довольно легко. Существует несколько атак, которые пытаются использовать этот способ. Вероятно, все еще возможно захватить шину LPC и то, что она передает центральному процессору, это область, которая нуждается в большем исследовании. Я не встречал никаких исследований по поводу успешных атак против новых надежных технологий выполнения вариантов активации модуля Intel. В архитектуре PC имеется много довольно уязвимых компонентов. Это может стать ещё одним способом атаковать доверенный платформенный модуль.
Итак, давайте посмотрим на схему того, что мы должны иметь для холодной загрузки системы при наличии надёжной конфигурации.

На мой взгляд, вам не нужно делать проверку безопасности в режиме реальной загрузки BIOS, вам нужно просто измерять показатели процесса загрузки. Например, в BIOS можно захватить таблицу векторов прерываний и модифицировать права чтения диска, или перехватить ввод с клавиатуры, замаскировать все функции регистров CPU – существует множество вариантов атаки.

Я имею в виду, как только вы начнёте использовать ресурсы операционной системы, то, что кто-то делает на уровне BIOS, оперируя с таблицей прерываний, на вас никак не повлияет. Как только вы попадаете в режим «предварительной загрузки», который на самом деле является просто вашей операционной системой, например, такой, как начальный RAM-диск Linux, вы начинаете выполнять свой протокол и делать эти вещи. Вам действительно будет все равно.

Например, если работаете с процессором Core i5, то вы знаете, что он будет поддерживать такие вещи, как бит запрета исполнения, отладочные регистры и другие вещи, которые люди могут попытаться замаскировать в возможностях регистров. Вы сможете проверить работоспособность регистров.

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

Проблема в том, что BitVisor довольно специфичная и редко используемая программа.
Xen — это своего рода канонический гипервизор с открытым исходным кодом, участвующий во многих исследованиях в области безопасности, во время которых люди убеждались в его работоспособности. Существовал проект под названием BitVisor, который реализовал многие аспекты безопасности шифрования диска с использованием регистров процессора и защиты IOMMU в вашей основной памяти. На мой взгляд, мы должны использовать гипервизор Xen в качестве аппаратного интерфейса «голого» уровня, а затем добавить к нему административный домен Linux dom0, чтобы выполнить инициализацию вашего оборудования.

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

Мы выделяем два первых регистра отладки для хранения 128-битного ключа AES, который является нашим мастер-ключом. Итак, подход, который я использую, заключается в том, что мы размещаем мастер-ключ в регистрах отладки.

Затем мы используем два вторых регистра в качестве специфичных регистров виртуальной машины – они могут использоваться как обычные отладочные регистры либо, как в данном случае, мы можем использовать их для шифрования основной памяти. Эта вещь никогда не покидает регистры ЦП после того, как она вводится процессом, который принимает учетные данные пользователя. Это графический процессор, который является устройством PCI, клавиатура, TPM – все это должно находиться в непосредственном доступе. В этом конкретном случае нам необходимо иметь несколько устройств, которые напрямую подключены к административному домену.

Вы можете получить доступ к таким вещам, как сеть, фактически помещая сетевой контроллер в выделенные виртуальные машины Net VM. Вы не сможете использовать для этих вещей защиту IOMMU, но можете настроить эту защиту для сетевого контроллера, контроллера хранилища, произвольных устройств на шине PCI, то есть для компонентов, которые не имеют никакого доступа к административному домену или пространствам памяти гипервизора. Эти вещи будут сопоставлены конкретным устройствам, имеющим настроенную защиту IOMMU, так что такое устройство сможет получить доступ только к области памяти этой виртуальной машины.

Таким образом, даже если кто-то завладеет вашим веб-браузером или отправит вам вредоносный PDF-файл, он не получит ничего, что позволило бы серьезно скомпрометировать шифрование диска. То же самое можно сделать с контроллером хранилища Storage Controller, а затем запустить все приложения на виртуальных машинах APP VM с абсолютно нулевым прямым доступом к оборудованию.

Я не могу взять на себя ответственность за этот архитектурный дизайн, потому что на самом деле он является основой отличного проекта под названием Qubes OS.

Qubes OS реализует политику непривилегированных гостей и создаёт унифицированную системную среду, так, что создаётся впечатление, что вы работаете с одной системой, но на самом деле это куча разных виртуальных машин «под одним капотом». Его разработчики описывают этот проект как прагматичное формирование из Xen, Linux и нескольких пользовательских инструментов для осуществления многих вещей, о которых я только что говорил. Я использую эту идею для реализации моей кодовой базы.

Это пропатченный Xen, позволяющий реализовать шифрование диска по описанной мною технологии. Итак, инструмент, который я разрабатываю — это экспериментальный код, подтверждающий данную концепцию, я назвал его Phalanx.

По соображениям безопасности регистры XMM 0-12, используемые в качестве операционной памяти, DR2-3 и ключ шифруются при переключении контекста виртуальной машиной. В 2-х первых отладочных регистрах DR1-2 расположен мастер-ключ, вторые два регистра отладки DR2-3 абсолютно не ограничены domU. Как известно, самый безопасный код — это код, который вам не нужно писать. Я также сделал очень простую реализацию шифрования с помощью модуля ядра Linux zRAM, потому что это встроенный элемент, который делает практически все, кроме криптографии, поэтому для шифрования я просто добавил поверх него очень маленький кусочек кода. Хорошее свойство zRAM заключается в том, что он предоставляет вам кучу бит, которые нужны для безопасной реализации таких вещей, как AES Counter-Mode.

Вам нужна система, которая поддерживает новые инструкции AES, достаточно распространенные, однако не каждая система их имеет. У нас имеется несколько требований к аппаратному обеспечению. Скорее всего, если у вас процессор Intel i5 или i7, эти инструкции поддерживаются.

Аппаратные расширения виртуализации HVE получили широкое распространение примерно в 2006 году. Но остальное «железо» необходимо проверить, чтобы убедиться, что оно поддерживает все необходимые функции. Это не указано в спецификации системного блока, и вам потребуется покопаться в его характеристиках, и также узнать, в чём разница между VTX и VTD и так далее. Немного сложнее будет найти компьютер с IOMMU. И вам, конечно, нужна система с доверенным платформенным модулем TPM, потому что иначе вы вообще не сможете реализовать измерение показателей загрузки. Так что, возможно, вам придется искать систему, которая поддерживает эти вещи. Если вы найдёте Intel TXT с технологией Trusted Execution, то он будет иметь почти все, что вам нужно. Обычно вы смотрите на компьютеры бизнес — класса, в которых можно проверить наличие необходимых компонентов. Команда Qubes в своей Вики представляет отличный список совместимости оборудования, в котором указаны детали для многих систем, реализующих такие вещи.

ТРМ, конечно, является очень важным компонентом для обеспечения целостности загрузки. Итак, для обеспечения безопасности у нас имеется несколько допущений о некоторых компонентах системы. Основываясь на замечаниях Тарновского, который выполнил реверсный инжиниринг этих чипов, я устанавливаю ограничение примерно в 12 часов эксклюзивного доступа к компьютеру, которое требуется, если вы хотите совершить на него атаку TPM, чтобы выудить все секреты. Вам нужно убедиться, что нет бэкдора, способного сбрасывать NVRAM, манипулировать монотонными счетчиками или заставлять систему думать, что она использует доверенное состояние, хотя в действительности это не так.

\

Некоторые из этих допущений не обязательно должны быть очень строгими, потому что Intel может легко обойти некоторые из этих вещей, и у нас не найдётся способа об этом узнать. Есть несколько допущений относительно процессора, контроллера памяти и IOMMU, главным образом касающихся того, что они не взломаны и правильно реализуют свои функции.

Это часть программного обеспечения, которая на самом деле имеет очень мощную систему безопасности, но ничто не идеально, и иногда уязвимости возникают даже в безопасной системе. Некоторые из допущений безопасности касаются Xen. Мы хотим провести реалистичную оценку угроз, понимая, что не каждая система является неуязвимой, особенно когда есть так много унаследованных компонентов, которые были разработаны без какого-либо учета безопасности. Учитывая, что Xen имеет привилегированное положение в системе, очень важно убедиться, что он пребывает в безопасном состоянии.
Таким образом, при таких допущениях безопасности у нас есть своего рода основа модели угроз. Однао следует помнить, что наши допущения могут быть неверными.
Я думаю, что хорошая аналогия – это безопасность обычного сейфа. Но в то же время не все теоретические атаки осуществимы на практике, и вы не можете объединить очень простые и очень сложные аппаратные атаки. Все мы знаем, что каждый сейф в конечном итоге может быть сломан, вопрос в том, сколько времени у вас есть на реверсный инжиниринг, каков ваш запас времени на взлом.

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

Атака методом холодной перезагрузки не будет эффективной против ключей FDE и информации пользователя, зашифрованной в RAM. Ожидаемая безопасность — это то, что вы получите на самом деле.

Даже если вы планируете извлечь секреты из доверенного платформенного модуля TPM NVRAM, все, у вас получиться – это вернуться в первоначальное состояние, и хотя его легко сломать, вы все равно придёте к нулю. Аппаратный захват оперативной памяти не будет эффективным, потому что она будет изолирована в песочнице IOMMU, и такой захват не позволит овладеть состоянием приложения или состоянием системы.

Пока вы достаточно бдительны, вы будете в порядке. Я допускаю, что если у вас имеется хорошая привычка проверять безопасность, вы сможете обнаружить чужое вмешательство в свой компьютер, если оставили его без присмотра хотя бы на 12 часов.

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

Можно найти способ обмануть TPM относительно безопасной конфигурации, которая, по его мнению, заслуживает доверия, но на самом деле не является доверенной. Достаточно опасны упомянутые ранее атаки TPM — извлечение NVRAM, либо перехват/сброс оборудования шины LPC.

Если у вас имеется нечто, выглядящее как RAM и ведущее себя как RAM, но на самом деле ею не являющееся, потому что извне подверглось вредоносному воздействию, вы ничего не сможете с этим поделать. Манипуляции с памятью RAM также угрожают безопасности. Злоумышленник может попробовать такие вещи, как временную импульсную закачку, с помощью которой Джордж Хоц сломал защиту гипервизора игровой приставки Sony PS3.

Насколько я знаю, самоуничтожение системы не является незаконным действием. Поскольку я не юрист, то очень кратко упомяну о юридических аспектах проблемы. В некоторых странах, таких, как Великобритания, раскрытие ключа шифрования является обязательным, и вы можете попасть в тюрьму, если не раскроете свой ключ по требованию RIPA – Закона Великобритании о регулировании следственных действий, позволяющем перехват сообщений.
Немного расскажу о моей дальнейшей работе и улучшениях. Это незаконно в некоторых странах, где вы не можете использовать доверенный платформенный модуль и сильное шифрование, как, скажем, в Китае, и вы также не можете использовать TPM в России. Сейчас я работаю над решением этой проблемы. Версия моей программы пока что не стабильна, например, если вы переведёте свой компьютер в режим сна, моя программа может начать стирать ваши данные.

Так как ключи 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 до весны бесплатно при оплате на срок от полугода, заказать можно тут.

класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки? Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»