我可以对具有物理访问权限的管理用户隐藏.net内存变量吗?

本文关键字:隐藏 用户 管理 net 内存 变量 权限 访问权 访问 我可以 | 更新日期: 2023-09-27 18:12:01

假设有一条敏感信息存储在内存中,它的定义如下:

private readonly String Key;

Key变量通过传递给所属类的构造函数的参数赋值。该值是通过通过助手应用程序发生的Console.ReadLine()调用获得的。该控制台应用程序然后在值传播到应该去的地方后关闭。该值永远不会写入或读取到文件或注册表。这纯粹是一种内存交易。

不让任何人知道这个密钥是非常重要的,包括可能对该域具有管理员访问权限的各种顾问,更不用说对计算机的物理访问了。

我一直试图想出一些防弹的方法来保护这个Key值,但我真的不能想出任何东西。假设任何具有管理访问权限的人都可以简单地启动Visual Studio,附加到进程,然后跟踪Key的值,我是否正确?

再次说明。我们可以容忍物理机器的破坏或驻留在该机器上的任何数据的窃取。我们唯一不能容忍的是在应用程序运行时丢失或窃取内存中的Key

(此应用程序运行在。net 4.5, Windows 2008服务器上)

任何想法?

我可以对具有物理访问权限的管理用户隐藏.net内存变量吗?

不,你不能阻止具有物理访问权限的人读取内存;他们总能探测到物理内存总线。在用户模式下,你甚至不能阻止其他管理程序读取内存;正如你所说,它们可以作为调试器附加。

有一些系统被设计成难以获得存储在物理设备上的密钥(例如可信平台模块,智能卡,现代视频游戏机,蓝光播放器等),但这些东西使它变得困难,不是不可能,并且不可用于Joe . net应用程序。

这听起来像是X - Y问题;然而,在这种情况下,X很可能与"我如何保护某些Z不受其他管理员的攻击"相同。答案可以归结为"你没有。"您最大限度地减少了管理员对运行关键组件的机器的访问。如果它是如此重要,您甚至也不会考虑共享主机。你要么自己托管,要么去笼子托管。是的,很贵,但这是唯一合理的方法。

我有一些很好的技巧,但它们都依赖于本机代码,没有一个能经受住持续的攻击。