对于最终用户,HTML5/JavaScript 是否比 Flash 更安全?

信息安全 javascript 闪光 html-5 最终用户
2021-08-29 15:41:05

我不是在谈论服务器端安全,甚至不是 XSS 漏洞,因为这些是对易受攻击的服务的攻击,并且不会使用客户端上任何预先存在的漏洞来影响最终用户。只要 Web 开发人员继续制作易受攻击的 Web 应用程序,它们就会存在。

我想在这两种不同的场景中关注最终用户的安全性:

  1. 已安装并启用 Flash,但禁用了 JavaScript
  2. 启用 JavaScript,未安装或启用 Flash

我对提出一种需要比较两种几乎完全不同(内部)但又相互竞争的技术(在最终用户安全性方面)的问题可能得到的答案很感兴趣。

3个回答

从理论上讲,如果所有服务器和与它们的连接都完全安全(不可能)且值得信赖(不正确),那么任何一个都不会比另一个更“安全”——主要是因为网站的开发人员完全可以控制网站的内容。由于 Flash 和 JS 提供给客户端,因此服务器必须向最终用户提供恶意内容,以使最终用户受到影响。

遗憾的是,我们并不生活在一个完美的世界中,并且 JS 在服务器受损的情况下往往更安全——它影响客户端的能力要有限得多。许多 Flash 漏洞具有执行任意代码的能力,这比浏览器漏洞更具破坏性,浏览器漏洞通常需要多个漏洞才能突破沙箱。这意味着 JS 漏洞通常只能在客户端查看该页面时操纵客户端,并且通常在页面关闭后无法持续存在,而 Flash 漏洞可以用 RAT 或其他恶意软件感染客户端,从而使攻击者能够控制即使在浏览器关闭后客户端。

使用 JS 的另一个好处是客户端可以查看源代码。使用该站点的人可能会注意到源中的可疑内容并通知开发人员,从而更容易检测到入侵。在 Flash 的情况下,恶意攻击者可以将恶意代码注入现有的 swf,并且由于用户在不分解 swf 的情况下无法查看源代码,因此恶意代码可能会在更长时间内未被检测到。

对于最终用户,场景 2:

启用 JavaScript,未安装或启用 Flash

鉴于上述原因并考虑到 Adob​​e Flash 的漏洞利用历史,它会更安全。在 NVD 中搜索一共发现了610 个漏洞其中 330 个在 2014 年 1 月至 2015 年 12 月之间。大多数与 JS 相关的漏洞利用往往是特定于浏览器的,这减少了受影响的客户端数量,而 Flash 旨在跨平台,这增加了受影响客户的数量(考虑到很多人禁用了 Flash,现在更少了)。

TLDR:关闭 Flash 并改用 JS。

除了 WillS 的出色回答之外,还有一些影响安全性的差异:

  • Flash 是一种产品,而 HTML5/Javascript 是一种规范。对于产品(尤其是闭源产品),您总是依赖供应商来玩打地鼠游戏(Adobe 做得很好,但从长远来看,这是一场失败的战斗)。如有必要,可以重新实现规范(除非规范本身存在缺陷 - 但即使是通常也可以修复)。
  • 最终用户可能没有最新版本的 Flash,并且可能无法升级。例如,Linux 和 Android 实现已经过时且不受支持。
  • Flash 已经很老了;它是在上个世纪首次创建的。在这一点上,任何那个时代的软件都可能是一个巨大的胶带球。同样,这主要是由于 Flash 是一种产品而不是一种规范。HTML 和 Javascript 也可以追溯到很久以前,但不会受到这个问题的困扰,至少不会在同样的程度上受到影响。

更新Flash 的另外两个问题:

  • Flash 可以建立自己的 TCP 连接。如果发现密码或散列易受攻击,浏览器可能会弃用它,但 Flash 可能仍会使用它。Adobe 在解决此类问题方面往往做得很好(至少在受支持的平台上),但它仍然使打地鼠因素加倍。
  • Flash 有自己的 cookie,与浏览器 cookie 分开。这主要是一个隐私问题而不是安全问题,但许多人认为这两个问题是相互关联的。

从“可以从您的浏览器运行 xx 使您的机器崩溃或危及您的安全”的角度来看,答案是明确的 - flash 是一项古老的技术,不再得到很好的支持,并且具有悠久的漏洞利用历史。因此,它具有潜在的危险性是众所周知的。

至于 html5、javascript 和其他当前流行的技术,它们本质上并不安全——它们在您的机器上运行第三方编写的代码。有人试图限制他们可以做的事情,但有效性取决于实现的质量以及底层设计。剥削是不可避免的。