一种基于JAVA的WEB动态安全漏洞检测方法转让专利

申请号 : CN201310631280.1

文献号 : CN103699480B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴卓群刘志乐范渊

申请人 : 杭州安恒信息技术有限公司

摘要 :

本发明涉及WEB应用安全测试,旨在提供一种基于JAVA的WEB动态安全漏洞检测方法。该种基于JAVA的WEB动态安全漏洞检测方法,对WEB应用系统进行安全漏洞检测,包括步骤:修改JAVA中间件、进行fuzzing测试和动态漏洞跟踪。本发明能快速地发现更多的WEB安全漏洞问题;能覆盖黑盒测试的安全漏洞范围,并发现更多的深层次WEB安全问题;能降低白盒测试中高成本的问题;能准确定位漏洞代码的具体位置;可以保证检测过程中更低的漏报率和误报率。

权利要求 :

1.一种基于JAVA的WEB动态安全漏洞检测方法,基于JAVA的WEB应用系统程序并非直接编译成机器码进行执行,而是编译成字节码,然后通过JAVA虚拟机运行程序,其特征在于,WEB应用系统程序采用JavaAgent启动或运行时进行代理,基于JAVA的WEB动态安全漏洞检测方法,对WEB应用系统进行安全漏洞检测包括以下步骤:步骤A:修改JAVA中间件:将Agent.jar包当做一个JavaAgent附加到WEB应用系统程序中,Agent.jar包是劫持和判断漏洞的关键数据包,Agent.jar代码中使用Javassist动态修改目标测试程序及中间件的字节码,使用java agent方式启动Agent.jar,使其能在程序运行后动态进行目标修改,而不是直接修改文件;Agent.jar的代码中包含了所有需要劫持的关键函数,关键函数是通过分析WEB中间件及java源码获得的函数;

步骤B:进行fuzzing测试,具体包括以下步骤:a)分别启动步骤A中修改过的JAVA中间件和一个进行代理fuzzing测试的代理工具,准备发送测试数据;b)将浏览器的代理设置到代理工具上,通过浏览器进行普通的功能测试,进行各个页面模块的普通访问;其中,普通的功能测试即指业务功能测试,对每个页面进行访问,用于确定是否能进行正常的操作;普通访问即指用户正常访问,包括正常的页面点击和功能操作;c)代理工具抓取到请求数据包后,生成预先设定的带有攻击测试向量POC的fuzzing数据,并发送到经过步骤A处理的JAVA中间件程序中,POC是指在漏洞测试中为能完成漏洞展现的数据包;

步骤C:动态漏洞跟踪,具体包括以下步骤:d)当步骤B中的fuzzing数据被JAVA中间件程序接收后,JAVA中间件程序发现请求中包含了攻击测试向量POC,Agent.jar包中的程序启动跟踪流程;e)Agent.jar包中的程序跟踪HTTP请求数据在关键函数中的流转,并确认fuzzing数据是否已到达任意一个关键的函数,如果已到达全部关键函数,结束处理,将请求释放,并在代理工具中记录跟踪信息;f)继续等待其他fuzzing测试,如果接收到新的fuzzing数据,则跳到步骤d。

2.根据权利要求1所述的一种基于JAVA的WEB动态安全漏洞检测方法,其特征在于,所述代理工具采用Proxy+Fuzzing工具,所述Proxy+Fuzzing工具在接收到代理请求后,原始请求正常代理,并生成测试POC发送到部署了web应用和Agent.jar的测试服务器。

3.根据权利要求1所述的一种基于JAVA的WEB动态安全漏洞检测方法,其特征在于,所述步骤C中,Agent.jar包中的程序记录关键流量的跟踪信息,触发相应漏洞的FUZZING规则,表明该功能流程存在缺陷,在代理工具中记录或输出威胁的相关日志。

4.根据权利要求1所述的一种基于JAVA的WEB动态安全漏洞检测方法,其特征在于,所述Agent.jar包在JAVA中间件的class首次加载时,实现对关键函数进行劫持:当发现需要劫持的代码后,动态修改字节码,并注入一段回调函数,当调用此被劫持的函数时,会进入到回调函数进行处理,处理完成后返回正常流程或者结束整个流程。

说明书 :

一种基于JAVA的WEB动态安全漏洞检测方法

技术领域

[0001] 本发明是关于WEB应用安全测试,特别涉及一种基于JAVA的WEB动态安全漏洞检测方法。

背景技术

