GB/T 39412-2020
基本信息
标准号:
GB/T 39412-2020
中文名称:信息安全技术 代码安全审计规范
标准类别:国家标准(GB)
标准状态:现行
出版语种:简体中文
下载格式:.zip .pdf
下载大小:2838875
相关标签:
信息安全
技术
代码
安全
审计
规范
标准分类号
关联标准
出版信息
相关单位信息
标准简介
GB/T 39412-2020.Information security technology- Audit specification of code security.
1范围
GB/T 39412规定了代码安全的审计过程以及安全功能缺陷、代码实现安全缺陷、资源使用安全缺陷、环境安全缺陷等典型审计指标及对应的证实方法。
GB/T 39412适用于指导代码安全审计相关工作。
2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 15272-1994程序设计语言 C
GB/T 25069信息安全技术术语
GB/T 35273-2020信息安全技术 个人 信息安全规范
3术语、定义和缩略语
3.1术 语和定义
GB/T 15272-1994、 GB/T 25069 和GB/T 35273-2020 界定的以及下列术语和定义适用于本文件。
3.1.1
代码安全审计 code security audit
对代码进行安全分析,以发现代码安全缺陷或违反代码安全规范的动作。
3.1.2
安全缺陷 security defect
代码中存在的某种破坏软件安全能力的问题、错误。
3.1.3
跨站脚本攻击 cross site script
攻击者向Web页面里面插人恶意HTML代码,当用户浏览该页面时,嵌人到Web里面的HTML代码会被执行,从而达到攻击者的特殊目的。
3.1.4
缓冲区溢出 buffer overflow
向程序的缓冲区写入超出其长度的内容,从而破坏程序堆栈,使程序转而执行其他指令,以获取程序或系统的控制权。
3.1.5
死锁 deadlock
两个或两个以上的进程在执行过程中,因竞争资源或彼此通信而造成的一种阻塞现象。
标准内容
ICS35.040
中华人民共和国国家标准
GB/T39412—2020
信息安全技术
代码安全审计规范
Information security technologyAudit specification of code security2020-11-19发布
国家市场监督管理总局
国家标准化管理委员会
2021-06-01实施
规范性引用文件
术语、定义和缩略语
术语和定义
缩略语
审计概述
审计说明
审计目的
审计时机
审计人员
审计方法
审计过程
总体流程
审计准备
审计实施
审计报告
改进跟踪
安全功能缺陷审计
数据清洗
数据加密与保护
访问控制
日志安全
代码实现安全缺陷审计
面向对象程序安全
并发程序安全
函数调用安全
异常处理安全
指针安全
代码生成安全
资源使用安全缺陷审计
资源管理
内存管理
数据库使用·
文件管理
网络传输
GB/T39412—2020
GB/T39412—2020
9环境安全缺陷审计
遗留调试代码·
第三方软件安全可靠
保护重要配置信息
附录A(资料性附录)
附录B(资料性附录)
参考文献
代码安全审计报告
代码示例
本标准按照GB/T1.1一2009给出的规则起草GB/T39412—2020
请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。本标准由全国信息安全标准化技术委员会(SAC/TC260)提出并归口。本标准起草单位:信息安全共性技术国家工程研究中心、中国科学院信息工程研究所、国家保密科技测评中心、北京信安全测评中心、中国信息安全测评中心、中国申子技术标准化研究院、公安部第三研究所、国家计算机网络应急技术处理协调中心。本标准主要起草人:干彦杰、胡建勋、徐根炜、高振鹏、伊鹏达、肖树根、康蕊、霍玮、朴爱花、李丰、何建波、刘国乐、刘海峰、赵章界、李晨旸、王嘉捷、辛伟、孙彦、孙永清、郭运尧、干博、吴倩m
1范围
信息安全技术
代码安全审计规范
GB/T39412—2020
本标准规定了代码安全的审计过程以及安全功能缺陷、代码实现安全缺陷、资源使用安全缺陷、环境安全缺陷等典型审计指标及对应的证实方法。本标准适用干指导代码安全审计相关工作。2规范性引用文件
下列文件对干本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T15272—1994程序设计语言CGB/T25069信息安全技术术语
GB/T35273一2020信息安全技术
个人信安全规范
3术语、定义和缩略语
3.1术语和定义
GB/T15272—1994、GB/T25069和GB/T35273—2020界定的以及下列术语和定义适用干本文件。
code security audit
代码安全审计
对代码进行安全分析,以发现代码安全缺陷或违反代码安全规范的动作。3.1.2
安全缺陷
securitydefect
代码中存在的某种破坏软件安全能力的问题、错误。3.1.3
跨站脚本攻击
cross site script
攻击者向Web页面单面插人恶意HTML代码,当用户浏览该页面时,嵌入到Web单面的HTML代码会被执行,从而达到攻击者的特殊目的。3.1.4
缓冲区溢出
bufferoverflow
向程序的缓冲区写入超出其长度的内容,从而破坏程序堆栈,使程序转而执行其他指令,以获取程序或系统的控制权。
死锁deadlock
两个或两个以上的进程在执行过程中,因竞争资源或彼此通信而造成的一种阻塞现象。1
GB/T39412—2020
错误error
系统运行中出现的可能导致系统崩溃或者暂停运行的非预期问题。3.1.7
特殊元素specialelements
用于特定表达式或语言中分隔数据不同部分的字节、字符或字的序列。3.1.8
异常exception
导致程序中断运行的一种指令流。注:如果不对异常进行正确的处理,则可能导致程序的中断执行。3.1.9
SQL注入SQLinjection
将恶意SQL命令插入数据库请求参数,并提交给数据库执行的攻击行为。3.2
缩略语
下列缩略语适用于本文件。
API:应用程序编程接口(ApplicationProgrammingInterface)CSPRNG:伪随机数产生器(CryptographicallySecurePseudo-RandomNumberGenerator)DNS:域名系统(DomainNameSystem)HTML:超文本标记语言(HyperTextMarkupLanguage)HTTP:超级文本传输协议(HyperTextTransferProtocol)SQL:结构化查询语言(StructuredQueryLanguage)URL:统一资源定位符(UniformResourceLocator)4审计概述
4.1审计说明
针对软件系统的代码制定出安全缺陷审计条款,审计时可根据被审计的具体对象及应用场景对相关条款进行调整。考虑到语言的多样性,以典型的结构化语言(C)和面向对象语言(Java)为目标进行描述。代码安全审计应包括但不限于如下4个方面的具体条款。其中:安全措施37条审计条款;代码实现25条审计条款;资源使用32条审计条款;环境安全3条审计条款;总计97条审计条款。2审计目的
代码安全审计通过审计发现代码的安全缺陷,以提高软件系统安全性,降低安全风险。鉴于安全漏洞形成的综合性和复杂性,代码安全审计主要针对代码层面的安全风险、代码质量,以及形成漏洞的各种脆弱性因素。
通过代码审计形成审计报告,列出代码中针对审计列表的符合性/违规性条目,提出对代码修订的措施和建议。
审计时机
代码安全审计包括内部审计和外部审计。内部审计由单位内部的软件质量保证人员开展,审计的2
GB/T39412—2020
意义是发现和预防安全问题的发生。外部审计由第三方开展。外部审计需要较多的准备工作,不宜频繁安排。审计工作可安排在代码编写完成之后系统集成测试之前开展。由于资质认证、政策要求等因素,开展外部审计应提前通知开发团队,并预留足够时间。内部审计通过代码安全审计,保证软件代码安全质量。内部审计可安排在软件开发生命周期内的不同阶段。
历史审计结果可以作为审计考虑的因素。若审计出的安全问题较多,则应根据实际修复情况适当增加审计次数。在代码开发过程中,如果有频繁改变代码开发计划或调整单程碑等异常情况时,也应增加审计次数。
4.4审计人员
审计人员的主要工作职能是收集信息和代码缺陷分析等,应具备代码审计的专业知识;应能够客观地呈现代码的问题,不应隐瞒;应对代码等相关内容保守秘密,不得泄露相关信息。4.5审计方法
代码安全审计常用的方法是将代码安全缺陷形成审计检查列表,对照代码逐一检查。检查列表应根据被审计的对象和应用场景进行调整。考虑到审计内容的复杂性,审计方法建议采用工具审计和人工审计相结合,多种手段综合运用的方式。
采用专业代码审计工具对代码进行审计,形成审计报告,并对审计出的问题与标准相关审计项逐一人工核对。对于使用外部开源代码较多的系统,在审计时可先检测开源代码的使用率,开源代码的安全缺陷可从已知漏洞角度检查。由于审计工具的局限性,不可避免存在误报和漏报。对误报问题,应采用人工对比审计核查的方式开展。对于漏报问题应采用多个工具交叉审计的方式开展。人工审计是工具审计的必要补充,人工审计主要解决工具审计的误报和漏报问题。在人工审计实施中,可借助工具对代码模块、数据流、控制流等逻辑结构进行分析提取,并逐条比对分析。审计实施过程中,可根据审计工作需要划分工作阶段。如按进度或里程碑划分;按周、月、季度划分;按功能模块实施单元划分;按人员分工交叉审计划分等。对干审计出的缺陷,可根据缺陷的可利用性、影响程度、弥补代价等因素进行分级排序。5审计过程
5.1总体流程
审计过程包括四个阶段:审计准备、审计实施、审计报告、改进跟踪。审计准备阶段,主要开展基本情况调研、签署保密协议、准备检查清单等工作;审计实施阶段,主要开展资料检查、代码审查、结果分析等工作;报告阶段包括审计结果的总结、陈述等工作,如有必要进行相关问题的澄清和相关资料说明;改进跟踪工作由代码开发团队进行,丰要对审计出的问题进行修复。对于安全缺陷代码修改后,再次进行审计。代码安全审计流程见图1。SaG此内容来自标准下载网
GB/T39412—2020
审计准备
明确审计目的
审计实施
审计入场
审计准备
明确审计目的
签署保密协议
信息收集
背景调研
审计报告
改进跟踪
熟悉代码
代码安全缺陷检测
图1代码安全审计流程
制定检查列表
特殊情形审查
代码安全审计的目的包括软件采购/外包测试、软件产品的认证测试、公司软件代码安全性自查等。5.2.2签署保密协议
为避免被审计单位的代码被审计方用于非代码审计用途,双方应签署代码审计保密协议,明确双方的权利和义务。
5.2.3背景调研
了解代码的应用场景、目标客户、开发内容、开发者遵循的标准和流程等。熟悉代码
通过阅读代码,了解程序代码结构、主要功能模块,以及采用的编程语言。5.2.5制定检查列表
通过明确审计目的、背景调研、熟悉代码等工作,形成代码安全审计要点,制定代码安全的检查列表。检查列表包括检查项和问题列表。5.3
审计实施
5.3.1审计入场
入场实施环节中,审计人员和项目成员(关键代码开发人员等)均应参与。审计人员介绍审计的主要目标、访谈对象和检查的资料等。项目人员介绍项目进展、项目关键成员、项目背景、实现功能以及项目的当前状态等。
5.3.2信息收集
信息收集环节通过访谈等方式获得代码以及相应需求分析文档、设计文档、测试文档等资料。通过4
GB/T39412—2020
文档资料了解代码的业务逻辑等信息。在了解代码基本信息的基础上,通过深人分析设计文档、访谈关键开发人员等方式,区分核心代码和一般性代码,其中核心代码一般为涉及核心业务功能和核心软件功能的代码,一般性代码为非核心业务功能和非核心软件功能的代码。5.3.3代码安全缺陷检测
代码安全缺陷检测环节是根据制定的代码安全的检查项,采用工具审计、人工审计、人工结合工具审计方式检查是否存在安全缺陷,检测完成后进行安全性分析形成安全审计结果。5.3.4特殊情形审查
在有软件外包/采用开源软件/合作开发情形下,应对开源软件或外包部分进行代码安全审计。对干核心代码和一般性代码在审计时,采取重点审计和一般性审计措施,其中重点审计主要针对核心代码进行审计,一般性审计主要针对一般性代码进行审计。5.4审计报告
审计实施完成后,组织召开评审会,将初始审计结果提供给被审计项目成员,并提供澄清误解机会,允许项目成员提供其他需要补充的信息。评审会结束后,根据评审意见,调整审计结果,形成审计报告。审计报告包括审计的总体描述、审计结论等内容,并对可能产生的安全风险进行高、中、低分类描述。审计结论给出每条审计条款的符合/不5ZC符合的描述。审计报告的内容示例参见附录A。5.5改进跟踪
对审计中发现的问题进行修改,对未修改的应提供理由;对代码的有效变更进行记录存档。对于修复安全缺陷后的代码,可通过再次审计来确认问题是否解决。6安全功能缺陷审计
6.1数据清洗
6.1.1输入验证
关键状态数据外部可控
审计指标:应避免关键状态数据被外部控制。审计人员应检查代码中是否将与用户信息或软件自身安全密切相关的状态信息,存储在非授权实体都可以访问的地方,如结果为肯定,则系统可能有关键状态数据能被外部访问或篡改的安全风险。不规范代码示例参见B.2.1。
6.1.1.2数据真实性验证
审计指标:宜验证数据真实性,避免接收无效数据。审计人员宜检查代码是否对数据的真实性进行验证,包括但不限干:宜检查是否有数据源或通信源验证;a)
宜检查是否存在未验证或不正确验证数据的数字签名;b)
宜检查是否缺失或进行不恰当完整性检查;c)
宜检查安全相关的输人是否仅依赖干加密技术而未进行完整性检查;d)
宜检查是否验证文件内容而非文件名或扩展名;e
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。