Web应用常见注入式安全漏洞检测关键技术综述
2016-12-22赵文兵丁治明
王 丹, 赵文兵, 丁治明
( 北京工业大学计算机学院, 北京 100124)
Web应用常见注入式安全漏洞检测关键技术综述
王 丹, 赵文兵, 丁治明
( 北京工业大学计算机学院, 北京 100124)
针对各种动态Web技术的应用和发展加剧了Web应用注入式恶意攻击防范难度的问题,围绕Web应用典型的SQL注入和XSS注入漏洞,综述了近年来提出的、适用于Web应用注入式漏洞检测的研究进展. 介绍了Web应用常见的注入式安全漏洞的分类,总结了这类漏洞的成因,梳理了安全漏洞检测的复杂性;阐述了注入式安全漏洞检测的关键技术,包括漏洞注入点的分析和识别、符号执行和污点分析以及基于软件分析和测试模型的漏洞检测方法;最后给出了研究展望.
Web应用;注入式;漏洞检测
互联网技术迅猛发展,各行各业普遍采用Web应用系统,对其安全性的要求日益提高. 遗憾的是,目前,Web安全技术的发展仍落后于Web应用技术本身的发展,Web应用本身及其运行环境目前仍比较脆弱,其运行环境容易被伪造或修改,使得Web应用逐渐成为被恶意者攻击的对象,频繁遭到攻击. 常见的Web应用漏洞大致有注入式漏洞、信息泄露漏洞、请求伪造漏洞和权限控制漏洞等几种,其中注入式漏洞以其攻击者的主观恶意性位于安全威胁之首,它是指攻击者利用Web应用系统的用户输入和信息上传的动态特性,将一些恶意数据或代码上传到Web应用系统中运行,导致系统崩溃、篡改数据、信息泄露、伪造登录等[1-3].
然而,由于Web应用系统结构的复杂性、交互的动态性和数据的海量性,尤其是各种动态Web技术的不断出现[4-6],大大增加了Web应用注入式安全漏洞检测的复杂性,为该问题的研究提出了不小的挑战[7-9]. 首先,Web应用系统的规模不断扩大,动态性日趋增强,页面的生成更灵活,用户与Web应用的交互不断增强,Web页面中的接口类型越来越丰富[10-12],同时也为攻击者提供了更加丰富、隐匿的途径,进行注入式攻击. 同时,广泛使用的浏览器脚本和种类繁多的链接实现方式给攻击检测的过程设置了许多障碍. 其次,JavaScript语言的动态特性、Ajax技术的引入和普及更好地满足了用户对Web应用的实时性、交互性和响应性的需求,然而这种架构下Web应用程序的安全问题更加难以发现和检测,脚本语言的动态性和灵活性对安全漏洞的分析和检测提出了新的挑战. 同时,Web应用系统存在可攻击注入点众多、漏洞反应各异等系统差异的多样性,使Web应用注入式漏洞检测的有效实施增加了难度. 精准发现Web应用的注入式漏洞、降低误报和漏报、提高检测的自动化程度、扩大检测覆盖率,是目前Web应用设计开发、测试以及安全领域面临的紧迫问题.
1 Web应用常见注入式漏洞及分类
注入式漏洞攻击源于Web应用程序对外部用户输入的数据缺乏有效的验证和过滤[13],在未对外部输入数据进行有效验证的情况下,就对该类数据进行了可能存在安全敏感性的使用,从而引发安全问题并造成损失.
采用OWASP(Open Web Application Security Project)[14]描述,根据注入对象的不同,Web应用注入式漏洞包括:SQL(structure query language)注入、XSS(cross site scripting)注入、XML(extensible marked-up language)注入、XPATH注入等几种类型,本文围绕比较常见的SQL注入、XSS注入展开.
1.1 SQL注入漏洞攻击
SQL注入漏洞攻击是指通过数据库外部接口把恶意代码插入数据库操作语句中,以控制数据库甚至操作系统,是Web应用系统中较为常见并且危害较大的一种漏洞[15].
SQL注入漏洞的成因是由于开发人员缺乏Web安全方面的知识或者安全编程方面的经验,编写的代码不完善,常见问题有:1) 使用字符串联结的方式组合多条SQL指令,导致数据和控制结构使用同一传输通道;2) 应用程序连接数据库时使用的帐户权限过大;3) 未对用户输入进行彻底的验证和过滤;4) 数据库开放了权限过大的功能;等等.
SQL注入漏洞主要有[16]:1) GET型. URL链接中的参数可以被恶意扩展而成为注入漏洞. 2) POST型. 注入漏洞存在于用户与数据库产生交互的地方,诸如用户输入的对话框、搜索框等. 用户的输入中可能包含恶意代码,会作为SQL语句的一部分提交给后台处理. 3) Cookie注入型. 若服务器未对浏览器提交的数据进行处理和过滤,而将这些数据直接用于数据库交互,就可能产生Cookie型注入漏洞.
1.2 XSS攻击
XSS攻击同样产生于Web应用系统对用户的输入过滤不足. 攻击者利用网站漏洞,把恶意的HTML代码和客户端JavaScript脚本代码注入网页中,当用户浏览这些网页时,浏览器会执行其中的恶意代码,窃取用户Cookie,对用户进行会话劫持或钓鱼欺骗,使用户蒙受损失[16].
XSS漏洞产生的主要原因是JavaScript语言和Web浏览器的同源策略(same origin policy),即JavaScript语言允许Web服务器发送可执行代码给浏览器,这给Web应用带来了安全风险. XSS漏洞就是攻击者越过同源策略,运用JavaScript脚本控制浏览器,从而获得会话Cookie等,进行进一步攻击. XSS漏洞一般分为以下4类[17-19]:
1) 反射型XSS. 攻击者设计包含恶意代码的网址链接,通过一些手法诱使用户访问,一旦链接被打开,恶意代码即被执行. 由于其只能被点击触发执行1次,因此叫作反射型. 此类攻击通常隐匿于网页的搜索栏、登录入口等处,以窃取客户端Cookie或进行钓鱼欺诈.
2) 存储型XSS. 存储型XSS也称持久型XSS,攻击者提前将恶意代码上传或存储到服务器中,藏匿在评论、留言板、日志等交互处. 只要浏览器访问到包含这些恶意代码的页面,恶意代码就会被执行,无需用户点击特定的链接.
3) DOM型. XSS的文档对象模型(document object model,DOM)是W3C组织推荐的处理可扩展标志语言的标准编程接口,与浏览器、平台、语言无关. 可以把DOM看作JavaScript的输出页面,基于DOM的XSS也是出现在JavaScript代码中的漏洞,通过修改页面的DOM节点形成的. 它和反射型XSS、存储型XSS的区别在于:DOM型XSS代码并不需要服务器解析响应的直接参与,浏览器端的DOM解析即可触发XSS,攻击完全发生在客户端.
4) Flash型XSS. 许多Web应用大多引用Flash形式的动态内容,Flash文件可以执行Action Script脚本代码,而Action Script提供了许多接口与Java-Script脚本进行通信,所以Flash动态文件常常被利用为执行恶意代码的通道,进而实现跨站攻击.
2 常见Web应用注入式安全漏洞分析
Web应用程序所面临的注入式攻击的威胁主要源自程序对用户输入缺乏验证和过滤,导致恶意输入可作为数据库的内容被使用或者被作为脚本而执行,从而破坏网站的数据完整性. 广义地看,Web应用注入式安全漏洞的检测是个分类问题,即在Web应用中如何全面、准确、高效地区分正常输入与恶意输入,针对不同的攻击形式,遇到的分类问题又有不同的内涵.
2.1 SQL注入攻击剖析
1) 基于重言式的攻击. 利用插入重言式,使SQL语句的条件子句部分恒真,从而导致原限定条件失效. 比如,根据某个条件搜索后台数据库中相符记录时,若将条件子句改为重言式,则匹配条件失效,SQL查询会返回表中所有记录. 重言式攻击的简单有效使其常被使用,攻击者只需找到适当的条件子句注入点输入重言式即可. 攻击途径通常需要绕过认证机制.
2) 联合查询. 通过在SQL查询语句中输入形如“UNION 〈查询语句〉”的求并集子句,获取UNION引领的查询语句得到的查询结果. 联合查询通过额外插入“合法的”查询语句获得额外信息,在窃取特定信息方面与重言式攻击相比更胜一筹.
3) 多命令语句(piggybacked queries)攻击. 通过输入额外的可执行命令发动攻击. 相比联合查询攻击以“UNION”为命令语句之间的分隔符,多命令语句攻击形式更为多样,不局限于以“SELECT”为单一动词来构造SQL语句,故而攻击效果不只涉及数据查询结果的泄露,可能从数据定义、数据操纵、数据控制等层面全方位地实现任意攻击的目的.
4) 异常命令语句(malformed queries)攻击. 构造错误的 SQL 语句诱发系统返回出错信息,通过收集含有提示性内容的报错信息进行综合分析,从而获得系统的内部信息,比如推断数据库管理系统类型、数据的部分逻辑结构等. 与插入并执行命令语句直接实施攻击的方式相比,异常命令语句的攻击需要通过日志分析发现.
5) 推断(inference)攻击. 构造查询条件相互对立的SQL语句, 观察、收集系统在对立查询条件下的不同反应,从而获知系统内部信息. 典型的有时间推断攻击(timing attack),通过输入时间条件式的推断命令,观察后台数据库的反应延时情况,判定条件式的成立与否,进而推断系统内部信息. 推断攻击不产生出错信息,无需命令执行结果,攻击手段隐蔽.
6) 输入编码伪装(alternate encodings)攻击. SQL 注入经常需要使用特定的关键字或特殊字符,比如SQL 命令动词、分号、单引号等. 一些简单的防御机制通过过滤用户输入的这些特定字符来阻止注入. 输入编码伪装的SQL注入,利用十六进制、ASCII以及 Unicode 编码等方式,在保持相同语义的前提下,将攻击输入转化为截然不同的形式,成功欺骗只过滤非编码SQL关键字符的防御机制. 由于可以对Web应用进行不同层次的攻击,输入编码伪装攻击在某种意义上防不胜防[20].
7) 存储过程(leveraging stored procedures)攻击. 存储过程通过为系统提供额外的抽象层而增强数据库业务处理的规范性,并独立于具体的Web 应用逻辑,原本可以成为有效防御 SQL 注入的措施,但是存储过程的传递参数行为同样存在SQL 注入攻击可能性. 因此,仅仅使用存储过程并不能杜绝 SQL 注入攻击,Web应用的安全性取决于编程实现的方式以及对攻击防御的充分性.
2.2 XSS攻击剖析
2.2.1 同源策略
同源策略(same origin policy)是由Netscape提出的著名安全策略,所谓同源是指域名、协议、端口相同,要求动态内容只能读取或者修改与之同源的那些HTTP应答和Cookie,不能处理非同源的内容. 该策略目前被所有支持JavaScript 的浏览器采用,对脚本的资源访问做出限制. 即使在同一个域中,不同子域仍然会受限于同源策略.
为了对冲使用上的不便,同源策略允许同一个域中不同子域的页面间互相访问. 在这种违反同源策略的场景中,攻击者向一个页面成功注入了Java-Script代码,就能影响同域的其他任何一个页面.
并且,同源策略存在允许页面跨域应用Java-Script脚本文件和图片等元素的弱点,可能被攻击者利用GET方式传递参数,将攻击对象的隐私信息发送到指定链接,根据用户类型返回相应的Java-Script代码,实现跨域双向通信,成功进行XSS攻击. 攻击者可能在被攻击的页面中创建Form表单,以POST的方式提交数据,从而突破GET请求提交的数据量每次不能超过2 KB的限制. 对于提交Form表单后用户页面自动跳转到指定链接从而暴露XSS攻击的可能性,XSS攻击者往往事先载入隐藏的iframe,将Form 表单置入iframe中提交,以提高攻击的隐蔽性.
2014年10月,万维网联盟制定完成了面向Web应用的HTML5标准规范,针对HTML5的注入式攻击开始进入公众视野[21].
2.2.2 Cookie安全模型
从HTTP状态管理规范RFC2109起,为Cookie定义了类似于同源策略的安全策略,给Cookie配置安全属性以保护Cookie中存储的用户隐私信息,比如Domain、Path、Secure、Expires和HttpOnly等. 服务器定义为Cookie的主控制器,对Cookie进行读写操作. 但是Cookie安全策略建立在同源策略基础上,通过编写JavaScript脚本,Cookie的安全属性仍然可以被完全绕过,不能防范 Cookie的被盗. 比如在 HTML5中,跨iframe的DOM操作即可绕过path所设置的访问路径,实现跨路径读取Cookie.
Cookie大都包含用户的身份信息,在XSS攻击中,盗取目标用户的Cookie是主要目标. 安全属性HttpOnly设定只能在 HTTP 层面上传输 Cookie,客户端无法采用 JavaScript 的 document.cookie 读写该 Cookie,此举能够防范一部分XSS攻击. 然而,服务器端的响应可能仍然会使跨站脚本很容易地获取同域内的设定了HttpOnly属性的 Cookie.
为了提高用户对个人隐私性信息的控制权,W3C制定了关于Cookie的隐私保护标准P3P (platform for privacy preferences project)规范:浏览器在处理Cookie时,需要提示用户所访问的网站对隐私信息的处理标准. 若网站对用户信息的收集行为符合用户的预期,则二者自动缔结关于个人隐私信息的协定,此后用户可以随意访问该站点;否则,浏览器在用户决定首先修改自己的个人隐私策略之前,不允许用户自由浏览该网站. 网站和用户之间通过双向选择达成用户个人隐私保护的协定.
实际应用中,P3P策略也可能导致悖论情境:如果网站使用的P3P策略有效,浏览器将允许第三方的Web请求自动带上Cookie,从而升高XSS攻击的风险;若网站未设置P3P策略或者使用的P3P策略无效,第三方的Web请求将不会带有该网站的Cookie,从而在一个层面杜绝了XSS攻击的可能性.
2.2.3 Flash攻击策略剖析
Flash对多媒体的支持:因为可以读取用户本地文件,访问用户的摄像头和麦克风等本地设备,并支持在线视频流媒体等,使其超越JavaScript成为Web浏览器插件中最流行的一种. 在Flash辅助下的XSS攻击,不仅攻击更加隐蔽,而且能够实现许多JavaScript无法企及的功能. 比如,利用Socket类的套接字,创建连接至所有可达域的原始TCP套接字连接,进而伪造任意头部信息的HTTP请求,扫描从外部无法访问的内部网络的计算机和端口等. 使用XML和URL Loader这2类可以以用户的名义发送HTTP请求和浏览器的Cookie信息到所有可达域. 在某些Flash安全策略的设定下,即可轻易实现跨域通信,不受同源策略的限制.
Flash的安全策略并不为同源策略所限制,可以经过Flash的getURL()函数发送跨域的GET请求. 只要不同域上的安全策略准许Flash应用程序所在域之间进行通信,Flash即允许跨域通信. 针对该问题,Adobe公司特别定义了Flash的跨域策略:在域的根目录下建立名为crossdomain.xml的跨域通信策略文件,让用户定义允许与当前域通信的域. 不过如果用户对该文件配置失误,则会使Flash失去同源策略的保护,招致攻击.
3 Web应用注入式漏洞检测的关键技术
3.1 漏洞注入点的分析和识别
完整、准确、高效的漏洞注入点分析、发现和提取是增强Web应用系统注入式漏洞攻击检测能力、减少漏报误报的关键问题之一. 如何以Web应用系统中复杂、多类型的公共接口作为分析对象,充分利用Web应用系统具有较强的结构特征相关性的特点,从页面、事件、链接的内容和结构特征出发,研究Web应用系统注入点的分析和识别问题面临着一定的挑战. 常用的方法可以归结为以下几类.
3.1.1 基于网络爬虫的方法
文献[22]在Web页面的信息收集阶段,先静态分析找出可能的输入向量,并通过域或分组进行组织,再动态检测攻击后的反应而获得注入点的信息. 文献[23]提出了一种改进的爬虫技术,可以自动生成输入并填入应用表单,从而发现更多的注入点. 文献[24]提出了提高覆盖度的爬虫方法. 索引爬虫是获取所有的Web应用程序接口的一种常用手段,它利用链接索引全部Web应用系统页面,实现对Web信息的抓取. 然而这种方法针对海量数据的大型Web应用系统,检测效率低下,亦不能有效抓取动态Web内容. 文献[25] 对Web应用中隐藏页面的爬取问题进行了研究. 文献[26]提出的基于爬虫的自动化XSS漏洞检测工具,主要是以传统的静态网页爬虫爬取页面,通过获取目标站点的目录结构,对各个页面的源码进行解析,处理网页中的〈form〉标记,从中提取相应的属性以及〈form〉包含的全部子元素. 其中“method”属性和“action”属性分别规定了HTTP协议通信的方法和请求信息的URL,依据这些内容构造注入点列表,提交后分析服务器的响应数据,通过特征匹配来确定XSS注入漏洞. 文献[27]通过对客户端JavaScript脚本的解析,实现了对Ajax应用中页面的抓取. 由于过程烦琐,未能有效模拟脚本环境下的事件响应机制,抓取时仍然会遗漏一些页面. 文献[28]提出了对爬取的XSS漏洞自动修补的方法.
然而在Web 2.0环境下,Ajax通过异步方式向服务器发送请求,从服务器获取数据后动态修改Web页面内容的方式,使得上述方法爬取的页面内容远少于真正呈现的内容. 脚本大量应用于浏览器的客户端,现有方法无法对其内容和执行结果进行分析,也就无法全面检查页面中的信息和数据. 同时,目前大多数Web应用的爬虫使用穷尽的搜索技术,旨在实现完全覆盖Web应用的状态和功能空间. 然而,由于大多数Web应用拥有巨大的状态空间,无论宽度优先、深度优先还是随机搜索都会产生状态空间的爆炸而使传统爬虫的完全覆盖事实上失效.
3.1.2 非爬虫的方法
文献[29]提出了基于源代码分析的Web应用注入点查找方法,可比基于爬虫的爬行方式查找到更多的漏洞注入点. 文献[30]建立了一个针对Ajax程序的基于事件的探测系统,通过点击页面上的元素,建立状态转换的状态图. 文献[25]基于用户日志和会话数据识别与Web应用的用户输入数据有关的向量,然而数据不是很完备. 文献[31]通过逆向工程的手段获取客户端Ajax代码的状态,有助于发现Web应用中服务器端注入点,并更好地理解查询接口的复杂性和层次结构.
随着Web技术的发展,Web页面越来越复杂,注入点可能不仅存在于第一次Web请求所返回的页面中,还要用户触发事件才能生成,且外部注入数据对Web应用运行过程中数据流、控制流影响的多变性,使得人们很难完全准确地描述、精确地获取基于交互接口的注入点信息,尤其对隐藏接口的识别面临较大的困难. 因此,有时也会采用一些数学方法(比如模糊逻辑、威胁建模等)来评估潜在注入漏洞的风险[32-33].
3.2 基于软件分析技术的漏洞检测方法
3.2.1 基于静态分析的方法
静态分析技术通过对Web应用系统的源代码或者目标代码进行词法和语法分析及逻辑结构和数据处理过程分析,以期在开发阶段发现存在的安全隐患,主要包括基于语法分析的方法[15],神经网络机器学习和语义分析的方法[16,34-36],基于输入、输出特征数据检测的方法[18],基于字符串评价的方法[19,37],基于异常行为监控的方法[38]及JavaScript脚本分析[39]等.
3.2.2 基于动态分析的方法
动态分析的方法[40]包括控制流分析和数据流分析,观察执行过程中程序的运行状态、内存使用状况以及寄存器的值等动态属性以发现漏洞. 控制流分析通过设置断点实时跟踪目标程序的控制状态转换来检测函数调用的缺陷. 数据流分析通过构造边界数据尝试触发其潜在的漏洞.
3.2.3 静态分析和动态分析相结合的方法
该方法将静态代码检查与运行时的实时监控结合起来,充分利用静态分析和动态分析的优点[29,41],例如:文献[15]利用静态和动态SQL查询的对比对SQL注入攻击进行检测;文献[37]开发的ViewPoints通过自动抽取输入验证函数,采用字符串自动机对客户端和服务器进行冗余验证来发现两端检测的不一致性;文献[42]利用动静态结合分析的方法分析输入接口参数的净化过程,能够自动检测和修改净化函数和上下文的不一致性;文献[43]中脆弱性特征自动化生成使用字符串分析技术;文献[2]的上下文无关文法建模使用字符串分析方法,并通过追踪它来检测SQL注入漏洞;文献[1]设计了一个在运行时检查查询语句的语法结构,进行运行时动态监控;文献[44]提出一种基于模型检测不合法SQL语句的漏洞的静态分析与动态检测相结合的技术,使用静态分析方法建立各种不同的合法的数据库访问查询语句模型,动态阶段在SQL语句执行之前,建立拦截检查策略,检查它们是否违反静态阶段建立的模型,如果违反静态模型,即认为是SQL注入. 该检测的精确性依赖于静态分析阶段建立的查询模型,某些模型如果不准确,就有可能导致整个检测的失败.
综上所述,基于源码的高覆盖率和丰富程度是静态分析中安全检测全面性的保证,往往具有较高的误报率,能处理的程序类型非常有限. 同时,针对输入的检测是源码分析技术的盲区,造成无法发现程序输入和系统运行环境相关的安全缺陷. Web应用开发所采用的脚本语言固有的动态特性,使得静态分析技术无法保证测试的准确度和全面性. 目前,综合性分析工具有Fortify[45]、CodeSecure[46]、Rational Software Analyzer[47]等. 此外,专门应用于Web应用程序安全漏洞检测的静态工具有Pixy[48]等,能够对PHP源码中的XSS攻击和SQL注入进行有效检测,提供赋值序列和基于数据依赖的切片. 动态分析和监控的方法不会产生误报,精确度较高,但是检测覆盖率较低.
3.3 基于软件测试技术的漏洞检测方法
在发现漏洞注入点的位置之后,可以通过相关的测试技术对从该注入点进入到系统中的数据进行观察和相应处理来判断漏洞是否存在. 其中可以通过白盒测试来跟踪数据的流动和使用,通过黑盒测试观察服务器的反馈来获得该数据对系统产生的影响. 同时,测试用例必须全面反映注入攻击的手段和输入形式,以确定Web应用防御机制的充分性,精确定位注入安全漏洞.
3.3.1 基于白盒测试的方法
利用白盒测试分析Web应用系统源码的词法和语法,进行静态检测或动态检测,发现应用系统在开发和代码编写阶段存在的安全问题. 白盒测试以通过检测代码特征来发现其中的缺陷和问题为主要手段,而Web应用存在编程环境异构、多种数据库混合、业务逻辑复杂等特点,面对这些特点,白盒分析工具的检测能力非常有限,它对程序逻辑数据处理中出现的问题不能有效检测,对编程语言的类型也有一定的要求. 同时,检测能力受限于基于Web源代码产生的分析模型的精确性以及源代码的框架,可扩展性不足.
3.3.2 基于黑盒测试的方法
对于黑盒测试发现的漏洞,测试者不需要分析服务器或者客户端的源代码,也不需要了解数据库的结构,可以在外部提交测试用例后直接分析返回的结果以判断是否存在漏洞. 由于是直接对接口进行功能性测试,测试结果较为准确,可以辅助研究人员对Web应用系统的安全问题进行分析[22]. 渗透测试是另一种常用于Web安全的黑盒测试技术:分析Web应用系统中各个接口的特征,产生大量测试用例,利用接口将测试数据提交给应用系统,通过观察、收集系统处理请求后的响应,分析响应消息的内容来实现安全检测的目的. 但是,目前该方法由于缺乏有效的输入数据构造方法,因此,存在冗余输入,导致覆盖率低[24,49]. 文献[18]提出了有指导的测试用例产生技术,以满足测试用例的多样性. 它使用穷尽搜索技术,设计网络爬虫爬行Web应用程序,获得业务规则相关数据. 文献[5,7,12]亦对如何获取Web应用的接口问题进行了分析.
综上所述,Web应用漏洞测试的相关研究,大都集中于改进测试信息收集方法和反应分析方法以提高测试充分性和准确性,还有一些工作致力于评价渗透测试效果、分析各种Web应用安全漏洞检测工具、比较其性能等方面的问题[22,29]. 其他相关的研究关注测试数据的有效产生、测试接口的识别[12, 24]以及如何判定实际的输出是否与预期相符. 目前,在Web应用系统安全检测中常用的黑盒检测工具有IBM的AppScan[50]、HP的Weblnspect[51]、OWASP的开源项目WebScarab[52]等.
3.4 基于符号执行技术的漏洞方法
静态符号执行方法[53-54]是在不执行程序的前提下,用符号值表示变量的值,通过模拟程序执行来进行相关分析的技术,其优点就是理论上可以通过搜集执行过程中产生的约束给出程序执行到某处的全部可能输入值,通过模拟输入发现程序执行过程中的漏洞. 在符号执行过程中,遇到条件分支语句时,会产生新的状态分支,使得执行路径总数呈指数级增长,存在路径状态空间爆炸问题.
动态符号执行方法利用一组具体值启动程序,在目标程序执行过程中的条件语句分支处获取关于程序输入的符号约束条件,根据预定义的测试路径遍历规则,生成新的路径约束条件,使用约束求解器求解生成新的测试输入,使程序沿着可选择的程序分支执行. 目前,已有一些基于符号执行自动生成测试数据的研究成果和相应的产品,比如EXE[55]、KLEE[56]、JPF-SE[57]、S2E[58]等,但这些工具大都集中于处理传统的C程序. 其中,S2E利用选择符号执行技术和执行模型的一致性原理,利用自动化的多路径分析技术来检测二进制程序的脆弱性. 文献[22]利用符号执行技术检测PHP和Java语境中SQL注入漏洞、反射型和存储型的XSS漏洞. 文献[11]提出了用符号执行技术探测JavaScript的运行空间,自动发现针对客户端代码缺乏对输入数据的验证,存在运行空间爆炸的问题. 文献[15]使用符号执行技术分析Web程序,其优点是考虑了路径的可行性并产生较多的精确信息. 文献[49]通过动态符号执行发现客户端HTML表单输入的约束,然后使用这些约束产生输入值,对服务器端的输入进行验证,但是仅采用动态符号执行技术很难保证接口的全覆盖.
3.5 基于污点分析技术的漏洞检测方法
污点分析的核心思想是将来自于非信任源的数据标记为被污染的(tainted),通过对受污染数据的传播和使用过程追踪,根据各种安全策略监测污染数据的使用以发现安全漏洞,这是一种信息流分析技术,为跟踪数据的使用过程提供了有效的手段. 例如,污点分析技术将外部输入数据及其运算产生的新数据均标记为被污染,同时保证这些标记污染的数据不向外传播到可能导致安全威胁的区域. 一旦检测到被污染数据的跳转、调用以及作为数据移动的目的地址,这些操作都会被视为非法. TAJ[59-60]是针对Java语言编写的Web应用,利用动态污点分析检测漏洞的工具. 文献[61]应用动态污点分析技术,通过追踪、记录变量、寄存器和存储器的值,检测数据的非法使用,发现程序执行过程中数据污染的扩散,确定攻击路径以获取漏洞信息. 文献[40]采用修改PHP解释器的方法动态跟踪PHP程序中的污点数据. 文献[62]中符号化执行污点跟踪并根据污点信息变化输入,产生具体的攻击代码,自动生成针对PHP程序的SQL注入和XSS漏洞测试用例. 文献[63]通过插桩在二进制级别上跟踪信息流,利用Taint Structure数据结构记录污点的相关信息,从而在攻击重现和特征码提取方面获得了较高的准确度,然而该数据结构的引入同时也带来了更高的内存消耗和时间代价. 文献[13]设计的浏览器验证型漏洞测试工具使用外部的、手工开发的测试用例,通过有指导的动态污点渗透测试方法寻找客户端的JavaScript代码的注入式攻击. 文献[64]采用动态污点分析技术分析与程序错误有关的输入数据集合. 文献[65]提出了一种基于策略的分析方法验证客户端的输入验证是否与给定的策略相一致. 文献[66]设计的面向XSS的漏洞检测系统,采用动态污点分析技术跟踪Web浏览器中敏感信息的流动. 如果敏感信息被传递到第三方,则需要通过判断来决定是否将敏感信息传递给客户端.
有效的污点传播规则的建立、提高分析准确性、降低漏报率、扩大跟踪程序的覆盖率,这些要素决定了污点分析技术在Web漏洞检测中的收效.
3.6 基于模型的软件漏洞检测方法
构建软件漏洞模型,以模型规范或指导检测过程并改进检测效果,是一种常见的漏洞检测方法[67-69]. 文献[70] 将Web应用开发过程与渗透测试活动相结合,提出了模型驱动的渗透测试框架;文献[71] 对SQL注入攻击建模采用攻击树建模的方法;文献[72]采用图的网络进行漏洞检测;文献[50] 利用开发者提供的规范寻找Web应用的接口信息,以便有效识别输入数据的接口;文献[73]使用符号分析和模型检测的方法处理Web应用服务器端的代码,静态选择路径并进行模型转化,但未对程序分支进行有效验证;文献[74]通过动态分析并观察Web应用的反应,使用模型检测技术和符号执行技术推理得到Web应用的简单的行为规范,获得Web应用某种逻辑错误的类型.
总的来讲,基于模型的检测方法需构造抽象模型、逻辑匹配规则库,其验证完整可靠,但检验规模庞大,复杂度高,对大型Web程序面临着挑战[75-76].
4 结论
1) 如何进一步有效分析Web应用系统各种注入式漏洞静态特征描述和动态执行路径之间的内在联系和相互制约,妥善地处理各种复杂关系和约束条件,建立全面、快速地发现Web应用系统中的注入点发现机制,是一个Web应用注入式安全漏洞检测的重要研究方向.
2) 通过多种技术和模型的有效结合,建立常见的Web应用注入式漏洞分析、表示和检测相关模型,研究相关实现技术,探索自动化漏洞分析(包括详尽的漏洞模式的自动化构造,漏洞发现规则的自动化构造和漏洞分析自动化开展),提高测试用例输入规则生成和表达能力以及漏洞注入点发现能力,形成针对性强、自动化程度高的Web应用注入式漏洞检测系统,支撑Web应用软件漏洞检测的分析和检测问题的研究.
3) 在时间和资源条件有限的情况下,整合多种技术以缓解漏洞分析精度和资源消耗之间的矛盾,仍是Web应用系统中注入式漏洞分析和检测需要解决的技术难题之一.
[1] WASSERMANN S G. The essence of command injection attacks in Web applications[C]∥Proceedings of Conference of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. Charleston: ACM, 2006: 372-382.
[2] WASSERMANN S G, SU Z. Sound and precise analysis of Web applications for injection vulnerabilities[C]∥Conference on Programming Language Design and Implementation. San Diego: ACM, 2007: 2-41.
[3] JIAO A, NUNO N, MIGUE C, et al. Vulnerability discovery with attack injection [J]. IEEE Transactions on Software Engineering, 2010, 36(3): 357-370.
[4] CHEN X, ZHENG Z, YU Q, et al. Web service recommendation via exploiting location and QoS information[J]. Parallel & Distributed Systems IEEE Transactions on, 2014, 25(7): 1913-1924.
[5] SCHOLTE T, BALZAROI D, ROBERTSON W, et al. An empirical analysis of input validation mechanisms in Web applications and languages[C]∥Proceedings of the 27th Annual ACM Symposium on Applied Computing. Trento : ACM, 2012: 1419-1426.
[6] AKIROGA. Core characteristics of Web 2.0 services [EB/OL].[2016-05-12]. http: ∥www. akiroga. com/core-characteristics-of-web-20-services. html#.
[7] HALFOND W, ANAND S ORSO A. Precise interface identification to improve testing and analysis of Web applications[C]∥Proceedings of the 18th International Symposium on Software Testing and Analysis. Chicago: ACM, 2009: 285-296.
[8] THUMMALAPENTA S, LAKSHMI K V, SINHA S, et al. Guided test generation for Web applications [C]∥Proceedings of the International Conference on Software Engineering. San Francisco: IEEE, 2013: 162-171.
[9] BALDUZZI M, GIMENEZ C T, BALZAROTTI D, et al. Automated discovery of parameter pollution vulnerabilities in Web applications [C]∥Proceedings of Network and Distributed System Security Symposium. San Diego: ISOC, 2011: 1-10.
[10] ZHENG Q, WU Z, CHENG X, et al. Learning to crawl deep Web[J]. Information Systems, 2013, 38(6): 801-819.
[11] ARTZI S, DOLBY J, JENSEN S, et al. A framework for automated testing of JavaScript Web applications [C]∥Proceedings of International Conference on Software Engineering. Honolulu: IEEE, 2011: 571-580.
[12] VON DEURSEN M A, LENSELINK S. Crawling Ajax-based Web applications through dynamic analysis of user interface state changes[J]. ACM Transactions on the Web, 2012, 6(1): 3.
[13] PRATEEK S, STEVE H, PONGSIN P, et al. FLAX: systematic discovery of client-side validation vulnerabilities in rich Web applications [C]∥17th Annual Network and Distributed System Security Symposium. San Diego: ISOC, 2010: 1-17.
[14] Open Web Application Security Project. OWASP Top10-2013[R/OL]. [2016-03-03]. Maryland: OWASP, 2013. http:∥www. owasp. org. cn/owasp-project/download/OWASPTop102013V1. 2. pdf.
[15] BUEHRER G T, WEIDE B W, SIVILOTTI P A G. Using parse tree validation to prevent SQL injection attacks[C]∥Proceedings of the 5th International Workshop on Software Engineering and Middleware. Lisbon: ACM, 2005: 106-113.
[16] CIAMPA A, VISAGGIO C A, DIPENTA M. A heuristic-based approach for detecting SQL-injection vulnerabilities in Web applications[C]∥Proceedings of the 2010 ICSE Workshop on Software Engineering for Secure Systems. Cape Town: IEEE, 2010: 43-49.
[17] SALAS M I P, MARTINS E. Security testing methodology for vulnerabilities detection of XSS in Web services and WS-security[J]. Electronic Notes in Theoretical Computer Science, 2014, 302(302): 133-154.
[18] ISMAIL O, ETOH M, KADOBAYASHI Y, et al. A proposal and implementation of automatic detection/collection system for cross-site scripting vulnerability[C]∥Proceedings of the 18th International Conference on Advanced Information Networking and Applications. Fukuoka: IEEE, 2004: 145-151.
[19] BATES D, BARTHS A, JACKSON C. Regular expression considered harmful in client-side XSS filter [C]∥Proceedings of the 19th International World Wide Web Conference. Raleigh: W3C, 2010: 91-100.
[20] APPELT D, NGUYEN C D, BRIAND L C, et al. Automated testing for SQL injection vulnerabilities: an input mutation approach[C]∥Proceedings of the 2014 International Symposium on Software Testing and Analysis. Bay Area: ACM, 2014: 259-269.
[21] JIN X, HU X C, YING K L, et al. Code injection attacks on HTML5-based mobile apps: characterization, detection and mitigation[C]∥Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. Scottsdale: ACM, 2014: 66-77.
[22] HALFOND W G J, CHOUDHARY S R, ORSO A. Penetration testing with improved input vector identification [C]∥Proceedings of the 2nd International Conference on Software Testing, Verification and Validation. Piscataway: IEEE, 2009: 346-355.
[23] BOZDAG M E, VAN DEURSEN A. Crawling Ajax by inferring user interface state changes[C]∥Proceedings of the International Conference on Web Engineering. Yorktown Heights: IEEE, 2008: 122-134.
[24] MCALLISTER S, KIRDA E, KRUEGEL C. Leveraging user interactions for in-depth testing of Web applications [C]∥Proceedings of the 11th International Symposium on Recent Advances in Intrusion Detection. Cambridge: Springer, 2008: 191-210.
[25] RAGHAVAN S, GARCIA-MOLINA H. Crawling the hidden Web[C]∥Proceedings of the 2001 International Conference on Very Large DataBases. Roma: VLDB, 2001: 129-138.
[26] CHEN J M, WU C L. An automated vulnerability scanner for injection attack based on injection point[C]∥2010 International Computer Symposium. Tainan: IEEE, 2010: 113-118.
[27] VAN DEURSEN A, MESBAH A, NEDERLOF A. Crawl-based analysis of Web applications: prospects and challenges[J]. Science of Computer Programming, 2015, 97: 173-180.
[28] PARAMESHWARAN I, BUDIANTO E, SHINDE S, et al. Auto-patching DOM-based XSS at scale[C]∥Proceedings of the 10th Joint Meeting on Foundations of Software Engineering. Bergamo: ACM, 2015: 272-283.
[29] HALFOND W G J, CHOUDHARY S R, ORSO A. Improving penetration testing through static and dynamic analysis[C]∥Proceedings of the Second IEEE International Conference on Software Testing, Verification and Validation. West Sussex: John Wiley and Sons Ltd, 2011: 195-214.
[30] HAO J, MENDES E. Usage-based statistical testing of Web applications[C]∥Proceedings of the International Conference on Web Engineering. Como: Springer, 2006: 17-24.
[31] AMALFITANO D, FASOLINO A, TRAMONTANA P. Reverse engineering finite state machines from rich Internet applications[C]∥2008 15th Working Conference on Reverse Engineering. Antwerp: IEEE, 2008: 69-73.
[32] SHAHRIAR H, HADDAD H. Risk assessment of code injection vulnerabilities using fuzzy logic-based system[C]∥Proceedings of the 29th Annual ACM Symposium on Applied Computing. Gyeongju: ACM, 2014: 1164-1170.
[33] KAUR N, KAUR P. Mitigation of SQL injection attacks using threat modeling[J]. ACM SIGSOFT Software Engineering Notes, 2014, 39(6): 1-6.
[34] VISHNU B A, JEVITHA K P. Prediction of cross-site scripting attack using machine learning algorithms[C] ∥Proceedings of the 2014 International Conference on Interdisciplinary Advances in Applied Computing. Amritapuri: ACM, 2014: 1-5.
[35] SHEYKHKANLOO N M. Employing neural networks for the detection of SQL injection attack[C]∥Proceedings of the 7th International Conference on Security of Information and Networks. Glasgow: ACM, 2014: 318.
[36] SHEYKHKANLOO N M. SQL-IDS: evaluation of SQL attack detection and classification based on machine learning techniques[C]∥Proceedings of the 8th International Conference on Security of Information and Networks. Sochi: ACM, 2015: 258-266.
[37] ALKHALAF M, CHOUDHARY S R, FAZZINIY M, et al. ViewPoints: differential string analysis for discovering client and server-side input validation inconsistencies[C]∥International Symposium on Software Testing and Analysis. Minneapolis: ACM, 2012: 56-66.
[38] ZANERO S, CRISCIONE C. Masibty: an anomaly based intrusion prevention system for Web applications [C]∥Proceedings of Black Hat Europe. Amsterdam: Black Hat Briefings, 2009: 1-17.
[39] GUPTA S, GUPTA B B. PHP-sensor: a prototype method to discover workflow violation and XSS vulnerabilities in PHP Web applications[C]∥Proceedings of the 12th ACM International Conference on Computing Frontiers. Ischia: ACM, 2015: 1-8.
[40] LAM M S, MARTIN M, LIVSHITS B, et al. Securing Web applications with static and dynamic information flow tracking[C]∥Proceedings of the 2008 ACM SIGPLAN Symposium on Partial Evaluation and Semantics Based Program Manipulation. New York: ACM, 2008: 3-12.
[41] NGUYEN-TUONG A, GUARNIERI S, GREENE D, et al. Automatically hardening Web applications using precise tainting[C]∥Proceedings of the 20th IFIP International Information Security Conference. Chiba: Springer, 2005: 372-382.
[42] SAXENA P, MOLNAR D, LIVSHITS B. SCRIPTGARD: automatic context-sensitive sanitization for large-scale legacy Web applications[C]∥Proceedings of the 18th ACM Conference on Computer and Communications Security. Chicago: ACM, 2011: 601-614.
[43] SHANNON D, HAJRA S, LEE A, et al. Abstracting symbolic execution with string analysis[C]∥Proceedings of the Testing: Academic and Industrial Conference Practice and Research Techniques. Windsor: IEEE, 2007: 13-22.
[44] HALFOND W G, ORSO A. AMNESIA: analysis and monitoring for neutralizing SQL-injection attacks[C]∥International Conference on Automated Software Engineering. Long Beach: ACM, 2005: 174-183.
[45] 上海市软件评测中心有限公司. 关于Fortify [EB/OL]. [2016-05-13]. http: ∥www. itesting. cn/index. php?_m=mod_article&_a=article_content&article_id=126.
[46] 深圳市九州安域科技有限公司. CodeSecure代码安全检测[EB/OL]. [2016-05-13]. http: ∥www. mainway. net/chanpin/code_secure. html.
[47] Informer Technologies, Inc. Rational AppScan source edition[EB/OL]. [2016-05-13]. http: ∥softadvice. informer. com/Rational_Appscan_Source_Edition. html.
[48] JOVANOVIC N, KRUEGEL C, KIRDA E. Pixy: a static analysis tool for detecting Web application vulnerabilities[C]∥Proceedings of 2006 IEEE Symposium on Security and Privacy. Oakland: IEEE, 2006: 258-263.
[49] BISHT P, HINRICHS T, SKRUPSKY N, et al. NoTamper: automatic blackbox detection of parameter tampering opportunities in Web applications[C]∥Proceedings of the ACM Conference on Computer and Communications Security. Chicago: ACM, 2010: 607-618.
[50] MARTIN M, LAM M S. Automatic generation of XSS and SQL injection attacks with goal-directed model checking[C]∥Proceedings of the 17th Conference on Security Symposium. San Jose: USENIX Association, 2008: 31-43.
[51] Hewlett Packard Enterprise Development LP. WebInspect 动态应用安全测试[EB/OL]. [2016-05-13]. http: ∥www8. hp. com/cn/zh/software-solutions/asset/software-asset-viewer. html?asset=936485&module=1830243&docname=4AA1-5363ENW.
[52] OWASP. Category: OWASP WebScarab Project[EB/OL]. [2016-05-13]. https: ∥www. owasp. org/index. php/ Category: OWASP_WebScarab_Project.
[53] SEN K. DART: directed automated random testing[C]∥International Haifa Verification Conference on Hardware and Software: Verification and Testing. Israel: Springer-Verlag, 2009: 213-223.
[54] CADAR C, SEN K. Symbolic execution for software testing: three decades later[J]. ACM Communication, 2013, 56(2): 82-90.
[55] CADAR C, GANESH V, PAWLOWSKI P M, et al. EXE: automatically generating inputs of death[C]∥ACM 13th Conference on Computer and Communication Security. New York: ACM, 2006: 322-335.
[56] CADAR C, DUNBAR D, ENGLER D. KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs[C]∥8th USENIX Symposium on Operating Systems Design and Implementation. San Diego: USENIX Association, 2008: 209-224.
[57] ANAND S, PASAREANU C S, VISSER W. JPF-SE: a symbolic execution extension to Java pathfinder[C]∥Proceedings of the 13th International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer-Verlag, 2007: 134-138.
[58] CHIPOUNOV V, KUZNETSOV V, CANDEA G. S2E: a platform for in-vivo multi-path analysis of software systems[J]. ACM SIGARCH Computer Architecture News, 2011, 39(1): 265-278.
[59] 黄强, 曾庆凯. 基于信息流策略的污点传播分析及动态验证[J]. 软件学报, 2011, 22(9): 2036-2048. HUANG Q, ZENG Q K. Taint propagation analysis and dynamic verification with information flow policy[J]. Journal of Software, 2011, 22(9): 2036-2048. (in Chinese)
[60] TRIPP O, PISTOLA M, FINK S J, et al. TAJ: effective taint analysis of Web applications[C]∥Proceedings of the 2009 ACM SIGPLAN Conference on Programming Language Design and Implementation. New York: ACM, 2009: 87-97.
[62] NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[C]∥Proceedings of the Network and Distributed System Security Symposium. San Diego: ISOC, 2005: 720-724.
[63] CLAUSE J, ORSO A. Penumbra: automatically identifying failure-relevant inputs using dynamic tainting[C]∥Proceedings of Symposium on Software Testing and Analysis. Chicago: ACM, 2009: 19-23.
[64] ALKHALAF M, BULTAN T, GALLEGOS J L. Verifying client-side input validation functions using string analysis[C]∥Proceedings of the 2012 International Conference on Software Engineering. Zürich: IEEE, 2012: 947-957.
[65] VOGT P, NENTWICH F, JOVANOVICH N, et al. Cross-site scripting prevention with dynamic data tainting and static analysis[C]∥Proceedings of Network and Distributed System Security Symposium. San Diego: ISOC, 2007: 28-37.
[66] ARMANDO A, CARBONE O, COMPAGNA U, et al. Model-checking driven security testing of Web-based applications[C]∥Proceedings of the Third International Conference on Software Testing, Verification and Validation Workshops. Paris : IEEE, 2010: 361-370.
[67] GORANKO V. Logic in computer science: modelling and reasoning about systems[M]∥Logic in Computer Science: Modelling and Reasoning About Systems. Cambridge: Cambridge University Press, 2004: 117-120.
[68] 缪淮扣, 陈圣波, 曾红卫. 基于模型的Web 应用测试[J]. 计算机学报, 2011, 34(6): 1012-1028. MIAO H K, CHEN S B, ZENG H W. Model-based testing for Web application[J]. Chinese Journal of Computers, 2011, 34(6): 1012-1028. (in Chinese)
[69] XIONG P L, PEYTON L. A model-driven penetration test framework for Web applications[C]∥Proceedings of the 2010 Eighth Annual International Conference on Privacy Security and Trust. Ottawa: IEEE, 2010: 173-180.
[70] MARBACK A, DO H, HE K, et al. Security test generation using threat trees[C]∥Proceedings of the ICSE Workshop on Automation of Software Test. Vancouver: IEEE, 2009: 62-69.
[71] 刘强, 殷建平, 蔡志平, 等. 基于不确定图的网络漏洞分析方法[J]. 软件学报, 2011, 22(6): 1398-1412. LIU Q, YIN J P, CAI Z P, et al. Uncertain graph based method for network vulnerability analysis[J]. Journal of Software, 2011, 22(6): 1398-1412. (in Chinese)
[72] BULTAN T. Modeling interactions of Web software[C] ∥Proceedings of the 2nd International. Workshop on Automated Specification and Verification of Web Systems. Cyprus: IEEE, 2006: 45-52.
[73] FELMETSGER V, CAVEDON L, KRUEGEL C, et al. Toward automated detection of logic vulnerabilities in Web applications [C]∥Proceedings of the 19th USENIX Conference on Security. Washington, D C: USENIX Association, 2010: 143-160.
[74] BENJAMIN K, VON BOCHMANN G, JOURDAN G V, et al. Some modeling challenges when testing rich Internet applications for security [C]∥Proceedings of the 3rd International Conference on Software Testing, Verification and Validation Workshops. Paris: IEEE, 2010: 403-409.
[75] JOVANOVIC N, KRUEGEL C, KIRDA E. Static analysis for detecting taint-style vulnerabilities in Web applications[J]. Journal of Computer Security, 2010, 18(5): 861-907.
[76] HUANG J M, WANG H X, FUXMAN A, et al. Toward query centric Web modeling and crawling[C]∥Proceedings of 2011 Very Large Database. Seattle: VLDB, 2011: 37.
(责任编辑 梁 洁)
Review of Detection for Injection Vulnerability of Web Applications
WANG Dan, ZHAO Wenbing, DING Zhiming
(College of Computer Science, Beijing University of Technology, Beijing 100124, China)
To overcome the difficulties of prevention Web applications to be maliciously injected which are increased by all kinds of dynamic Web technologies applied, centered on SQL and XSS injection, the research progresses of Web application injection vulnerabilities detection in recent years were reviewed. Firstly, the classification and causes of the Web application injection security vulnerabilities were summarized; Then, the complexity of security vulnerabilities detection was analyzed; Thirdly, the key technologies of the existing detection approached, including analyzing and identifying the injection points, injection delectations by software analysis and testing, by symbolic execution, by taint analysis and models were elaborated; Finally, its future development direction was presented.
Web application; injection; vulnerability detection
2016- 02- 26
国家自然科学基金重大资助项目(91546111);北京市教育委员会资助项目(PXM2015_014204_500221)
王 丹(1969—), 女, 教授, 主要从事分布式、计算机软件、Web安全、可信软件方面的研究, E-mail:wangdan@bjut.edu.cn
TP 308
A
0254-0037(2016)12-1822-11
10.11936/bjutxb2016020026