【问题标题】:Data Protection in .Net.Net 中的数据保护
【发布时间】:2018-08-31 02:14:22
【问题描述】:

我从我们的客户那里得到这个问题,他们说如果我们进行复制粘贴或将数据存储在变量中,那么数据就有可能被黑客入侵,黑客可以从 RAM 中获取数据并在之前使用它GC 处理它。

我们一般不会将字符串对象丢弃在堆内存中,当它刷新内存时会被 GC 收集。

这就是我对 GC 的理解

托管堆上分配的对象使用的内存超过了可接受的阈值。这个阈值是连续的 随着过程的运行进行调整。 GC.Collect 方法被调用。在 几乎所有情况下,您都不必调用此方法,因为 垃圾收集器连续运行

是否有可能任何黑客可以在 GC 刷新之前进入 RAM 并从中读取数据?如果是,那我们该如何克服呢。

【问题讨论】:

  • 您应该首先防止“黑客”进入您的计算机。如果您将密码存储在变量中,请查看SecureString
  • 我不知道这是否是重复的,但它对 OP 绝对有用:stackoverflow.com/questions/26190938/…
  • 如果黑客可以直接访问 RAM,那么你就完蛋了。与未加密的内存相比,黑客更有可能从社交操纵中获取数据。这些“专家”客户有何建议?此外,字符串不是一次性的,因此您不能丢弃它们,
  • 目前完全同意其他cmets。如果攻击者控制了主机,那么该攻击者就可以控制主机上运行的所有内容。
  • 如果你(作为攻击者)可以读取任意内存,那么它游戏结束。您需要防止这种情况发生。 gc 在这方面是无关紧要的。

标签: c# .net memory-management garbage-collection


【解决方案1】:

如果黑客可以在你的进程中读取内存,那么由于 GC 导致的对象生命周期不可预测是你的问题中最少的。任何语言都容易受到此类问题的影响,因为计算机可以有效地操作内存中的所有数据(无论是在支持 GC 的堆中还是在其他地方 - C 和汇编语言也需要将数据存储在内存中)。

存在试图克服此问题的技术(如Intel SGX),但它也有漏洞。从根本上说,一旦坏人可以读取您的记忆,没有任何纯软件解决方案可以阻止他们。

【讨论】:

    【解决方案2】:

    我同意 cmets 的观点,即如果攻击者已经有能力完全读取进程内存,那么尝试保护内存中的数据是徒劳的。

    也就是说,许多攻击者将通过允许不完美访问系统内存子部分的漏洞进行攻击,这意味着使用SecureString 仍然具有实用性。

    我建议阅读此主题以讨论应用程序和限制:When would I need a SecureString in .NET?

    【讨论】:

      猜你喜欢
      • 2022-08-20
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多