【发布时间】:2020-08-14 17:05:46
【问题描述】:
转储内存允许攻击者读取整个操作系统的 RAM,或者更具体地说是单个进程的 RAM。攻击者可能会保存转储并“离线”分析它以搜索敏感数据。
我正在尝试了解这究竟是如何工作的,以及是否有办法阻止它。
现在,假设我们有一个使用 AES 保护敏感数据的应用。这是通过在 aes.Key 变量中设置 key 来实现的。
public static AesCryptoServiceProvider AESFunction()
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
try
{
aes.GenerateIV;
aes.GenerateKey; //key is stored in aes.Key variable in the AesCryptoServiceProvider class
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
return aes;
}
catch (Exception e)
{
throw;
}
}
如果我们在 Visual Studio 中调试 aes 对象数据结构,我们可以清楚地看到表示键的字节数组。如果我们在使用对象后将其丢弃,则不再是。
问题是:内存转储攻击是否能够读取该值,尽管在使用后将其丢弃? 如果是,是否有防止这种情况发生的方法?
【问题讨论】:
-
aes.Key 是一个字节序列
-
@tym32167 不应使用 SecureString。曾经。它不安全。
-
以同样的方式保护任何其他代码 - 明智的做法是您不想让别人看到;不要给他们
-
标签: c# security memory-management