[0002] 在WEB应用安全测试中,经常使用的检测方法通常为黑盒测试和白盒测试。但黑盒测试和白盒测试都有存在着不同的缺陷。
[0003] 黑盒测试只有采用穷举输入信息的测试方式,把所有可能的输入信息都作为测试情况时考虑,才能查出程序中所有存在的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的信息输入,而且还要对那些不合法但可能的存在的信息输入进行测试。这样看来,完全测试结束是不可能的,所以我们要进行有针对性的安全漏洞测试,通过制定测试案例指导测试的实施,保证软件的测试有组织、有步骤、以及有计划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。
[0004] 白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,测试人员清楚盒子内部的东西以及盒子里面物体或系统是如何运作的。“白盒”测试法全面了解程序内部的逻辑结构、对所有的逻辑路径进行测试。“白盒”测试法是穷举路径测试。在使用这一方案时,测试者必须检查程序或系统的内部结构,从检查程序或系统的逻辑结构着手,得出准确的测试数据。
[0005] 在安全测试中黑盒测试可以全局的测试可见的输入信息和输出信息,但黑盒测试无法关注到被测试程序或系统的具体内部逻辑、出现问题的代码位置、以及深层次的比较隐蔽的WEB安全漏洞。而白盒测试方法对于测试人员基本素质要求很高,在代码量巨大的情况下花费的测试成本非常高,并且可能无法清楚的了解所有的代码流情况。

发明内容

[0006] 本发明的主要目的在于克服现有技术中的不足,提供一种能够快速准确地发现深层次WEB应用安全漏洞的方法。为解决上述技术问题,本发明的解决方案是:
[0007] 提供一种基于JAVA的WEB动态安全漏洞检测方法,基于JAVA的WEB应用系统程序并非直接编译成机器码进行执行,而是编译成字节码,然后通过JAVA虚拟机运行程序,WEB应用系统程序采用JavaAgent启动或运行时进行代理,基于JAVA的WEB动态安全漏洞检测方法,对WEB应用系统进行安全漏洞检测包括以下步骤:
[0008] 步骤A:修改JAVA中间件:将Agent.jar包当做一个JavaAgent附加到WEB应用系统程序中,Agent.jar包是劫持和判断漏洞的关键数据包,Agent.jar代码中使用Javassist动态修改目标测试程序及中间件的字节码,使用java agent方式启动Agent.jar,使其能在程序运行后动态进行目标修改,而不是直接修改文件;Agent.jar的代码中包含了所有需要劫持的关键函数,关键函数是通过分析WEB中间件及java源码获得的函数(包括queryString、PrepareStatement、JspWriter等);
[0009] 步骤B:进行fuzzing测试,具体包括以下步骤:a)分别启动步骤A中修改过的JAVA中间件和一个进行代理fuzzing测试的代理工具,准备发送测试数据;b)将浏览器的代理设置到代理工具上,通过浏览器进行普通的功能测试,进行各个页面模块的普通访问;c)代理工具抓取到请求数据包后,生成预先设定的带有攻击测试向量POC的fuzzing数据,并发送到经过步骤A处理的JAVA中间件程序中,POC是指在漏洞测试中为能完成漏洞展现的数据包;
[0010] 步骤C:动态漏洞跟踪,具体包括以下步骤:d)当步骤B中的fuzzing数据被JAVA中间件程序接收后,JAVA中间件程序发现请求中包含了攻击测试向量POC,Agent.jar包中的程序启动跟踪流程;e)Agent.jar包中的程序跟踪HTTP请求数据在关键函数中的流转,并确认fuzzing数据是否已到达任意一个关键的函数,如果已到达全部关键函数,结束处理,将请求释放,并在代理工具中记录跟踪信息;f)继续等待其他fuzzing测试,如果接收到新的fuzzing数据,则跳到步骤d。
[0011] 作为进一步的改进,所述代理工具采用Proxy+Fuzzing工具,所述Proxy+Fuzzing工具在接收到代理请求后,原始请求正常代理,并生成测试POC发送到部署了web应用和Agent.jar的测试服务器。
[0012] 作为进一步的改进,所述步骤C中,Agent.jar包中的程序记录关键流量的跟踪信息,触发相应漏洞的FUZZING规则,表明该功能流程存在缺陷,在代理工具中记录或输出威胁的相关日志。
[0013] 作为进一步的改进,所述Agent.jar包在JAVA中间件的class首次加载时,实现对关键函数进行劫持:当发现需要劫持的代码后,动态修改字节码,并注入一段回调函数,当调用此被劫持的函数时,会进入到回调函数进行处理,处理完成后返回正常流程或者结束整个流程。
[0014] 与现有技术相比,本发明的有益效果是:
[0015] 1、能快速地发现更多的WEB安全漏洞问题;
[0016] 2、能覆盖黑盒测试的安全漏洞范围,并发现更多的深层次WEB安全问题;
[0017] 3、能降低白盒测试中高成本的问题;
[0018] 4、能准确定位漏洞代码的具体位置;
[0019] 5、可以保证检测过程中更低的漏报率和误报率。

附图说明

[0020] 图1为本发明的工作流程框图。
[0021] 图2为本发明的实施例图。

具体实施方式

