源代码审计概述
源代码审计是由具备丰富编码经验并对安全编码原则及应用安全具有深刻理解的安全服务人员对系统的源代码和软件架构的安全性、可靠性进行全面的安全检查。
源代码审计服务的目的在于充分挖掘当前代码中存在的安全缺陷以及规范性缺陷,从而让开发人员了解其开发的应用系统可能会面临的威胁,并指导开发人员正确修复程序缺陷。
做源代码审计的必要性
程序的安全性是否有保障很大程度上取决于源程序代码的安全性,而保证源代码质量最快捷有效的手段就是源代码审计。
在风险评估过程中,源代码审计是一般脆弱性评估的一种很好的补充,源代码审计服务的代码覆盖率为100%,能够找到一些安全测试所无法发现的安全漏洞。
同时,由于主持源代码审计的安全服务人员一般都具备丰富的安全编码经验和技能,所以其针对性比常见的脆弱性评估手段会更强、粒度也会更为细致。
哪些业务场景需要做好源代码审计工作?
即将上线的新系统平台;
存在大量用户访问、高可用、高并发请求的网站;
存在用户资料等敏感机密信息的企业平台;
互联网金融类存在业务逻辑问题的企业平台;
开发过程中对重要业务功能需要进行局部安全测试的平台;
源代码审计的服务范围
天磊卫士源代码审计服务的范围包括使用ASP、ASP.NET(VB/C#)、JSP(JAVA)、PHP等主流语言开发的B/S应用系统、使用C++、JAVA、C#、VB等主流语言开发的C/S应用系统,以及使用XML语言编写的文件、SQL语言和数据库存储过程等。
代码审计服务流程
代码审计服务主要分为四个阶段,包括源代码审计前期准备阶段、源代码审计阶段实施、复查阶段实施以及成果汇报阶段:
前期准备阶段
在实施源代码审计工作前,技术人员会和客户对源代码审计服务相关的技术细节进行详细沟通。由此确认源代码审计的方案,方案内容主要包括确认的源代码审计范围、最终对象、审计方式、审计要求和时间等内容。
源代码审计阶段实施
在源代码审计实施过程中,首先使用源代码审计的扫描工具对源代码进行扫描,完成初步的信息收集,然后由人工的方式对源代码扫描结果进行人工的分析和确认。
根据收集的各类信息对客户要求的重要功能点进行人工源代码审计。
结合自动化源代码扫描和人工源代码审计两方的结果,源代码审计服务人员需整理源代码审计服务的输出结果并编制源代码审计报告,最终提交客户和对报告内容进行沟通。
复测阶段实施
经过第一次源代码审计报告提交和沟通后,等待客户针对源代码审计发现的问题整改或加固。经整改或加固后,源代码审计服务人员进行回归检查,即二次检查。检查结束后提交给客户复查报告和对复查结果进行沟通。
成果汇报阶段
根据一次源代码审计和二次复查结果,整理源代码审计服务输出成果,最后汇报项目领导。
代码审计可以只用工具吗?
代码审计的目标是找到应用程序中的特性或设计上的漏洞,并发现实际产生这些漏洞的根因。由于日益复杂的代码量和各种新技术的引入,传统的测试方法可能没法找出程序中的所有安全问题。要想找出安全漏洞,需要理解程序代码,外部组件和配置才行。
很多人认为只用代码审计工具就足够了,认为可以不需要人工审计,但是两者之间的关系,相当于一边是新手和一个普通文本编译器,而另一边是一个专家和静态代码分析工具。对于使用这些分析工具需要有相当多的专业知识,这些工具对于代码审计的覆盖和最小基线设置是比较有帮助的,但是这些工具无法理解动态数据流和数据逻辑。
因此工具也可以来完成代码审计的工具,但是它们还是需要人工的确认。工具不能理解代码上下文,而这却是代码审计很关键的一个重点。工具在评估大量代码并指出可能的问题时非常有效,但是仍然需要审计员去分析所有结果,并确认这些结果是不是真的是问题,是不是真的可以被利用,然后计算其对于企业的风险。因此人工去确认工具扫描的盲点是必不可少的环节。