首页> 中国专利> 一种基于JAVA的WEB动态安全漏洞检测方法

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

摘要

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

著录项

  • 公开/公告号CN103699480A

    专利类型发明专利

  • 公开/公告日2014-04-02

    原文格式PDF

  • 申请/专利权人 杭州安恒信息技术有限公司;

    申请/专利号CN201310631280.1

  • 发明设计人 吴卓群;刘志乐;范渊;

    申请日2013-11-29

  • 分类号G06F11/36(20060101);

  • 代理机构33212 杭州中成专利事务所有限公司;

  • 代理人周世骏

  • 地址 310051 浙江省杭州市滨江区通和路浙江中财大厦15层

  • 入库时间 2024-02-19 22:44:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-01

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/36 变更前: 变更后: 申请日:20131129

    专利权人的姓名或者名称、地址的变更

  • 2018-04-03

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/36 变更前: 变更后: 申请日:20131129

    专利权人的姓名或者名称、地址的变更

  • 2016-03-23

    授权

    授权

  • 2014-04-30

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20131129

    实质审查的生效

  • 2014-04-02

    公开

    公开

说明书

技术领域

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

背景技术

在WEB应用安全测试中,经常使用的检测方法通常为黑盒测试和白盒测试。但黑盒 测试和白盒测试都有存在着不同的缺陷。

黑盒测试只有采用穷举输入信息的测试方式,把所有可能的输入信息都作为测试 情况时考虑,才能查出程序中所有存在的错误。实际上测试情况有无穷多个,人们不 仅要测试所有合法的信息输入,而且还要对那些不合法但可能的存在的信息输入进行 测试。这样看来,完全测试结束是不可能的,所以我们要进行有针对性的安全漏洞测 试,通过制定测试案例指导测试的实施,保证软件的测试有组织、有步骤、以及有计 划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就 是将测试行为具体量化的方法之一。

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测 试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的, 测试人员清楚盒子内部的东西以及盒子里面物体或系统是如何运作的。“白盒”测试 法全面了解程序内部的逻辑结构、对所有的逻辑路径进行测试。“白盒”测试法是穷 举路径测试。在使用这一方案时,测试者必须检查程序或系统的内部结构,从检查程 序或系统的逻辑结构着手,得出准确的测试数据。

在安全测试中黑盒测试可以全局的测试可见的输入信息和输出信息,但黑盒测试无 法关注到被测试程序或系统的具体内部逻辑、出现问题的代码位置、以及深层次的比 较隐蔽的WEB安全漏洞。而白盒测试方法对于测试人员基本素质要求很高,在代码量巨 大的情况下花费的测试成本非常高,并且可能无法清楚的了解所有的代码流情况。

发明内容

本发明的主要目的在于克服现有技术中的不足,提供一种能够快速准确地发现深层 次WEB应用安全漏洞的方法。为解决上述技术问题,本发明的解决方案是:

提供一种基于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源码获得的函数(包括queryString、PrepareStatement、JspWriter等);

步骤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。

作为进一步的改进,所述代理工具采用Proxy+Fuzzing工具,所述Proxy+Fuzzing 工具在接收到代理请求后,原始请求正常代理,并生成测试POC发送到部署了web应用 和Agent,jar的测试服务器。

作为进一步的改进,所述步骤C中,Agent.jar包中的程序记录关键流量的跟踪信 息,触发相应漏洞的FUZZING规则,表明该功能流程存在缺陷,在代理工具中记录或输 出威胁的相关日志。

作为进一步的改进,所述Agent.jar包在JAVA中间件的class首次加载时,实现 对关键函数进行劫持:当发现需要劫持的代码后,动态修改字节码,并注入一段回调函 数,当调用此被劫持的函数时,会进入到回调函数进行处理,处理完成后返回正常流程 或者结束整个流程。

与现有技术相比,本发明的有益效果是:

1、能快速地发现更多的WEB安全漏洞问题;

2、能覆盖黑盒测试的安全漏洞范围,并发现更多的深层次WEB安全问题;

3、能降低白盒测试中高成本的问题;

4、能准确定位漏洞代码的具体位置;

5、可以保证检测过程中更低的漏报率和误报率。

附图说明

图1为本发明的工作流程框图。

图2为本发明的实施例图。

具体实施方式

首先需要说明的是,本发明是计算机技术在信息安全技术领域的一种应用。在本发 明的实现过程中,会涉及到多个软件功能模块的应用。申请人认为,如在仔细阅读申请 文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本 领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述软件功能模块包括 但不限于:Agent.jar包、Proxy+Fuzzing工具等,凡本发明申请文件提及的均属此范 畴,申请人不再一一列举。

