代码审计
“web安全的尽头是代码审计”。代码审计(Code Audit)顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。代码审计的技术手段,可以弥补黑盒渗透测试未能完全覆盖的漏洞环节与安全隐患,是一种可靠性、安全性较高的修补漏洞的方法。代码越复杂,缺陷的风险越高。
通过对常见的编程语言如ASP、ASP.NET、PHP、JAVA、C++等语言进行源代码审计,查找出代码中存在的安全问题。它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。通过阅读源码对其进行各类漏洞挖掘,这样的过程统称为审计。审计不但需要知道各类漏洞的原理,还需要良好的审计环境。在面对大型开源程序时,信息量往往十分巨大,所以工具的分析和检索是必不可少的。C和C++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能(例如不检查边界的函数)。代码审计对象包括并不限于对Windows和Linux系统环境下的以下语言进行审核:java、C、C#、ASP、PHP、JSP、.NET。
代码审计方式:
1.通读源代码:这种审计手法往往能够发现隐藏较深的安全问题,一般从程序的入口函数开始读。但其缺点也十分明显,需要通读整个源代码的逻辑,因此十分耗时。
2.关键函数回溯:这种方法比通读源代码方法效率大大提升,但是很难发现隐藏极深的安全问题。对于关键函数回溯法,首先需定位到敏感函数以及参数,随后同步回溯参数的赋值过程,判断是否可控以及是否经过过滤等。3.追踪功能点:这种方法需要审计人员有一定的渗透测试基础,根据自己的经验判断可能存在问题的路由或功能点,并针对该功能点进行通读。例如文件上传漏洞可直接通过定位上传函数来发现。
代码审计流程:
专业代码审计流程分为四个步骤。
1.前期准备阶段:通过由测试人员提供、GitHub、Gitee、CSDN、SVN、源代码泄漏漏洞等各类途径获取程序源代码,并搭建相关环境。
2.代码审计阶段:可以先通过Fortify、CheckMark等自动审计工具对源代码进行扫描,并根据程序提示有目的地进行测试。当扫描工具测试不全或是无可用的扫描工具时,可以根据常见关键字对程序进行全局搜索并定位可能存在问题的程序段。当然也可以完全从入口函数开始通读所有的源代码。
3.POC编写阶段:当通过代码审计找到安全问题后,要做的便是根据审计结果以及触发方式编写可行的验证 (POC)脚本,通过POC脚本来进一步确定问题以及会造成的影响。4.报告编写阶段:根据前面发现的安全问题以及验证(POC)脚本的验证结果,编写代码审计报告,以方便他人查阅。
审计范围:
代码审计不仅是为了发现系统漏洞,同时关注编码规范、隐私、业务逻辑、合规性、可用性等方面。
审计清单:
审计检查清单应覆盖如下关键的安全控制及漏洞区域:
1.数据验证。
2.身份鉴别。
3.会话管理。
4.授权。
5.密码学。
6.异常处理。
7.日志审计。
8.安全配置。
9.网络架构。
审计报告:
报告应包含的关键信息:审计日期,应用程序名称、版本号、审计的代码模块,审计人员姓名,任务或特征名称 ,修复建议,需要概要描述来对软件漏洞进行分类和排序,提供链接或相关的文档,包括需求、设计、测试和威胁建模文件,代码审计清单,使用的工具等内容。
免责声明:本文章系转载,版权归原作者所有。对转载、分享的内容和观点保持中立,也不对内容的准确性、可靠性或完善性提供任何保证,因转载众多无法确认真正原始作者,如涉及作品版权问题,请及时联系我们,我们将作删除处理以保证您的权益!