201705安全组——小白教你如何进行代码安全审计

  • 格式:docx
  • 大小:599.60 KB
  • 文档页数:8

小白教你如何进行代码安全审计

余磊

前言: 我知道在看到这标题时很多人是不会点进来看的,有些人也许会问,源代码安全审计,我又不会写代码,何来审计之说。今天,笔者我就手把手教你。坐稳了。本文分为三个环节。在这之前,笔者我进行了一次安全培训,内容就是这篇文章,我今天写出来供大家进行参考学习。不会编程?没关系,看懂一二三就行。不需要太多技术照样进行源码审计。

操作步骤环节

分析问题环节

问题总结环节

话不多说,先看下我准备了哪些东西

1. Fortify工具(静态源代码安全分析工具)

2. SVN里是研发同学提交的源码。

现在的源码审计已经不是以前的那种,想象一下有个炒鸡厉害的的研发工程师在电脑前专门审计你的源码?不不不,现在是工具时代,神器在手,还愁代码不够安全?BUG出在代码,所以从代码出发解决问题往往是最为有效的。

操作步骤环节:

对SVN代码进行了安全扫描,这次我们对项目的其中一个java模块进行了扫描。

报告结果:

我们直接看最终结果吧。分析完并修复之后我们又进行了一次安全扫描。

报告显示一共存在这些漏洞。简单介绍下:

1. 不安全的随机数问题

2. 日志注入问题

3. 资源泄露问题

4. 代码注入问题

5. 资源泄露问题

6. 对象序列化问题

7. 方法使用不当问题

8. 区域依赖问题

分析问题环节:

好,接下来我们看下如何进行分析,先看下第一个问题:

漏洞1:不安全的随机数问题

问:工具为啥会报这种问题,很多安全问题产生是由于产生错误导致。规避这些错误也是缓解安全问题的一个方式。

答:显示这是jquer.js问题 第三方封装好的,我们不便修改。该问题忽略。

漏洞2:日志注入问题

问:怎么分析

答:工具显示SecurityFilter.java 132行存在日志注入,工具推荐我们不能将\n白名单。

我们找到这个文件后,可以看到该value用了2个函数进行处理(框出来的)

定位到这两个函数:

发现并没有处理\n。所以我们的修复方案是在这两个函数中加入\n处理。缺啥补啥。

漏洞3:资源泄露问题

问:这种也属于安全问题?

答:很多时候资源泄露会导致服务器产生异常,在这种情况下如果程序处理不当就会报错,错误信息中可能就会导致一些敏感信息泄露在前端,间接产生安全威胁。所以代码质量问题也是安全问题的一类。

问:怎么分析这个问题

答:工具显示CyPanServiceImpl.java, line 479

我们找到这个文件,看名字impl不知道是什么意思

百科一下:(在Java开发中,通常将后台分成几层,常见的是三层mvc:model、view、controller,模型视图控制层三层,而impl通常处于controller层的service下,用来存放接口的实现类,impl的全称为implement,表示实现的意思。)

分析:打开该文件479行

连接数据库之后,使用完pstmt没有进行任何关闭数据库连接,结果集等

修复方案:在finalize()代码块中正确关闭数据库连接(如图),按顺序关闭好rs,pstmt,conn即可。

漏洞4:代码注入问题

问:怎么分析

答:报告显示jquery.min.js, line 5,这与第一类相同, 第三方封装好的,我们不便修改。该问题忽略。

漏洞5:资源泄露问题

资源泄露问题都是由于没有正确关闭。修复方案与第三个问题相同。不做赘述。

漏洞6:对象序列化问题

分析:工具给出了一个代码模板

将class进行了序列号,明白这个规则后,我们依葫芦画瓢。

首先找到报漏洞的位置:DiskController.java, line 122 行 分析:setAttribute是属于getSession()下面的方法,我们双击getSession(),发现它是user的一个实例。根据参考模板显示,我们需要进行类序列化。

修复方案:以此类推,我们找到user的类,将类实例化。在vo下面

打开后我们加入一段java.io.Serializable,完美解决。

漏洞7:方法使用不当问题

问:这是什么问题?

答:在安全中,不安全的方法,或一些废弃的方法不建议使用,需要更安全的方法替代。

工具显示,很多研发同学经常将如下方法进行混淆,错用方法。

找到漏洞位置后,我们将方法进行替换。去掉原来的getBoolean()改成parseBoolean()替换。完美解决。

漏洞8:区域依赖问题

问:这什么问题,我没看懂

答:我们先看下工具提供的正确的编码规范。

其中主要介绍了local.ENGHLISH 参数

问:如何进行分析?

答:我们打开漏洞位置32行,发现并没有进行时区设置。

修复方案:加入local.ENGHLISH ,完美解决。

问题总结环节

本次主要使用的神器是fortify源码安全审计工具,工具提供了安全编码规范和修复方案。值得大家仔细去研究,反推安全编程思路,这也是一个学习编程的反向思路。旨在帮助那些想学代码编程,又不知道从哪里入手的同学。当然本文只是介绍了部分简单的漏洞分析,更多漏洞分析文章会在以后的文章中逐一介绍,谢谢大家关注。