下面结合附图与具体实施方式对本发明作进一步详细描述:

目前,绝大部企业级的WEB应用系统都使用J2EE架构规范,作为首选的WEB应用 系统技术架构。基于JAVA的WEB应用系统程序并非直接编译成机器码进行执行,而是 编译成字节码,然后通过JAVA虚拟机运行程序,而字节码是可以通过一定的方法进行 修改的。WEB应用系统程序采用JavaAgent启动或运行时进行代理。

如图1、图2所示,基于JAVA的WEB动态安全漏洞检测方法,对WEB应用系统进行 安全漏洞检测包括以下步骤:

步骤A:修改JAVA中间件:将Agent.jar包当做一个JavaAgent附加到WEB应用系 统程序中,Agent.jar包用于利用JavaAgent的方式,在JAVA中间件的class首次加载 时,实现对关键函数进行劫持:当发现需要劫持的代码后,动态修改字节码,并注入一 段回调函数,当调用此被劫持的函数时,会进入到回调函数进行处理,处理完成后返回 正常流程或者结束整个流程,且不修改JAVA中间件本身的代码,当中间件版本变化时, 如果函数不存在,将不会被拦截,所以在不同的中间件之间可以做到一个比较好的兼 容性。

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

这里的代理工具采用Proxy+Fuzzing工具,所述Proxy+Fuzzing工具在接收到代理 请求后,原始请求正常代理,并生成测试POC发送到发送到部署了web应用和 Agent,jar的测试服务器。采用代理的方式抓取URL,这样做有两个好处:1、测试软件 在做业务测试时,会尽可能多地访问各个业务模块,这样就可以更多地发现需要检测的 页面信息;2、在业务流程复杂的情况下,使用代理进行可以很方便地解决访问顺序的 问题,可解决访问顺序异常导致的问题。这样就可以抓到更多的请求信息,并根据策略 漏洞类型自定义测试向量。

步骤C:动态漏洞跟踪,具体包括以下步骤:d)当步骤B中的fuzzing数据被JAVA 中间件程序接收后,JAVA中间件程序发现请求中包含了攻击测试向量POC,Agent.jar 包中的程序启动跟踪流程;e)Agent.jar包中的程序在关键函数中跟踪HTTP请求数据 在关键函数中的流转,并确认fuzzing数据是否已到达任意一个关键的函数,如果已到 达全部关键函数,结束处理,将请求释放,并在代理工具中记录跟踪信息;跟踪信息触 发相应漏洞的FUZZING规则,表明该功能流程存在缺陷,在代理工具中记录或输出威胁 的相关日志,这样就可快速地定位出现问题的位置和整个调用堆栈的使用情况;f)继 续等待其他fuzzing测试,如果接收到新的fuzzing数据,则跳到步骤d。

下面的实施例可以使本专业的专业技术人员更全面地理解本发明,但不以任何方式 限制本发明。以下流程以SQL注入漏洞测试为例,展示了工作过程,实际工作时会需要 劫持大量的关键函数,以完成各种漏洞的安全监测。

1、修改中间件的启动函数增加JavaAgent的参数,使用我们定制的Agent.jar包;

2、Java的Premain函数中增加transform的监视;

3、在Transform中对所有加载的class进行检测;

4、修改org/Apache/Catalina/Connector/Request class的字节码对 SetRequestedSessionId和Recycle两个函数进行劫持;

5、修改com/mysql/jdbc/StatementImpl class的字节码对ExecuteQuery函数进 行劫持;

6、使用自己开发的Proxy+Fuzzing工具代理浏览器;

7、浏览器正常访问各个页面;

8、Proxy+Fuzzing工具接收到代理请求后,原始请求正常代理,生成大量SQL注入 测试POC发送到测试服务器;

9、测试服务器接收到正常请求后按正常流程处理;

10、测试服务器接收到Fuzzing数据后,在SetReuquestedSessionId函数给测试 请求生成一个Request Session用于全程跟踪数据流;

11、目标页面存在SQL注入漏洞时,会再ExecuteQuery函数中出现测试POC的部 分内容,在函数中截获到以后就可判断已经存在SQL注入漏洞;

12、结束后在Recycle中将请求结束;

13、由于已经劫持关键函数,所以可以在函数中直接跟踪到代码的调用堆栈,可以 完全清楚整个漏洞的函数调用顺序。并定位整个漏洞在代码中的运行情况。

最后,需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限 于以上实施例,还可以有很多变形。本领域的普通技术人员能从本发明公开的内容中 直接导出或联想到的所有变形,均应认为是本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号