【问题标题】:How do I protect my C# app from memory dump attack?如何保护我的 C# 应用程序免受内存转储攻击?
【发布时间】: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


【解决方案1】:

在主流设备上,简短的回答是“不”。如果有人对盒子有管理员或物理访问权限,他们可以获取整个机器的内存——作为进程转储或操作系统转储,并在闲暇时对其进行分析。除了阻止访问发生之外,您无法采取任何措施来防止这种情况发生。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2018-09-08
  • 1970-01-01
  • 2011-10-02
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多