加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何针对DLL劫持来检测我的.NET应用程序?

发布时间:2020-12-14 04:04:24 所属栏目:Windows 来源:网络整理
导读:我们有一个带注册扩展的.NET 3.5应用程序.我们如何保护它免受DLL劫持攻击? 由于遗产和设计问题强大的命名/签名现在不是一个选择 如果您不知道DLL劫持是什么,请提供额外信息: What’s DLL Hijacking – SO DLL hijacking vulnerabilities 我遇到过类似的问
我们有一个带注册扩展的.NET 3.5应用程序.我们如何保护它免受DLL劫持攻击?

由于遗产和设计问题强大的命名/签名现在不是一个选择

如果您不知道DLL劫持是什么,请提供额外信息:

> What’s DLL Hijacking – SO
> DLL hijacking vulnerabilities

我遇到过类似的问题,我最终编写了自己的逻辑来验证dll.对我来说,我只是在LGPL时尚中使用那个dll(我不能修改dll),但是想确保我的应用程序使用真正的dll(而不是高亮的那个).

简单解决方案

>在开发应用程序时,创建dll的MD5校验和并在应用程序中对哈希进行硬编码
>每次启动应用程序时,都使用相同的逻辑生成dll文件的MD5校验和,并将其与硬编码文件进行比较.
>您可能已经知道,但这里是如何有效地生成文件的校验和(参见答案:https://stackoverflow.com/a/1177744/392850)

更好的方案:

>使用强哈希算法和salt生成dll的哈希值
>生成RSA密钥值对(私钥和公钥)
>使用您的私钥加密dll的哈希值
>在您的应用程序中嵌入公钥,“加密哈希”和salt
>应用程序启动时,使用您的公钥解密“加密哈希”
>在运行时使用相同的salt再次生成哈希值,并与使用公钥解密的哈希值进行比较

如果您拥有来自可信CA的任何证书(如verisign),则可以使用该证书而不是使用RSA密钥值对.

这种方式即使有人用破解的dll替换你的dll,哈希也不会匹配,你的应用程序就会知道劫持企图.

这种方法可能比只给dll一个强名称更好,因为可以通过运行来禁用强名称验证

SN -Vr HijackedAssembly

希望这可以帮助您,或者想要了解数字签名内部如何工作的人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读