跨站脚本攻击

跨站脚本是近年来最为流行的网络攻击方式之一,占到了网络攻击相当大的比例,由于在各种网络攻击中占有重要的地位,已经同SQL注入一起成为最主要的网络攻击形式。本文将对跨站脚本攻击的原理,危害及其防御做深入的探讨。

文/H3C攻防研究团队

1 概述

跨站脚本是近年来最为流行的网络攻击方式之一,已经占到了网络攻击相当大的比例,众多网站,如著名的Facebook等都遭遇过此类攻击。国内知名的新浪微博最近遭遇的网络病毒实际上也是跨站脚本漏洞所导致的。

跨 站脚本起初的危害主要是盗取用户的Cookie信息。Cookie信息中包含了浏览者和网站服务器之间的常用记录,包括登录记录、浏览记录等。如果攻击者 得到了用户的Cookie信息,可以模仿用户和网站进行交互,得到更多想要的数据。例如,攻击者在某论坛上发布一个URL链接,当用户点击该链接后,用户 的浏览器就会将Cookie信息发送到攻击者的网站。攻击者收集到Cookie信息后可以以浏览者身份访问网站、进入邮箱等,继续窃取私人信息。

跨 站脚本可以包含任意的脚本文件,所以可以做的事情远不止盗取Cookie信息这么简单。有的跨站脚本由于将脚本注入了网站后台数据库中,从危害结果上看可 以将这种攻击视为网页挂马。只不过它篡改的不是网页本身,而是网页需要用到的数据。攻击者还会对发布的恶意URL进行编码,用以逃避浏览者的观察。

2 跨站脚本原理

跨站脚本简称为CSS(Cross Site Scripting),因为容易和另一个名词“层叠样式表”(Cascading Style Sheets,CSS)混淆,为了区别,网络安全人士习惯将其简称为XSS攻击。

从本质上看,跨站脚本实际上是一种恶意代码执行的方式。主要原因在于网站对于用户提交的数据过滤不严格,导致问题产生。从攻击方式上来看,跨站脚本主要分为两大类,一类是反射型的跨站脚本,一类是存储型的跨站脚本。下面将分别对这两类攻击方式做介绍。

2.1 反射型的跨站脚本

这种是最常见的跨站脚本攻击方式,原因在于这种方式普遍存在且容易利用。

一 般地,网站在与用户交互时经常会将用户提交的数据返回给用户。比如,当用户以“Mike”用户名登录网站后,网页上往往会出现“Hello,Mike”的 字样,以此改进用户上网的体验。网页上出现的“Mike”字样实际上就是用户提交的数据被网站返回到了用户浏览器并显示出来。另外,搜索引擎也存在类似的 情况,当用户提交要搜索的关键词后,引擎会将关键词在搜索结果页面上再次显示出来,这实际上也是数据被返回到用户端。

网站中一般由CGI程 序(Common Gateway Interface)处理用户数据,这是在网站服务器上运行的可执行代码。常见的CGI程序文件有PHP、JSP、ASP、PL等。动态Web页面都是由 CGI程序实现的,负责接收用户数据、与网站数据库进行交互、生成HTML文件并传回用户浏览器。

类似于“Mike”这样的数据体现在代码 中,就是HTML代码中的字符串。以上的过程可以概括如下:用户在动态网页(PHP、ASP、JS、Perl等)上输入数据并提交;网站CGI程序接收到 数据后进行处理;网站将数据作为常量字符串嵌入到HTML代码中并返回到用户浏览器;浏览器解析HTML代码并对数据进行处理(显示出数据)。

如果网站中的CGI程序对用户输入数据过滤检查不严格,有可能会漏过一些恶意的内容,将这些内容作为正常的数据嵌入到HTML代码中,并返回到客户端的浏览器。浏览器在解析HTML代码时,会按照代码内容决定如何去处理,可能是显示出数据,也可能将数据作为代码去执行。

