2.2 代码审计工具
代码审计工具是一类辅助我们做白盒测试的程序,它可以分很多类,例如安全性审计以及代码规范性审计,等等。当然,也可以按它能审计的编程语言分类,目前商业性的审计软件大多支持多种编程语言,也有个人或团队开发的免费开源审计软件,像笔者的“Seay源代码审计系统”就是开源程序。使用一款好的代码审计软件可以极大地降低审计成本,可以帮助审计师快速发现问题所在,同时也能降低审计门槛,但也不能过分依赖审计软件。目前常用的代码安全审计软件还有Fortify SCA、RIPS、FindBugs、Codescan等。下面介绍几款常用代码安全审计工具。
2.2.1 Seay源代码审计系统
这是笔者基于C#语言开发的一款针对PHP代码安全性审计的系统,主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞,基本上覆盖常见PHP漏洞。另外,在功能上,它支持一键审计、代码调试、函数定位、插件扩展、自定义规则配置、代码高亮、编码调试转换、数据库执行监控等数十项强大功能。主界面如图2-9所示。
图2-9
Seay源代码审计系统主要特点如下:
1)一键自动化白盒审计,新建项目后,在菜单栏中打开“自动审计”即可看到自动审计界面。点击“开始”按钮即可开始自动化审计。当发现可疑漏洞后,则会在下方列表框显示漏洞信息,双击漏洞项即可打开文件跳转到漏洞代码行并高亮显示漏洞代码行,如图2-10所示。
图2-10
2)代码调试,代码调试功能极大地方便了审计师在审计过程中测试代码。可以在编辑器中选中代码,然后点击右键选择“调试选中”即可将代码在调试界面打开,如图2-11所示。
图2-11
3)正则编码,Seay源代码审计系统集成了实时正则调试功能,考虑到特殊字符无法直接在编辑框进行输入,在实时正则调试功能中还支持对字符串实时解码后调试。另外,支持MD5、URl、Base64、Hex、ASCII、Unicode等多种编码解码转换功能,如图2-12所示。
图2-12
4)自定义插件及规则,Seay源代码审计系统支持插件扩展,并且插件的开发非常简单,只需要将插件的dll文件放入到安装目录下的plugins文件夹内即可自动加载插件。目前自带插件包括黑盒+白盒的信息泄露审计以及MySQL数据库执行监控。
除了上述功能外,它还支持自定义审计规则,在规则配置界面中即可添加或修改以及禁用、删除规则,还可针对审计过程做很多审计习惯优化,使得程序简单容易上手。
2.2.2 Fortify SCA
Fortify SCA是由惠普研发的一款商业软件产品,针对源代码进行专业的白盒安全审计,当然,它是收费的,而且这种商业软件一般都价格不菲。它有Windows、Linux、UNIX以及Mac版本,通过内置的五大主要分析引擎(数据流、控制流、语义、结构以及配置)对应用软件的源代码进行静态分析。关于这五大分析引擎的介绍如表2-1所示。
表2-1 五大分析引擎概述
Fortify SCA是目前支持最多编程语言的审计软件。它支持的编程语言如下所示:
ASP.NET VB6 VB.NET Java C#.NET JSP ASP JavaScript VBScript HTML Action Script XML Objective-C C/C++ ColdFusion 5.0 PHP Python T-SQL(MSSQL) COBOL PL/SQL(Oracle) SAP-ABAP
分析的过程中与它特有的软件安全漏洞规则集进行全面的匹配、搜索,在最终的漏洞结果中,包括详细的漏洞信息,以及漏洞相关的安全知识说明和修复意见。
2.2.3 RIPS
RIPS是一款基于PHP开发的针对PHP代码安全审计的软件。另外,它也是一款开源软件,由国外安全研究员Johannes Dahse开发,程序只有450KB,目前能下载到的最新版是0.54,笔者发现这款程序在2013年2月已经暂停更新。在写这段文字之前笔者特意读过它的源码,它最大的亮点在于调用了PHP内置解析器接口token_get_all,并且使用Parser做了语法分析,实现了跨文件的变量及函数追踪,扫描结果中非常直观地展示了漏洞形成及变量传递过程,误报率非常低。RIPS能够发现SQL注入、XSS跨站、文件包含、代码执行、文件读取等多种漏洞,支持多种样式的代码高亮。比较有意思的是,它还支持自动生成漏洞利用。
图2-13为RIPS截图。
图2-13
RIPS的使用非常简单,只需在主界面填入我们要扫描的路径,其余配置可根据自己的需要设置。完成设置后点击scan按钮即可开始自动审计。扫描结束后,程序会显示漏洞数量、漏洞比例等信息。查看漏洞详情时,只需点击提示漏洞处的“-”即可显示漏洞源代码和变量过程,如图2-14所示。
图2-14
笔者通过RIPS发现ecshop文件包含漏洞,图2-15所示为RIPS漏洞扫描详细结果。
图2-15
代码查看也非常方便,只需要点击“review code”即可跳转到漏洞代码处,将鼠标指针悬浮在变量上,同文件的变量会高亮显示,如图2-16所示。
图2-16