JAVA源代码不安全输入漏洞的检测方法.pdf

上传人:n****g 文档编号:1070998 上传时间:2018-03-29 格式:PDF 页数:6 大小:194.77KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910008999.3

申请日:

2009.02.18

公开号:

CN101807232A

公开日:

2010.08.18

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 21/00申请公布日:20100818|||文件的公告送达IPC(主分类):G06F 21/00收件人:牛婷芝文件名称:视为撤回通知书|||文件的公告送达IPC(主分类):G06F 21/00收件人:牛婷芝文件名称:实审请求期限届满前通知书|||文件的公告送达IPC(主分类):G06F 21/00收件人:张志凯文件名称:发明专利申请公布通知书|||公开|||地址不明的通知收件人:张志凯文件名称:发明专利申请初步审查合格通知书

IPC分类号:

G06F21/00

主分类号:

G06F21/00

申请人:

牛婷芝

发明人:

牛婷芝

地址:

100876 北京邮电大学学29楼1907房间

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

本发明提出了一种新的由于不安全输入引起的Java源代码安全漏洞的检测方法。该方法采用语法解析和数据流控制流分析技术,通过安全规则调用安全解析器从而达到检测不同类型漏洞的目的,经过实验该方法可用于扫描java语言开发的各种工程源代码,并达到较高的准确率。

权利要求书

1: 一种用于检测由于不安全输入引起的Java源代码安全漏洞的方法。该方法采用语法解析和数据流控制流分析技术,通过安全规则调用安全解析器从而达到检测不同类型漏洞的目的。
2: 根据权利要求1所述的方法,安全规则采用检索源代码中的关键api方法。

说明书