举 例来说,用户可以输入用户名数据为“Mike<script>Alert()</script>”。 若网站CGI程序对用户名的过滤不严格,这样的数据没有被网站正确过滤,重新嵌入到生成的HTML文件中并返回到用户浏览器,即HTML代码中包含有 “Mike<script>Alert()</script>”的内容。浏览器对于“Mike”的处理是依然显示在网页上,而对 “<script>Alert()</script>”这样的数据则会认为是script脚本并执行,这样就产生了跨站脚本攻 击。攻击过程如图1所示。

图1 反射型跨站脚本攻击

从图1可以看出,在这种攻击过程中,数据在用户浏览器和网站之间进行了一个“来回”交互,因此这种方式被称为反射型的跨站脚本。

2.2 存储型的跨站脚本

如果攻击者提交的数据被网站服务器所存储,而这些数据又总是因为没有得到正确的检查,能够在用户网页上显示出来,这种跨站脚本就是存储型的,这种攻击的危害更大更广泛。

举 例来说,假设存在一个社交网站名为Cotton。该网站的成员可以看到其他感兴趣成员一些基本的、可对外公开的信息,而每个成员的个人隐私信息,如真实姓 名、联系方式或住址等则保存在网站的服务器上。成员能看到自己隐私信息的唯一条件是登录该网站,并且不会看到该网站其他任何成员的隐私信息。

如 果攻击者设法了解到该网站内部数据的交互方式,知道如何从服务器中取得其他成员的隐私信息,就可以编写一段小程序,该程序可以在浏览器中运行,与网站服务 器交互并获得浏览者在该网站中的隐私信息。攻击者将这段程序连同他本人的一些可以对外公开的信息一起提交给网站,网站在存储信息的同时也存储了这段恶意程 序。

当有浏览者查看该攻击者的公开信息时,这段程序会随同公开信息同时下载到浏览者的浏览器中并运行,获得浏览者的真实信息并发送到攻击者 指定的网站或服务器中。攻击者可以利用社会工程学的方法吸引大量的用户来查看这些信息,这就造成了用户信息的大量泄漏,造成很大的危害。攻击过程如图2所 示。

图2 存储型跨站脚本攻击

从前述的内容可以看出,这种跨站脚本将恶意程序常驻在网站的后台数据库中,任何浏览攻击者公开信息的用户都会下载恶意程序到本地浏览器并有可能被执行,因此这种方式的攻击影响面更广。

3 跨站脚本的防御

网 页上任何由用户提交数据的地方都有可能存在跨站脚本漏洞,且漏洞利用的方式也多种多样。鉴于跨站脚本层出不穷和灵活的特点,网站设计者、浏览器开发员、用 户以及设备厂商都建立起了相应的防御手段,这也是针对这种攻击防御的必然要求。其中,使用网络安全设备,通过软件和硬件的结合对跨站脚本攻击进行防御是业 界常用的防御方式。

3.1 安全设备的防御

安全设备对流量进行识别的基本原理是对经过设备的网络流量做深度检测,通过预先定义的特征库,利用软件和硬件对可疑的流量进行识别。

由 于跨站脚本本质上是网站对提交的数据过滤不严格造成的,因此,对包括URL、查询关键字、HTTP头部数据、POST等数据的验证就是安全设备对网络流量 进行检测的重要部分。一些特殊字符,如“<”、“>”、“script”等,如果在特定的位置出现,通常被认为是可疑的数据。安全设备通过特 定的业务规则对内容进行过滤识别,这就是传统的基于数据特征的流量识别方式。众多的特征规则集成到一起就形成了特征库。目前,一般的特征规则已经可以做到 硬件层面的、快速准确的识别。图3展示了这种防御方式的简图。

图3 安全设备防御方式

