再借你一双慧眼 识别强大的代码安全审计工具

        今天,我还是分析一款强大的代码安全审计工具到底应该什么样?还是以OWASP Benchmark的Java案例作为例子进行分析。Benchmark中2740个包含真假漏洞的案例中,分为10类,例如SQL注入、命令行注入、弱密码、弱哈希等等。下面我以其中三个类别的真假漏洞作为例子,进行分析。

先看SQL注入,我从其中选择了一个具有代表性的案例,BenchmarkTest00105.java,是一个假漏洞。

使用代码安全审计工具进行检测,不会报出sql注入漏洞。为什么呢?下面分析过程。

在第70行,int[] counts = statement.executeBatch(); 执行批量查询是SQL注入的污点语句,从该语句向上面查看,找到执行的sql语句,在69行,把sql语句添加到批量处理中。参数sql来自于65行,String sql = "SELECT * from USERS where USERNAME='foo' and PASSWORD='"+ bar +"'";  这一行相加了用户输入的密码,bar字符串,bar字符串又来自于第61行,60行。

 

在条件表达式中 bar = (7*18) + num > 200 ? "This_should_always_happen" : param;

(7*18)+num其值大于200,为真,所以bar= "This_should_always_happen";为固定字符串,所以不会出现sql注入风险漏洞。

下面是把影响bar取值条件语句修改一下,把num由100修改为10,此时bar = (7*18)+ num > 200 ? "This_should_always_happen" : param;的条件表达式值为假,bar取param的值,而param是未经处理,所以存在着SQL注入风险漏洞。检测工具应该能够报出这个漏洞。

    强大的代码安全审计工具之所以能够报出这个安全漏洞,主要是因为采用常量替换技术。在条件表达式,把num的值带入到表达式中进行计算,再进行符号执行,所以虽然代码安全审计工具采用静态分析技术,但是也会在内存中进行动态的计算和执行,所以能够发现运行时缺陷和安全漏洞。

下面我们再分析一个XSS跨站攻击案例。BenchmarkTest02233.java是一个假漏洞。

使用代码安全审计工具并不会报出XSS安全漏洞,工具中报出的另外的漏洞。因为valuesList.get(1)取值时,从list中取出的值是”moresafe”,固定字符串,所以不存在安全漏洞。

下面我修改第68行,bar取值不再取valuesList的第1个元素,而是取第0个元素,也就是Param,该值是POST未经处理的返回值。第54行打印输出时仍然是param值,未处理的post参数值,存在xss的风险。所以代码安全审查工具应该报出这个潜在漏洞。你看,该工具报出了XSS安全漏洞。

下面再看一个CMDI命令行注入案例。BenchmarkTest00051.java 是一个假漏洞。下面查看一下添加到执行命令的参数args,param来自于调用String param = scr.getTheValue("vector");的返回值。

    看另一个文件SeparateClassREquest.java,调用getTheValue返回的是一个固定值bar,所以不会产生命令行注入安全漏洞。

 

下面我把46行调用getTheValue修改为调用String param = scr.getTheParameter("vector"); getTheParameter函数返回的参数传入的vector参数的值,该值来自于post请求,未经处理,应该存在SQL注入的风险。

 

     修改后,覆盖原来的文件,执行代码安全审计工具,重新叫么,可以看到工具检测出潜在的命令行注入漏洞。

 

      各位,通过上面代码安全审计工具先分别对三个假漏洞进行检测,能够分析出不存在安全漏洞。但是代码进行调整,当输出字符串中有从POST请求中取值,又未经处理时,则存在着安全漏洞,能够检测出来。一款强大的代码安全审计工具应该能够区分真假漏洞,在对实际项目进行检测时,才能保证准确度,做到静态分析类工具能够达到的最小误报率和最小漏报率。

        (完)

-------------------------------------------------------------------------------------

关注安全  关注作者

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值