Общая практика относительно паролей в памяти - PullRequest
6 голосов
/ 02 февраля 2011

Я пишу Windows-приложение .net (C #) для хранения в нем паролей пользователей, таких как keypass, lastpass, roboforms и т. Д.

Для обработки пользовательских данных, которые я должен хранить в памяти, эти данные также содержат пароли пользователя.

Теперь мои вопросы:

  1. Может ли кто-нибудь прочитать данные памяти, используя какой-либо инструмент или дамп памяти?
  2. Если да, то как? Может кто-нибудь поделиться таким инструментом? я пытался с CurrProcess, HeapViewer, ProcessExplorer и ProcessView приложений, но не могу найти какие-либо личные данные в дамп памяти,
  3. Нужно ли изучать что-то еще, чтобы обеспечить защиту паролей в памяти.

Спасибо

Ответы [ 5 ]

9 голосов
/ 02 февраля 2011

Вы правы в своих проблемах, строки в памяти не безопасны.

Возможно, вы ищете класс SecureString .

7 голосов
/ 02 февраля 2011

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

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

4 голосов
/ 02 февраля 2011

Да, существуют инструменты, которые собирают всю физическую память (и файл подкачки) для дальнейшего изучения. Они называются «судебно-медицинская экспертиза», и вы можете найти их, добавив это ключевое слово в свои поиски. Если вы хотите захватить память в своем коде (т.е. написать такую ​​программу самостоятельно), это возможно с помощью нашего продукта RawDisk.

Что касается защиты ваших паролей, Коби упомянул SecureString класс, который должен надежно хранить строки в памяти. Хотя этот класс не на 100% защищен (пароль в любом случае расшифровывается при его использовании), но значительно снижает вероятность захвата пароля.

1 голос
/ 02 февраля 2011

Мой опыт ограничен в безопасности, но я надеюсь, что это будет полезно

  1. Да, это возможно
  2. Вы можете использовать WinDbg + SOS, чтобы получить почти все, что вы хотите, из внутреннего представления объекта
  3. В BCL существует специальный класс SecureString , который должен соответствовать вашим потребностям.
1 голос
/ 02 февраля 2011

Я бы предложил изучить исходный код Keepass (версия 2.xx).Он написан на .NET и имеет дело с теми же проблемами, что и вы.

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