[0022] 首先需要说明的是,本发明是计算机技术在信息安全技术领域的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。申请人认为,如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述软件功能模块包括但不限于:Agent.jar包、Proxy+Fuzzing工具等,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。
[0023] 下面结合附图与具体实施方式对本发明作进一步详细描述:
[0024] 目前,绝大部企业级的WEB应用系统都使用J2EE架构规范,作为首选的WEB应用系统技术架构。基于JAVA的WEB应用系统程序并非直接编译成机器码进行执行,而是编译成字节码,然后通过JAVA虚拟机运行程序,而字节码是可以通过一定的方法进行修改的。WEB应用系统程序采用JavaAgent启动或运行时进行代理。
[0025] 如图1、图2所示,基于JAVA的WEB动态安全漏洞检测方法,对WEB应用系统进行安全漏洞检测包括以下步骤:
[0026] 步骤A:修改JAVA中间件:将Agent.jar包当做一个JavaAgent附加到WEB应用系统程序中,Agent.jar包用于利用JavaAgent的方式,在JAVA中间件的class首次加载时,实现对关键函数进行劫持:当发现需要劫持的代码后,动态修改字节码,并注入一段回调函数,当调用此被劫持的函数时,会进入到回调函数进行处理,处理完成后返回正常流程或者结束整个流程,且不修改JAVA中间件本身的代码,当中间件版本变化时,如果函数不存在,将不会被拦截,所以在不同的中间件之间可以做到一个比较好的兼容性。
[0027] 步骤B:进行fuzzing测试,具体包括以下步骤:a)分别启动步骤A中修改过的JAVA中间件和一个进行代理fuzzing测试的代理工具,准备发送测试数据;b)将浏览器的代理设置到代理工具上,通过浏览器进行普通的功能测试,进行各个页面模块的普通访问;c)代理工具抓取到请求数据包后,生成预先设定的带有攻击测试向量POC的fuzzing数据,并发送到经过步骤A处理的JAVA中间件程序中,POC是指在漏洞测试中为能完成漏洞展现的数据包。
[0028] 这里的代理工具采用Proxy+Fuzzing工具,所述Proxy+Fuzzing工具在接收到代理请求后,原始请求正常代理,并生成测试POC发送到发送到部署了web应用和Agent.jar的测试服务器。采用代理的方式抓取URL,这样做有两个好处:1、测试软件在做业务测试时,会尽可能多地访问各个业务模块,这样就可以更多地发现需要检测的页面信息;2、在业务流程复杂的情况下,使用代理进行可以很方便地解决访问顺序的问题,可解决访问顺序异常导致的问题。这样就可以抓到更多的请求信息,并根据策略漏洞类型自定义测试向量。
[0029] 步骤C:动态漏洞跟踪,具体包括以下步骤:d)当步骤B中的fuzzing数据被JAVA中间件程序接收后,JAVA中间件程序发现请求中包含了攻击测试向量POC,Agent.jar包中的程序启动跟踪流程;e)Agent.jar包中的程序在关键函数中跟踪HTTP请求数据在关键函数中的流转,并确认fuzzing数据是否已到达任意一个关键的函数,如果已到达全部关键函数,结束处理,将请求释放,并在代理工具中记录跟踪信息;跟踪信息触发相应漏洞的FUZZING规则,表明该功能流程存在缺陷,在代理工具中记录或输出威胁的相关日志,这样就可快速地定位出现问题的位置和整个调用堆栈的使用情况;f)继续等待其他fuzzing测试,如果接收到新的fuzzing数据,则跳到步骤d。
[0030] 下面的实施例可以使本专业的专业技术人员更全面地理解本发明,但不以任何方式限制本发明。以下流程以SQL注入漏洞测试为例,展示了工作过程,实际工作时会需要劫持大量的关键函数,以完成各种漏洞的安全监测。
[0031] 1、修改中间件的启动函数增加JavaAgent的参数,使用我们定制的Agent.jar包;
[0032] 2、Java的Premain函数中增加transform的监视;
[0033] 3、在Transform中对所有加载的class进行检测;
[0034] 4、修 改 org/Apache/Catalina/Connector/Request class 的 字 节 码 对SetRequestedSessionId和Recycle两个函数进行劫持;
[0035] 5、修改com/mysql/jdbc/StatementImpl class的字节码对ExecuteQuery函数进行劫持;
[0036] 6、使用自己开发的Proxy+Fuzzing工具代理浏览器;
[0037] 7、浏览器正常访问各个页面;
[0038] 8、Proxy+Fuzzing工具接收到代理请求后,原始请求正常代理,生成大量SQL注入测试POC发送到测试服务器;
[0039] 9、测试服务器接收到正常请求后按正常流程处理;
[0040] 10、测试服务器接收到Fuzzing数据后,在SetReuquestedSessionId函数给测试请求生成一个Request Session用于全程跟踪数据流;
[0041] 11、目标页面存在SQL注入漏洞时,会再ExecuteQuery函数中出现测试POC的部分内容,在函数中截获到以后就可判断已经存在SQL注入漏洞;
[0042] 12、结束后在Recycle中将请求结束;
[0043] 13、由于已经劫持关键函数,所以可以在函数中直接跟踪到代码的调用堆栈,可以完全清楚整个漏洞的函数调用顺序。并定位整个漏洞在代码中的运行情况。
[0044] 最后,需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限于以上实施例,还可以有很多变形。本领域的普通技术人员能从本发明公开的内容中直接导出或联想到的所有变形,均应认为是本发明的保护范围。