我觉得.net缺少一个简单的安全自动更新库,所以我实现了一些东西并把它放到here。在任何人考虑使用该库之前,我都热衷于更新过程以获得一些同行评审。
答案 0 :(得分:8)
Dan Kaminsky对更新程序有一套很好的指导原则:
要成功,您的更新包必须是:
根据您在此问题中的描述,您似乎拥有前3个。
答案 1 :(得分:4)
在企业环境中构建自己的部署者,这里有一些我需要解决的用例:
支持数字签名
支持所有类型的代理。一些大型团队具有复杂的代理配置(例如,通过使用代理配置脚本)。你应该支持所有这些。
加密支持。您的客户可能希望在Web服务器上提供已部署的二进制文件,并且他们不希望管理某种身份验证或访问控制;但他们也不希望未经授权的用户下载二进制文件。一个简单的解决方案是加密二进制文件并让您的工具部署它
支持可插入的附加步骤。企业客户通常不太习惯使用自动部署的工具。他们需要更多的控制权。通常,允许他们运行可自定义的步骤(如防病毒检查等)将有助于
基于消费者身份支持不同版本的软件。当您想要在不运行所有Q& A流程的情况下更快地更新特定消费者的副本(以修复错误或添加额外功能)时,通常需要这种情况(在这种情况下,您希望限制对此特定消费者的更新)
支持有限特权情况。除了您的用户可能缺少管理员访问其计算机的事实之外,大公司通常使用特定工具来限制您可以执行的操作。准备好部署在用户拥有的文件夹(甚至是临时文件夹)中,而不是经典的“程序文件”。
您的工具应由强大的认证机构签名。
关于你提到的MITM攻击,它可以通过使用公共密码术轻松解决(如unknown所述)
答案 2 :(得分:3)
好吧,您可以尝试通过“无版本更新”响应也包含时间戳(& be signed)来阻止MITM。然后,如果一个月过去(或无论您的策略是什么)没有版本更改且没有时间戳更新,那么您拒绝运行软件或弹出警告对话框,通知用户可能存在MITM攻击。
无法解决服务器出现故障时该怎么办的问题 - 大概你认为它与无时间戳更改一样。
答案 3 :(得分:1)
这并不意味着在这里成为巨魔,但你正试图解决已经解决的问题。使用SSL将是一个更好的选择。这将解决您的问题中列出的所有问题。
据我所知,这个系统对于那些买不起SSL证书的人来说非常有用,但是任何能够获得SSL证书的人都应该得到一个解决这个问题的人。
不要忘记,“复杂性是安全的敌人”。
答案 4 :(得分:0)
作为补充,也可以将MD5 CheckSum添加到下载的文件中,否则,看起来不错:) - 下面的公平评论。
添加了:
我在这里可以看到的另一件事就是深入研究如混淆代码,归档设置文件和锁定存档,然后下载后解锁它。那种事。但是我认为你现在所做的应该是100%。
唯一需要的是应用程序非常复杂的时候。现在你可以防止DLL篡改和原产地证明,对于自动更新程序来说,这应该是充足的。
答案 5 :(得分:0)
所以我不清楚某事;下载程序通过签名验证清单是否是它所期望的那个,是否对它安装的实际补丁执行相同的操作?
答案 6 :(得分:0)
这篇文章中有一些非常好的评论和解决方案。但我非常同意博士。邪恶。您应该使用SSL连接进行更新,并且必须在客户端中保存(构建)证书。因此,您可以确保客户端不会接受假证书。 我认为它将有效地使客户免受MiTM攻击。
注意:如果客户端可以接受未经授权的证书,那么MiTM攻击可能会成功,因此不要将此选项提供给客户端。
编辑:我认为在这种情况下SSL证书可以自签名。