◆钱铭铭 康锦涛 陈舟宁
(三江学院计算机科学与工程学院 江苏 210012)
一种基于XSS攻击防御的安全CDN研究
◆钱铭铭 康锦涛 陈舟宁
(三江学院计算机科学与工程学院 江苏 210012)
本文提出了一种安全CDN解决方案,主要针对XSS攻击进行防御,通过对现有的CDN系统进行改进,对流经CDN服务器的数据流量进行安全监测,将安全的评估方在 CDN服务器上,实时分析流量中存在的安全威胁,并通过云计算技术与态势感知技术将安全威胁与安全防御可视化,并对安全事件做出决策。
XSS攻击;XSS防御;CDN;安全CDN
互联网飞速发展在为人类带来种种便利的同时,也带来了诸多安全问题,近年来,网络安全形势不断严峻,国内外重大安全事件频频出现,为了保障网络安全、维护国家利益、推动信息化的发展,2014年2月27日,中央网络安全和信息化领导小组成立,习近平主席担任组长。随着国家网络安全战略的实施,人们对网络安全越来越重视,部分安全机构推出了各类安全解决方案,已经应用在网络安全的各个领域。
跨站脚本 (Cross-Site Scripting,XSS) 攻击是一种经常出现在应用程序中的计算机安全漏洞,是由于应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括客户端JavaScript脚本代码)注入到网页中,当其他用户浏览器访问这些网页时,就会执行其中的恶意代码,对受害者可能采取资料窃取、会话劫持、钓鱼欺骗等各种攻击。随着Html5技术的成熟,越来越多的网站和移动应用开始使用更加高级的前端技术,XSS攻击也在逐年升级。从2007年至今,在OWASP统计的所有网络安全威胁中,跨站脚本攻击无论是严重性还是普遍性都稳居前三的位置。
目前已有的解决方案有如下几类:
(1)服务器端防御
服务器通常是Web服务器,在服务器端对用户的连接请求进行分析过滤,对危险的标签与符号进行转义,从源头封堵XSS攻击,但大多数程序员没有安全知识,软件测试人员也仅仅根据标准化测试方法进行测试,在软件开发过程中并无安全人员参与,所以无法对Web程序进行整体评估,造成漏洞的产生。近年来,百度贴吧,腾讯邮箱,新浪微博等著名的互联网平台都爆出XSS漏洞,可见仅靠Web程序安全的做法无法达到显著的效果。
(2)客户端防御
2006年,E.Kirda等人首次提出了Noxes客户端防御解决方案0,它分析浏览过的页面中的超链接,阻止不可信的访问,防止敏感信息泄露的可能。目前大多数客户端防御通过浏览器对XSS请求进行过滤器,使恶意代码无法在浏览器中执行,其中Chrome、IE11等针对XSS过滤较为强大,但仍无法彻底防御人为XSS攻击,恶意脚本和普通脚本也没有明显的界限计算机系统难以分辨。
(3)专用安全设备防御
专用安全设备通常是网络应用防火墙 (Web Application Firewall,WAF),其中分为硬件防火墙与软件防火墙两个类别。硬件防火墙主要以绿盟、启明星辰等安全公司为产品代表,在网关处进行部署,对流量进行全面审查可以达到比较理想的效果,但此类产品价格一般较高,主要应用在大型网络企业,一般的中小型企业难以承受。软件防火墙,典型代表是安全狗(safedog),但是安全狗作为软件系统需要占用大量服务器本身硬件资源,用户流量越大系统资源占有率就越高,这对于中小企业的服务器压力较大,而且用户普遍反映安全狗误报率也较高,没有智能分析的能力,仅依靠规则进行匹配,虽然能解决部分攻击问题,但安全狗自身软件的安全风险也存在,所以也不是一个优秀的防御方案。
(4)安全CDN服务防御
安全CDN服务的发展取决于云计算技术的成熟,目前众多安全厂商推出了CDN服务,如:安全宝、加速乐、360网站卫士等,通过分布在各地的CDN服务器对流经网站的流量进行检测,对异常流量进行清洗,通过负载均衡技术,将请求会均衡地分配到附近的CDN服务器上使得单个服务器网络流量压力不大,可以实现网络访问的加速功能,但是传统CDN服务只负责存储、缓存和转发,其本身的运算资源难以发挥。
本文主要研究一种安全CDN解决方案,通过对现有的CDN系统进行改进,对流经CDN服务器的数据流量进行安全监测,将安全的评估放在CDN服务器上,实时分析流量中存在的安全威胁,并通过云计算技术与态势感知技术将安全威胁与安全防御可视化,并对安全事件做出决策。
2.1 系统总体结构
系统总体结构主要由 CDN服务器和云服务器构成,如图1所示:
图1 安全CDN解决方案图
根据系统整体解决方案设计了几个模块分别为:CDN服务器,可疑请求判断模块、反向代理模块;云服务器;态势感知模块;请求分析模块;请求过滤模块;日志模块。
CDN服务器,可疑请求判断模块、反向代理模块:主要对用户访问的请求进行判断,如果请求可疑则提交云服务器进行分析。拟使用NginxServer和Python语言实现,使用Lua与C语言模块为Nginx编写扩展,在反向代理中判断是否为可疑请求,将可疑请求发送至云服务器,根据云服务器反馈结果完成对应操作。
态势感知模块:运用网络态势感知技术将网络设备运行状况、网络行为以及用户行为进行整体分析,对能够引起网络态势发生变化的所有安全要素进行获取、理解、显示,将新型威胁行为进行提取,对安全威胁等级进行评估,构建新态势感知库。此操作主要对日志数据进行分析,对数据进行整体处理结合用户的行为进行判断,并将数据生成状态视图。
请求分析模块:主要负责安全威胁检测和安全威胁等级评定。此模块涉及到系统底层操作,拟采用C/C++语言开发,将请求报文中的GET/POST内容进行拆解、分析,检测出潜在的安全威胁,并评定威胁等级,将结果反馈给服务器,等待下一步处理。
请求过滤模块:根据请求分析模块进行结果分析,对危险的字段、操作行为进行过滤、转义等操作,将安全的结果输出,返回给服务器。
日志模块:将所有的威胁与分析结果进行存储。
2.2 系统工作流程
主要业务流程如图2:
图2 主要业务流程图
首先客户向CDN服务器发送HTTP请求,CDN服务器接受到请求后,将请求初步判断,筛选是否为可疑威胁(一些特殊字符组合、JavaScript函数等)提交云服务器进行分析,若不存在可疑威胁,则直接将请求使用反向代理方式转发给WEB服务器。
云服务器经过二次分析后,判断为无威胁则通告WEB服务器此内容放行,有威胁则要调用态势感知库进行深度分析,判定威胁等级,根据对不同的威胁做出不同的决策。如果经过分析后认为是入侵行为,立即通告CDN服务器终止此次访问连接;若判定为用户误操作行为,则将危险代码转义、替换后返回给CDN服务器,再由CDN服务器提交WEB服务器。
所有的操作均记录到日志系统,云服务器上的态势感知模块定期对日志系统进行评估,提取相关特征信息,将分析结果会存入态势感知数据库中,并对新型威胁设置相应等级以供下次请求决策,详细结果通过图表、分析报告等形式呈现。
(1)将云计算与传统的CDN服务融合,使之在网络攻击防御方面产生良好的效果。
开发人员为了防止XSS攻击,一般直接使用编程语言的替换函数将危险字符转义或过滤,但 Web服务器只是机械性的针对预定义的关键字进行替换,无法将攻击行为反馈给用户。而传统的WAF、安全CDN检测到潜在风险后则会直接丢弃该请求,可能影响正常用户的体验。本项目结合直接过滤与检测并丢弃两种技术的优点,先检测,后针对性进行过滤或转义,不影响正常用户行为,而攻击指令则被无效化。
(2)将用户的真实主机地址进行隐藏,用户、攻击者与云安全 CDN服务器构成一个环路,避免用户和攻击者直接碰面,更好的保护用户服务隐私。
用户访问一个域名时,DNS(Domain Name System)把域名解析成了CDN服务器的地址,CDN服务器去获取用户请求的网站的内容,并且检查该网站内容有没有存在威胁的因素。经过检查后,判断没有存在威胁再去向原服务器请求内容返还给用户。在这个过程中,有效地将用户的真实主机地址隐藏了起来,避免了用户与攻击者的直接接触,更好地保护用户服务隐私。
(3)提供可视化攻击日志
目前,已有CDN虽然也可以提供一定的可视化图表,但缺乏对威胁的分析与预警功能。云服务器作为CDN节点的中枢,同时负责维护可疑请求日志,利用态势感知技术,从海量日志数据中进行分析,对危险的请求进行过滤,感知新型威胁行为,利用云强大的数据处理能力将安全威胁用可视化的方式呈现给用户。
3.1 总体实现
图3 基于云的安全CDN架构图
本系统于传统CDN架构中加入云计算技术,为WEB安全提供了一种新的解决方案。用户向 CDN服务器发送请求后,CDN服务器初步判断请求是否含有可疑内容,提交给云服务器进行处理。在此架构中,CDN服务器只负责初步的判断,详细的分析策略则部署在云端,系统管理员可以在云服务器上定义安全策略,若使用传统的安全CDN体系架构,则需要向每台服务器分别下发安全策略。
OpenResty是基于Lua语言与Nginx的Web服务器。他支持Nginx的所有功能,并且支持使用Lua编写扩展模块。为实现本系统,采用OpenResty作为反向代理服务器,并通过Lua扩展调用可疑请求判断模块。为保证可疑请求判断模块、请求分析模块在大流量、高并发环境下的处理效率,代码完全使用C语言进行开发。日志记录模块采用Mysql数据库完成日志记录,日志记录主要包括用户请求链接、源IP、目的网站、请求时间、威胁等级、攻击向量、用户浏览器特征等内容。态势感知系统采用B/S架构设计使用了一系列的统计算法,攻击行为与攻击特征联系起来,并将结果输出为JSON,传输到浏览器端。浏览器解析JSON后生成对应图表,使用HTML5与CSS3实现数据可视化,使得用户可以无需安装任何客户端程序,直接在浏览器中获得直观的数据体验。
3.2 主要功能模块实现
(1)反向代理模块实现过程
反向代理需要对接收到的请求进行判断与分流,在请求进入服务器处理流程时,Nginx将访问控制权交给请求判断模块。配置文件如下:
http {
server {
listen 80;//配置反向代理监听端口
location / {
default_type text/html;//配置返回类型
access_by_lua_filerequest_judge.lua;//将页面访问控制权交给判断模块
proxy_passhttp://target-site.com/;//将请求传递给目标网站
}
}
当请求被传递到请求判断模块(request_judge.lua)后,请求判断模块会读取出请求中的url、源IP、请求体、请求参数等信息,并调用C语言编写的可疑请求判断模块对用户传入参数的威胁程度进行初步打分。分值范围为0-5,若大于0分,则将请求信息以JSON的方式传递给后端服务器进行判断,后端云服务器判断完成后会返回结果,并根据结果执行阻断或放行的操作。
(2)可疑请求判断模块实现过程
可疑请求判断模块每秒将处理大量数据,作为一个CPU-bound(计算密集型)的程序,如何提高效率是实现该模块的关键点。
针对检索效率问题,基于DFA(Deterministic Finite Automaton)理论的Trie树可以说是一种快速而又高效的解决方案。
在此给出trie树相关定义及原理:
Trie树是一种数字查找树,也是一种基于DFA理论的高效索引方式。在整个树结构中,每个节点对应一种DFA状态,每条从父节点指向子节点的边对应DFA的一个变化过程。
遍历过程从根节点开始,依据目标字符串中的字符,依次确定下一个状态的位置。如果在目标字符串中的字符用尽之前匹配到叶节点,则搜索成功并结束搜索;否则表示搜索失败。并且Trie树的搜索灵活性也很高,通过跳过目标字符串中的特定字符可以做到不受轻微的拼写错误影响,但考虑到安全问题,这个特性意义并不大。
关于Trie树使用的主要方法有创建字典树、插入节点元素、返回Trie中某一节点被添加的次数、对数字字典树按实际数值大小排序即广度优先搜索……
但是由于朴素Trie树结构稀疏,会造成服务器运算、存储资源的极大浪费。
本项目使用DAT(Double Array Trie)算法进行流量审查,在此对DAT的原理及其状态转移过程进行举例说明:
假设有一段用户输入:I'm a aa hack hacker
生成的DFA图如图4:
图4 生成的DFA图
上图经过简化,图中每个节点代表一个“状态”,每条边代表一个“变量”,从一个节点到下一个节点的转变称为“状态转移”。状态转移机制将传统的文本正则检索转变为对状态的操作,通过对状态的记录与处理,极大地提升了匹配效率与精准度,节省了服务器运算资源、存储空间,对类regex-DDOS攻击也有较好的缓解作用。
以下说明DAT的状态转变过程:
图5 DFA的状态转变过程图
如图5所示,在输入字符c从状态s到t的转变过程中,转变前的状态(s)被保存在check数组中,即check[t] = s,这就是DAT的状态转变过程。与Tripple-Array Trie相比,将base与next合并为base节省了空间,同时增强了算法局部性,提高了效率。
根据上述过程,可以得到如下伪代码:
t := base[s] + c;
if check[t] = s then
next state := t
else
fail
endif
check数组中保存的是某个状态(s)的前一个状态(t),base数组的index是DFA中的状态号,base[s]保存的是状态s寻找下一个状态时的offset,offset用于寻找后续的可用内存空间。在s状态下输入一个字符,根据base[s]处保存的offset和输入字符编码将状态转移到t。
当算法检测到危险关键字(如双引号,成对出现的尖括号,script关键字等)则对响应危险关键字进行风险评估打分,并返回结果给反向代理模块处理。
(3)请求分析模块实现过程
云服务器上运行着请求分析模块,负责判断请求是否为XSS。请求分析模块摈弃了基于规则的XSS防御方式,而是基于HTML语义对内容进行分析与判断,大大降低了误报率与漏报率。请求分析模块在发现HTML标签后,首先会对HTML语义进行分析,解析出HTML标签的标签名、属性名、属性值等。解析完成后,会对各个属性进行关联分析。例如在标签中出现了onload属性,该属性的值不为空,则为XSS。因为该属性会在页面载入完成后执行属性值中的代码。在完成判断分析后,将结果返回给CDN服务器。
系统完成后对该系统进行了实验,以某网站作为 CDN的源站。在参数中输入对攻击向量进行测试,检测该系统的误报率与漏报率。测试使用真实生产环境环境下记录的攻击向量,随机抽取1000条使用该系统进行测试,记录误报率与漏报率。并针对误报结果和漏报结果进行优化,结果如表1:
表1 漏报误报趋势表
在测试过程中,我们发现在生产环境数据中经常会遇到XML(扩展标记语言)形式的数据,而XML与HTML语法相近,导致了大量误报的产生。针对这个问题,对检测算法进行了优化,单独解析XML文档内容,并在解析后判断是否存在XSS,大大降低了误报率。
经过对规则与算法的数次优化,误报率与漏报率均降低到了10%以下。
本文以普通网站所有者对安全防御的需求为切入点,对这个问题的解决方案进行了探究。WEB应用防火墙与CDN技术都是较为成熟的技术,然而在探究的过程中,我们发现二者的结合并不是那么简单。安全+CDN解决了用户的核心痛点。我们采用CDN服务器和云服务器相结合。其中,CDN服务器主要针对用户访问的请求进行判断,将请求可疑提交至云服务器进行分析;云服务器则运用网络态势感知技术将网络设备运行状况、网络行为以及用户行为进行总体分析并采取相应的措施去处理问题。我们的安全CDN通过分布在各地的CDN服务器对流经CDN服务器的数据流量进行安全监测,将安全的评估放在 CDN服务器上,实时分析流量中存在的安全威胁,并通过云计算技术与态势感知技术将安全威胁与安全防御可视化,并对安全事件做出决策。同时用户不用担心网络访问的速度问题,因为我们安全 CDN通过负载均衡技术,将请求会均衡地分配到附近的 CDN服务器上,使得单个服务器网络流量压力不大,可以实现网络访问的加速功能。当然,这套系统的潜力不应止步于此:在未来本系统的研究方向可以融入机器学习,把本系统与机器学习相结合,对用户的请求行为进行建模,从而更好地实现安全防御。
[1]XSS跨站脚本攻击剖析与防御[J].邱永华.中国科技信息,2013.
[2]章明,施勇,薛质.基于约束分析的跨站脚本防御方法研究[J].计算机工程与设计,2013.
[3]李冬萌.Web前端安全问题的分析与防范研究[D].北京邮电大学,2014.
[4]何锐,李艳,刘红.基于CDN内容分发的研究与应用[J].通信技术,2011.
[5]王玮.CDN内容分发网络优化方法的研究[D].华中科技大学,2009.
[6]王晓尉.CDN网络中多链路负载均衡流量管理技术分析与研究[J].电脑知识与技术,2012.
[7]The top 10 most critical web application security risks.Wichers D.Journal of Women s Health,2010.
[8]Kirda E,Kruegel C,Vigna G,et al.Noxes:a client-side solution for mitigating cross-site scripting attacks[C]//Proceedings of the 2006 ACM symposium on Applied computing.ACM,2006.