Несвопируемая память
May. 11th, 2014 03:34 pmУзнал тут из переписки в криптографической рассылке о функциях mlock/munlock. Почитал man-ы. К счастью, по разным операционкам. И кажется мне, что эти функции сильно недоделаны.
То, что оно позволяет блокировать в памяти от помещения в swap всю страницу целиком, это нормально и по-другому скорее всего не делается. То, что в половине операционок может быть вызваны только из-под рута (под Линуксом не так, там можно задать количество для не-рута через ulimit начиная с ядра 2.6.9), это уже большой привет. То, что там нет встроенного счетчика, сколько раз страницу лочили, и единственный вызов munlock разблокирует страницу, залоченную трижды – уже хуже, поскольку вынуждает сотворить собственный менеджер памяти, пусть даже вырожденный, системы «залочил страницу и отдаем по кусочку, все ценное туда» – совсем уже нехорошо.
А жалко. Потому как функциональность полезная.
Update: В комменты пришел
dmih и рассказал про виртуализацию и ее издержки. Да, скорее всего все эти прелести в условиях виртуализации действительно неактуальны.
То, что оно позволяет блокировать в памяти от помещения в swap всю страницу целиком, это нормально и по-другому скорее всего не делается. То, что в половине операционок может быть вызваны только из-под рута (под Линуксом не так, там можно задать количество для не-рута через ulimit начиная с ядра 2.6.9), это уже большой привет. То, что там нет встроенного счетчика, сколько раз страницу лочили, и единственный вызов munlock разблокирует страницу, залоченную трижды – уже хуже, поскольку вынуждает сотворить собственный менеджер памяти, пусть даже вырожденный, системы «залочил страницу и отдаем по кусочку, все ценное туда» – совсем уже нехорошо.
А жалко. Потому как функциональность полезная.
Update: В комменты пришел
no subject
Date: 2014-05-11 02:37 pm (UTC)Есть еще миллион способов в современной ОС и компьютере, который довольно таки сложен уже, получить или не получить чужую память. Реализация этих способов зависит от ОС, это ну никак, потому что нет тут общего в архитектурах, это буквально может даже от возможности процессора зависеть даже на одинаковых с виду компьютерах.
Соответственно в Win32 есть какое-то crypto-API на эту тему, ну и так далее.
no subject
Date: 2014-05-11 02:41 pm (UTC)no subject
Date: 2014-05-11 02:47 pm (UTC)Например, в современных машинах только ленивый не занимается виртуализацией. Тут ты свопь, не свопь, для машины уровнем выше всё как открытая книга. Save-state опять же. И вот тут-то гипервизор может давать дополнительные возможности, а кое-где даже их и предоставляет, читал про это, запамятовал название экстеншена этого для XEN-а (как пример).
А то, что не свопить - это не уровня ОС, это скорее, уровня ядра называется, причем, механизм явно не по назначению. Бесправный пользователь и своп-то с трудом прочитает, а службе уровня root-а с таким флагом будет только проще ключи в памяти искать, причем проще порядка на два.
no subject
Date: 2014-05-11 03:35 pm (UTC)Про виртуализацию да. Боюсь, тупо выделить физическую железку уже не спасет.
no subject
Date: 2014-05-11 03:44 pm (UTC)no subject
Date: 2014-05-11 03:52 pm (UTC)Там и VMWare отметилось, и Microsoft много раз, и так далее.
Я поскольку крепко всё забыл, какую конкретно реализацию я смотрел, я не помню (собственно у меня была нужда её поломать как раз), но половина софтварные и ключи у них из памяти, надо сказать, хрен сопрешь.
Надо вот API выстраивать к этим системам, а не страницы в памяти лочить в помощь хакерам, убирая даже security through obscurity (например, когда стоит необходимость поломать Windows с полным Address Space Randomization, все сразу унывают, и геморрой иногда возрастает за предел tradeoff-а с практичностью взлома).
no subject
Date: 2014-05-11 02:50 pm (UTC)Служба же сможет решить этот вопрос.
Ну не о том разговор короче, IMHO.
no subject
Date: 2014-05-12 04:15 am (UTC)Вообще идея что пользовательскому процессу не надо знать о гибернации- это идиотизм в непонятно какой степени. Подавляющее большинство пользовательских процессов в наше время с сетью работает. И другой конец соединения ждать не будет. Кстати, процессы, работающие с ключами сетевые почти все.
no subject
Date: 2014-05-11 03:17 pm (UTC)Потом обработчик этого в ОС начинает разбираться, чем вызван отказ страницы, какой процесс вызвал срабатывание, и так далее со всеми выводами. На мощных современных процессорах с многократной защитой хрен уведешь даже из соседнего root-а, не разрушив необратимо пол системы (ну т.е. понятно, что ключ достижим, но хотя бы аудит в некотором смысле выполняется).
Я этим не интересовался уже лет 10 наверное, поэтому не могу сказать, в каких современных обычных ОС это сейчас реализовано например вот так, как описано, но точно были реализации для XP, класса почти штатных. Мне кажется могли бы быть и сейчас такие. Но опять же пользовательский процесс тут вот никак.