Хабрахабр

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

Спасибо всем, что пришли, сегодня мы поговорим о полном шифровании жёсткого диска (FDE), которое не так безопасно, как вы думаете. Поднимите руки, кто шифрует таким образом HDD своего компьютера. Поразительно! Ну что же, добро пожаловать на DefCon!

Теперь пусть поднимут руки те, кто полностью выключает компьютер, если оставляет его без присмотра. Похоже на то, что 90% из вас используют для шифрования диска программы с открытым исходным кодом, чтобы иметь возможность провести их аудит. Скажите, а кто вообще оставляет свой компьютер без присмотра на несколько часов, всё равно, включён он или выключен? Я думаю, примерно 20% присутствующих. Я думаю, что практически всем приходилось оставлять свой компьютер хотя бы на несколько минут. Считайте, что я задаю эти вопросы, просто убедиться, что вы не зомби и не спите.

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

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

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

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

Кроме того, необходимо контролировать физический доступ к компьютеру и обеспечить его защиту от физического воздействия, потому что FDE ничем не поможет, если кто-то физически завладеет вашим компьютером.

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

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

Злоумышленнику не нужно атаковать криптографию, если он пытается взломать полное шифрование диска. Даже если у вас имеется безупречная криптография и вы знаете, что её практически невозможно взломать, в любом случае она должна быть реализована на реальном компьютере, где у вас нет никаких аналогов надёжных «черных ящиков». Для этого ему нужно просто атаковать сам компьютер или каким-то образом обмануть пользователя, убедив его предоставить пароль, или же использовать клавиатурный перехватчик keylogger, и т.д.

Если рассмотреть ПО, предназначенное для полного шифрования диска, видно, что его создатели уделяли очень много внимания теоретическим аспектам шифрования. Реальное использование шифрования не совпадает с моделью безопасности FDE. Я приведу выдержку из технической документации с веб-сайта программы TrueCrypt: «Наша программа не защитит никакие данные на компьютере, если атакующий имеет физический доступ к компьютеру до запуска или в процессе работы TrueCrypt».

Извиняюсь за текст, который изображён на следующем слайде, если вам трудно его прочесть, я сделаю это сам. В принципе, вся их модель безопасности выглядит так: «если наша программа правильно шифрует диск и правильно его расшифровывает диск – мы сделали свою работу». Это выдержки из переписки между разработчиками TrueCrypt и исследователем проблем безопасности Джоанной Рутковской по поводу атак «уборщика».

После того, как злоумышленник «поработал» над вашим компьютером, вы просто должны перестать использовать его для хранения конфиденциальной информации. TrueCrypt: «Мы никогда не рассматриваем возможность аппаратных атак, мы просто предполагаем худшее. Криптопроцессор TPM не в состоянии предотвратить аппаратные атаки, например, с использованием кейлоггеров.

Например, пользователь мог бы использовать замок или помещать ноутбук на время своего отсутствия в запираемый шкаф или сейф». Джоанна Рутковская спросила их: «Как можно определить, «поработал» ли злоумышленник над вашим компьютером или нет, ведь вы не носите ноутбук всё время с собой?», на что разработчики ответили: «Нас не волнует, каким образом пользователь обеспечивает сохранность и неприкосновенность своего компьютера. Джоанна ответила им очень корректно: «Если я собираюсь пользоваться замком или сейфом, зачем мне вообще ваше шифрование»?

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

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

Затем загрузчик запрашивает у пользователя данные аутентификации, такие как пароль или ключ смарт-карты. Как мы знаем, загрузчик грузится с SSD/HDD с помощью BIOS и копируется в основную память по пути передачи данных Storage Controller – PCI Bus – Platform Controller Hub. Это идеализированный взгляд на процесс, предполагающий, что никто не попытается каким-то образом в него вмешаться. Далее пароль проходит путь от клавиатуры к процессору, после чего загрузчик принимает управление на себя, при этом оба компонента – ОС и ключ — остаются в памяти для того, чтобы обеспечить прозрачность процесса шифрования и дешифровки диска. Я подразделяю атаки на 3 уровня. Я думаю, что вы прекрасно знаете несколько способов, как это можно взломать, поэтому давайте перечислим вещи, которые могут пойти не так, если кто-то попытается на вас напасть.

Вам не нужно «разбирать» систему, если вы можете без проблем подсоединить к ней любой аппаратный компонент типа PCI card, ExpressСard или Thunderbolt – новейший адаптер Apple, предоставляющий открытый доступ к шине PCI. Первый – неинвазионный, не требующий захвата вашего компьютера, так как осуществляется с помощью флеш-накопителя с вредоносным ПО.

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

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

Это особенно актуально, если вы используете не полное шифрование диска, а шифрование контейнера. Вы можете проделать нечто похожее на уровне операционной системы.

