代码安全审计规范 概述

声明

本文是学习GB-T 39412-2020 信息安全技术 代码安全审计规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们

代码安全审计规范 概述

安全缺陷审计列表是针对应用软件的代码(以下简称代码)缺陷列举的参考列表,特殊应用(如WEB应用、移动应用)的缺陷有部分涉及,但不是本章节描述重点。审计时可根据被审计的具体对象及应用场景对本列表进行调整制定。考虑到语言的多样性,以典型的结构化语言(C)和面向对象语言(Java)为目标进行描述。

代码审计应包括但不限于如下4个方面的具体条款。其中,安全措施37条审计条款;代码实现24条审计条款;资源使用32条审计条款;环境安全3条审计条款,总计96条审计条款。

审计目的

代码安全审计的目的是提高软件系统的安全性,降低安全风险。通过审计发现代码的安全缺陷,但不包含软件分析、设计、测试、应用部署等层面的安全缺陷。鉴于安全漏洞形成的综合性和复杂性,代码安全审计主要针对代码层面的安全风险和代码质量,以及形成漏洞的各种脆弱性因素。

通过审计形成审计报告,列出代码中针对审计列表的符合性/违规性条目,提出对代码修订的措施和建议。

审计时机

代码安全审计包括内部审计和外部审计。内部审计由单位内部的软件质量保证人员开展,审计的意义是发现和预防安全问题的发生。外部审计由第三方开展。外部审计需要较多的准备工作,不宜频繁安排。审计工作可安排在代码编写完成之后系统集成测试之前开展。由于资质认证、政策要求等因素,开展外部审计应提前通知开发团队,并预留足够时间。

内部审计通过代码安全审计,保证软件代码安全质量。内部审计可安排在软件开发生命周期内的不同阶段。

历史审计结果可以做为审计考虑的因素。若审计出的安全问题较多,则应根据实际修复情况适当增加审计次数。在代码开发过程中,如果有频繁改变代码开发计划或调整里程碑等异常情况时,也应增加审计次数。

审计人员

审计人员的主要工作职能是收集信息和代码缺陷分析等,应具备代码审计的专业知识;应能够客观地呈现代码的问题,不应隐瞒;应对代码等相关内容保守秘密,不得泄露相关信息。

审计方法

代码安全审计常用的方法是将代码安全缺陷形成审计检查列表,对照代码逐一检查。检查列表应根据被审计的对象和应用场景进行调整。

考虑到审计内容的复杂性,审计方法建议采用工具审计和人工审计相结合,多种手段综合运用的方式。

采用专业代码审计工具对代码进行审计,形成审计报告,并对审计出的问题与标准相关审计项逐一人工核对。对于使用外部开源代码较多的系统,在审计时可先检测开源代码的使用率,开源代码的安全缺陷可从已知漏洞角度检查。由于审计工具的局限性,不可避免存在误报和漏报。对于误报问题,应采用人工对比审计核查的方式开展。对于漏报问题应采用多个工具交叉审计的方式开展。人工审计是工具审计的必要补充,人工审计主要解决工具审计的误报和漏报问题。在人工审计实施中,可借助工具对代码模块、数据流、控制流等逻辑结构进行分析提取,并逐条比对分析。

审计实施过程中,可根据审计工作需要划分工作阶段。如按进度或里程碑划分;按周、月、季度划分;按功能模块实施单元划分;按人员分工交叉审计划分等。

对于审计出的缺陷,可根据缺陷的可利用性、影响程度、弥补代价等因素进行分级排序。

代码安全审计规范 审计过程

总体流程

审计过程包括四个阶段:审计准备、审计实施、审计报告、改进跟踪。审计准备阶段,主要开展基本情况调研、签署保密协议、准备检查清单等工作;审计实施阶段,主要开展资料检查、代码审查、结果分析等工作;报告阶段包括审计结果的总结、陈述等工作,如有必要进行相关问题的澄清和相关资料说明;改进跟踪工作由代码开发团队进行,主要对审计出的问题进行修复。对于安全缺陷代码修改后,再次进行审计。代码安全审计流程如图1所示。

代码安全审计规范 概述_第1张图片

图 1 代码安全审计流程

审计准备

代码安全审计的目的包括软件采购/外包测试、软件产品的认证测试、公司软件代码安全性自查等。

为避免被审计单位的代码被审计方用于非代码审计用途,双方应签署代码审计保密协议,明确双方的权利和义务。

了解代码的应用场景、目标客户、开发内容、开发者遵循的标准和流程等。

通过阅读代码,了解程序代码结构、主要功能模块,以及采用的编程语言。

通过明确审计目的、背景调研、熟悉代码等工作,形成代码安全审计要点,制定代码安全的检查列表。检查列表包括检查项和问题列表。

审计实施

入场实施环节中,审计人员和项目成员(关键代码开发人员等)均应参与。审计人员介绍审计的主要目标,访谈对象和检查的资料等。项目人员介绍项目进展、项目关键成员、项目背景、实现功能以及项目的当前状态等。

信息收集环节通过访谈等方式获得代码以及相应需求分析文档、设计文档、测试文档等资料。通过文档资料了解代码的业务逻辑等信息。在了解代码基本信息的基础上,通过深入分析设计文档、访谈关键开发人员等方式,区分核心代码和一般性代码,其中核心代码一般为涉及核心业务功能和核心软件功能的代码,一般性代码为非核心业务功能和非核心软件功能的代码。

代码安全缺陷检测环节是根据制定的代码安全的检查项,采用工具审计、人工审计、人工结合工具审计方式检查是否存在安全缺陷,检测完成后进行安全性分析形成安全审计结果。

在有软件外包/采用开源软件/合作开发情形下,应对开源软件或外包部分进行代码安全审计。对于核心代码和一般性代码在审计时,采取重点审计和一般性审计措施,其中重点审计主要针对核心代码进行审计,一般性审计主要针对一般性代码进行审计。

审计报告

审计实施完成后,组织召开评审会,将初始审计结果提供给被审计项目成员,并提供澄清误解机会,允许项目成员提供其他需要补充的信息。

评审会结束后,根据评审意见,调整审计结果,形成审计报告。审计报告包括审计的总体描述、审计结论等内容,并对可能产生的安全风险进行高、中、低分类描述。审计结论给出每条审计条款的符合/不符合的描述。审计报告的内容示例参见附录A。

改进跟踪

对审计中发现的问题进行修改,对未修改的应提供理由;对代码的有效变更进行记录存档。对于修复安全缺陷后的代码,可通过再次审计来确认问题是否解决。

延伸阅读

更多内容 可以 GB-T 39412-2020 信息安全技术 代码安全审计规范. 进一步学习

联系我们

T-CSCA 120030—2019 “上海品牌”评价认证依据: 海上风力发电工程施工服务规范.pdf

你可能感兴趣的:(安全)