1.什么是代码审计?
顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
2.为什么要做代码审计?
简化修补程序、加强开发人员安全意识、对开发人员进行安全知识教育、降低返工成本、避免过早暴露漏洞
3.代码审计工具推荐
3.1 Seay代码审计工具
Seay其实是一款用 C语言所开发的一款对 PHP相关代码的安全审计系统,它是运 行在 Windows操作系统上的。这种软件能够发现 SQL 注入漏洞、代码执行漏洞、命令执行错误、文件内容包括、文件的上传、绕过防护、拒绝文件服务、XSS的跨站漏洞、信息泄露问题、任意URL跳转等漏洞。
3.2 RIPS
RIPS是一个用 PHP 编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘 PHP 源代码潜在的安全漏洞。渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码。由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认。RIPS 能够检测 XSS, SQL 注入, 文件泄露, Header Injection 漏洞等。
3.3 Fortify SCA
Fortify SCA 是一个静态的、白盒的软件源代码安全测试工具。 它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配 置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有 的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在 的安全漏洞扫描出来,并给予整理报告。扫描的结果中不但包括详细 的安全漏洞的信息,还会有相关的安全知识的说明,以及修复意见的提供。
支持的编程语言有JAVA、PHP、PYTHON、.NET、VB、C\C++等
3.4 CheckmarxCxSuite
Checkmarx 是以色列的一家高科技软件公司。它的产品CheckmarxCxSuite专门设计为识别、跟踪和修复软件源代码上的技术和逻辑方面的安全风险。首创了以查询语言定位代码安全问题,其采用独特的词汇分析技术和CxQL专利查询技术来扫描和分析源代码中的安全漏洞和弱点。Checkmarx CxSuite支持JAVA、ASP.NET(C#、VB.NET)、JavaScript、Jscript、C/C++、APEX等语言,500多种风险类型,支持CWE/OWASP国际主流标准,交付形态为纯软件。
4. Fortify SCA代码审计基本教程
以审计jspxcms为例,启动Fortify SCA
启动之后主程序界面如下,最上方是开始扫描新程序,中间部分为扫描的历史,可直接打开,点击“Scan Java Project”,然后选中代码的根路径即可
点击确定之后,会弹出选择代码基于的JDK版本,此时选择1.8,点击OK
此时弹出新的对话框,第一个为选择需要显示的issues,第二个为是否关注代码质量问题,第三个为是否是JAVA Web应用,第四个为是否需要admin权限去运行程序以便于读取数据。选项选择完毕之后即可点击SCAN按钮进行扫描。
此时会显示扫描进度
扫描完成之后主界面如下,可分为五个部分
第一部分显示了扫描出来的问题,详细的显示了漏洞类型及漏洞所在的位置;
第二部分显示了问题的上下文代码;
第三部分显示了代码的调用逻辑;
第四部分显示了漏洞的详情以及修复建议等;
第五部分显示了总体代码中的函数;
以扫描出来了Path Manipulation(路径操作)为例进行分析,在代码部分可以看到功能为对一个文件进行压缩。在代码调用视图中可看到首先从servlets.java的requests中获取name参数的值并赋值给values然后传递值给ids参数,然后利用localFileHandler.getFile获取文件,然后调用AntZipUtils.zip方法对文件内容进行压缩。
fortify根据代码的调用关系判断此处存在路径操作漏洞。依据视图4中Details部分可知假设文件名为../../web.xml时,会出现路径操作问题,实际原因为为对文件名进行检查过滤。
审阅代码,在WebFileControllerAbstractor.java中的zip方法中逻辑如下,从requests中获取ids参数并赋值给ids,然后使用if语句中的Validations.uri方法对ids的值进行检查,由导入的包可知,Validations.uri()存在于com.jspxcms.common.web.Validations下。
查看该包内容,找到uri方法,该方法会判断传入的值中是否存在"..",并是否以base开头
假设ids=../../web.xml,此时if语句不通过,并会抛出异常,不会继续执行zip()
所以此处路径操作问题不成立。