Действительно ли использование SecureZeroMemory () помогает сделать приложение более безопасным?

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

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

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

5 ответов


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


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

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


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

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


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


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