关于反射文件下载 (RFD) 攻击的问题

信息安全 网页浏览器 恶意软件 开发
2021-08-30 11:55:16

我阅读了这篇文章,以及安全研究员 Oren Hafif 的白皮书, 其中提到了以下要点:

RFD 与许多其他 Web 攻击一样,首先向受害者发送恶意链接。但与其他攻击不同的是,RFD 在浏览器上下文之外结束:

  1. 用户跟踪到受信任网站的恶意链接。
  2. 一个可执行文件被下载并保存在用户的机器上。所有安全指标都表明该文件“托管”在受信任的网站上。
  3. 用户执行该文件,该文件包含获得对计算机的完全控制的 shell 命令。

恶意 URL 的示例如下所示:

https://www.google.com/s;/ChromeSetup.bat;/ChromeSetup.bat?gs_ri=psy-ab&q=%22%7c%7c%74....

这看起来类似于最近的 shellshock 错误,只是攻击是针对客户端而不是服务器的。我的问题是:

  • Google 是否在其服务器上ChromeSetup.bat的目录下托管文件?/s;
  • 哪些操作系统易受攻击?这种攻击是否特定于特定版本的 Windows 操作系统?
  • <img>如果网站允许其用户在标签的 src 属性中放置恶意 URL,客户如何保护自己?
1个回答
  1. Google 未托管 ChromeSetup.bat。这种攻击的一个要求是网站需要有一个具有不太常见的 Content-Type 的端点,最好是配置错误的 Content-Disposition 标头(即:没有“文件名”属性)。这两个标头将导致浏览器将响应下载为文件,而不是渲染它。

在 URL 中,您提供的端点是“/s”,它以 JSON 格式提供自动完成建议,内容类型为 application/json。旧版本的 IE 将仅根据内容类型提示下载,新版本和 Chrome 需要不完整的 content-disposition 标头才能使此攻击起作用。

另一个要求是该端点必须反映来自查询字符串的一些用户输入(post 或 cookie 数据显然也可以工作,但对攻击者来说不会那么有效)。这将提供下载文件的恶意内容。

在您提供的 URL 中,这将是 querystring 参数的值。

由于没有为下载提供文件名,浏览器会尝试选择一个。因为 Google 网站允许通过 url 参数(;/ChromeSetup.bat; 部分)提供松散的 url,所以浏览器选择了一个清理后的版本(即 ChromeSetup.bat)作为文件名呈现给用户。Web 应用程序会忽略此输入,但浏览器会使用它。

  1. 任何操作系统上的任何浏览器都可能以这种方式响应。Chrome 将使用伪造的文件名下载响应,这也适用于 OSX。

Windows 中存在一个额外的弱点,当文件名中出现“设置”时,它不会正确警告用户。如果您单击它,Windows 也会直接运行一个 .bat 文件。Osx 和 Linux 不会运行此文件,因为攻击者很可能无法提供带有 hashbang 符号的完整 shellscript。即使那样,它也没有设置可执行位,因此不会直接运行。

  1. 用户仍然必须激活/接受下载,因此只是开车经过不会立即导致“感染”。客户端(浏览器)应该为可执行文件提供适当的警告,而不是仅仅运行它们。用户应该知道不要运行随机的 .bat 文件,但这就是这种攻击的优势所在:“文件”是从 Google.com 提供的,所以它应该是安全的,对吧?这里最重要的一方是易受攻击的网站:该网站不应允许用户提供自定义路径,应提供适当的标头以防止这种情况,并应重新考虑反映用户输入。