Насколько безопасны вещи, хранящиеся в памяти? - PullRequest
2 голосов
/ 13 марта 2011

Допустим, у меня есть программа, которая считывает файл в память и использует что-то (например, rijndael / AES) для его расшифровки. Насколько защищен новый незашифрованный поток / строка / что-либо, что моя программа хранит в памяти? Я понимаю, что потребовалось бы немного хитрости памяти, чтобы попытаться, но мне просто любопытно. Я не знаю много о том, как программирование / стек / память работает по отношению к .NET / VS2010, поэтому я прошу прощения. На этом примечании, насколько безопасны жестко запрограммированные строки (например, строка подключения к серверу SQL, которая будет содержать пользователя / pw, созданного для программного обеспечения)?

Ответы [ 4 ]

4 голосов
/ 13 марта 2011

Совсем небезопасно, даже с защитой памяти просто взять дамп памяти или использовать что-то вроде Crack.net , чтобы заглянуть в память.

Вы можете использовать System.Security.SecureString , с которой немного больно работать, но "Представляет текст, который должен оставаться конфиденциальным. Текст зашифрован для конфиденциальности при использовании и удален из памяти компьютера, когда он больше не нужен".

2 голосов
/ 13 марта 2011

Жесткие строки вообще не безопасны.Извлечь все строки из файла .exe - тривиальное дело.

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

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

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

Подводя итог:

  • незашифрованные данные в памяти = ok
  • незашифрованныеданные жестко запрограммированы в файле .exe = плохо
1 голос
/ 13 марта 2011

Если вы хотите сохранить строки в безопасной памяти, используйте класс SecureString http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx. См. Также: http://www.vcskicks.com/secure-string.php

0 голосов
/ 13 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...