Действительно ли использование SecureZeroMemory () действительно помогает сделать приложение более безопасным? - PullRequest
7 голосов
/ 24 апреля 2009

В WinAPI есть функция SecureZeroMemory (), которая предназначена для стирания памяти, используемой для хранения паролей / ключей шифрования / подобных вещей, когда буфер больше не нужен. Он отличается от ZeroMemory () тем, что его вызов не будет оптимизирован компилятором.

Действительно ли так необходимо стереть память, используемую для хранения конфиденциальных данных? Действительно ли это делает приложение более безопасным?

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

Ответы [ 5 ]

10 голосов
/ 24 апреля 2009

Это так. Например, файл гибернации не зашифрован. И если вы не очистите память надежно, у вас могут возникнуть проблемы. Это всего лишь один пример. Вы всегда должны хранить секретные вещи в памяти только столько, сколько необходимо.

5 голосов
/ 24 апреля 2009

Существует по причине. :) Если вы храните конфиденциальные данные в памяти, то другие процессы могут прочитать их.

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

4 голосов
/ 24 апреля 2009

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

Если это приложение получит только нулевую память, конечно, ему будет сложнее получить интересные данные.

3 голосов
/ 24 апреля 2009

Если у вас действительно есть данные пароля или другие секреты, вы также захотите убедиться, что память, в которой они находятся, не выгружается, в противном случае файл подкачки может стать проблемой (я думаю, что функция, которую вы хочу это «VirtualLock» для приложения Windows). Кроме того, вам нужно будет обнаружить окна, входящие в гибрину, и стереть данные в этот момент. Я верю, что Windows отправит сообщение каждому приложению, когда оно собирается гибрировать.

3 голосов
/ 24 апреля 2009

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

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