2013年第O1期 ■doi:10 3969 ̄issn 1671—1122 2013 01 021 自动化W e b安全测试的 局限及手工测试方法 孙歆 ,韩嘉佳 ,唐秋杭 (1.浙江省电力公司电力科学研究院,浙江杭州310014;2.浙江省电力设计院,浙江杭州310012) 摘要:如今Web安全已受到企业的极大关注,市面上的自动化Web安全测试工具也层出不穷。由于 自动4 ̄-r-具在检测过程中存在漏报现象,故完全信任自动化工具的检测结果往往会造成测试不全面、严重漏 洞未检出等情况,给企业带来风险。文章探讨自动化Web安全测试工具漏报情况及其原理,并给出相关的 手工测试方案。 关键词:web安全;自动化web安全测试;NAX;Webservice;手工安全测试 中图分类号:TP393.08 文献标识码:A 文章编号:1671—1122(2013)O1—0079—03 Discussion on the Limits ofAutomated Web Security Testing Tools and Manual Testing Method SUN Xin ,HAN Jia-jia ,TANG Qiu—hang (1.ZJPEPCElectricPowerResearchInstitute,HangzhouZhejiang 310014,China," 2.Zh ̄iangElectricPowerDesignInstitute,HangzhouZh ̄iang310012,China) Abstract:Nowadays Web security has been a great concern.We can ind varifeties of automated Web security testing tools on the market.But automated tools may produce false negatives.If we fully trust the results of automated tools,it will cause an incomprehensive testing or serious vulnerabilities not detected which will bring isks rto the organization.This paper discusses the false negative phenomenon and it’S principles of automated Web securiy ttesting tools,and gives the method ofmanual testing. Key words:web securiy;automated web tsecuriy ttesting;AJAX;webservice;manual security testing 0引言 随着网银、网购、网游、微博等互联网应用越来越火爆,黑客利用SQL注入、文件包含、Webshell I ̄传、远程命令执行等 手段控制服务器、篡改网页、窃取数据,给企业造成重大损失。所以Web安全防护应从应用程序编码上去实现,对HTTP输入 输出数据进行严格验证和过滤,从根源上解决问题,不应单纯依赖外部的防护手段。安全测试是发现Web安全漏洞的有效手段, 从黑盒的角度发送安全测试向量,通过目标系统的返回数据判断系统是否存在安全问题。本文分析了几种自动化Web安全测试 工具的漏报情况,并给出相应的手工测试方案。 1自动化测试原理和局限 自动化Web安全测试技术已日趋成熟和稳定,相关的产品也很多,例如IBM Appscan、Acunetix we1)Vulnerability Scanner等等, 还有一些厂家推出了在线云安全测试服务。自动化测试的原理是利用网页爬虫算法遍历网站的URL资源,识别每个URL的交互数据, 对数据进行有针对性的变异并进行重放测试,根据返回结果判断安全问题。整个测试过程自动化程度较高,无需太多配置即可完成。 随着w幽2.0的兴起,AJAX、Webserviee等技术的广泛应用,如今的Web应用交互方式不再只通过URL进行交互,而是通 过多种方式,所交互的数据格式也不尽相同 。自动化工具可能无法适应这种交互方式,部分安全风险无法被检测到,导致漏报。 对于安全测试来说,漏洞的漏报将造成极大的安全隐患,下面重点讨论几种典型的漏报情况。 1.1 AJA× 当Web应用使用了AJAX技术,HTTP交互将利用XmlHttpRequest进行,使用Javascript触发,接受HTTP请求的脚本往往 ● 收稿时间:2012—09—03 作者简介:孙歆(1981-),男,浙江,工程师,硕士,主要研究方向:电力信息安全测评;韩嘉佳(1983一),女,浙江,工程师,本科,主要研究方向 电力信息安全管理;唐秋杭(1981一),女,浙江,工程师,硕士,主要研究方向:控制系统设计。 79 Il— — 2013年第01期 并未与任何URL进行链接,处于游离状态。传统的自动化工 进行安全测试。如果是自定义报文,只能通过经验人为识别 具爬虫无法抓取到这类请求,也就无法对这些交互进行测试。 字段了。 虽然不少自动化工具已做出针对f生的修改,支持AJAX交互方 正确识别报文中的数据格式,并提取报文中的交互数据, 式,但实际效果并不理想。 以便于后续的数据变异和Fuzzing测试。 1.2 WebService 2.3模糊测试 WebService为应用系统提供了一种松耦合跨平台的接口方 在确认了服务器端需要测试的目标和所提交的数据字段 式,为不同系统的数据交互提供了极大便利。WebService通 后,可对这些字段进行数据变异,有针对性的进行模糊测试。 常使用SOAP协议进行数据交互 ,SOAP实际上是对HTTP 这种模糊测试也被称为Intelligent fuzzing,即根据协议和漏洞 主体数据进行再次封装,本质还是基于HTTP协议的,仍然 原理有针对性的模糊测试。 无法避免SQL注入、文件包含等Web安全风险。 模糊测试的范围不仅应包括自动化测试难以抓取的请求, 1_3防护绕过 如AJAX请求,还应选取部分已经过自动化工具测试的请求, 不少企业已经意识到Web安全的重要性,对Web应 因为工具可能会对不完全加固的漏洞产生漏报。下面探讨几种 用的代码进行了一定程度的加固,但如果这种加固没有防 针对SQL注入、跨站脚本和上传文件的绕过技术。 护到位,仍然可能被攻击者绕过,比如PHP应用开启了 2.3.1 SQL注入防护绕过 magic—quote—gpc选项,认为如此可避免注入。但这种方式无 SQL注入防护一般会过滤单引号、空格等特殊字符,以及 法避免数字型注入,也无法防御PHP宽字节注入。另外大小 select、union、and、delete、chr、insert等SQL关键字。如果程 写混编、字符编码等方式均可能绕过防护程序。如果自动化 序只进行了简单的过滤而没有使用预编译处理SQL语句,仍有 工具没有考虑到足够多的情况,很可能无法检测出经过一定程 可能绕过防护机制。以下是部分SQL注入绕过的测试向量【41: 度加固的Web漏洞,出现漏报。 1)大小写混编绕过 如果在限制SQL关键字时只考虑了小写字符,可用大小 2手工测试方法 写混编绕过限制,如: 为保证安全测试的完整性和覆盖率,应将手工测试与自 id=l’uNioN sEleCT username,password FrOm admin__ 动化测试相结合,减少测试过程中的漏检情况。安全测试关 2)注释绕过,可以使用块注释符 术/绕过空格的限制,例如: 注的焦点是HTTP报文的交互以及输入输出的关系,手工测 id=1’/ /union/ /select/ /username/ /./ /password/ /from/ / admin———— 试作为自动化测试的补充,应关注自动化测试可能会疏漏的测 在Mysql中甚至可通过块注释符绕过SQL关键字的过滤, 试点。手工安全测试的过程为:通过代理工具获取所有请求, 如下列测试向量依然有效: 识别请求中可能存在问题的输入数据,对这些数据进行有针 id=l’un/* lion/**/sel/ */ect/ /username/ /,/ /password/ /fr/ /ore/ / 对性的模糊测试并观测返回结果,判断安全问题。 admin一一 2.1获取完整的交互过程 3)URL编码绕过,URL编码通常可被用于绕过防护设备, 对于广泛使用AJAX的Web应用,在自动化扫描的同 由于WAF等设备位于Web服务器之前,如果WAF单纯匹配 时,应重点针对较为隐蔽的HTTP请求进行手工测试,避免 关键而没有考虑URL的编解码,则可能会被绕过。有些应用 自动化工具遗漏某些重要的交互过程。目前较为成熟的Web 程序会在服务端对数据进行一次URL解码,但其防护程序没 安全扫描工具都提供代理扫描或者被动扫描方式,即是通 有考虑到这点,导致无法拦截两次URL编码的攻击,而服务 过测试人员手工触发请求后再通过工具进行检测。也可使用 器端通过解码后仍可正常运行。 Webscarab、Burp suite等代理攻击工具抓包后进行数据包变 4)十六进制编码绕过,利用SQLServer的动态查询功能 异重放测试 】。获取完整的HTTP交互过程是保证测试完整 将SQL语句转化为十六进制,绕过SQL关键字的限制,例如: 性的前提条件。 id=l’;declare@a varchar(100)select@a=0x73656C65637420757365726E 616D652c706l7373776F72642066726F6D2O61646D696E exec(@a);一一 2.2正确识别交互数据 当HTTP请求报文中包含SOAP、AMF等应用协议 5)=<>等比较符号限制绕过,当=<>等比较符号被过 时,需要通过代理工具对这些请求进行手工测试。如针对 滤时,可利用LIKE、IN、BETWEEN等运算符替代。例如: id=1’union select username,password from admin where username LIKE’ 1.2节中的SOAP报文,可以将Postld区段的数据修改为 admin’一一 <PostId>33012234’and’1’=’l</PostId>并重放,进行SQL注 6)关键字过滤绕过,有些过滤器检测到有害的字符串时, 入的测试。另外,Burp suite支持AMF协议,可对FLEX应用 会直接将该字符串过滤后继续执行。构造如下语句,通过过滤器 _lI 80 2013年第O1期 后会删除SQL关键字,但留下的字符可组成可执行的SQL语句。 id=l”ununionion seselectlect username,password frfromom admin-一 Content—type为image/gif,但上传文件后缀为jsp,绕过文件类 型判断程序上传isp脚本。 3)字符截断绕过。字符截断 是在上传测试中经常 用到的文件类型验证绕过技术。当上传请求中包含上传目录 时,例如path=upload—file,可将其修改为path=upload—file/1. 2.3.2 XSS防护绕过 跨站脚本(XSS)测试向量极多且千变万化,使得完全利 用黑名单进行防护变得非常困难,通过一定的技术处理总能 找到绕过防护的方法,以下列举部分XSS测试向量 】。 1)尖括号限制绕过。如果程序过滤了尖括号,可选择从标 签属性进行XSS代码注入,无需使用标签符<>。例如<input id=”name”va]ne=”¥value”>标签中,¥value为输入变量,则可 将value设为”style=”xss:expression(eval(alert(/xss伽,形成:<input value=””style=”xss:expression(eval(alert(/xss/)))”>的payload。 2)ASCII编码绕过。 alert(String.fr0mcharC0de(88,83,83)) jsp%00,%00表示空字符,即十六进制的OxO0。由于最终的文 件路径是path和文件名拼接而成,而%00将会截断字符串, 所以最终的文件路径必定是upload—file/1.jsp。另外可直接对 文件名字段进行截断,例如test.asp%001.JPg,此时Web容器 识别为 pg格式的文件,而保存时文件名截断为test.asp。 3测试与比较结果 为比较两者的测试效果,我们分别利用自动化工具和 手工对相同的Web应用进行安全测试,自动化测试利用 3)空格限制绕过。当空格被限制时,可利用tab制表符 替代空格,如下: <img sre=# onerror=alert(/xss/)> AppScan8.0并采用默认扫描策略,手工策略采用Burp Suite1.4 进行抓包和手工分析,以下是两种测试方式的比较结果。 表1自动化测试与手工测试效果比较 方式 自动化测试 SQL盲注漏洞(3) 内网IP地址泄露(1】) 3个盲注漏洞皆为误报;未检出 AJAX请求的SQL注入漏洞 l5分钟 手工测试 SQL注入漏洞(1) 内网IP地址泄露(2) 检出AJAX请求的SQL注 入漏洞 2小时 如果是在标签名和属性之间的空格,也可通过斜杠代替: <SCRIPT/SRC=”http://xss/xss.js”></SCRIPT> 4)Script关键字限制绕过。如果程序限制了Script关键 字,可通过其他标签注入测试向量,例如: <body 0nl0ad=alert XSS/1> 结果 评价 耗时 <img sre=#onerror=alert(/xss/)> <div style=”width:e pressi0n(alert xss,));”> 由表1所述,自动化测试效率高速度快,但存在误报和 漏报的风险以及测试精度和深度上存在局限性,在一定程度 上可通过手工测试弥补。 另外,可通过制表符分隔关键字达到绕过目的,例如: <img src=#onerror=javaser ipt:alert(/xss/)/ 2.3.3上传防护绕过 由于上传功能的安全测试不确定因素较多,自动化工具对 上传漏洞往往支持不够。所以手工检测上传漏洞成为安全测 试的重点。如果防护不当极易直接上传Webshell导致服务器 沦陷。通常上传程序会验证上传文件的类型、大小甚至是内容, 防止有害文件上传至服务器,以下是几种绕过上传防护的方法: 1)利用Web服务器解析漏洞。解析漏洞是指由于对脚本 解析规则存在一定的BUG导致Web容器可解析非脚本文件。 4结束语 在Web安全测试中,自动化工具本身存在一定的局限性, 只能作为提高测试效率的测试手段,并不能完全替代手工测试。 在自动化测试的基础上进行有针对l生的手工测试和结果验证,能 在提高测试效率的同时提高测试准确性和完整性,较好的达到 漏洞发掘效果。所以加强手工测试能力,建立一套高效的手工测 试向量,对于wleh安全测试人员来说非常重要。帮(责编张岩) 参考文献: [1]宣以广. ax应用安全研究刚.信息安全与通信保密,2012,(O1): 80-82. 因此攻击者可上传其他类型的文件执行脚本,从而绕过程序 对上传文件类型的限制。常见的解析漏洞有以下三种『6】:(1) IIS6允许解析目录名为XXX.asp下的任意文件,即往XXX.asp目 录下上传任意类型的文件,如test.JPg,该文件即可被当做asp 脚本执行。(2)IIS6允许解析文件名为XXX.asp;.jpg形式的文件, 例如test.asp;1.JPg,其后缀为jPg但扔能被IIS解析执行。(3) [2]Joel Scambray,Vincent Li.黑客大曝光Web应用程序安全[M】.北 京:机械工业出版社,2011. 【3】Billy Hoffman,Bryan Sullivan.AJAX安全技术[M].北京:电子工业 出版社.2009. IIS7/IIS7.5/Nginx在解析php脚本时存在漏洞,将任意文件添 加/xxx.php后进行访问,即可执行该脚本。例如存在test.JPg, 以test.jpg/xxx.php进行访问,即可按php脚本进行解析执行。 [4J JustinClarke.SQL注入攻击与防御 .北京:清华大学出版社, 2010. [5]冯锴,林柏钢.跨站脚本漏洞的白盒测试框架的设计与实现卟 计算机工程与科学,2011,33(1o):46—47 [6]吴翰清.白帽子讲web安全[MJ.北京:电子工业出版社,2012. 2)MIME类型检测绕过。不少Web应用会根据上传文 件的MIME类型即报文中的Content—type字段,确定文件类 【7]朱锡华,刘月铧,侯伟.暗战亮剑:黑客渗透与防御全程实录【M】. 北京:人民邮电出版社,2010. 型。但该字段是可以任意修改的,可通过代理工具抓包后修改 81 Il_ _~