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