目录
1. 大体流程
1.1审计准备阶段
1.2审计实施阶段
1.3审计报告阶段
1.4改进跟踪阶段
2. 审计准备工作
2.1明确审计目的
2.2签署保密协议
2.3熟悉应用程序
2.4制定检查列表
3. 审计实施过程
3.1信息收集
3.2安全缺陷监测
3.2.1静态分析
3.2.2动态测试
3.2.3进行漏洞挖掘
3.3特殊情形审查
4. 审计报告
5. 实时改进跟踪
开展代码审计的流程
-
大体流程
审计过程包括四个阶段:审计准备、审计实施、审计报告、改进跟踪。
1.1审计准备阶段
主要开展基本情况调研,签署保密协议、准备检查清单等工作
1.2审计实施阶段
主要开展资料检查、代码审查、结果分析等工作;
1.3审计报告阶段
主要开展审计结果的总结、陈述等工作
1.4改进跟踪阶段
由代码开发团队进行,主要对审计出的问题进行修复。对于安全缺陷代码修改后,再次进行审计。
-
审计准备工作
2.1明确审计目的
确定进行的是哪种方面的测试;例如软件产品的测试、公司软件安全性自测等等
2.2签署保密协议
明确双方权利义务
2.3熟悉应用程序
在进行代码审计之前,需要对应用程序的功能、结构和逻辑进行充分的了解,有助于更好地理解应用程序的运行机制和可能存在的安全漏洞。
A:收集代码和相关信息
收集应用程序的源代码、文档、配置文件等相关信息,有助于了解应用程序的结构和运行机制,并找出可能存在的安全漏洞。
B:熟悉编程语言和框架
审计人员需要熟悉应用程序所使用的编程语言和框架,了解其特点和安全问题,才能更好地找出可能存在的安全漏洞和代码缺陷。
C:确定审计范围和标准
在进行代码审计之前,需要确定审计的范围和标准,包括审计的目的、审计的时间、审计的深度等。这有助于审计人员更好地进行工作,确保审计结果符合预期。
D:选择审计工具和技术
在进行代码审计时,需要选择合适的工具和技术进行辅助分析和漏洞挖掘。常用的工具包括静态分析工具、动态分析工具、源代码审计工具等。
2.4制定检查列表
通过明确审计目的、熟悉应用程序等工作,形成代码安全审计要点,制定代码安全的检查列表。检查列表包括检查项和问题列表。
-
审计实施过程
3.1信息收集
通过各方式获得代码以及相应需求分析文档、设计文档、测试文档等资料。
通过资料了解代码的业务逻辑等信息。在了解代码基本信息的基础上,通过深入分析设计文档、访谈关键开发人员等方式,区分核心代码和一般性代码
3.2安全缺陷监测
3.2.1静态分析
代码审计的静态分析是一种对源代码进行分析和检查,可以发现编译等过程中可能存在的安全漏洞和代码缺陷。主要分为下列五种分析方式:
(1)语法分析
语法分析是指对源代码进行语法分析,检查代码是否符合编程语言的语法规范。
(2)数据流分析
数据流分析是指对源代码进行分析;数据流分析可以发现一些潜在的安全漏洞,例如未经检查的用户输入、未初始化的变量等。
(3)控制流分析
控制流分析是指对源代码进行分析,了解代码中的控制流程,包括条件分支、循环、函数调用等。
(4)符号执行
符号执行是一种对源代码进行静态分析的高级方法,可以模拟程序执行的过程,通过对程序的所有可能路径进行分析,找出可能存在的安全漏洞和代码缺陷。
(5)模型检查
3.2.2动态测试
代码审计的动态测试是一种通过模拟攻击者的行为,对应用程序进行测试和漏洞挖掘的方法。与静态分析相比,动态测试可以更好地模拟真实环境下的攻击场景,发现一些静态分析难以发现的漏洞和问题。可分为:输入输出测试、异常测试、边界测试、安全测试、性能测试
3.2.3进行漏洞挖掘
通过上述两种测试方式发现漏洞
通常分为下列五种漏洞:SQL注入漏洞、XSS漏洞、文件包含漏洞、逻辑漏洞、认证和授权漏洞
3.3特殊情形审查
在有软件外包/采用开源软件/合作开发情形下,应对开源软件或外包部分进行代码安全审计。对于核心代码和一般性代码在审计时,采取重点审计和一般性审计措施
-
审计报告
审计实施完成后,组织召开评审会,根据评审意见,调整审计结果,形成审计报告。
代码审计中的审计报告是指对被审计代码进行分析和评估后,生成的一份详细的报告。主要分为以下三点:
A:发现的漏洞:列出在审计过程中发现的漏洞,包括漏洞的描述、风险等级、影响范围、建议修复方案等。
B:安全建议:针对发现的漏洞,提出相应的安全建议,包括代码修复、安全配置、安全测试等方面的建议。
C:代码质量评估:对被审计代码的质量进行评估,包括代码结构、规范性、可读性、可维护性等方面的评估。
-
实时改进跟踪
对审计中发现的问题进行修改,对未修改的应提供理由;
对代码的有效变更进行记录存档。
对于修复后仍产生的问题,可进行追溯审计过程