Этот ключ может быть сохранен на жестком диске в виде открытого текста для последующего применения злоумышленником или отправлен по сети системе Command&Control.
Другая возможность – это клавиатурный перехват с помощью кейлоггера, будь то программное обеспечение, аппаратное обеспечение или что-то экзотическое, типа камеры «игольное ушко» или например, микрофон, который записывает звуки, сопровождающие нажатия клавишей пользователем, и пытается выяснить, что это за клавиши. Это также может произойти при атаке системы эксплойтом, благодаря которому атакующий получает root-права и может прочитать ключ из основной памяти, это весьма распространённый способ атаки. Предотвратить такую атаку трудно, потому что потенциально она включает в себя компоненты, которые находятся за пределами системы.

Если бы лет 5 назад вы спросили даже очень подкованных в компьютерной безопасности людей, каковыми были свойства безопасности основной памяти, они бы сказали, что при отключении электропитания данные пропадают очень быстро. Я также хотел бы упомянуть атаки восстановления данных, более известные как «атаки методом холодной перезагрузки» Cold Boot Attack.

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

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

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

Многие из этих вещей имеют записываемую прошивку, которую вы можете просто перепрошить на что-то враждебное. В этом состоит проблема, потому что PCI-устройства могут быть перепрограммированы. В компьютерной криминалистике существует оборудование, предназначенное для таких вещей в процессе расследования преступлений: они подключают что-то к вашему компьютеру и вытаскивают содержимое памяти. И это может поставить под угрозу безопасность всей операционной системы, так как позволит осуществить любую форму атаки, даже модифицировать саму ОС или извлечь ключ напрямую. Вы можете сделать это с помощью FireWire, ExpressСard или Thunderbolt… Фактически всё это внешние порты, обеспечивающие доступ к внутренней системной шине.

Существует ли какое-нибудь выделенное хранилище ключей или специальное криптографическое оборудование? Итак, было бы неплохо, если бы можно было не хранить ключ в RAM, потому что мы вроде как продемонстрировали, что оперативная память не очень надежна с точки зрения безопасности. Можно использовать криптографические ускорители для веб-сервера, чтобы обрабатывать больше SSL-транзакций в секунду. Да, существует. У центров сертификации СА есть вещи, которые хранят их совершенно секретные ключи, но на самом деле они не предназначены для таких высокопроизводительных операций, как использование шифрования диска. Они устойчивы к несанкционированному вмешательству. Итак, есть ли другие варианты?

Можем ли мы вычислить что-то вроде симметричного алгоритма блочного шифрования AES в ЦП, используя вместо RAM только нечто типа регистров ЦП? Можем ли мы использовать процессор как своего рода псевдоаппаратный крипто-модуль?

Вопрос состоит в том, можем ли мы оставить наш ключ в памяти или мы можем выполнить этот процесс, не полагаясь на основную память? Intel и AMD добавили в процессоры отличные новые инструкции, которые взяли на себя работу выполнять AES, так что теперь вы можете выполнять операции примитивного блочного шифрования всего лишь с одной простой инструкцией по сборке. Таким образом, мы можем фактически использовать некоторые CPU для хранения ключей и создания пространства для выполнения операций шифрования. В современных процессорах x86 есть довольно большой набор регистров, и если кто-то из вас действительно пытался сложить все биты, которые имеются в этих, получается около 4 килобайт.

В типичном процессоре Intel имеется 4 таких регистра, и в системе x64 каждый из них будет содержать 64-битный указатель. Одна из возможностей — использование аппаратных регистров отладки точек остановок. Конечно, преимущество использования регистров отладки состоит в их привилегированности, потому что доступ к ним может получить только операционная система. Это 256 бит потенциального дискового пространства, которое большинство людей никогда не будет использовать. Здесь есть и другие приятные преимущества, например, при отключении питания процессора при выключении системы или переходе её в спящий режим вы действительно потеряете все содержимое регистра, так что можете не бояться «холодной перезагрузки».

Он протестировал производительность такой системы и сделал вывод, что она работает ничуть не медленнее, чем при регулярном вычислении AES программным обеспечением.
Как насчет того, чтобы вместо одного ключа хранить два 128-битных ключа? Парень из Германии, Тило Мюллер, реализовал эту подобную штуку под названием TRESOR для Linux в 2011 году. Мы можем хранить один мастер-ключ, который никогда не покидает процессор при загрузке, а затем загружать и выгружать версии ключей, необходимые нам для совершения дополнительных операций и решения дополнительных задач. Это приведёт нас к большему пространству криптомодуля.

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

Как оказалось, да, можем. Мы можем что-нибудь сделать с углом атаки DMA? В последнее время, в рамках новых технологий для повышения виртуализации серверов, по соображениям производительности людям нравится иметь возможность подключить, скажем, сетевой адаптер к виртуальному серверу, поэтому он должен подключаться через гипервизор.

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

