前言
前言
汽车软件故障示例
汽车软件故障示例
SAST在安全关键软件开发中的作用
SAST在安全关键软件开发中的作用
-
通过编码标准进行预防:编码标准是安全关键软件开发的重要组成部分,因为它们定义了一组更安全的编程语言子集。汽车软件中最常用的标准是 MISRA C 和 MISRA C++(还有相关的AUTOSARC++标准)。执行更严格的安全编码标准,可以提前消除许多软件缺陷,重点是避免使用已知的危险语法和每种语言中潜在未定义行为的部分。 -
代码覆盖率不代表一切:许多安全标准需要高水平的代码覆盖率(以证明测试执行了大部分语句和条件)。虽然这是非常详尽的,但做起来成本很高,而且必须在开发的每个主要阶段重复进行(单元、集成和系统测试)。其实软件的关键性决定了覆盖率的水平,一些不太关键的软件不需要正式的测试覆盖率。虽然测试代码覆盖率是评估软件质量的一个指标,但在有些情况下,它并不是绝对的。 -
被基于覆盖率测试所遗漏的漏洞和错误:基于覆盖率指标的软件测试本质上是基于单元的测试(尽管覆盖率也会在系统层面进行评估)。而并发性错误和安全漏洞是两个在严格测试中也可能被遗漏的隐患。并发产生的错误(如竞争条件)只有在运行过程中出现一些不可预见的情况时才会被发现。安全漏洞是存在于代码中的错误 – 造成错误的原因通常是由于在测试期间没有考虑输入的类型。SAST可以及早发现这些错误,并防止它们在开发周期的后期成为绊脚石。 -
及早发现缺陷:严格的测试可以发现软件中的大多数缺陷,但成本高昂且极其耗时。在编写代码时就发现和修复这些错误比在开发周期后期便宜得多(随着时间的推移,发现缺陷的成本呈指数级增长)。静态分析可以在代码编写时检测错误——如果能作为开发人员开发环境的一部分,这将大大降低缺陷出现在下游时的成本。 -
分析开源和第三方代码:在嵌入式软件开发中,使用第三方代码和开源软件是一个常见现象。一些安全标准认为,任何没有按照特定标准开发的软件都是血统不明的软件(SOUP)--是需要仔细检查后才能纳入系统的。针对这类情况,软件组成分析工具SCA可以提供帮助,如GrammaTech CodeSentry,可以分析第三方二进制文件以发现缺陷和安全漏洞,并生成软件材料清单(SBOM)。
总结
总结
本文始发于微信公众号(关键基础设施安全应急响应中心):原创 | 关于汽车软件安全保障改进
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论