0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

安全关键软件的非侵入式代码覆盖

星星科技指导员 来源:嵌入式计算设计 作者:Benjamin M. Brosgol 2022-06-28 15:50 次阅读

商业航空电子设备的 DO-178B 等认证标准要求有证据表明系统源代码完全通过源自需求的测试来执行。传统工具通过代码检测来获取覆盖率数据,但这会使分析变得复杂,因为被测试的代码并不是最终将执行的代码。

主机驻留两部分技术提供了一种高效且具有成本效益的替代解决方案:目标仿真器与非侵入式覆盖分析器相结合。模拟器不是解释器;相反,它将目标代码动态转换为本地主机指令。因此,测试套件通常比在实际目标硬件上执行得更快。覆盖分析器从从模拟器上的程序执行中检索到的对象分支信息中获取源覆盖数据,并执行符合最严格覆盖要求所需的任何附加分析。

简化目标平台的最终验证;它需要重新运行测试并显示结果与模拟器上的相同。这种方法完全支持 DO-178B 及其即将修订的 DO-178C 的所有级别的安全认证。

验证挑战

DO-178B 等安全认证标准中规定的一项主要验证活动是测试覆盖率分析,这涉及证明每个软件需求都得到满足,并表明基于需求的测试完全覆盖了源代码。覆盖率分析提出了几个问题:

· 插装:一种常见的方法是使用生成应用程序源代码的修改(插装)版本的工具,或者使用特殊开关编译应用程序以生成插装目标代码。添加的代码包含对适当日志记录函数的调用。但是,检测代码不是将在最终系统上运行的代码。要使用覆盖数据,开发人员必须证明它也适用于未检测的可执行文件。这不一定是一项简单的任务。

· 目标硬件:虽然最终的软硬件集成测试必须在实际部署的配置上进行,但在组件开发过程中需要目标板既昂贵又不方便。基于主机的解决方案更简单且更具成本效益。

· 源代码与对象覆盖率: DO-178B 要求源代码覆盖率,但覆盖率数据是根据执行程序计算得出的。在最高安全关键性(A 级)下,可能需要进行特殊分析来证明修改后的条件/决策覆盖率 (MC/DC)。

此处描述的技术解决了这些问题。它基于从运行未检测版本的应用程序软件的主机驻留目标仿真器生成的执行跟踪数据中获取源覆盖率指标。

DO-178B 测试覆盖率分析

DO-178B 规定了两种类型的测试覆盖分析 [1, §6.4.4]:

· 基于需求的测试覆盖分析:开发人员必须展示从每个需求到实现需求的源代码以及测试套件的可追溯性,该套件的执行提供了正确实现需求的信心。

· 结构覆盖分析:开发人员必须证明代码结构已经完全通过基于需求的测试。如果这些测试没有完全覆盖源代码,那么开发人员必须添加更多需求、添加更多测试和/或删除代码——称为“死代码”(DO-178B)或“无关代码”代码”(DO-178C)——不能追溯到需求。

所需覆盖范围取决于软件组件的安全关键级别。在 C 级,只需要声明覆盖率;即程序中的每条语句必须至少执行一次。

在 B 级,需要决策覆盖。在 DO-178B 用语中,决策是一个完整的布尔表达式,由原子布尔项(条件)和布尔运算符组成。例如,以下布尔表达式是具有三个条件的决策:

(B1然后B2)或者B3

此示例使用 Ada和 then和或 else短路形式,仅在必要时评估其右操作数,分别对应于 && 和 || C 中的运算符。决策覆盖要求程序中的每个决策都通过真假测试来执行。

在 A 级,需要 MC/DC:

· 程序中的每个条件都必须通过真假测试来执行。

· 程序中的每一个决定都必须经过真假测试。

· 必须证明每个条件独立地影响决策的结果(该条件变化,而所有其他条件保持不变)。

MC/DC 并不要求每个决策都使用其构成条件的每个可能的真值组合进行测试。这对于复杂的决策是不现实的,并且在条件耦合时(当相同的输入变量出现在多个条件中时)可能是不可能的。

图 1 显示了一个程序片段,说明了各种结构覆盖之间的差异。MC/DC 具有一些微妙的特征,在 Hayhurst等人[2] 的教程和Chilenski [3] 的详细研究中进行了全面讨论。

图 1:程序片段显示了不同种类的 DO-178B 结构覆盖。

