.Net程序集安全性 - 防止黑客攻击/逆向工程

时间:2012-02-16 19:17:40

标签: c# .net security

我在最终用户计算机上将知识产权编码为.net 2.0完全受信任的程序集(.exe + DLL),我希望防止被黑客攻击/反向工程(WebService /云计算解决方案)不是一种选择)。以下列出了我为实现这一目标而收集的技术。

我的问题是:

  1. 我的假设是正确的,还是我在一种或多种技术中做错了什么?
  2. 此列表是否足以防止恶意攻击,或者我应该添加其他保护措施?
  3. 提前致谢。

    -

    建议的技巧

    1. 使用相同的强名称密钥签署所有程序集。
      这有两个好处:
      • 甲。确保对程序集的任何修改都会使其无效,
      • B中。所有程序集都具有相同的公钥,通过它们可以相互识别。
    2. 对程序集进行数字签名:两者都让用户知道执行的代码来自正确的源代码,并且 - 添加另一个识别组件,程序集可以通过这些组件识别彼此。
    3. 通过爬上调用堆栈并验证所有呼叫者是否在“社区”内来强制执行上述操作。
      可能的线索:
    4. 使用AOP(例如Spring.NET)将调用堆栈爬网代码注入到部分/全部方法中。
      • 这主要是因为.net程序集中没有单个入口点(如Win32 DLL的DllMain())。
    5. 对所有程序集进行模糊处理,以阻碍逆向工程和反射执行尝试(当然,在模糊处理后将执行强名称签名)。
    6. 整合System.ComponentModel.LicenseProvider机制。
    7. 使用“InternalsVisibleTo”程序集级别属性,以便在预定义的程序集集中公开内部。
    8. 可能使用NGEN将解决方案转换为本机代码。
    9. 要考虑的要点

      • 实施上述部分或全部内容最有可能引入性能损失,因此,应谨慎处理时间关键型处理。
      • CAS似乎与此类完全信任的程序集无关。

1 个答案:

答案 0 :(得分:2)

我担心你不会得到你想要的所有安全保障。您看,这是使用中级语言的这些语言/平台的问题。它必须采用所有运行时实现都可以使用的格式,然后生成本机代码。

我看过一些关于篡改签名程序集的博客文章。我还没有尝试过,但我认为它有效。除此之外,混淆工具只会使提取代码变得更难,但并非不可能(尽管有一些非常好的工具使得它变得非常困难)。 NGEN不是为了那个。您仍然需要分发原始程序集。

我认为保护代码最有效和最安全的方法是将其转换为无法反编译的技术,例如,将敏感代码移动到非托管C ++并在C#代码上使用DLLImport。 / p>

这并不意味着您不应该尝试保护您的代码,但您应该记住,您不会受到100%的保护。如果您无法用其他语言重写敏感代码,请使用模糊处理和签名。你不能比那更安全。