源代码审计(Code Review)是由具备丰富编码经验并对安全编码原则及应用安全具有深刻理解的安全服务人员对系统的源代码和软件架构的安全性、可靠性进行全面的安全检查。
源代码审计服务的目的在于充分挖掘当前代码中存在的安全缺陷以及规范性缺陷,从而让开发人员了解其开发的应用系统可能会面临的威胁,并指导开发人员正确修复程序缺陷。
一、源代码审计与模糊测试
在漏洞挖掘过程中有两种重要的漏洞挖掘技术,分别是源代码审计和模糊测试(Fuzzing)。
源代码审计是通过静态分析程序源代码,找出代码中存在的安全性问题;而模糊测试则需要将测试代码执行起来,然后通过构造各种类型的数据来判断代码对数据的处理是否正常,以发现代码中存在的安全性问题。
由于采用的分析方法不同,这两项技术的应用场所也有所不同。源代码审计常用于由安全厂商或企业的安全部门发起的代码安全性检查工作;模糊测试则普遍用于软件开发和测试部门的程序测试。
二、做源代码审计的必要性
实践证明,程序的安全性是否有保障很大程度上取决于程序代码的质量,而保证代码质量最快捷有效的手段就是源代码审计。
在风险评估过程中,源代码审计是一般脆弱性评估的一种很好的补充,天磊卫士源代码审计服务的代码覆盖率为100%,能够找到一些安全测试所无法发现的安全漏洞。
同时,由于主持源代码审计的安全服务人员一般都具备丰富的安全编码经验和技能,所以其针对性比常见的脆弱性评估手段会更强、粒度也会更为细致。
三、源代码设计范围
天磊卫士源代码审计服务的范围包括使用ASP、ASP.NET(VB/C#)、JSP(JAVA)、PHP等主流语言开发的B/S应用系统、使用C++、JAVA、C#、VB等主流语言开发的C/S应用系统,以及使用XML语言编写的文件、SQL语言和数据库存储过程等。
四、源代码审计分类
源代码审计可分为以下两类:
整体源代码审计是指源代码审计服务人员对被审计系统的所有源代码进行整体的安全审计,代码覆盖率为100%,整体源代码审计采用源代码扫描和人工分析确认相结合的方式进行分析,发现源代码存在的安全漏洞。但整体源代码审计属于白盒静态分析,仅能发现代码编写存在的安全漏洞,无法发现业务功能存在的缺陷。
功能点人工源代码审计是对某个或某几个重要的功能点的源代码进行人工源代码审计,发现功能点存在的代码安全问题。功能点人工源代码审计需要收集系统的设计文档、系统开发说明书等技术资料,以便源代码审计服务人员能够更好的了解系统业务功能。由于人工源代码审计工作量极大,所以需要分析并选择重要的功能点,有针对性的进行人工源代码审计。
五、源代码审计流程
天磊卫士源代码审计服务主要分为四个阶段,包括源代码审计前期准备阶段、源代码审计阶段实施、复查阶段实施以及成果汇报阶段:
1.前期准备阶段
在实施源代码审计工作前,技术人员会和客户对源代码审计服务相关的技术细节进行详细沟通。由此确认源代码审计的方案,方案内容主要包括确认的源代码审计范围、最终对象、审计方式、审计要求和时间等内容。
2.源代码审计阶段实施
在源代码审计实施过程中,天磊卫士源代码审计服务人员首先使用源代码审计的扫描工具对源代码进行扫描,完成初步的信息收集,然后由人工的方式对源代码扫描结果进行人工的分析和确认。
根据收集的各类信息对客户要求的重要功能点进行人工源代码审计。
结合自动化源代码扫描和人工源代码审计两方的结果,源代码审计服务人员需整理源代码审计服务的输出结果并编制源代码审计报告,最终提交客户和对报告内容进行沟通。
3.复测阶段实施
经过第一次源代码审计报告提交和沟通后,等待客户针对源代码审计发现的问题整改或加固。经整改或加固后,源代码审计服务人员进行回归检查,即二次检查。检查结束后提交给客户复查报告和对复查结果进行沟通。
4.成果汇报阶段
根据一次源代码审计和二次复查结果,整理源代码审计服务输出成果,最后汇报项目领导。
六、对于企业而言,做源代码审计有什么好处
1.明确安全隐患点
源代码审计能够对整个信息系统的所有源代码进行检查,从整套源代码切入最终明至某个威胁点并加以验证,以此明确整体系统中的安全隐患点。
2.提高安全意识
如上所述,任何的隐患在源代码审计服务中都可能造成“千里之堤溃于蚁穴”的效果,因此源代码审计服务可有效督促管理人员杜绝任何一处小的缺陷,从而降低整体风险。
3.提高开发人员安全技能
在源代码审计服务人员与用户开发人员的交互过程中,可提升开发人员的技能。另外,通过专业的源代码审计报告,能为用户开发人员提供安全问题的解决方案,完善代码安全开发规范。