Entry tags:
Несвопируемая память
Узнал тут из переписки в криптографической рассылке о функциях mlock/munlock. Почитал man-ы. К счастью, по разным операционкам. И кажется мне, что эти функции сильно недоделаны.
То, что оно позволяет блокировать в памяти от помещения в swap всю страницу целиком, это нормально и по-другому скорее всего не делается. То, что в половине операционок может быть вызваны только из-под рута (под Линуксом не так, там можно задать количество для не-рута через ulimit начиная с ядра 2.6.9), это уже большой привет. То, что там нет встроенного счетчика, сколько раз страницу лочили, и единственный вызов munlock разблокирует страницу, залоченную трижды – уже хуже, поскольку вынуждает сотворить собственный менеджер памяти, пусть даже вырожденный, системы «залочил страницу и отдаем по кусочку, все ценное туда» – совсем уже нехорошо.
А жалко. Потому как функциональность полезная.
Update: В комменты пришел
dmih и рассказал про виртуализацию и ее издержки. Да, скорее всего все эти прелести в условиях виртуализации действительно неактуальны.
То, что оно позволяет блокировать в памяти от помещения в swap всю страницу целиком, это нормально и по-другому скорее всего не делается. То, что в половине операционок может быть вызваны только из-под рута (под Линуксом не так, там можно задать количество для не-рута через ulimit начиная с ядра 2.6.9), это уже большой привет. То, что там нет встроенного счетчика, сколько раз страницу лочили, и единственный вызов munlock разблокирует страницу, залоченную трижды – уже хуже, поскольку вынуждает сотворить собственный менеджер памяти, пусть даже вырожденный, системы «залочил страницу и отдаем по кусочку, все ценное туда» – совсем уже нехорошо.
А жалко. Потому как функциональность полезная.
Update: В комменты пришел
no subject
no subject
no subject
Я имею в виду, что страницу можно разлочить только когда ключ на ней стёрт. А уж если он стёрт, то неважно, кто и когда просил страницу залочить.
no subject
no subject
no subject
no subject
no subject
no subject
А при работе с секретной информацией иногда нужно затирать и без освобождения. Чтобы в случае ошибки переполнения буфера не выдать предыдущий ключ.
no subject
лишней работыдополнительной аккуратности.no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Есть еще миллион способов в современной ОС и компьютере, который довольно таки сложен уже, получить или не получить чужую память. Реализация этих способов зависит от ОС, это ну никак, потому что нет тут общего в архитектурах, это буквально может даже от возможности процессора зависеть даже на одинаковых с виду компьютерах.
Соответственно в Win32 есть какое-то crypto-API на эту тему, ну и так далее.
no subject
no subject
Например, в современных машинах только ленивый не занимается виртуализацией. Тут ты свопь, не свопь, для машины уровнем выше всё как открытая книга. Save-state опять же. И вот тут-то гипервизор может давать дополнительные возможности, а кое-где даже их и предоставляет, читал про это, запамятовал название экстеншена этого для XEN-а (как пример).
А то, что не свопить - это не уровня ОС, это скорее, уровня ядра называется, причем, механизм явно не по назначению. Бесправный пользователь и своп-то с трудом прочитает, а службе уровня root-а с таким флагом будет только проще ключи в памяти искать, причем проще порядка на два.
no subject
Про виртуализацию да. Боюсь, тупо выделить физическую железку уже не спасет.
no subject
no subject
Там и VMWare отметилось, и Microsoft много раз, и так далее.
Я поскольку крепко всё забыл, какую конкретно реализацию я смотрел, я не помню (собственно у меня была нужда её поломать как раз), но половина софтварные и ключи у них из памяти, надо сказать, хрен сопрешь.
Надо вот API выстраивать к этим системам, а не страницы в памяти лочить в помощь хакерам, убирая даже security through obscurity (например, когда стоит необходимость поломать Windows с полным Address Space Randomization, все сразу унывают, и геморрой иногда возрастает за предел tradeoff-а с практичностью взлома).
no subject
Служба же сможет решить этот вопрос.
Ну не о том разговор короче, IMHO.
no subject
Вообще идея что пользовательскому процессу не надо знать о гибернации- это идиотизм в непонятно какой степени. Подавляющее большинство пользовательских процессов в наше время с сетью работает. И другой конец соединения ждать не будет. Кстати, процессы, работающие с ключами сетевые почти все.
no subject
Потом обработчик этого в ОС начинает разбираться, чем вызван отказ страницы, какой процесс вызвал срабатывание, и так далее со всеми выводами. На мощных современных процессорах с многократной защитой хрен уведешь даже из соседнего root-а, не разрушив необратимо пол системы (ну т.е. понятно, что ключ достижим, но хотя бы аудит в некотором смысле выполняется).
Я этим не интересовался уже лет 10 наверное, поэтому не могу сказать, в каких современных обычных ОС это сейчас реализовано например вот так, как описано, но точно были реализации для XP, класса почти штатных. Мне кажется могли бы быть и сейчас такие. Но опять же пользовательский процесс тут вот никак.