pYYBAGK6svuAeMVgAAKkp_C-gnY924.png

源与对象覆盖

DO-178B 中一个通常被误解的要求涉及必须在 A 级证明的覆盖类型(源代码与目标代码)。第 6.4.4.2 节指出:

可以对源代码执行结构覆盖分析,除非软件级别为 A 并且编译器生成的目标代码不能直接追溯到源代码语句。然后,应该对目标代码执行额外的验证,以建立这些生成的代码序列的正确性。目标代码中编译器生成的数组绑定检查是不能直接追溯到源代码的目标代码示例。

这一要求(其措辞在 DO-178C 中正在修订)并不是说必须为 A 级证明对象覆盖。相反,它解决了源语言构造的问题,其编译的目标代码包含条件分支或从源代码。在这种情况下,开发人员必须验证生成的代码,例如通过解释每个不可追踪的目标代码序列的效果。但是覆盖分析仍然必须与源代码结构相关。仅显示目标代码覆盖率是不够的,除非进一步分析可以证明其与源代码覆盖率等价。

通过虚拟化进行目标仿真

在主机系统上模拟目标处理器的概念并不新鲜,但虚拟化技术的最新进展催生了一种高效且可移植的方法,例如开源 Quick EMUlator (QEMU) 工具。QEMU 支持客户操作系统的完整系统仿真,并允许通过机器描述模拟特定的嵌入式设备。它在主机平台上运行,并在一个两阶段的过程中,使用缓存方案将目标代码动态转换为本地主机指令以提高效率。该工具首先将目标代码翻译成中间语言,然后将中间表示编译成主机二进制指令。

动态翻译器一次对未插桩的目标代码段进行操作,将翻译(或高速缓存提取)与翻译后的指令的执行交错。当 QEMU 开始处理一段目标代码时,它会将指令转换为宿主代码,直到它到达下一个分支。翻译后的目标代码(称为翻译块)存储在缓存中(如果尚未存在),并执行其相应的主机指令。QEMU 然后继续翻译它停止的地方。由于缓存,目标指令块只需要解码一次。在实践中,由于主机处理器通常比嵌入式目标硬件更快,QEMU 的虚拟化方法提供了比直接在目标上执行更好的性能。

QEMU 是可以扩展以提供附加功能的开源技术。为了处理 DO-178B 要求的结构覆盖分析,一个有用的增强是支持生成执行跟踪。两种跟踪信息是相关的:

· 摘要跟踪:输出标识已执行指令的地址范围,以及对于条件分支,哪些分支被(被)采用。输出数据的大小是有限的(实际上与目标程序大小呈线性关系),因为它只显示执行了哪些指令/分支,而不是整个执行历史。

· 指定地址范围的完整历史跟踪:除了指示已执行的指令外,输出还显示了在每次评估相关条件表达式时采用了哪个分支。输出数据的大小取决于执行历史。

生成这些执行跟踪的 QEMU 的改编版本是覆盖分析技术的关键组成部分。

覆盖分析

尽管执行跟踪数据提供了对象指令覆盖率和对象分支覆盖率信息,但仍需要进一步分析以满足 DO-178B 的覆盖率目标:

· 跟踪必须映射到源代码结构,尤其是源代码中具有覆盖要求的结构(语句、决策、条件)。

· 必须评估所达到的覆盖水平——声明、决定、MC/DC。

为了启用这种分析,编译器可以在对象控制流图中保留源程序的决策结构并生成两种输出:

· 调试信息(DWARF),它将每个目标代码指令与源代码位置(文件、行、列)相关联。

· Source Coverage Obligations (SCO),它提供了计划结构的简洁表示,需要证明实现某些覆盖目标的证据。SCO 捕获程序中所有决策的结构。

使用来自仿真器的跟踪数据以及编译器提供的 DWARF 和 SCO 信息,覆盖分析工具可以推断测试的执行是否达到了所需的覆盖级别(语句、决策、MC/DC)。

确定执行跟踪数据是否暗示 MC/DC 存在一些挑战。一个问题是如何从对象分支覆盖范围推断源条件评估。如果程序统一使用短路形式(“然后”、“或其他”)而不是非短路运算符(“和”、“或”),则可以处理此问题。根据选项的指示,编译器在生成的目标代码中保留源代码的条件结构。第二个问题是,出于效率原因,是否可以仅使用摘要跟踪而不使用完整的历史跟踪。一般来说,答案是“不”,一个相对简单的决定说明了原因:

(B1然后B2)或者B3

该决策的目标代码可以仅由三个测试用例覆盖,如表 1 所示。

表 1:(B1 和 B2)或 B3 的对象分支覆盖测试。

poYBAGK6swWAS52zAACHdLN10t4179.png

但是,当有n 个独立条件时, MC/DC 至少需要n+1次测试,因此这里需要进行 4 次(再次参见图 1)。这意味着跟踪摘要数据(对象分支覆盖率)是不够的;需要完整的历史跟踪数据。Bordin等人和 Comar等人[7]给出了何时对象分支覆盖足以推断 MC/DC 的数学表征。

当提出目标代码覆盖率作为 MC/DC 的证据时要解决的其他问题记录在多个认证机构报告中[8,第 20 节]。

把它们放在一起

目标虚拟化方法已作为 Couverture (Coverage) 项目 的一部分实施,旨在为安全关键型软件开发的覆盖分析提供一个开放框架。AdaCore 的 GNATemulator 工具是对 QEMU 的改编,用于收集执行跟踪数据。GNAT 编译器编译带有开关的应用程序源程序,这些开关保留目标代码中的条件控制流并生成 DWARF 和 SCO 数据。然后在 GNATemulator 上运行未检测的可执行文件,生成执行跟踪数据。使用编译器和仿真器生成的信息,GNATcoverage 工具评估是否已实现所需的结构覆盖。如有必要,该工具会分析完整的历史跟踪数据以验证 MC/DC。图 2 描述了一个典型的开发场景。

图 2:虚拟化和覆盖分析准确评估结构覆盖。

pYYBAGK6swuAOhv_AAKWGh6ObW8278.png

这些工具目前适用于用 Ada 编写的应用程序,Ada 是一种在安全关键领域中经常使用的语言。未来版本将支持其他语言,包括 C。目前支持的目标架构包括 PowerPC 和 LEON。

高效的目标虚拟化,再加上一个从执行跟踪数据中推断出精确的源级覆盖率指标的工具,用于非仪器化/未修改的用户程序,标志着现有技术的进步。该技术在安全关键环境中特别有价值,支持各级安全认证,同时简化认证工作。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19348

    浏览量

    230264
  • 代码
    +关注

    关注

    30

    文章

    4802

    浏览量

    68743
  • 模拟器
    +关注

    关注

    2

    文章

    879

    浏览量

    43273
