Защищенный распределитель памяти в C ++

Проверьте это в документации, здесь: https://laravel.com/docs/5.8/authorization#authorizing-actions-via-gates

11
задан Onur A. 13 March 2018 в 17:18
поделиться

11 ответов

Вы не можете действительно защитить от доступа к памяти. Можно, вероятно, предотвратить подкачку страниц, если Вы работаете как администратор или как система, но Вы не можете препятствовать тому, чтобы администратор или система читали Вашу память. Даже если Вы могли бы так или иначе полностью заблокировать другие процессы от чтения Вашей памяти (который Вы не можете), другой процесс мог все еще на самом деле ввести новый поток в Ваш процесс и считать память тот путь.

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

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

19
ответ дан 3 December 2019 в 01:39
поделиться

Парк @Derek

Он только сказал тяжелее, не невозможный. PGP мешал бы, не невозможный.

-1
ответ дан 3 December 2019 в 01:39
поделиться

@Chris

О, но с доверительными вычислениями, можно использовать занавешивающую память!:-P

Но затем необходимо на самом деле быть готовы заплатить за компьютер, которым кто-то еще владеет.:p

-1
ответ дан 3 December 2019 в 01:39
поделиться

@roo

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

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

Это - определенно проблема. Можно сохранить что-то надежно, пока Вы никогда не предоставляете доступ, но как только Вы предоставляете доступ, Вашего управления не стало. Можно сделать это трудным, но это - все.

-1
ответ дан 3 December 2019 в 01:39
поделиться

@Derek: О, но с доверительными вычислениями, можно использовать занавешивающую память! :-P </devils-advocate>

-1
ответ дан 3 December 2019 в 01:39
поделиться

То, что Вы просите, обрабатывается на уровне ОС. После того как данные находятся в Вашей программе, склонно быть разбитым на страницы.

Для доступа к памяти мотивированный человек может присоединить аппаратный отладчик.

2
ответ дан 3 December 2019 в 01:39
поделиться

Давайте возьмем это понемногу:

Я хочу создать средство выделения, которое предоставляет памяти следующие атрибуты:

Это достаточно справедливо.

* cannot be paged to disk.

Это будет твердым. Насколько я знаю, Вы не можете отключить Виртуальную Подкачку страниц, поскольку она обрабатывается ОС. Если будет путь, то Вы будете spelunking в кишечнике ОС.

* is incredibly hard to access through an attached debugger

Вы могли выполнить его через PGP и сохранить зашифрованный в памяти и не зашифровать его по мере необходимости. Крупный хит производительности.

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

Храните всю уязвимую информацию от машины. Серьезно. Не храните уязвимую информацию в памяти. Запишите, что пользовательское удаляет стандартную программу, которая автоматически удалит все данные из любых выделений, которые Вы выполняете. Никогда не предоставляйте общий доступ к машине с чувствительным материалом на нем. При выполнении доступа дб удостоверьтесь, что весь доступ санирован перед увольнением. Только людям с определенными логинами разрешают получить доступ. Никакой общий групповой доступ.

На ноте стороны, что другие методы имеют там доступ к памяти процесса кроме присоединения отладчика?

Взятие дампа памяти.

5
ответ дан 3 December 2019 в 01:39
поделиться

Если Вы разрабатываете для Windows, существуют способы, которыми можно ограничить доступ к памяти, но абсолютно блокирование других не является выполнимым. Если Вы надеетесь хранить секрет в тайне, прочитать Безопасный Код Записи - который решает эту проблему довольно долго, но знает, что у Вас нет способа знать, работает ли Ваш код на реальной машине или виртуальной машине. Существует набор Win32 материал API для контакта с crypto, который обрабатывает такого рода вещь, включая безопасное устройство хранения данных секретов - переговоры по книге об этом. Можно посмотреть на Microsoft CyproAPI онлайн для деталей; разработчики ОС распознают эту самую проблему и потребность сохранить открытый текст безопасным (снова, прочитать Безопасный Код Записи).

API-функция Win32 VirtualAlloc средство выделения памяти уровня ОС. Это позволяет Вам устанавливать защиту доступа; то, что Вы могли сделать, является доступом набора к PAGE_GUARD или PAGE_NOACCESS, и зеркально отразите доступ к чему-то более дружественному, в то время как Ваша программа читает и сбросила его позже, но это - просто максимум скорости, если кто-то пытается действительно трудно посмотреть на Ваш секрет.

Таким образом, посмотрите на crypto API на своей платформе, они решат проблему лучше, чем что-то, что Вы изрубили сами.

5
ответ дан 3 December 2019 в 01:39
поделиться

В системах Unix можно использовать mlock (2) для блокировки страниц памяти в RAM, предотвращая их разбиваемый на страницы.

mlock () и mlockall () соответственно блокируют часть или все виртуальное адресное пространство обработки вызовов в RAM, препятствуя тому, чтобы та память была разбита на страницы к области подкачки.

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

6
ответ дан 3 December 2019 в 01:39
поделиться

@graham

Вы могли выполнить его через PGP и сохранить зашифрованный в памяти и не зашифровать его по мере необходимости. Крупный хит производительности.

Затем необходимо было бы держать ключ в памяти. Это сделало бы его немного тяжелее, но определенно не невозможным. Любому мотивированному все еще удастся получить данные из памяти.

1
ответ дан 3 December 2019 в 01:39
поделиться

Вы не можете защитить содержимое памяти от владельца системы. Голливуд и музыкальная индустрия страдали от этого годами. Если бы это было возможно, они бы это уже делали.

Приходилось ли вам знакомиться с Vista (и выше) Защищенными процессами (прямая .doc загрузка ). Я считаю, что усиленная защита операционной системы - это любезность индустрии развлечений.

0
ответ дан 3 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: