写在前面
最近在学习摸索安全开发生命周期(SDL)和出口合规相关的文档,其中会涉及到像代码审计类似的硬性要求。比如SDL第四步实施要求弃用不安全的函数这一步可以用静态代码审计发现,还有最近在看的IEC 81001-5-1中5.1.3涉及到安全编码标准的最佳实践。
本篇是点新方向技能点的第一篇。
目录
0x01 安全编码最佳实践
0x02 CERT C/C++
0x03 MISRA C++
0x04 AUTOSAR
0x05 结论
0x06 参考
安全编码最佳实践
下图是我自己整理IEC 81001-5-1相关合规要求中对软件开发计划的要求,5.1.3要求采取最佳实践推荐已发布的规范例如ISO/IEC TR 24772,MISRA C/C++和 SEICERT C/C++编码标准。最后计划的范围是在MISRA C++、AUTOSAR C++和CERT C++中选择。
CERT C++是卡内基梅隆大学软件工程学院(SEI)的产品,它为安全可靠地实现C++代码提供了一系列规则和建议。MISRA C++和AUTOSAR C++的开发主要侧重于功能安全(safety),而CERT C++指南则侧重于信息安全(Security),并以一种主动的方式进行开发。下图为汽车行业最流行的编码标准。下面学习对比一下这三种编码规范优缺点。
CERT C++
IEC 81001-5-1安全编码最佳实践之一。C和C++的CERT®安全编码标准,针对不安全编码实践和可能导致可利用漏洞的未定义行为,提供了规则和建议。由软件工程研究所(SEI)为嵌入式开发人员创建。软件工程研究所是由美国国防部和国土安全部主要资助的研究和开发中心。
“我喜欢SEI CERT安全编码标准的理由有好几个”,Parasoft的首席宣传官阿瑟•希肯(Arthur Hicken)表示,“首先,它更关注安全编码实践,而不仅仅是安全问题的症状——例如,总是验证输入是一种安全编码实践,而SQL注入是一种症状。CERT已经分析了哪些指导方针是最关键的,可以被很好地分析,然后将它们分成应该遵循的“规则”,以及不那么关键或不那么可靠的“建议”。这有助于迅速将静态分析结果精简到最关键的程度。”
“此外,CERT还创建了一个风险评估框架,该框架有助于进一步优先考虑特定指南的静态分析结果,考虑到指南固有的严重性、开发此类项目的难度以及补救成本,”Hicken继续说道。“有了这个,你就可以得到非常细的优先级,这可以帮助你专注于最重要的事情,而不是处理大量的静态分析违规。”
最新的Parasoft C / C ++ 10.4.1,其重点是测试C ++代码。该产品现在完全支持SEI CERT C ++安全编码标准。Parasoft C / C ++测试10.4.1支持SEI CERT C ++标准定义的所有83条规则。
Parasoft上静态代码审计规则数227。
MISRA C++
IEC 81001-5-1安全编码最佳实践之一。MISRA全称为Motor Industry Software Reliability Association,即汽车工业软件可靠性联合会。该组织最早起源于英国政府发起的“SafeIT”项目。该组织从成立至今,一直致力于为车载电子系统中的嵌入式软件制订开发指导方针。
2019年,MISRA组织宣布C++ 编程规范将在未来和AutoSar C++编程规范进行合并。这样做的目的旨在为业界提供一个统一的C++编程最佳实践。未来这个统一的C++安全编程规范将覆盖汽车、航空航天、医疗设备和军事等行业。MISRA C++:2023®是备受期待的MISRA C++标准的下一个版本,预计将于今年晚些时候发布。这个新版本将整合AUTOSAR C++ 14指南,并支持最新版本的C++。
Parasoft上静态代码审计规则数108。
AUTOSAR C++
汽车开放系统架构(AUTomotive Open System Architecture) AUTOSAR于2003年确立,以应对汽车软件的爆炸式增长,为电子汽车架构定义了一个开放的行业标准。多年来,AUTOSAR不断发展,以满足新兴的汽车用例(如自动驾驶和车到一切(V2X)连接),从而创建了AUTOSAR自适应平台。
AUTOSAR最近更新了MISRA C++:2008和AUTOSAR C++ 14编码准则。AUTOSAR C++ 14采用了MISRA C++:2008的规则分类方法,同时也依赖于ISO/IEC 14882:2014标准来使C++实现现代化。此外,AUTOSAR C++ 14提供了对其他C++标准(如CERT C++安全编码标准)的追踪能力。
Parasoft上静态代码审计规则数923。
结论
IEC 81001-5-1推荐的安全编码最佳实践包括ISO/IEC TR 24772,MISRA C/C++和 SEICERT C/C++编码标准。MISRA C++和AUTOSAR C++的开发主要侧重于功能安全(safety),而CERT C++指南则侧重于信息安全(Security)。
信息安全方面,CERT C++(规则数227)侧重信息安全又是合规中推荐的最佳实践可以作为必选项。
功能安全方面二选一,AUTOSAR C++(规则数923)规则数量最多,当前测试下来也是报错最多的。如果编码要求从严,可以考虑使用AUTOSAR C++,但同时前期也会伴随开发效率降低。MISRA C++(规则数108)也是合规推荐的最佳实践,且当前规则数较少,是当前车企开发使用最受欢迎的标准。从2023版本开始逐步包含AUTOSAR C++(当前未完全包含)且最终可能取代AUTOSAR C++。从开发效率、发展趋势、合规上来看都是一个很好的选择。
最后的敲定还是需要多部门一起协商磨合,兼顾安全、合规和效率。
参考
GB∕T 39412-2020 信息安全技术 代码安全审计规范
https://www.auto-testing.net/news/show-99959.html
https://zhuanlan.zhihu.com/p/558432847?utm_id=0&wd=&eqid=e910f9b60003fc44000000066458bb67