收藏 人收藏

    评论

    相关推荐

    华为云软件开发生产线(CodeArts)11 月新功能特性

    华为云软件开发生产线 CodeArts 是一站、全流程、安全可信的云原生 DevSecOps 平台,覆盖需求、开发、测试、部署、运维等软件
    的头像 发表于 12-18 09:23 273次阅读

    柔灵科技:侵入脑机接口可穿戴设备帮助监测和改善睡眠

    ,芯原微电子(海南)有限公司承办的第三届南渡江智慧医疗与康复产业高峰论坛顺利召开。   在脑机接口主题演讲环节,浙江柔灵科技有限公司联合创始人、首席运营官陈涵分享的主题是《关于侵入脑机接口可穿戴设备在睡眠领域的应
    发表于 11-22 15:31 226次阅读
    柔灵科技:<b class='flag-5'>非</b><b class='flag-5'>侵入</b><b class='flag-5'>式</b>脑机接口可穿戴设备帮助监测和改善睡眠

    如何安全有效的删代码

    作者:京东科技 王丹迪 删除代码软件开发过程中常见的一部分,但必须谨慎操作以确保不会引入错误或破坏现有功能。有效的做系统瘦身会降低维护成本,减少冗余代码,减少开发同事踩坑的机会。以下是几个步骤
    的头像 发表于 11-20 10:39 248次阅读

    使用TMS320C31在通信网络中实现在线侵入测量设备

    电子发烧友网站提供《使用TMS320C31在通信网络中实现在线侵入测量设备.pdf》资料免费下载
    发表于 10-28 10:07 0次下载
    使用TMS320C31在通信网络中实现在线<b class='flag-5'>非</b><b class='flag-5'>侵入</b><b class='flag-5'>式</b>测量设备

    浅谈PUF技术如何保护知识产权

    ,以非法牟利。正版厂商因此遭受了经济、品牌等多方面的巨大损失。 反向工程是盗版者常用的方法,通过将已编译的软件转换为可读的源代码,绕过安全机制,获取软件内容。常规手段通常无法解决盗版问
    发表于 07-24 09:43

    该如何提高代码容错率、降低代码耦合度?

    提高RT-Thread代码的容错率和降低耦合度是确保代码质量和可维护性的关键,下面列举了几种在编写代码时,提高代码容错率和降低耦合度的思路。
    的头像 发表于 06-26 08:10 689次阅读
    该如何提高<b class='flag-5'>代码</b>容错率、降低<b class='flag-5'>代码</b>耦合度?

    接触温度传感器的优缺点有哪些

    的优点 安全性高 接触温度传感器的最大优点是安全性高。由于无需与被测物体直接接触,因此可以避免触电、烫伤等危险。在高温、高压、有毒、有害等环境下,
    的头像 发表于 06-19 14:37 1149次阅读

    接触温度传感器的定义、工作原理、类型、特点、应用和发展趋势

    接触温度传感器是一种无需与被测物体接触即可测量温度的传感器。它具有测量速度快、精度高、使用方便、安全可靠等特点,广泛应用于工业、医疗、科研等领域。本文将详细介绍接触
    的头像 发表于 06-19 14:34 3483次阅读

    基于压电陶瓷传感器的智能枕头侵入生命体征监测

    影响。所有这些限制都极大地限制了可穿戴设备在监测人类睡眠方面的应用。迫切需要开发一种简化、侵入、舒适、经济高效的实时监测系统,该系统可以检测睡眠中的人类生命体征。 本研究开发了一种嵌入压电陶瓷(PZT)传感器
    发表于 06-12 15:20

    探讨AI编写代码技术,以及提高代码质量的关键:静态代码分析工具Perforce Helix QAC &amp; Klocwork

    软件开发人员夜不能寐的事情比比皆是。如今,他们最关心的问题不再是如何用自己喜欢的语言(C、C++、Erlang、Java 等)表达最新的算法,而是人工智能(AI)。 本文中,我们将介绍AI编写代码
    的头像 发表于 06-05 14:10 420次阅读

    面向企业关键业务场景的分布存储软件ExponTech WDS

    面向企业关键业务场景的分布存储软件ExponTech WDS
    的头像 发表于 06-05 09:41 344次阅读
    面向企业<b class='flag-5'>关键</b>业务场景的分布<b class='flag-5'>式</b>存储<b class='flag-5'>软件</b>ExponTech WDS

    生成AI之下,软件供应链安全的升级更迫切

    电子发烧友网报道(文/黄晶晶)AI大模型不仅能够文生图、文生视频、人机对话等,还能够帮助开发人员写代码,但这又出现另一个问题,ChatGPT产生的代码也可能存在漏洞。可以说,全球软件供应链安全
    的头像 发表于 05-31 18:05 7013次阅读
    生成<b class='flag-5'>式</b>AI之下,<b class='flag-5'>软件</b>供应链<b class='flag-5'>安全</b>的升级更迫切

    ETAS与BlackBerry QNX合作为软件定义汽车和网络信息提供安全基础

    QNX业务部门已签署合同,将共同销售和推广软件解决方案,以加速下一代软件定义汽车(SDVs)安全关键功能的开发。
    的头像 发表于 04-12 09:52 457次阅读

    迈威通信工业以太网交换机通过软件代码安全审定

    和深入测试,MISCOM7000交换机的软件代码安全审定中表现出色,不仅未发现任何明显的安全漏洞和缺陷,更展现出强大的防御能力,能够有效应对各类恶意攻击和潜在威
    的头像 发表于 03-29 10:43 375次阅读
    迈威通信工业以太网交换机通过<b class='flag-5'>软件</b>源<b class='flag-5'>代码</b><b class='flag-5'>安全</b>审定

    Teledyne SP Devices侵入干涉成像技术SS- OCT的高性能数据采集

    1、重点: 扫频源OCT 侵入干涉成像技术SS-OCT 的工作原理以及数字化仪的集成和时钟方面 K-space重映射 2、 欢迎您参加今天的网络研讨会,重点了解 Teledyne SP
    的头像 发表于 02-29 18:25 1213次阅读
    Teledyne SP Devices<b class='flag-5'>非</b><b class='flag-5'>侵入</b><b class='flag-5'>式</b>干涉成像技术SS- OCT的高性能数据采集