标准解读|如何依据GB/T 34943-2017标准建立C/C++代码测试技术体系
GB/T 34943-2017《C/C++ 语言源代码漏洞测试规范》 是由国家质检总局和国家标准委联合发布的国家标准,2017版为最新版本。该标准是软件检测实验室在开展代码安全测试的一个依据,也是软件测试实验室申请CNAS、CMA等相关资质时可以依据的标准方法。
GB/T 34943-2017《C/C++ 语言源代码漏洞测试规范》 标准中,从整体上介绍了C/C++ 语言源代码漏洞测试,包括测试的四个阶段、测试管理、测试工具以及测试文档。介绍了C/C++ 语言源代码漏洞测试的内容,一共8个大类、32个小类的漏洞类型,本文我们主要介绍测试内容。
一、源代码漏洞测试过程:
遵循 GB/T 15532-2008,分为测试策划、测试设计、测试执行和测试总结四个阶段。
测试策划:确定目标、范围、依据、环境和工具,分析评估风险并制定应对措施,明确各阶段人员角色、任务、时间和成果,形成《测试计划》。
测试设计:结合业务和技术特点,明确环境、工具、需求、方法(自动化静态分析工具 + 人工分析)、内容(含 8 类漏洞)及准入 / 准出条件,设计包含名称、操作步骤等要素的测试用例,形成《测试说明》。
测试执行:按测试用例执行工具扫描,记录过程和结果;人工按类别或风险级别分析,验证疑似漏洞、筛除误报并与开发人员确认,形成《测试日志》。
测试总结:核查测试各环节正确性,确认目标和需求是否满足,总结内容、方法和结果,出具《测试总结报告》。
二、源代码漏洞测试管理
过程管理:提出各阶段任务和质量要求,安排质量监督与阶段评审并形成文档,管理风险并提供资源保障(含环境、工具等),明确测试项目负责人、设计员等 7 类角色及职责。
过程评审:每个阶段结束后开展评审,包括测试策划(环境、分工等合理性)、测试设计(需求分析、用例等有效性)、测试执行(用例完整性、结果真实性等)、测试总结(目标完成度、结论追溯性等)。
配置管理:按 GB/T 20158-2006 要求,将测试过程中产生的软件工作产品纳入配置管理。
可参考上述流程编制代码测试作业指导书,如下示例:

三、源代码漏洞测试工具
需满足 GB/T 15532-2008 中 4.8.2 要求,重点考虑漏报率和误报率,覆盖标准测试内容,测试前需升级和维护漏洞规则库及测试引擎,可结合需求选用商业或开源工具。如果有申请CMA资质或CNAS资质的需求,则应至少配备一款商业软件代码测试工具。
四、源代码漏洞测试文档
包括测试计划、测试说明、测试日志和测试总结报告,可单独出具或与其他测试文档合并,基本内容参考标准附录 A中的案例。
五、源代码漏洞测试内容
在GB/T 34943-2017《C/C++ 语言源代码漏洞测试规范》 标准中,一共给出了一共8个大类、32个小类的漏洞类型,分别有:
行为问题:不可控的内存分配。
路径错误:不可信的搜索路径。
数据处理:相对路径遍历、绝对路径遍历、命令注入、SQL 注入、进程控制、缓冲区溢出、使用外部控制的格式化字符串、整数溢出、信息通过错误消息泄露、信息通过服务器日志文件泄露、信息通过调试日志文件泄露、未检查的输入作为循环条件。
错误的 API 协议实现:堆检查。
劣质代码:敏感信息存储于上锁不正确的内存空间。
不充分的封装:公有函数返回私有数组。
安全功能:明文存储口令、存储可恢复的口令、口令硬编码、敏感信息明文传输、使用已破解或危险的加密算法、可逆的散列算法、密码分组链接模式未使用随机初始化矢量、不充分的随机数、安全关键的行为依赖反向域名解析、没有要求使用强口令、没有对口令域进行掩饰、通过用户控制的 SQL 关键字绕过授权、未使用盐值计算散列值、RSA 算法未使用最优非对称加密填充。
Web 问题:跨站脚本 。
六、源代码漏洞测试用例
根据标准中给出的测试内容,制作测试用例,如针对行为问题,验证程序内存分配是发呕可控。在程序中未指定内存分配大小的上限,在分配内存前已对分配的内存大小进行验证,确保要分配的内存大小不超过上限。


以上就是针对如何参照GB/T 34943-2017标准建立C/C++代码测试技术体系的介绍,希望能够对您有所帮助,如需C/C++代码测试作业指导书,可私信我获取。
更多推荐



所有评论(0)