6

有几个问题(C#Java)涵盖了如何实现自动更新。最初提供自动更新似乎很容易,而且似乎没有充分的理由不为大多数软件提供自动更新。

但是,似乎没有一个涵盖自动更新的安全方面。

  • 现在自动更新有多安全?
  • 它们应该有多安全?
  • 他们能有多安全?

我的主要问题是,无论出于何种意图和目的,互联网都是一个狂野的西部,人们无法对他们收到的任何数据做出任何假设。通过 Internet 进行自动更新似乎存在固有风险。

公司计算机被感染,欺骗 DNS(只有一小部分获胜),并使其他公司计算机相信通用应用程序的更新服务器在其他地方,他们下载“新”应用程序并被感染。

作为开发人员,存在哪些可能的攻击,我应该采取哪些措施来保护我的客户免受滥用?

-亚当

4

4 回答 4

6

通过正确使用密码学,您的更新可以非常安全。使用 SSL 保护您从中分发更新的站点。使用 GPG/PGP 或其他方式签署所有更新,让您的客户在应用更新之前验证签名。采取措施确保您的服务器和密钥非常安全。

足够,是非常主观的。对于网络游戏来说足够了,对于我们的核导弹的安全系统来说可能完全不够。如果有人设法破坏了您的安全,您必须确定可能会造成多大的潜在损害。

于 2009-02-23T17:59:12.527 回答
2

最明显的攻击是攻击者通过他的“邪恶”更新服务器提供更改的二进制文件。因此,您应该确保可以使用数字签名验证下载的数据是否来自您。

为了确保安全,显然您应该避免分发签名密钥。因此,您可以实现RSA 消息签名的一些变体

于 2009-02-23T17:49:48.383 回答
1

通过 SSL 连接到您的更新服务器就足够了,只要您的客户端在获得无效证书时将拒绝连接,并且您的服务器需要协商合理的连接安全级别(并且客户端也支持)。

然而实际上,您所做的几乎任何事情都至少与您的用户首次安装您的软件的路径一样安全。如果您的用户最初通过纯 http 下载您的安装程序,那么开始保护更新内容为时已晚。

即使他们通过 https 或数字签名获得您的初始软件,这在某种程度上也是如此 - 因为大多数用户很容易被说服点击他们看到的几乎所有安全警告上的确定。

于 2009-02-23T18:05:48.737 回答
1

似乎没有充分的理由不为大多数软件提供自动更新。

有充分的理由不强制更新。

  1. 错误修复可能会破坏代码
  2. 用户可能不想冒险破坏依赖旧功能的生产系统
于 2009-02-23T18:12:49.420 回答