Будет ли использование SecureString в этой ситуации повысить безопасность?

Мой пользовательский процесс.Net сопоставляет диск с другой учетной записью, чем текущий контекст. Пароль хранится в файле конфигурации, DPAPI зашифрован с помощью ключа машины.

Код работает, но мне интересно, если использование SecureString обеспечит дополнительную безопасность. Я полагаю, что слабость ниже заключается в массиве PlainBytes и строках MapPwd и MapDriveCmd, когда они находятся в памяти в виде простого текста.

Я провел некоторое исследование по SecureString, но не совсем понял, применимо ли оно здесь. Три локальных подозреваемых переменных не используются после кода ниже. Если я оставлю все как есть без SecureString, утилизирует ли их гаражный сборщик до завершения процесса?

byte[] CipherBytes = Convert.FromBase64String(ConfigurationManager.AppSettings.Get("MapPwd").Trim());
byte[] PlainBytes = ProtectedData.Unprotect(CipherBytes, null, DataProtectionScope.LocalMachine);
string MapPwd = System.Text.Encoding.UTF8.GetString(PlainBytes);

string MapDriveCmd = "/C net use " + MapLetter + " " + MapPath + " " + MapPwd + " /USER:" + MapUser + " /PERSISTENT:NO";
System.Diagnostics.Process MapDrive = System.Diagnostics.Process.Start("CMD.exe", MapDriveCmd);
MapDrive.WaitForExit();

Любые дополнительные комментарии по технике в целом приветствуются. Благодарю.

1 ответ

Решение

Использование SecureString не будет очень полезным в вашем случае.

Цель SecureString - предоставить способ для сбора данных, когда они больше не нужны, чтобы данные не задерживались в оперативной памяти. Если бы данные хранились, кто-то мог бы использовать отладчик (или другой подобный метод), чтобы проверить распределение процессов и потенциально получить результат.

DPAPI просто не очень безопасен. Это не плохо... но это обратимый алгоритм. Гораздо лучше использовать односторонние алгоритмы хеширования. Тем не менее, вы не можете сделать это в этом случае использования. Поскольку вы используете DPAPI, любой другой пользователь ПК, вероятно, имеет возможность прочитать ваш файл конфигурации. Если они могут прочитать файл конфигурации, и так как вы используете машинный ключ, это может легко расшифровать ваш пароль, просто позвонив ProtectedData.Unprotect()

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

Другие вопросы по тегам