如何解决如何保护我的C#应用程序免受内存转储攻击?
转储内存使攻击者可以读取整个OS的RAM,或更具体地说,可以读取单个进程的RAM。攻击者可以保存转储并“离线”分析转储,以搜索敏感数据。
我试图了解它到底是如何工作的,以及是否有防止它的方法。
现在,让我们假设我们有一个使用AES保护敏感数据的应用程序。这是通过在aes.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对象数据结构,则可以清楚地看到代表键的字节数组。如果我们在使用对象后将其丢弃,就不再使用。
问题是:尽管在使用后将其丢弃,但内存转储攻击是否能够读取该值? 如果是,是否有防止这种情况发生的方法?
解决方法
在主流设备上,简短的答案是“否”。如果某人对该盒子具有管理员或物理访问权限,则他们可以获取整个计算机的内存-作为进程转储或OS转储,并在闲暇时对其进行分析。除了停止访问,您无法采取任何措施来阻止这种情况。