.net - 保护部署在 "hostile"环境中的系统

标签 .net security encryption obfuscation tpm

在我的公司,我们正在开发一个由多台服务器组成的大型系统。 该系统由大约 5 个逻辑组件组成。数据存储在 XML、MS SQL 和 SQLite 中。它是一个.Net系统(大部分),组件使用WCF和一些自定义UDP进行通信。 客户端主要通过自定义UDP或WEB(ASP.NET&Silverlight)访问系统。

保护通信很容易,在 WCF 上使用一些 SSL 和一些安全措施,我们就完成了。

我们面临的主要问题是系统需要部署在客户的站点上,而我们不一定信任该客户。我们需要保护服务器上的数据以及软件本身免受逆向工程的影响。两者对我们都至关重要。

我们还需要一个终止开关,我想要一个可以根据命令或在一段时间内无法打电话回家时销毁数据和软件的东西。

我正在考虑的方向是使用 TPM 或类似的东西 - 某种硬件加密解决方案,与我们可以在内部保留的另一项服务相结合,以加密服务器上的所有软件和数据,以便 key 的出现从我们的服务器安全地存储在我们的站点中,并且可能从 TPM 进行内存屏蔽。

您建议如何解决这样的问题?

<小时/>

更新 04/02 我正在寻找实用的建议,或者对可以帮助我的产品提出建议,所以我开始悬赏...

大家看,我们基本上把我们的机器放在客户的站点上(出于商业和实用性原因),我们拥有那台机器,客户在几小时内收到他支付的所有费用,他可以对数据做任何他想做的事情。但在那台机器上运行的算法以及存储在那里的一些数据是我们想要保护的商业 secret 。 理想情况下,如果我不同意,我希望机器根本不工作,甚至不启动,并且如果没有我的同意,机器上的所有内容都保持加密状态。内存屏蔽看起来也是一种在执行时保护机器的好方法。

此外,理想情况下,我希望一旦有人用 Screwdriver 靠近所有机器上的硬盘和存储就会爆炸......:-)但我认为这太过分了......

<小时/>

更新 10/02 好的。经过一些研究后,我认为我们将尝试与 PS3 加密系统相同的方向,只不过我们将引入用于解密软件和服务器数据的 key 。这样我们就可以在我们的机器上决定是否信任请求 key 的服务器,我们只需重新安装机器即可获得终止开关。这可能是基于 TPM 或类似的东西,也许是英特尔的 TXT... 我也对内存屏蔽作为一项重要的安全功能非常感兴趣......

顺便说一句,我们无法通过将系统中有值(value)的部分移至我们的站点来解决这个问题,这既是因为业务需求,也是因为它在技术上不可行 - 我们需要巨大的带宽......

最佳答案

实际上,您所要求的是 chalice 。这大致相当于游戏机的操作,即在不受信任的环境中运行受信任的平台。

考虑是否可以从第一天开始就将机器视为受到损害。如果您可以在该假设下工作,那么事情对您来说会变得容易得多,但这在这里听起来不太可行。

就实际保护而言,存在一些问题:

  • 您必须加密文件系统并使用硬件解密
  • 您必须将您的应用程序彼此隔离,以便其中一个应用程序的安全问题不会影响其他应用程序
  • 您必须针对可能发生的安全问题做好计划,这意味着采取安全管理程序等缓解策略

我知道这些相当模糊,但这确实是过去几年游戏机保护的历史 - 如果您对如何一遍又一遍地解决(和破坏)这个问题感到好奇,请查看控制台制造商。

这方面的工作从未完全成功,但您可以显着提高进入阈值。

关于.net - 保护部署在 "hostile"环境中的系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868170/

相关文章:

c# - 如何在 C# 中实现一个 token 系统来限制处理器/IO 繁重的多线程任务的并发性?

java - Android应用程序中的模式输入

java - 访问 jar 文件的安全问题

java - 如何用Java加密和解密声音文件?

java - 私钥必须是 RSAPrivate(Crt)Key 的实例或具有 PKCS#8 编码

c# - 检查设备更改(添加/删除)事件

.net - 有没有办法在 Windows 控制台中编写希伯来语?

c# - 增量 .NET 代码覆盖工具?

php - 如何生成好的盐——我的函数是否足够安全?

haskell - 将 base64-bytestring 与惰性 ByteString 结合使用