Это позволяет запускать отдельную операционную систему и прозрачно осуществляет доступ к шифрованию диска, и здорово то, что вам не нужно об этом заботиться или что-либо об этом знать. Опять таки, наш друг из Германии, Тило Мюллер, реализовал версию TRESOR на микробитном визоре под названием BitVisor, который это делает. Доступ к диску полностью прозрачен для ОС, операционная система не может получить доступ к регистрам отладки, и IOMMU настроен таким образом, что гипервизор полностью защищен от каких-либо манипуляций.

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

Или, по крайней мере, большую часть основной памяти, в которой будем хранить секреты, чтобы минимизировать возможный объём утечки. У меня была очень глупая идея: можем ли мы зашифровать RAM?

В доказательство этой концепции в 2010 году парень по имени Питер Петерсон попытался реализовать решение шифрования оперативной памяти RAM. И, повторюсь, удивительно это или нет, но ответ – да, можем! При этом синтетические тесты показали снижение производительности системы в 10-50 раз. Фактически шифруется не вся оперативная память — он разделил основную память на две части: небольшой незашифрованный компонент фиксированного размера под названием “clear”, и более крупное псевдоустройство подкачки, где все данные зашифровывались перед тем, как сохраниться в основной памяти. Я думаю, с этим можно примириться. Однако в реальном мире, когда вы запускаете, например, тест веб-браузера, он на самом деле работает довольно хорошо – всего лишь на 10% медленнее. Автор рассматривал возможность использования таких вещей, как TPM для массовых операций шифрования, но эти вещи работали даже медленнее, чем выделенная аппаратная криптосистема, поэтому были полностью непригодны для использования. Проблема с этим доказательством реализации концепции заключалась в том, что он хранил ключ для расшифровки в основной памяти, потому что куда еще его можно было поместить?

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

Наши ключи не находятся в основной памяти, и наш код, ответственный за управление ключами, защищен от произвольного доступа вредоносных аппаратных компонентов к чтению и записи. Допустим, что у нас есть такая система. Но как нам получить систему, загруженную до этого состояния? Основная память зашифрована, поэтому большинство наших секретов не будут просачиваться, даже если кто-то попытается выполнить атаку холодной перезагрузки. Как можно проделать это самым надежным способом? Ведь нам нужно начать с выключенной системы, пройти аутентификацию и запустить систему. В конце концов, кто-то все еще может модифицировать системное программное обеспечение, чтобы обмануть нас так, что мы будем думать, что запускаем эту “большую новую” систему, на самом деле ничего такого не делая.

Пользователь должен быть в состоянии проверить, что компьютер не был взломан, прежде чем на нём аутентифицироваться. Таким образом, одной из важнейших тем является возможность проверки целостности наших компьютеров. Это своего рода плохой рэп, позже мы подробнее поговорим об этом, но у него есть возможность измерить последовательность загрузки несколькими различными способами, чтобы позволить вам контролировать, какие данные TPM будут предоставлены конкретным состояниям конфигурации системы. Для этого мы можем использовать инструмент — доверенный платформенный модуль Trusted Platform Module – реализацию спецификации, описывающей криптопроцессор. Есть несколько различных подходов к реализации этого, и есть замысловатая криптография, затрудняющая обход этой реализации. Таким образом, вы сможете «запечатать» данные в конкретной конфигурации программного обеспечения, которое вы запускаете в системе. Так что, возможно, это реально сделать.

Изначально это было своего рода грандиозное решение для управления цифровыми правами медиа-компаний. Что же такое ТРМ? В действительности это оказалось весьма неудачным решением, поэтому никто даже не пытается практически использовать его для этих целей. Медиа-компании могут удаленно проверить, что ваша система работает в какой-то «одобренной» конфигурации, прежде чем они позволят вам запустить программное обеспечение и разблокировать ключ доступа к видеофайлам.

Она может выполнять некоторые криптографические операции, RSA/SHA1, имеет генератор случайных чисел, и у нее есть контрмеры против физических атак, во время которых кто-то пытается получить доступ к хранящимся на ней данным. Я думаю, что лучший способ реализации такой идеи – это смарт-карта, которая закреплена на вашей материнской плате. Таким образом, она может оказать положительное влияние на обеспечение безопасности. Единственная реальная разница между ТРМ и смарт-картой заключается в том, что она имеет возможность измерять состояние загрузки системы в регистры конфигурации платформы и обычно это отдельный чип на материнской плате.

23:10 мин

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

Вам нравятся наши статьи? Спасибо, что остаётесь с нами. Поддержите нас оформив заказ или порекомендовав знакомым, 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 не будет опубликован. Обязательные поля помечены *

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