Java源代码不安全输入漏洞的检测方法

    【技术领域】

    本发明用于源代码静态检测安全漏洞领域,尤其用于检测用Java语言开发的源代码中存在的由于不安全输入引起的漏洞。

    背景技术

    近两年来随着中国软件市场的快速发展和持续增长,伴随出现的软件安全问题也受到越来越多人的关注。产生软件安全问题的原因有很多,由于开发时间紧迫,任务量重,程序员在开发过程中可能会忽略代码质量以及软件安全相关的问题;同时,随着软件市场的不断膨胀,从业人员的素质也在不断地下降,由于程序员本身对于信息安全以及网络安全没有足够的认识,因而在开发过程中也会导致一些严重漏洞的出现,基于以上考虑,当软件开发过程结束后,我们无法保证代码的安全性,然而随着软件规模的不断增大,人工手动去检查代码的安全漏洞已经不可能实现,在这种情况下,自动检测源代码的分析工具就应运而生了。

    随着电子商务以及电子政务的不断普及发展,web系统得到了更多的应用,然而在web系统开发以及应用过程中安全问题更是层出不穷,本发明就是针对web系统可能出现的由于不安全输入引起的漏洞,提出一种适用于java源代码的安全分析系统的模型。

    静态代码检测方法有现在比较流行的数据流分析方法,也有有限状态集的方法,在众多java静态检测工具中,PMD和findbugs都主要针对代码质量方面的检测,安全漏洞涉及的种类很少,而checkstyle则完全不能检测安全漏洞;jslint主要是根据文章中提出的几条有关代码质量方面的规则进行检测,常见的安全漏洞如SQL注入、跨站脚本等则均不能支持;现在市场上也有比较成熟的静态代码扫描工具例如fortify、klockwork等,但这些软件虽然可以检测漏洞的类型比较广泛,准确率也相对较高,但是在漏洞漏报率方面则表现平平。

    【发明内容】

    现在已知的Java安全漏洞类型种类繁多,本发明可以覆盖众多的漏洞类型并且达到较高的准确率和较低的漏报率。首先让我们从一个简单的SQL注入漏洞来引入分析。

    下面的代码执行一个SQL查询,查找与给定名称匹配的student。查询限定只有当当前用户名与student的所有者名称匹配时,才向当前用户显示student。

    ...

    String userName=ctx.getAuthenticatedUserName();

    String studentName=request.getParameter(″studentName″);

    String query=″SELECT*FROM student WHERE owner=″′+userName+″′AND studentname

    =″′+studentName+″″′;

    ResultSet rs=stmt.execute(query);

    ...

    仔细查看上面这段代码时,我们会发现程序执行了一个SQL查询,这个查询语句的输入参数是query,而query是由变量userName和studentName以及一些固定字符串拼接组成的,因为查询语句是由常量字符串和用户输入的字符串动态构造,所以只有当studentName不包括单引号字符时,查询才能正确进行。

    如果当一个userName为elaine,studentName为’name’OR’1=1’,那么查询语句就会变成SELECT*FROM student WHERE owner=‘elaine‘+AND studentname=‘name’OR‘1=1’,后面添加的OR‘1=1’导致了查询语句总是成立,这样查询语句最终演变成了SELECT*FROMstudent,使得无论是哪个用户都可以返回数据库中所有student的信息。

    从上面这个例子我们可以清楚的看到漏洞的规律,即:当系统执行一个SQL查询语句时,必须要对查询的参数进行校验,以判断此参数是否来自于用户输入,如果来自用户输入,需要加入某些判断条件的限制(比如,是否存在单引号),如果没有这些条件限制的判断,那么则认为这段代码存在SQL注入漏洞。由此我们得到检测漏洞的步骤:

    ●找到SQL查询语句execute。

    ●查找execute参数。

    ●判断参数是否来自用户输入。

    如果来自用户输入,判断是否有条件限制(是否存在单引号),没有则记录为漏洞。

    本发明的检测方法如下:当输入源代码路径后,首先系统对源代码进行语法和词法解析,将源代码转化为标准的AST树,进而系统对得到的AST树进行数据流和控制流分析,得到相关项目的函数信息(包括函数名,个数,参数,函数间的相互调用关系等)和变量信息(包括变量名,使用变量的函数以及变量在不同位置的值等)以及函数控制依赖关系,在数据流和控制流分析的结果基础上,系统根据解析的安全规则调用SQL注入解析器,在调用解析器时,系统根据规则的内容自动调用相应类型地解析器,当解析器分析完毕后,将结果存在结果缓冲池中,等待所有的解析器都工作完毕后,系统将分析结果统一输出给用户,结果包括漏洞类型,漏洞所处的位置,以及漏洞的具体跟踪信息等,同时该系统还根据不同的漏洞类型给出了具体的参考解决方案。

    【附图说明】

    附图是Java源代码的处理流程图。

    【具体实施方式】

    根据本发明的检测方法,上述源代码的扫描流程具体如下:首先将源码解析成标准AST树,然后在AST树上做数据流和控制流分析,如果我们的规则定义为起始api为execute,终止api为getParameter,那么在调用解析器的时候,具体解析流程如下:

    ●首先在数据流结果中搜索api名为execute的代码,如果找到多个则逐个检查

    ●分析execute的参数,得到query

    ●在数据流结果中找到变量query的调用列表,找到定义语句String query=″SELECT*FROM student WHERE owner=″′+userName+″′AND studentname=″′+studentName+″″′;

    ●分析改定义语句,发现query与变量userName和studentName相关

    ●在数据流结果中分别找到变量userName和studentName的调用列表,找到定义语句,发现studentName的调用api与终止api相同,认为改变量来自外部输入,同时又没有检测到代码对变量studentName是否含有单引号做出判断,所以认为该SQL查询语句是不安全的,将结果记录在缓冲池中。

    使用本发明方法对很多Java应用程序进行安全漏洞扫描,发现结果较好,准确率和漏报率都达到较高的水平。

JAVA源代码不安全输入漏洞的检测方法.pdf_第1页
第1页 / 共6页
JAVA源代码不安全输入漏洞的检测方法.pdf_第2页
第2页 / 共6页
JAVA源代码不安全输入漏洞的检测方法.pdf_第3页
第3页 / 共6页
点击查看更多>>
资源描述

《JAVA源代码不安全输入漏洞的检测方法.pdf》由会员分享,可在线阅读,更多相关《JAVA源代码不安全输入漏洞的检测方法.pdf(6页珍藏版)》请在专利查询网上搜索。

本发明提出了一种新的由于不安全输入引起的Java源代码安全漏洞的检测方法。该方法采用语法解析和数据流控制流分析技术,通过安全规则调用安全解析器从而达到检测不同类型漏洞的目的,经过实验该方法可用于扫描java语言开发的各种工程源代码,并达到较高的准确率。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1