特 征库中的大多数规则是对常见的跨站脚本攻击分析后提取出的特征码。这种防御对已有的一种或一类的攻击识别准确率较高,且对系统性能影响不大,是比较成熟的 防御方式。但这种方式对攻击代码的各种变化适应性不强,攻击者对代码进行修改,便容易产生漏报。特征码是一种“事后防御”,新出现的跨站攻击中如果包含有 常见的攻击特征,特征码可能能够起到防御的作用,但如果攻击方式是崭新的方式,特征库就无能为力了。安全分析人员需要有深厚的技术功底和丰富的经验,否则 提取出的特征码会造成漏报或误报。比如,如果仅仅将“javascript”作为URL部分的特征码的话,就会造成对形如 http://www.example.com/abc/javascript/a.html的正常URL的攻击误报。

在传统的数据特征分 析的基础上,现在又发展出了基于行为特征分析的防御方式。这种防御方式首先对用户提交的HTTP头部信息、URL、Cookie以及表单数据等可能实现跨 站脚本攻击的数据来源进行初步过滤,放行大多数正常的HTTP流量,而针对包含可疑数据的流量,则进一步收集数据,比如提取出相应的脚本数据,由软件对提 取的数据进行深入的行为分析。分析依据是跨站脚本攻击的行为特征库,行为特征库来源于安全分析人员对跨站脚本攻击方式的收集、整理和分析。当几种可疑的数 据或行为都出现且满足一定条件时才判断为攻击行为。这是将硬件检测与软件分析结合起来的分析方式。这种方式可以很大程度上减少由于检测固定特征导致的误报 和漏报可能,仅对少量疑似事件进行深入分析,提升分析速度的同时尽量降低资源开销。

这种防御方式的原理如图4所示。

图4 基于行为特征分析的防御方式

安 全设备一般由专业的安全厂商提供。这些厂商有专业的安全分析团队以及设备集成能力,专业程度高。无论是数据特征还是行为特征,除了要求分析人员有深厚的技 术功底和丰富的经验外,还需要分析人员能够得到足够多的攻击样本,传统的厂商间信息共享或蜜罐(HoneyPot)技术已经不能适应当前的网络安全形势, 而新兴的云计算技术可以较好的解决这个问题。云计算的特点是海量数据的快速共享。目前很多安全软件厂商已经将该技术应用于开发的软件产品中。在此技术的支 持下,软件不仅可以及时获得足够多的攻击样本以更新自身的特征库,还可以时时将用户遇到的跨站攻击及其攻击方式上传到云计算服务器。对于本地无法识别的攻 击可以上传到云计算服务器进行分析。这样,安全分析人员就能在获取大量样本的同时,及时分析并开发出防御方式,并更新数据特征库或行为特征库,使得攻击出 现和发展出相应防御方式之间的时间间隔大大减少。

3.2 用户端的防御

顾名思义,就是在用户侧进行的防护。例如,在微软 开发的Internet Explorer 8中添加了跨站脚本过滤器,以减少跨站脚本对用户造成的危害。这种终端防护能够起到一定作用,但是需要定期更新过滤器的数据库,否则对新的攻击方式无法及 时检测并防御。此外微软官方更新周期较长,因此这种方式只能在一定程度上起到防御的作用。

对于上网用户来说,要求用户都学习并具备网络安全 知识以防御网络攻击是不现实的。但若用户养成良好的上网习惯,并对上网环境做必要的安全配置,则能够从很大程度上减少跨站脚本攻击的危害。例如,用户上网 时,不要轻易点击网络论坛、聊天室、即时通讯工具或电子邮件中出现的链接;在浏览器设置中关闭JavaScript;,可以将IE浏览器安全级别设置到 “高”。用户也需要在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。

4 结束语

跨 站脚本是当前最为流行的网络攻击形式之一。跨站脚本的灵活性和广泛性使得对其必须进行多方面多层次的防御。网站设计虽然能够在根本上解决跨站漏洞,但实际 操作中往往因为各种原因导致存在漏洞。上网用户环境中的浏览器和安全软件,企业用户使用的IPS等安全设备以及用户良好上网习惯的综合防御,能够从很大程 度上减少跨站脚本的危害。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值