蒋 华,徐中原,王 鑫
(桂林电子科技大学计算机科学与工程学院,广西桂林541004)
据WhiteHat Security统计,近几年来跨站脚本 (XSS攻击)攻击一直在威胁Web安全的严重程度指数中名列前茅[1]。与此同时,从2005年起,跨站脚本 (XSS)蠕虫也已在国内很多社交网站上陆续崭露头脚,其传播速度和范围都令传统的网络蠕虫黯然失色[2]。
目前对于XSS攻击主要的防范措施都集中在服务器端,通过对用户的输入进行过滤来防范XSS攻击,但是这样做的缺点是很容易使恶意攻击者通过探测工具绕过过滤来实施注入攻击。另外,如果在服务器端所设立的过滤算法过于复杂,将不可避免地影响到服务器的性能。
此外,近几年来防范措施设置在客户端方面的设想和做法也已陆续被提出,王夏莉,张玉清等提出了通过将用户对Web应用程序的HTTP请求数据包分离为GET和POST请求数据包分别进行分析处理的客户端防范方法,该研究设计的StopXSS对防范XSS蠕虫攻击有一定的作用,但对XSS攻击窃取用户敏感信息和隐私数据方面防范不足[3];Vogt P等提出了基于动态分析追踪的客户端防范方法[4]、章明等使用静态约束分析和动态检测相结合的客户端防御方法[5],可对XSS攻击进行比较有效的防范,但面对XSS蠕虫的攻击束手无策。
针对此种情况该论文结合上述研究的优点设计出了纯客户端的XSS防御设计方案,通过实验验证了该方法不仅可以更加有效地防御XSS攻击,检测准确率可以达95%左右,另一方面对于XSS攻击向量的变种亦具有同样的防御能力[6],同时该方法还具有检测防范0-Day XSS蠕虫的能力。
XSS(cross site scripting)即跨站脚本攻击,主要是由于Web应用程序对用户输入没有进行合理的过滤造成的[7]。恶意用户利用XSS漏洞可以编写专门的攻击代码注入到Web应用程序,当其它用户浏览Web应用程序中的此页面时,脚本代码就会在用户的浏览器中执行从而窃取用户的敏感信息或隐私数据等,然后以用户的身份登录Web应用程序或利用已窃取的信息实施破坏。
XSS蠕虫是一种利用XSS漏洞进行攻击和传播的蠕虫。XSS蠕虫的第一次亮相是在2005年的MySpace网络社区中,在短短20个小时内即感染超过百万的用户,两天后MySpace不得不关闭站点进行维护,造成了巨大的经济损失[8]。随后在国内的新浪、百度、人人网等知名网站中也先后爆发过XSS蠕虫,但值得注意的是目前XSS蠕虫还处在发展阶段,已爆发的蠕虫大部分还不具备攻击性,如加上挂马、钓鱼等代码则可对用户的财产和隐私安全造成严重影响。
(1)反射型XSS攻击:反射性XSS是指用户点击了某个链接如邮件中的链接、新闻标记中的链接或攻击者伪装为用户的朋友直接发送的链接等,而这个链接是XSS攻击者经过精心构造、在其中包含恶意脚本代码的危险链接,恶意脚本代码在用户点击后即在用户的浏览器中运行,在浏览器端如没有相应的防范措施,恶意攻击者就可以窃取用户的隐私数据或敏感信息如cookie等。
(2)存储型XSS攻击:存储型XSS主要是由于Web应用程序对用户输入的过滤存在漏洞,从而导致恶意用户将恶意代码以正常数据信息的形式提交到Web应用程序的服务器中,当用户访问相对应的页面时Web应用程序就会从服务器加载包含恶意代码的页面传递到访问用户的浏览器中并执行,窃取用户的敏感信息或进行其它恶意攻击行为。
(3)基于DOM的XSS攻击:与前2种攻击方式不同的是基于DOM的XSS攻击恶意代码并不是直接嵌入HTML页面中的,而是和正常的HTML页面一起返回到客户端,然后在客户端由浏览器将恶意代码插入到HTML页面中并执行攻击。由于此类型的XSS攻击和蠕虫很少或目前还没有被发现,因此在本文中不做进一步的研究。
(4)XSS蠕虫:根据目前所发现的XSS蠕虫和对XSS蠕虫的分析,目前存在的主要是反射性XSS蠕虫 (如新浪XSS蠕虫事件等)和存储型的XSS蠕虫 (MySpace蠕虫事件等),XSS蠕虫的工作原理如图1所示,攻击者首先利用Web应用程序的漏洞 (反射型的或存储型的)将恶意代码提交到服务器中并保存起来,当访问用户浏览到包含XSS蠕虫的页面时或点击到包含XSS蠕虫的链接时,用户浏览器就会自动执行蠕虫负载,然后会以受害用户的身份向Web应用程序发出复制传播的请求,如复制相应的链接或用户资料到受害者的空间或页面中,甚至发送相应的请求等其它操作。由于蠕虫复制传播需要向服务器提交相应的信息和数据,因此在正常情况下XSS蠕虫都是通过POST请求来完成复制和传播操作的,可以说提交POST请求是XSS蠕虫复制传播所必经的一步。
图1 XSS蠕虫工作原理
针对以上问题的分析,本文提出了一种结合动态污点分析和HTTP请求与响应数据包分析处理的方法,并且根据该方法设计了检测工具WXDS(web XSS defense system),利用动态污点分析标记并跟踪用户的敏感信息和隐私数据,防止恶意程序代码在用户不知情的情况下将这些信息发送到第三方,泄漏用户隐私信息或敏感数据,最终造成对用户的损失。同时,针对提交的HTTP请求进行拦截分析,分析请求中的POST请求包,对其进行过滤判断,如发现可疑的请求根据所设定的警告等级采取对于的措施:自动处理或及时向用户发出警报,请求用户予以处理。
动态污点分析是一种程序分析方法,目前广泛应用于各种领域,如:攻击检测、程序理解、信息安全验证等。本文所使用动态污点分析是一种基于动态信息流的污点分析方法,具体为先将特定的信息或输入数据 (见表1的信息数据)定义为敏感数据并对其进行标记[9-11],同时,对在程序运行时标记数据所参与的运算进行分析处理,根据预先设定的污点分析传递方法对相关的计算结果与依赖关系添加污点标记,将其标记为新的污点数据,于此同时,对其参与的运算亦进行动态污点分析,在有输出时根据同源策略进行判定,在发现有标记污点的数据要发送到第三方时对用户发出警报,请求用户予以处理。
污点数据的提取依据表1中所示,确定污点数据的主要依据是它包含可能被攻击者利用来进行恶意攻击或获取用户的隐私信息 (如cookie等),列表1中所列数据主要是参考的JavaScript权威指南,如将来有其它的敏感数据源,根据本文的分析策略亦可以及时进行扩展。
当某个敏感数据参加某个算术、逻辑或赋值运算时,被赋予的变量和运算结果也会被标记为污点数据,同时该方法也可以标记直接控制依赖关系,即当某项操作是否运行依赖于某个污点数据时 (如if控制语句的判断条件是测试某一个污点数据或switch语句中的匹配问题等)。如图2所示,第3、5行中为赋值运算,第6行是算术运算和7-15行中利用switch语句和循环实现将cookie的内容传递到字符串a中的操作,如果仅仅从数据依赖的角度看,switch语句结束后变量a是不会被标记为污点数据的。
表1 被污点标记的JavaScript属性和方法
根据如图3中的约束,图2中所示的运算运行结束后,变量b、c和a均被标记为污染数据,同时对它们之后所参与的其它运算继续进行跟踪和污点分析。
图2 污点数据运算分析
综上所述,当污点数据参与如图3中所示的运算后,最终得出的结果均为污点数据,并继续对其之后参与的后续运算继续进行跟踪分析。
图3 污点标记
用户正常情况下访问网络的HTTP请求分析如下:在正常浏览网站页面、下载资料等不需要提交用户信息或其它数据等操作时向服务器提交GET请求;在进行登录、验证、上传等需要提交用户信息或其它数据等操作时向服务器提交POST请求。
但在以下3种情况下当用户正常情况下浏览网站页面时也会提交POST请求:
(1)某些网站为了记录用户的点击数、点击操作或丰富用户的浏览体验,会向网站服务器提交POST请求。
(2)一些浏览器的安装插件为了统计某些信息而提交POST请求,如goole、火狐浏览器等都有此操作。
(3)XSS攻击发送的POST请求,例如XSS蠕虫的自我复制和传播。
根据动态污点分析,在情况 (1)中由于没有携带污染数据,并且对用户的正常操作没有影响,因此在默认情况下可以放行,但是在 (2)中情况下由于提交的POST请求和用户访问的页面不违反同源策略,动态污点分析不会对此予以发出警报,因此这时就需要用户手动判别是否允许提交其对应的POST请求。
在用户进行登录、验证和上传数据等发送POST请求的情况下需要输入一定的数据信息,例如:用户名、密码、标题、上传或传输一些数据等,此时可以通过JavaScript判断是否有用户的输入行为等操作,从而判断此POST请求是否为用户的意愿行为。此外,由于 (1)和 (2)中的情况虽然不存在攻击情况但侵犯了用户的访问隐私,因此可根据用户的个人意愿予以放行或阻止。
由上述可以看出基于动态污点分析的技术使得用户的隐私信息和敏感数据不被XSS攻击获得,同时WXDS可以判断出2.2中 (1)中的情况,减少对用户使用操作的复杂度和难度,并且在防止XSS蠕虫方面,本文采用的是直接截断XSS蠕虫复制传播所必需的POST请求,而不是针对某一个或某一类蠕虫的特定行为特征,因此此种方法具有检测防范0-Day XSS蠕虫的能力。同时由于WXDS具有动态跟踪分析功能,因此对于防范未来的XSS蠕虫可能对用户产生危害如窃取用户信息、欺骗用户进行某种操作等方面具有一定的防御功能,对向未来XSS蠕虫的防范具有良好的可扩展性。
本次实验是在虚拟机VMware Workstation v9.0.1中进行,为了检验WXDS对XSS攻击的防范效果及其准确性,本文在互联网上收集了15种常见的XSS攻击脚本,并且自行制作了包含XSS漏洞访问各种敏感信息的网站来进行访问实验分析,同时为了测试误报率,本文通过对实验结果和网站代码进行人工分析,针对这些网站的检测率和误报率分析结果如表2所示,分析结果显示WXDS的误报率是比较低的。
虽然所采用的目标网站和XSS攻击脚本的样本均有所不同,但所采用的实验环境、统计计算方法和策略均是一般,因此,是可以对WXDS和文献[3]中的StopXSS进行检测率和误报率的相关对比的。由表2可知,显然WXDS的误报率低于文献[3]中设计的监测工具StopXSS的0.32的误报率。
表2 XSS的检测率和误报率
为了测试在浏览器中安装WXDS是否会影响用户浏览网站的体验效果,本文以用户比较熟悉的百度和淘宝网为例进行实验,分别打开百度和淘宝网,记录其打开所用的时间,采用十次测试汇总计算,实验结果如图4所示。由图4可知在安装WXDS和未安装WXDS的情况下打开网站页面的速度相差无几,即在安装WXDS的情况下并不会对用户的正常上网的访问速度造成重大影响。
对蠕虫的防范,本文在自制的Web应用程序中建立了两个用户Jack和Mary,基本配置如图5所示,其中Jack为攻击者,他在自己的主页中的“个人资料”中注入了经过修改的Samy XSS蠕虫修改代码并成功保存,当Mary使用安装有WXDS扩展的浏览器在访问Jack的页面信息的个人资料栏时弹出如图6所示的警示框。而此时Mary只是浏览页面,显然并不需要提交POST请求,因此可取消该此POST请求。
图4 访问百度和人人网的网速对比
图5 实验环境配置
通过对XSS攻击以及由其所衍生的XSS蠕虫的危害分析,本文提出了基于动态污点分析和HTTP请求数据包截获分析处理相结合的XSS防范方法,实验分析结果表明,该方法可以有效发现和防范XSS攻击和XSS蠕虫的侵犯。
但是本文所提出的方法系统还有一部分是基于手动的,这就要求用户对网络情况和HTTP请求等相关知识具有相当的了解才能做出准确的判断,因此,对使用用户提高了要求。另外对未来XSS蠕虫的发展和变异等方面还有待进一步的研究和防范。总之,实现自动化的检测防范是下一步所研究的工作重点,然后在此基础上再对XSS蠕虫的变种进行研究和防范。
[1]Wichers D.The top 10 most critical web application security risk[R].Belgium:The Open Web Application Security Project(OWASP),2010.
[2]Faghani M,Saidi H.Social networks’XSSworms[C]//International Conference on Computational science and Engieering.Vancouver,Canada:IEEE Computer Society,2009:1137-1141.
[3]WANG Xiali,ZHANG Yuqing.A behavior-based client defense scheme against XSS[J].Journal of Graduate University of Chinese Academy of Sciences,2011,28(5):668-675(in Chinese).[王夏莉,张玉清.一种基于行为的XSS客户端防范方法[J].中国科学院研究生院学报,2011,28(5):668-675.]
[4]Vogt P.Cross site scripting(XSS)attack prevention with dynamic data tainting on the client side[D].Vienna:Technical University of Vienna,2006.
[5]ZHANG Ming,SHIYong.Research on cross-site scripting protection with constraint analysis[J].Computer Engineering and Design,2013,34(4):1192-1196(in Chinese).[章明,施勇.基于约束分析的跨站脚本防御方法研究[J].计算机工程与设计,2013,34(4):1192-1196.]
[6]CHEN Jingfeng,WANG Yiding,ZHANG Yuqing,et al.Automatic generation of attack vectors for stored-XSS[J].Journal of Graduate University of Chinese Academy of Sciences,2012,29(6):815-820(in Chinese).[陈景峰,王一丁,张玉清,等.存储型XSS攻击向量自动化生成技术 [J].中国科学院研究生院学报,2012,29(6):815-820.]
[7]Fogie S,Hansen R,Rager A,et al.XSS attacks:Cross site scripting exploits and defense[M].New York:SyngressMedia,2007.
[8]Sun F,Xu L,Su Z.Client-side detection of XSSworms bymonitoring payload propagation[C]//Proceeding of the 14th European Conference on Research in Computer Security.Saint-Malo,France:ACM,2009:539-554.
[9]LU Kaikui.The research and realizetion of dynamic taint analysis based security attack detection technology[D].Chengdu:University of Electronoc Science and Technology of China,2010(in Chinese).[陆开奎.基于动态污点分析的漏洞攻击检测技术研究与实现[D].成都:电子科技大学,2013.]
[10]QIN Ying.Research and implementation of behavior-based crosssite scripting attack detection technique[D].Xi'an:Xidian University,2010(in Chinese).[秦英.基于行为的跨站脚本攻击检测技术研究与实现[D].西安:西安电子科技大学,2010.]
[11]ZHOU Ling.Technology research of dynamic taint analysis based on information flow [D].Chengdu:University of Electronoc Science and Technology of China,2010(in Chinese).[周凌.基于信息流的动态污点分析技术研究[D].成都:电子科技大学,2010.]