27.04 // Amnesia: програмная защита от атак холодной перезагрузки
Дисковое шифрование является важной мерой безопасности для множества пользователей, включая представителей государственных организаций, корпораций, активистов, профессионалов по безопасности и частных лиц, обеспокоенных своей приватностью.
К сожалению, исследования показали возможность лёгкой утечки ключа шифрования в руки злоумышленника при наличии физического доступа к включенному компьютеру, на котором смонтированы шифрованные диски. Так называемая атака Хельдермана позволяет даже слабооснащённому противнику выключить компьютер, переставить планки памяти в другую машину (в ряде случаев загрузиться на той же машине) и с помощью специально подготовленных загрузочных дисков считать остаточную информацию, которая может сохраняться в оперативной памяти в течении нескольких минут после выключения. Это время может быть увеличено до часов путём криостатирования, что однако не является необходимым на практике. Поскольку ключ шифрования находится в памяти в развёрнутом виде после выполнения алгоритма вычисления ключевого расписания, то его легко обнаружить среди остаточных повреждённых данных и по его фрагментам восстановить исходный ключ шифрования. Т.о., даже повреждение самих частей развёрнутого ключа, не только не мешает их обнаружению, но и позволяет восстановить исходный (неразвёрнутый) ключ.
Патрик Симмонс из университета Урбана-Шампейн, Иллинойс, утверждает, что ему удалось разработать программное решение этой проблемы. За основу разработки была взята модификация системы шифрования Linux loop-aes (набор модулей ядра и патчей к системным утилитам). Выбор loop-aes вместо dm-crypt в работе не обосновывается, но возможно предположить, что это связано с хорошей проработкой ассемблерных реализаций криптоалгоритмов в loop-aes, что оказалось очень подходящим для этой работы. Ему удалось добиться снижения скорости по сравнению с обычным шифрованием не более, чем в два раза.
Принцип защиты основан на широко известной идее: возможности сохранения чувствительных данных не в оперативной памяти, а в кэше процессора. К этой идее многие относились скептически, считая её непрактичной или вообще труднореализуемой.
Стоит вспомнить предыдущие попытки решения. Первые из них предложила сама группа Хельдермана после открытия им атак холодной перезагрузки. Удаление ключей из памяти сразу после размонтирования является лишь дополнительной ограничительной мерой и не решает поставленную задачу. Полумерой является и обфускация. Модификация аппаратной платформы, включающая датчики вторжения или установку специальных криптопроцессоров — сравнительно дорогой, трудноовнедряемой и ненадёжной. Заклеивание эпоксидной смолой — непрактичной.
В работе, Tilo Muller, Andreas Dewald, and Felix C. Freiling. Aesse: a cold-boot resistant implementation of aes. In Proceedings of the Third European Workshop on System Security, EUROSEC '10, pages 4247, New York, NY, USA, 2010. ACM, было представлено программное решение AESSIE. Единственный ключ шифрования сохранялся в MMX-регистрах процессора, а затем доступ кода на уровне пользователя к этим регистрам закрывался. Шифрование или расшифрование алгоритмом AES производилось на основе инструкций MMX или SSE на уровне ядра. Метод замедлял шифрование примерно в 6 раз, позволял работать только с одним развёрнутым в MMX-регистрах ключом одновременно и вызывал замедление или невозможность работы программ, которым требовались MMX-инструкции.
На конференции Black Hat 2008 было предложено вычислять ключ в памяти путём хэширования массива большого размера. Повреждение хотя бы одного бита при деградации памяти не позволит противнику вычислить ключ, но пользовательской системе придёться вычислять ключ заново, каждый раз при обращении к блоку данных для (рас)шифрования. Это привело бы к большому снижению производительности и не решило бы проблему хранения развернутого ключа.
Юрген Пэйбель в 2009 году предлагал использовать кэш L1 для хранения развёрнутого ключа и блокирования к нему доступа памяти. Работа памяти без кэширования привела бы к двухсоткратному снижению производительности не только программы дискового шифрования, но и всех остальных программ.
Пользователи, устроившие мозговой штурм на Linux-Crypto, советовали разработать новые шифры, с таким ключевым расписанием, чтобы быть стойкими к частичной утечке данных из развёрнутого ключа. Даже несмотря на то, что разработка принципиально нового шифра является слишком сложным решением, оно неэффективно и по другой причине: существующие методы холодной перезагрузки достигли уровня, позволяющего считывать неповреждёнными 99,9% содержимого памяти. При таких показателях практически все раундовые подключи будут всё-равно доступными с высокой вероятностью.
Trusted Computing Group разработала спецификацию по обнулению памяти при загрузке через BIOS. Это возможно и предотвратит атаку, если она проводится после перезагрузки непосредственно на компьютере атакуемой стороны, но скорее всего планки оперативной памяти могут быть переставлены на другую машину.
Патрик Симмонс, автор Amnesia, предложил использовать т.н. performance counter registers (Intel: MSRs 0xC1, 0xC2, 0x309, 0x30A; AMD: MSRs 0xC0010004, 0xC0010005, 0xC0010006, 0xC0010007) для хранения одного AES-ключа.
Далее алгоритм шифрования работает так:
- Отключить прерывания.
- Прочитать мастер-ключ из MSR и записать в регистры.
- Прочитать шифрованный ключ тома из памяти в регистры.
- Расшифровать ключ тома без сохранения каких-либо промежуточных данных в RAM.
- Прочитать буфер открытого текста из RAM в регистры.
- Зашифровать открытый текст, используя ключ тома без сохранения каких-либо временных данных в памяти.
- Записать шифртекст в буфер шифртекста
- Обнулить все регистры, содержащие данные, связанные с ключом.
- Включить прерывания.
- Выйти из функции.
Алгоритм расшифрования работает по аналогии:
- Отключить прерывания.
- Прочитать мастер-ключ из MSR и записать в регистры.
- Прочитать шифрованный ключ тома из памяти в регистры.
- Расшифровать ключ тома без сохранения каких-либо промежуточных данных в RAM.
- Прочитать буфер шифртекста из RAM в регистры.
- Расшифровать шифртекст, используя ключ тома без сохранения каких-либо временных данных в памяти.
- Записать открытый текст в буфер открытого текста.
- Обнулить все регистры, содержащие данные, связанные с ключом.
- Включить прерывания.
- Выйти из функции.
Таблица регистров, особенности алгоритма, "подводные камни" (например сложности с отключением некоторых прерываний) подробно перечислены в работе. Приведены недостатки альтернативного решения на TPM (модулях доверенных вычислений). Опубликованы результаты тестов производительности (бенчмарк-тестов).
В качестве недостатка метода автор считает привязку к конкретным архитектурным решениям процессора, что требует различных ассемблерных модулей, однако считает, что возможно в будущих моделях процессоров появятся специализированные регистры памяти для проведения операций с чувствительными данными, по аналогии с тем, как компания Intel внедрила инструкции для быстрого выполнения алгоритма AES.
К функциональным ограничениям относится то, что метод не позволяет использовать технологию "suspend to RAM", что подразумевает утечку ключа в память.
Другие ограничения и потенциальные уязвимые места:
- Ключевая информация в виде пароля или строки попадает в ядро через UNIX-pipe (конвейер) и таким образом остаётся в памяти, пока ядро безопасно не обнулит эти данные в памяти. Автору пока не удалось реализовать эту процедуру должным образом.
- Joint Test Action Group (JTAG) — порт тестирования работоспособности процессора, из которого можно считать его внутренние регистры. Злоумышленник может подключиться к этому порту на работающей машине и считать данные всех регистров, включая те, где Amnesia хранит мастер-ключ. Этот порт на x86-процессорах нужен, как правило, только на этапе их производства и крайне редко используется после их продажи. Как правило, при этом он и не имеет разводки подключения. Однако, обеспокоенным пользователям рекомендуется удалить или повредить этот порт на своём процессоре или разбить его предохранитель безопасности.
- Немаскируемые прерывания (NMI). Они не могут быть отключены, так как возникают в результате ошибок аппаратной части. Атакующий может вызвать точно спланированные ошибки в аппаратной части, чтобы получить короткий промежуток времени для чтения регистров. Эта атака считается слишком сложной и малопрактичной из-за этого крайне короткого промежутка времени, но в будущем могут быть предприняты меры защиты и против высокооснащённого атакующего. Они будут включать изменение поведения операционной системы определённым образом.
Исследователь предлагает усовершенствовать свою методику для противодействия руткиту Forenscope (Framework for Live Forensics). Это форенсик-средство с технологиями руткита использует атаку холодной перезагрузкой (т.е. применимо после физического доступа к компьютеру) и продолжает удерживать в памяти SSL и SSH сеансы захваченного компьютера, не только извлекая ключи, но и поддерживая активные сетевые соединения, что позволяет противнику, участвующему в захвате компьютера или сервера пользователя, также осуществить захват управляемой им сети как физически (например, используя несколько скоординированных групп захвата), так и удалённо (осуществлять MITM-атаки, получать несанкционированный удалённый доступ к другим машинам приватной сети и т.д.).
Для нейтрализации Forenscope-атак, автор предлагает развивать поддержку проекта Amnesia не только для дискового шифрования, но и в отношении шифрования чувствительных областей TCP-стека и для SSH/SSL-ключей. Как только мастер-ключ будет уничтожен в процессоре, установка руткита Forenscope методом холодной перезагрузки не поможет противнику перехватить данные шифрованных сетевых соединений, используя их для неавторизованного доступа к приватным сетям или извлечения сеансовых ключей.
Другим направлением исследования является изучение вопроса поддержки шифров, альтернативных AES. Шифры, с зависящими от ключа S-блоками или сложным ключевым расписанием могут хуже адаптироваться к исполнению в Amnesia.
Ещё одним направлением будет появление дополнений к языкам программирования более высокого уровня, которые бы позволили программистам получать прямой контроль над регистрами, что избавило бы их от переизобретения такого рода языков на ассемблере.
Наконец, после проведения всех исследований, автор приглашает всё Linux-сообщество активно внедрять предложенные меры защиты от атак холодной перезагрузкой в стандартное ядро.
Источник: Cryptography and Security Archive
комментариев: 9796 документов: 488 редакций: 5664
И это правильно! Автор предлагает свою систему использовать и для шифрования других чувствительных данных, содержащихся в памяти.
Не все
йогуртыруткиты одинаковы. Тут описываются такие, о принципах работы которых вы возможно даже не подозревали.Hint: В систему с зашифрованным диском. И не в процессе её работы, а после выключения питания. И не в систему даже как-таковую. А в её дамп оперативки, снятый после холодной перезагрузки. Этот дамп подхватывается другой системой, которая и действует как руткит (впрочем, тут надо подробнее смотреть первоисточники, могут быть варианты, почему это не совсем корректно обозвали руткитом). Дамп полуразвалившийся, с ним так просто не поработаешь, но можно сделать, что восстановив параметры tcp-сессии и SSH/SSL соединения, продолжить их. С соответствующими перехваченными правами.
комментариев: 9796 документов: 488 редакций: 5664
Потому что под благим предлогом (функции реинициализации) в сетевухи напихали нечто шпионоподобное.
В Forenscope это описано:
Как бы там много каких трюков, чтобы управлять как бы живой системой. Поэтому видимо, автор и назвал Forenscope руткитом, хотя (скорее всего) вы правильно заметили, что это — не руткит, просто форенсик-средство, заимствующее у руткитов и виртуалок какие-то отдельные технологии. В исходной работе его руткитом не называют, а автор этой работы решил рассмотреть (обозвать) его так.
Зато понятно, что раз память-то не шифрована, то если ключ шифрования диска и погаснет вместе с процом, то из памяти можно не только выудить массу всего интересного, но и попытаться сделать дамп не просто с другими (не имеющими отношения к дисковому шифрованию, но тоже ценными) ключами и другим интересным открытым текстом, но и снять один дамп в архив, а с другого дампа попытаться загрузиться на этой же машине как на живой, разблокировав все скринсейверы, получив рутовый шелл и пр. Правда надо как-то очень быстро и винчестер сдампить (который может быть очень большим), чтобы его тоже не запороть.
Ещё вопросы такие. Ну, сразу понятно, что USB-входы, равно как и CD-дисковод можно отключить. Не факт, что это спасёт, но гемороя форенсикам прибавит. Можно включить пароль на BIOS для загрузки компа: поскольку настройки BIOS'а от ресета сами по себе никуда не сбросятся, это дополнительная страховка (хотя настройки биоса можно тупо сбросить перемкнув контакты, да).
А его-то зачем дампить? Инфа с него никуда не денется и так.
Всё это опять стандартная битва щита и меча. Заранее понятно что способы обойти защиту амнезии тоже есть, и рекомендации не внушают доверия. Если порт есть, кто мешает создать высокотехнологичную аппаратуру, чтобы к нему всё же подключиться на работающей машине? Всё это только повысит планки затрат на этот тип атаки.
Не ясно используется ли уже Forenscope на практике. Слышно ли про это что-нибудь? Статья вроде бы датируется прошлым годом. Вдруг эта технология уже широко распространена среди тех, кому не надо, а открытая публикация на тему появилась только сейчас?
Страшно даже представить, чтобы для противодействия столь редким и экзотическим атакам, можно было бы пойти на такие подвыпердвыверты через левое плечо назад. Аж голова кружится, когда я представляю сколько будет глюков, и как будут материться благодарные пользователи этой хрени.
ИМХО место подобным трюкам – в каких-нибудь маргинальных патчах, ибо я не представляю кому в здравом уме это нужно.
Тот кто дает такие рекомендации наверно в детстве часто падал головой. Пора бы уяснить, что физический доступ к работающей системе дает всё, и окончательно закрыть этот вопрос. А вместо вырезания гланд автогеном через жопу, лучше бы изобретали простые и эффективные методы физической защиты. Хороший сейф с надежным датчиком вскрытия и термитной шашкой будет в 100500 раз надежнее любых программных мер хотя-бы тем, что бесполезно выпытывать пароль от спекшегося куска шлака.
комментариев: 9796 документов: 488 редакций: 5664
GPL-лицензию использование внутри организации не нарушает. GPLv2-программы нельзя массово продавать без исходников, но можно написать за деньги по контракту между организациями и передать исходники заказчику, маловероятно, что госорганы будут эти исходники распространять добровольно (ибо по лицензии не обязаны, т.к. не перепродают/не перераспространяют). GPLv3-программы нельзя ещё предоставлять без исходников в качестве сервисов (сетевых, внутрижелезячных) — опять же внутри организации или по договору между заказчиками исходники передаются друг другу, но в сообщество не уходят и в публичный доступ по лицензии в таком случае предоставляться не обязаны.
Автор считает, что любой из трёх мер достаточно, ему виднее. Подробности по методам выведения порта из строя не приведены. Можен он выжигал его йонной пушкой под электронным микроскопом.
Ну это же не академический подход с точки зрения компьютерных наук! На кафедре параллельных вычислений (или где там была работа опубликована) максимум что учат — это порты ломать.
С точки зрения конспирологии, возможно, что:
P.S.: к слову о стоимости сейфа и доверии к промышленным его образцам vs решения, которое будет бесплатно для каждого, если в итоге надёжно реализуют.
комментариев: 371 документов: 19 редакций: 20
При физическом доступе к системе открывается слишком много возможностей для атак, а потому, если вопрос актуален, решать его следует радикально. Раз нет возможности хотя бы на минуту задержать атакующего и обесточить систему, он может вставить в PCI-порт специальную карточку, с помощью которой прочитать содержимое оперативной памяти, при этом ключи — не единственное интересное, что в ней есть. Можно, например, не прочитать, а записать. Допустим, записывается код в зарезервированную BIOS'ом страницу, которую ОС не трогает, а потом находится по сигнатуре память известной функции в ядре ОС и патчится указатель. Т.о. можно выполнить шелл-код в ядре, а оттуда подтянуть полноценный руткит, который передаст не только сам дамп, но и данные в расшифрованном виде (или снимет ключи с процессора).
Такую карточку можно разработать и воспользоваться ею, если ОС поддерживает DMA bus mastering1. Конечно, это программно отключается, но тогда "прощайте видюхи2, RAID'ы, звуковухи, а, возможно, и сетевухи". Про DMA bus mastering можно почитать в википедии:ru.wikipedia.org/wiki/DMA
Грубо говоря, если есть доступ к памяти, то туда можно и писать, а, значит, и запустить свой код, т.е. все такие меры бесполезны. Запретить запись в память можно аппаратно, и этим и следует заниматься, а не хранением ключа диска в MSR-регистрах. На худой конец можно сделать хотя бы сейф с датчиком вскрытия, на который повешено затирание памяти и последующее обесточивание системы. Стоит ещё отметить, что засылка руткита через запись в память легче ставится на поток, чем разбор дампов. Конечно, не все могут сами собрать такой сейф, так что остаётся ждать, когда подобное решение появится на рынке. Само аппаратное обесточивание можно сделать ОС-независимым, а для затирания памяти написать драйвера под основные типы ОС.
1Любая PCI-карточка по своей инициативе может запросить у чипсета DMA-передачу.
2VGA-режим разве что будет, но не более того.
По моему дух GPL не в этом, и либо надо дописать об обязанности возвращать в сообщество (по требованию) всё написанное с его испольшованием либо это просто завуалированное нарушение и можно добиваться через суд.
[/off]
Разработка серьезного опенсорса – это процесс, в котором мало места для энтузиазма. Надеюсь для вас не секрет, что в этом мире мало что делается бесплатно, и существование опенсорс сообщества оплачивается корпорациями, которые используют результаты его труда в своей деятельности, либо как-то иначе получают с него доход. Хорошая опенсорс лицензия должна быть компромиссом между желаниями разработчиков и их работодателей. Если корпорации не смогут использовать опенсорс в своей внутренней кухне не раскрывая коммерческих ноу-хау, то такие разработки не будут оплачивать, а студенты на голом энтузиазме ничего хорошего не напишут.
Если проект начинается на энтузиазме, то он либо коммерциализируется, либо находит спонсора, либо умирает (или как минимум не развивается). Люди хотят кушать, а разработка сложного проекта требует вложения немалого труда, который иначе можно было бы пустить на достижение жизненных благ. Хотите успеха – не мудрите с лицензиями, не мешайте людям зарабатывать деньги, авось и вам перепадет.
За счёт рекламы окупается только хостинг. Сайт без наполнения — ничто. Кто, по вашему, платит за остальное? А то так можно договориться до того, что разницы между этим сайтом и какой-нить страницей поискового спама никакого — оба же за счёт рекламы живут, по-вашему.
[/offtop]