水坑攻击:利用JSONP劫持跟踪用户

至少从2013年10月起,水坑攻击便以非政府组织,维吾尔族群体以及伊斯兰民族的网站为攻击目标进行了大量的攻击。在这篇文章中,我们将会对这一 系列包括近期所检测到的攻击在内的水坑攻击进行详细描述。在这里,我们要感谢Sumayah Alrwais,他是印第安纳大学系统安全实验室的一名博士研究生,正是他在RSA实验室中发现了这种最新的水坑攻击,并提醒了我们该攻击正在影响中国的 各大国际性非政府组织的网站。

水坑攻击

水坑攻击是一种黑客技术,如果一个黑客想要攻击一个特定的组织(公司,企业,少数民族团体等等),便可以使用这种技术来实现攻击。攻击者首先入侵目标组织的官方网站,然后将恶意代码注入至网站之中,当用户访问受感染的网站时,恶意代码将会被执行。

通常情况下,攻击者可以通过恶意服务器,然后利用IE浏览器,Java插件,或者Flash播放器的漏洞来导入一个iframe或者一个JavaScript脚本文件,最终获取目标主机系统的访问权限。

我们对一些在过去所发生的攻击事件进行了记录和研究,下面是一些攻击示例:

Just another water hole campaign using an Internet Explorer 0day
 U.S. Department of Labor website hacked and redirecting to malicious code

在其他情况下,我们还发现,在有的水坑攻击中,黑客还使用了勘查技术来提取安装在目标主机设备中的软件信息,甚至使用了JavaScript键盘记录脚本来窃取用户的账户凭证等数据:

Attackers abusing Internet Explorer to enumerate software and detect security products
Scanbox: A Reconnaissance Framework Used with Watering Hole Attacks

除此之外,这已经不是我们第一次记录到针对中国维吾尔族的网络间谍行动了:

Cyber espionage campaign against the Uyghur community, targeting MacOSX systems
New MaControl variant targeting Uyghur users, the Windows version using Gh0st RAT
Latest Adobe PDF exploit used to target Uyghur and Tibetan activists

我们所描述的最新攻击是一种新颖的技术,而且我们之前从未在水坑攻击中见过此类技术。接下来我们会详细描述其工作原理:

攻击者入侵与非政府组织,维吾尔族团体,以及伊斯兰协会有联系的中文网站。

在入侵成功之后,攻击者会修改网站的内容,并且通过恶意服务器来导入一个JavaScript脚本文件。

这个JavaScript脚本文件会利用JSONP劫持漏洞,这种漏洞存在于15个不同的大型中文网站之中,包括中国用户所广泛使用的五大门户网站。(详情请看下表)

如果用户登录了其中一个被入侵的网站,或使用了网站所提供的受感染的服务,那么通过使用JSONP请求,攻击者便能够绕过跨域请求机制,并且能够收集到用户的个人隐私信息。

然后,JavaScript脚本代码便会将用户的隐私数据传输到一个由攻击者控制的服务器中。

当我们开始写这篇文章的时候,我们并没准备将受影响的网站公布出来。然而,经过了一系列的调查和研究之后,我们发现这种同样的漏洞已经在2013年就被公布出来了!

漏洞的详情可以在一篇中文的安全博文和几大中文安全论坛中找到。

为了让大家清楚该问题的严重性,我们将向大家展示受影响网站的Alexa评级名单,攻击者可以窃取这些网站中的用户隐私数据:

1

攻击分析

JSONP是一种广泛使用的技术,它可以通过发起JavaScript的跨域请求来绕过同源策略。然而,绕过同源策略会导致不同源或域之间的数据泄 漏。而且,尤其是当JSONP涉及到了用户的数据信息时,这样是极其危险的。既然JSONP请求/回应能够绕过同源策略,那么恶意网站便能够通过这种机 制,让目标主机发起跨域JSONP请求,并使用”脚本”标签来读取用户的隐私数据。

下面,我们向大家介绍一个例子,这是在一个水坑攻击中发现的一个恶意JavaScript脚本,我们对其还进行了分析和研究。

首先,恶意JavaScript脚本会向一个有漏洞的服务器发起一个带有<脚本>标签的JSONP请求。代码如下,脚本请求了renren_all的函数调用:

2

含有漏洞的网站会以下列内容来回应请求:

3

当浏览器收到数据之后,它会调用renren_all回调函数,该功能函数会将用户的个人数据发送至一个由攻击者控制的服务器中,这些数据包括用户的性别,生日,真实姓名以及ID号等等。

4

在发送完了所有的JSONP请求之后,恶意JavaScript脚本会将数据发送至一个由攻击者控制的服务器中:

5

除此之外,我们还发现在其中一个恶意JavaScript脚本文件内,包含有能够返回用户的公共地址以及私人地址信息的代码,这些脚本使用了带有震网病毒的WebRTC技术,详情请点击这里。

安全建议

名单中列出的受影响网站(百度,淘宝等网站)应当立即修复JSONP劫持漏洞。下面是一些修复该漏洞的方法:

-在所有的JSONP请求中引入一个随机值(这样同样能够预防CSRF攻击)
-使用CORS来代替JSONP
-不要使用cookies来自定义JSONP响应
-在JSONP响应中不要加入用户的个人数据

上一篇:在线密码管理器LastPass遭到网络攻击

下一篇:全球风力发电和太阳能系统存安全缺陷