编码与安全指南

在每次提交中自动执行编码规范

静态分析使编码规范从纸面上的建议转变为必须遵守的工程约束。PC-lint Plus在每次构建时都会自动对MISRA C和C++、AUTOSAR、CERT-C以及CWE进行强制检查,并通过基于查询的自定义规则机制,将检查范围扩展至项目特定的约束,涵盖架构规则、命名约定以及特定领域的安全要求。

指南目的PC-lint Plus支持的版本
MISRA C嵌入式/安全关键系统中C语言的安全性与可靠性MISRA C:2025、MISRA C:2023、MISRA C:2012(第1-4号修正案)、MISRA C:2004
MISRA C++嵌入式/安全关键系统中C++的安全与可靠性MISRA C++:2023、MISRA C++:2008
AUTOSAR 符合AUTOSAR标准的汽车ECU软件编码规则AUTOSAR 17和19
CERT-CC语言的安全与可靠性最佳实践可静态强制执行的CERT-C规则
CWE常见软件和硬件漏洞列表CWE前25名、CWE前10名、KEV(所有与C/C++相关的条目)、CWE兼容认证
自定义指南特定于组织的规则和约束通过AST检查实现基于查询的自定义检查

MISRA C和MISRA C++

MISRA(汽车工业软件可靠性协会)发布针对安全关键型和嵌入式软件应用最广泛的编码指南。尽管其名称源于汽车行业,但只要使用C或C++作为实现语言,MISRA指南在航空航天、医疗、工业和铁路领域的开发中均被广泛采用。

MISRA C针对C语言。其规则旨在消除在嵌入式环境中未定义、由实现定义或存在其他风险的代码结构:未初始化的变量、隐式类型转换、不可达代码,以及数百种类似的模式。MISRA C++将同样的规范扩展到C++语言。

这些指南会随着语言标准的演进而更新。MISRA C:2025和MISRA C++:2023是当前的最新版本。

PC-lint Plus对MISRA的支持

  • MISRA C:2025
  • MISRA C:2023
  • MISRA C:2012(含第1、2、3和4号修订)
  • MISRA C:2004
  • MISRA C++:2023
  • MISRA C++:2008

AUTOSAR

AUTOSAR(汽车开放系统架构)是一个全球性的汽车行业合作组织,致力于为汽车ECU定义标准化软件架构。其C++编码指南规定编写C++代码的规则,以确保代码能够正确集成到不同供应商提供的符合AUTOSAR标准的ECU中。

AUTOSAR C++指南针对汽车软件系统中的代码质量、可靠性和安全性提出要求。遵守这些指南有助于支持由不同团队和供应商开发的组件之间的互操作性,并为C++代码库符合ISO 26262功能安全标准提供路径。

PC-lint Plus开箱即支持AUTOSAR 17和AUTOSAR 19。

CERT-C

CERT-C编码标准由卡内基梅隆大学软件工程研究所(SEI)的CERT部门制定。该标准针对C语言,专门针对安全漏洞和可靠性故障,提供编码指南和最佳实践。

CERT-C具有领域通用性。凡是需要安全可靠的C语言代码的领域,如航空航天、汽车、医疗保健和金融软件,均可采用该标准。该工具已获得通用准则(Common Criteria)和ISO 27001合规框架的认可,常与MISRA C搭配使用,适用于那些同时需要功能安全和网络安全保障的项目。

PC-lint Plus支持CERT-C的许多可静态强制执行的指南,涵盖该标准中广泛的安全与可靠性规则。

CWE:通用弱点枚举

CWE是一份由社区维护的常见软件和硬件弱点类型清单,其数据来源于NIST和CISA。其目标是让这些弱点广为人知,以便在开发阶段就予以消除,而不是在部署后才被发现。

“CWE 25大最危险软件弱点”和“CWE 10大KEV(已知被利用的漏洞)弱点列表”为开发团队和工具供应商提供优先处理的目标。获得CWE兼容性认证,表明静态分析工具能够以有据可查且可验证的方式覆盖这些列表中的弱点。

PC-lint Plus 2.1及以上版本已通过CWE兼容性认证,涵盖CWE 10大KEV弱点列表中所有与C和C++相关的漏洞,以及CWE 25大最危险软件弱点中的大部分内容。

自定义编码指南

已发布的编码标准涵盖常见的缺陷类别和语言风险。大多数项目还存在其架构、组织或领域特有的约束,这些约束超出任何已发布指南的范围。PC-lint Plus通过基于查询的自定义规则机制同时支持这两方面,该机制对项目特定约束与对MISRA或AUTOSAR规则一样,均采用相同的静态强制执行机制。

PC-lint Plus的查询系统会遍历分析过程中生成的抽象语法树(AST),并使用静态类型的领域特定语言来精确指定检查内容。自定义规则可强制执行架构约束、标记反模式,或定义组织特有的安全规则。

相同的查询机制还用于定义合理的例外情况:即精确的、基于模式的抑制规则,仅在满足特定条件时生效,而非将整个规则类别一概忽略的广泛抑制。这确保抑制文件保持简洁、可审计且具有明确目的。

抑制管理与审计就绪

对现有代码库进行静态分析会发现一些需要审查、说明理由或抑制的结果。如果没有一套结构化的方法来管理这些决策,抑制文件中就会积累过时的异常,有正当理由的偏差则无法记录,配置也会偏离最初审核批准的状态。

PC-lint Plus支持在单个检测结果、代码区域、文件以及规则类别等不同层级进行抑制设置。每项抑制操作均可记录且可追溯。诊断统计(Diagnostic Accounting)功能会标记不再需要的抑制项,从而防止过期异常的积累,避免削弱审计的可信度。