【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(三)

文章目录

  • 第六章 通过认证帧定时实现VulCAN的非once同步
    • 6.1 问题陈述
    • 6.2 方法概述
    • 6.3 动机和缺点
      • 6.3.1 认证帧定时隐蔽通信
      • 6.3.2 VulCAN 的 vatiCAN后端 Nonce同步的应用【这块是一点没看明白】
    • 6.4 设计与实现
      • 6.4.1发送方
      • 6.4.2 接收方
      • 6.4.3 设计参数配置
      • 6.4.4 实现
    • 6.5 安全注意事项
      • 6.5.1 系统模型
      • 6.5.2攻击者简介-级别1:网络攻击者
      • 6.5.3 攻击者配置文件-级别2:软件攻击者
      • 6.5.4 已知Nonce机制威胁
      • 6.5.5 安全措施
      • 6.5.6 新的VulCAN攻击扩展梵蒂冈后端:消息抑制
      • 6.5.7中断可信执行
    • 6.6 结论
  • 第七章 结论
    • 7.1 贡献
    • 7.2 局限性和未来工作
    • 7.3 最后的想法

第六章 通过认证帧定时实现VulCAN的非once同步

鉴于在openmsp430硬件上利用中断驱动的 iat 的良好结果,该机制可以明智地应用于更具体、更实际的上下文中。本章激励并讨论了 VulCAN 中应用程序和相应的认证流量之间的时序,作为这种隐蔽带宽的具体来源,并提出了将其用于非once同步的目的,以减轻当前 VulCAN 设计中的性能和安全相关问题。从这个讨论中可以看出,尽管隐蔽传输有缺点,但它可以大大有利于现有的安全解决方案,即使只暴露很少的补充带宽

6.1 问题陈述

在身份验证的通信中,消息新鲜度保证的实现已被证明是一个非常重要的挑战[51,37]。大多数解决方案基于将一些新鲜度值或nonce关联到每个消息,其唯一性是通过身份验证的先决条件。虽然有效,但这种临时机制意味着在带宽消耗和安全保证之间难以权衡。实际上,为每个消息显式传输nonce需要增加流量吞吐量,这鼓励降低nonce大小。然而,更大的nonce空间可以更有力地保证nonce的唯一性,从而保证新鲜度,因为有更多的唯一值可用。

因此,许多身份验证协议[36,34]只显式传输部分nonce值,而将其剩余部分隐式存储并由身份验证通信的参与者适当更新。这种方法对带宽使用和安全属性都有好处,但是当这些隐式nonce段由于消息丢失、欺骗或组件重置而在参与者之间不同步时就会中断。
在这里插入图片描述
图6.1:VulCAN的vatiCAN后端基于IAT的非once同步的高级概述,与原始 VulCAN 设计的差异用灰色表示

具体来说,在VulCAN中,实现了两种可选的身份验证协议,即LeiA[36]和vatiCAN[34],它们都使用了这种部分隐式的nonce值。当前的VulCAN设计没有适当的措施来从隐式随机数不同步中恢复,不涉及系统范围内的随机数广播,如果这样的广播发生,广播本身需要额外的带宽使用,会丢弃有效的流量。在这种情况下,vatiCAN 特别脆弱,因为它假定了完全隐式的临时值,因此在消息丢失的情况下,它对临时去同步的抵抗力为零。相比之下,LeiA 只隐式呈现nonce值的上半部分,从而适应某种程度的nonce非同步。第2.2.5节更详细地讨论了源自这些非一次性同步机制的特定于vulCAN的挑战。

6.2 方法概述

从本质上讲,本章提出了对VulCAN的 vatiCAN 后端的扩展,通过利用隐蔽带宽,旨在加强其nonce机制从消息丢失中恢复的能力。本节通过关注它与当前VulCAN设计的不同之处,对这种方法的工作原理进行了高层次的概述。图6.1作为该方案的说明性指南,并指出了原始VulCAN的结束位置,以及该扩展的开始位置。为了避免混乱,本文和图形概述中都省略了几个步骤,但这些步骤将在本章的其余部分进行更详细的讨论。

在原始的VulCAN设计中,通过VulCAN认证的连接从发送方到接收方的消息传输过程如下。首先,发送方传输手头的消息或应用程序消息。然后,它使用本地nonce计算一条消息认证码(MAC)。最后,它传输带有该MAC的第二条消息,称为身份验证消息。在接收到应用程序消息后,接收方使用其本地nonce计算出应用程序消息的MAC,并将其与随后接收到的认证消息中携带的MAC进行比较。如果两个mac相等,则认证通过,接收方接受该应用消息;否则,则丢弃该应用消息。

在此VulCAN扩展中,发送方在发送身份验证消息之前引入延迟,这是其本地nonce值的N个最低有效位的编码。接收方像以前一样继续,但是监视消息对的间隔到达时间。如果使用其本地nonce进行身份验证失败,它不会立即丢弃手头的应用程序消息。相反,它用从获得的到达间隔时间中解码的位替换其本地nonce的N个最低有效位,然后使用该新nonce计算不同的MAC,并使用该nonce重新进行身份验证。

因此,这种方法将第4章和第5章中讨论的IAT通道迁移到VulCAN的实际上下文中。更具体地说,这里使用第5.4节的中断驱动实现,因为它被评估为提供最高的可靠性。后者在应用程序消息之间的计时中携带其隐蔽的有效负载,而本实例利用了它们相对于其身份验证帧的单独计时。除此之外,它们还采用了相同的秘密通信机制,在这种方法中,这种机制被用于VulCAN的梵蒂冈后端非即时同步的特定目的。

6.3 动机和缺点

本节激发了第6.2节中提出的方法的本质,更具体地说,一方面是在隐蔽传输中使用身份验证帧定时,另一方面是在VulCAN的梵蒂冈后端将隐蔽带宽应用于非once同步。这种区别是明确的,以强调当超越本文讨论的特定方法的上下文时,两者如何能够独立于另一方受益于VulCAN设计。

6.3.1 认证帧定时隐蔽通信

透明度。VulCAN库完全控制应用程序消息的发送和接收,以及身份验证消息。因此,利用这种隐蔽带宽所需的所有与时间相关的操作都可以嵌入到VulCAN库中,而不会影响其用户界面。
然而,应该注意的是,当利用身份验证帧时间时,使用VulCAN的实时方面会受到影响。更具体地说,由于接收端的VulCAN库只有在经过身份验证后才将应用程序消息传播给接收端的高级逻辑,因此延迟身份验证帧会延迟应用程序帧的处理。因此,由于这些时间考虑,这种利用不能被认为是完全透明的。

向后兼容性。由于原始的VulCAN库在发送和接收CAN流量时不依赖于任何身份验证帧定时管理,因此这里描述的隐蔽传输仅仅是对其现有功能的扩展,并且在启用它时不会破坏与硫化节点的兼容性。此外,与原始VulCAN相比,它没有引入任何额外的CAN总线负载,而只是在发送端由于有效负载到时间编码而增加了额外的计算负载,以及在接收端进行反向计算和到达时间监控。
然而,在功能上依赖于CAN数据包计时的应用程序,取决于它们对这些计时偏差的敏感性,当它们的硫化CAN节点转换到使用此扩展时,可能会中断,因为它的实时后果已经在前面的透明度参数中描述过。因此,这种方法不提供绝对的向后兼容性。

应用程序的独立性。尽管在第4章和第5章中介绍的IAT通道要求其底层应用程序使用周期性通信,但这种方法中使用的IAT通道没有施加这样的约束。由于隐蔽信息不是在后续应用消息之间通过定时传输,而是在每个单独的应用消息及其相应的认证帧之间通过定时传输,因此这里使用的IAT信道不依赖于应用间消息定时,从而减轻了前几章中讨论的信道所带来的通信周期性先决条件。
与前面提到的论点类似,必须在应用程序独立性的声明中引入细微差别。实际上,应用程序属性可以限制这个IAT通道的带宽,因为身份验证帧不能延迟到后续应用程序消息之后而不丢失这些消息。因此,高流量的VulCAN应用程序提供较低的隐蔽带宽,在极端情况下为零。

6.3.2 VulCAN 的 vatiCAN后端 Nonce同步的应用【这块是一点没看明白】

2 N 长度消息丢失 突发恢复。显式(虽然隐蔽)传输N个最不重要的本地nonce位,允许在身份验证消息到达时成功桥接发送方和接收方的本地nonce值之间最大为2 N 的间隙。出于安全考虑,如第6.5节所述,只有接收方的随机数落后于发送方的随机数才能恢复,这在 vatiCAN 相当于从消息丢失中恢复

实际上,vatiCAN 保证单调递增的本地 nonce 值,这些值在发送方(接收方)成功的消息传输(到达)时更新,这意味着发送方较高的本地 nonce 意味着一些传输没有相应的到达。此外,在每次成功传输/到达时,梵蒂冈将本地 nonce 值增加1,nonce 间隙为 2N 对应于丢失的后续消息。相比之下,当前的 VulCAN 设计完全牺牲了消息丢失恢复,以便在其 vatiCAN 后端抵御重放攻击,如2.2.5节所述,这种方法可以部分减轻这种攻击。

6.4 设计与实现

本节将讨论通过在 VulCAN 的 vatiCAN 后端进行身份验证帧定时操作来管理非once同步的建议方法,作为第6.2节中给出的高级概述的详细阐述。包括发送端和接收端逻辑,每个逻辑都有图形表示。该设计的灵感来自于为 AUTOSAR 提出的基于计数器的非once同步机制[37],主要是在接收端处理部分隐式传输的非once。进一步给出了关于这种设计的配置的一些考虑,以一种比前面6.3节中使用的更实际的方式来说明这种方法的动机和缺点。最后,对该设计的实际实现进行了讨论。

6.4.1发送方

在原始的 VulCAN 设计中,发送节点每次传输认证消息时,首先发送当前的消息,然后计算其对应的MAC值,并毫不延迟地将该MAC值作为第二条消息(认真消息)的有效载荷传输。

在这种可替换方案的 nonce 同步机制中,发送方将用于 MAC 计算的 nonce 的 N 个最低有效位编码为一个传输间隔时间,然后通过延迟该认证有效载荷的传输来建立。在这种设计中,延迟是由执行适当长度的忙碌等待循环引起的。ITT编码进一步通过将要传输的 N 个 nonce 位所形成的数字乘以时序间隔 δ 来完成。图6.2图形化地表示了在发送端执行的逻辑,与原始 VulCAN 设计不同的步骤用灰色表示。

6.4.2 接收方

在原始 VulCAN 设计中,认证通信通道上的接收节点首先接收应用程序消息,然后使用其本地 nonce 值计算期望的 MAC 值,然后接收相应的认证帧。如果后者携带的有效载荷等于预期的 MAC,则身份验证成功,并将应用程序消息继续传递给接收方的高级逻辑。否则,该应用程序消息将被丢弃。

该设计的第一个扩展主要驻留在CAN驱动软件中,并容纳IAT值的集合。首先,将一个环形IAT缓冲区添加到接收器的软件中,该缓冲区保存应用程序消息身份验证消息到达间隔时间,CAN 驱动程序软件和 VulCAN 库都可以访问该缓冲区。IAT值的注册被嵌入到CAN驱动软件中,使用一种类似于5.4节IAT通道实现的中断机制。在每个CAN消息到达时,触发一个中断,其 ISR 需要测量其相对于前一个到达的时间并将该值存储在IAT缓冲区中。该ISR包含在附录A中,其中显示它仅包含5行C代码。此外,在接收机的软件中增加了一个 IAT 索引,即由这个扩展的CAN驱动程序在消息到达时更新,以表示 IAT 缓冲区中最近注册值的位置。与 IAT 缓冲区一样,该索引可以由 VulCAN 库和这个扩展的 CAN 驱动程序访问。
在这里插入图片描述
图6.2:在 VulCAN 的 vatiCAN 后端利用身份验证帧时间进行非once同步时的发送端消息传输流程图

在这里插入图片描述
图6.3:在 VulCAN 的 vatiCAN 后端利用身份验证帧时间进行 once 同步时的接收方消息接收流程图与原始VulCAN设计的差异用灰色表示。N表示隐蔽传输的 nonce 位的数量,δ表示使用的IAT值粒度,buf 是指一个保存IAT值的缓冲区。 与原始 VulCAN 设计的差异用灰色表示。N表示秘密传输的nonce位的数量,δ表示使用的IAT值粒度。

其次,VulCAN 库本身的 vatiCAN(梵蒂冈)后端对消息身份验证失败进行了功能扩展。在这种情况下,首先根据存储在IAT缓冲区中的最新身份验证帧的时间构造一个新的暂定 nonce,并通过将 IAT 索引添加到该 IAT 缓冲区的起始地址来定位到内存中。在构造新的 nonce 时,首先通过将相应的 IAT 值除以 δ (参见第6.4.1节)获得 N 个nonce位 Ndec,然后与接收器本地nonce值的 N 个最低有效位 Nrec 进行比较。如果 Ndec 超过 Nrec,则接收器的本地非 nonce 最低有效位被 Ndec 替换。否则,在替换完成之前,该本地 nonce 值的上 32−N 位部分加1。

基于新的nonce,在接收端计算第二个MAC值,然后将其与接收到的MAC值进行比较。如果它们相等,则在第二次尝试时身份验证成功,并且将手头的应用程序消息传播到接收方的应用程序逻辑。但是,如果身份验证再次失败,则将接收方的nonce设置为发生第一次身份验证失败的原始本地值,并且丢弃处于危险中的应用程序消息。

图6.3说明了这些接收端操作,用灰色表示了对原始VulCAN实现的补充。在概述中显示的执行流分支,指的是中断驱动的IAT值注册方法,如第5.4节中实现的,也就是说,注册是在嵌入在CAN驱动软件中的中断服务例程的执行中完成的。

6.4.3 设计参数配置

第6.3节介绍了这种方法的动机和缺点。到目前为止,在配置设计参数时存在的权衡尚未量化,本节将对此进行描述。

隐式传输的 nonce 位的数量(N)。通过身份验证帧定时隐式传输的最不重要的 nonce 位的数量N,需要仔细考虑底层应用程序的属性,以及针对消息丢失的目标健壮性。
N的值越高,意味着在一个身份验证帧延迟中编码的比特越多,这意味着可能出现更大的延迟。实际上,编码更多的比特需要更多的ITT/IAT值的变化,并且在编码可能性之间给定固定的定时间隔δ,这意味着需要建立更大的延迟(参见第6.4.1节)。正如第6.3节所讨论的,这种延迟可能会破坏VulCAN应用程序子集的向后兼容性。然而,正如第6.3节所解释的那样,只要 2N 的消息丢失突发就可以被这个提议的方案克服。从这个角度来看,更高的N值是可取的,这在确定N时引入了向后兼容性和消息丢失健壮性之间的权衡。

IAT编码粒度(δ)。δ值表示 ITT/IAT 值的粒度,即区分不同非once位编码的时序间隔。在定义此值时,还需要在通道可靠性和向后兼容性之间进行权衡。
较高的 δ 意味着 IAT 值可能会受到(攻击者)总线噪声的更广泛影响,然后导致接收器将其解码为意外的非 nonce 位,这意味着该机制比使用较低的δ值时更可靠为什么更可靠???。先前 IAT 通道实现的评估(第4.3节,5.3节,5.4.3节)证实了这一说法。然而,这样高的 δ 值会导致更大的认证帧延迟,这意味着会出现6.3节中提到的向后兼容性问题。因此,在配置此设计时,δ的选择是一个重要的考虑因素。

6.4.4 实现

利用MCP2515 [25] CAN控制器,在启用Sancusenabled的MSP430[46]硬件上实现了这种非once同步策略。现有VulCAN库的梵蒂冈后端相应扩展了非once同步,其MCP2515驱动程序2用于CAN到达中断处理,以及IAT缓冲区管理。总之,这些附加功能将本节中介绍和讨论的执行流付诸实践。附录B讨论了评估该实现的场景,以及相应获得的结果。

此实现可在https://github.com/Stienvdh/vulcan/tree/iat-nonce上公开用于在VulCAN中合并上游。

6.5 安全注意事项

由于nonce机制已经用于安全目的,这种nonce同步方法经过精心设计,不会损害安全保证,也不会通过使用该方案扩展而扩大VulCAN的攻击面。从这个角度来看,本节将讨论考虑到的系统模型和攻击者配置文件,以及为防止后者比原始VulCAN设计中更有效而采取的安全措施。

6.5.1 系统模型

图6.4显示了讨论这种非即时同步方法的安全属性时所考虑的系统模型。它由一个发送方和一个接收方组成,它们都是硫化ECU,并通过一个经过认证的连接进行通信,该连接建立在CAN总线上,该总线也可以被第三个恶意ECU访问。由于此nonce同步方案是作为VulCAN的扩展而制定的,因此假定发送方和接收方都通过在受信任的Sancus飞地中执行的适当扩展的VulCAN库来管理经过身份验证的CAN通信。它们各自的CAN驱动软件和CAN收发器硬件位于可信环境之外,因此被认为处于攻击者的控制之下。接收器ECU还被认为提供了一个非可信定时器外设,用于测量认证帧时间,以及一个存储这些时间的IAT缓冲区。
在这里插入图片描述

6.5.2攻击者简介-级别1:网络攻击者

正如前面描述的CAN网络攻击所证明的[12,35],并在2.1.2节中详细阐述,CAN网络本质上提供的安全性很低。通过扩展,建立在CAN通信基础上的时序通道,例如这里提出的时序通道,容易受到多种安全威胁。这种1级攻击者模型认为,恶意方可以通过远程代码注入[27]或物理车辆访问,在连接到can总线的ECU上执行任意代码,而基于vulcan的身份验证通信是通过can总线进行的,但不参与其中。它的位置相应地在图6.4的系统模型插图中以流氓ECU的形式表示和指示。

这个1级攻击者可以成功地影响这种方法中使用的时序通道,如下所示。请注意,这些操作属于IAT传输本身,而不是其底层CAN通信。然而,两者显然是相互依赖的,这导致大多数IAT通道攻击者的能力遵循第2.1.2节中列出的CAN网络攻击者能力。

A1:窃听。由于CAN采用广播通信而不强制执行总线访问控制,因此攻击者可以窃听和记录数据包的间隔到达时间,从而可以窃听所有的IAT信道有效负载。然而,由于nonce值可以在不影响安全保证的情况下被披露(参见第2.2.5节),因此这种攻击者的能力不会造成任何伤害,因此将不再关注。然而,所有CAN流量的披露确实为攻击者提供了调度和/或CAN网络架构知识,这可能是其他攻击者能力的先决条件[12]。

A2:消息操作。攻击者可以通过多种方式延迟构成IAT值的CAN流量。例如,注入高优先级虚拟帧,或者定时的0位传输,可能会导致合法的can传输由于其仲裁机制的性质而延迟(参见第2.1.1节),或者目标节点可以暂时强制进入总线关闭模式[12,35]。因此,所有的IAT值都容易被修改。请注意,攻击者可以通过分别延迟身份验证和应用程序帧来增加或降低IAT值,这意味着攻击者可以导致任意IAT值的形成。

A3:删除消息。为了从这个隐蔽的通信通道中删除IAT有效负载,相应的CAN数据包将被删除,例如通过CAN总线泛洪[12],或选择性DoS攻击(参见2.1.2节)。攻击者没有办法在不抑制相应CAN帧的情况下从这个时序通道中删除IAT有效负载,因为它们的存在不可避免地会被检测到,并且它们的时序因此被记录下来。

A4:插入消息。与A3类似,通过在目标can总线上插入两个相应的can帧,可以将IAT值插入到该IAT通道中。由于1级攻击者可以自由访问该总线,因此她可以在总线上放置任意两条具有任意到达时间的消息。

请注意,那些插入的消息需要具有正确的ID,以便它们的到达间隔时间被硫化接收节点注册,因为第5.4.1节中描述的消息ID屏蔽和过滤也包含在此设计中。更具体地说,VulCAN规定为其相应的身份验证帧使用等于应用程序消息ID加1的消息ID。为了使IAT值插入工作,因此,第二个插入消息的ID必须等于第一个消息的ID加1,并且后者必须等于目标VulCAN通信通道使用的ID。

6.5.3 攻击者配置文件-级别2:软件攻击者

超越1级配置文件,VulCAN[51]假设一个更强大的攻击者能够在所有未受sancus保护的软件模块中任意执行代码。因此,它既可以像一级攻击者那样控制非硫化节点,也可以控制硫化节点上的非封装模块。这里考虑的系统模型,像VulCAN设计一样,明确地将CAN驱动程序软件从其可信计算基础中排除,这意味着驱动程序操作被认为是不可信的,并且处于二级攻击者的控制之下。使用该驱动程序逻辑将所有CAN流量传播到VulCAN软件,超越它会使攻击方处于理想的中间人位置,如图6.4所示。

同一系统模型说明了Level 2攻击者如何进一步控制计时器外设,在接收端测量身份验证帧时间,这导致其测量结果被认为是不可信的。此外,它的IAT缓冲区也处于2级攻击者的控制之下,使得其内容不可信。最后,第6.4.2节讨论了CAN驱动软件如何负责将一个不可信的索引更新到该IAT缓冲区,以定位最近的IAT值。这些考虑因素导致了下面列出的攻击者能力。请注意,2级攻击者也具有A1-A4能力,因为它比1级攻击者更强大。

A5:秘密的信息操纵。与第1级概要文件中讨论的IAT消息操作能力A2相反,第2级攻击者能够在不入侵所涉及的CAN总线的情况下改变IAT值。在接收端,它可以接管can驱动软件、IAT缓冲区内容或定时外设,从而导致注册任意值并将其用作所谓的身份验证帧定时。

A6: IAT缓冲区位置操作。CAN驱动软件在图6.4所示的系统模型中被认为是不可信的,并且需要对IAT缓冲区进行写访问。因此,该缓冲区被放置在未受保护的内存中,因此处于2级攻击者的控制之下。使用这个扩展的VulCAN库从该缓冲区读取IAT值,这种情况将导致可信软件解除对不可信内存位置的引用。由于受信任模块被授予对私有和公共内存位置的访问权限,二级攻击者可以在不破坏VulCAN功能的情况下,将该IAT缓冲区部分或全部放置在enclave内存中。依赖于IAT值和攻击者可观察到的VulCAN执行属性,例如,身份验证的通过/失败,随后可能泄露受保护的数据,因为在这种情况下,这些数据被用作所谓的IAT值。

A7: IAT索引操作。接收器的IAT缓冲区的索引,表示最近收集的IAT值的位置,由CAN驱动程序软件更新,因此处于2级攻击者控制之下,以及用于可信VulCAN代码中的IAT值检索。因此,攻击者可以通过提供相应的索引,试图使受信任的代码解除对任意(可能受保护的)内存位置的引用。此外,与A6功能类似,攻击者可以将IAT索引定位在内存中的受保护位置,并从解引用该位置的受信任VulCAN库推断出私有信息。

6.5.4 已知Nonce机制威胁

由于这里描述的IAT通道用于Nonce同步,因此必须仔细设计,以便之前讨论的攻击者能力不能用于针对该Nonce机制的恶意活动,因此它旨在建立的新鲜度保证。以下攻击场景描述了nonce机制通常如何作为攻击媒介,以及这些威胁如何在原始VulCAN实现中呈现出来。

重播攻击。通过记录CAN流量,然后在同一总线上重放它,可以欺骗重用nonce值的应用程序,使其接受恶意的、重放的流量为真实的。这样,预期的新鲜度保证就被打破了,因为消息可以被多次接受和处理。这种情况通常被称为重放攻击。
VulCAN的设计承认用于消息认证的梵蒂冈协议特别容易受到高级重放攻击[51],并通过显式禁用其梵蒂冈后端中的非once重用来减轻这种威胁,代价是消息丢失恢复,如第2.2.5节详细解释的那样。

人工nonce增量。通过增加接收方认为发送方使用的nonce,而没有收到有效身份验证的消息来正确地导致这样的增加,后续发送方消息在该接收方的身份验证失败,因为它们的MAC是使用与该接收方期望的不同的nonce计算的。如果仔细实现,这种攻击还可能导致接收方的非once重用,从而导致重放攻击。
通过在两个VulCAN后端使用单调增加的随机数,以及在认证帧计算中使用秘密会话密钥,VulCAN攻击者[51]只能以重播攻击的形式发起这种增量攻击,如上所述。实际上,由于假定它们不拥有所使用的会话密钥,因为它驻留在受sancus保护的内存中,因此它们无法为消息和nonce值构建有效的身份验证有效负载,而底层VulCAN应用程序已经传输/使用了这些值。然而,构造有效的身份验证有效负载是在VulCAN中导致nonce增量的唯一可能方法,因为nonce管理是在封闭执行中完成的。

6.5.5 安全措施

这种提议的非once同步方法的设计目的是不损害VulCAN的安全属性,即,在面对1级和2级攻击者时,不会扩大其对重播攻击和人工非once增量的脆弱性,如第6.5.4节所述。下面列出的所有安全措施都是在一个受保护的Sancus模块中执行的,因为它们形成了图6.4中系统模型中所描述的VulCAN飞地的扩展。

M1: ITT (IAT)编码(解码)。在这里描述的机制中,nonce位和ITT/IAT值之间的编码和解码是一个简单的乘法和/除以参数δ。在不那么强大的攻击者配置文件中,这种方法可以被设计为提供额外的安全保证,但由于攻击者可以窃听并任意操纵所有IAT值(参见第6.5.4节),因此这种设计在算法上尽可能简单是合理的。

M2:单调递增的随机数。该方案要求,每当使用接收方的本地nonce值进行身份验证失败时,使用通过解码相应的身份验证帧定时构造的不同的nonce进行第二次尝试(参见第6.4.2节)。该构造明确地设计为只产生高于原始本地值的随机数,即,当接收方因为任何身份验证尝试成功而更改其本地随机数值时,保证它严格高于其原始本地随机数值。

M3:认证失败时延迟nonce提交。如果使用基于IAT的nonce进行身份验证重试失败,则所涉及的接收方的本地nonce将重置为其初始值,该值用于第一次身份验证尝试。因此,只有在使用接收方的原始或iatf构造的nonce值计算相应的身份验证帧时,本地nonce值才会增加。

M2M3的组合要求攻击该nonce机制的攻击者拥有一对有效的应用程序和认证消息,并且使用严格高于目标通信通道中接收方的nonce来计算。如果没有这样的一对,它在这个IAT通道上的修改、删除和插入能力就不足以发起基于这个VulCAN扩展的重播攻击或nonce增量攻击。

只有当涉及的攻击者能够为应用程序消息构造自己的有效身份验证框架,或者能够重播记录的消息对时,有效的消息对才可用。在硫化节点上,MAC计算是在受保护的Sancus模块中完成的,攻击者(Level 1或Level 2)无法访问该模块,因此无法进行正确的身份验证帧计算。第二种重放记录流量的方法在VulCAN中已被禁用[51],并且由于针对这种非once同步方法的重播攻击的任何机会都与针对原始VulCAN通信发起重播攻击的机会相一致,因此该方案不会引入重播攻击漏洞。

因此,M1, M2M3一起提供了这种非once同步方案对1级攻击者的弹性(参见第6.5.2节)。实际上,它的任何功能都不能生成有效、有效的消息身份验证对。2级攻击者(参见第6.5.3节)也没有这种能力,但它对受信任的梵蒂冈代码读取的IAT缓冲区和IAT索引的控制导致对安全措施M4M5的额外需求。

M4: IAT缓冲区验证。攻击者能力A6描述了图6.4的系统模型如何导致可信代码解引用Level 2攻击者控制的内存位置,这是泄漏封闭内存的已知攻击向量[53]。因此,该缓冲区的验证在VulCAN初始化时完成。更具体地说,检查它是否完全位于包围内存之外。作为这项工作的一个小贡献,目前在Sancus中验证缓冲区是否完全位于受保护内存之外的功能不足被扩展为遵循良好实践[53]。此代码可在https://github.com/Stienvdh/sancus-compiler/tree/buffer-check上公开用于合并Sancus的上游。

M5: IAT缓冲区索引验证。攻击者能力A7造成了与M4中描述的可信代码解除引用不可信内存位置相同的威胁,在本设计中,通过验证IAT索引在可信VulCAN代码解除引用时具有0和IAT缓冲区长度之间的值来减轻这种威胁。此外,该索引本身被验证位于受保护的内存之外。总之,这些测量的安全性并不能阻止恶意方执行其功能A1-A7,但可以减轻其可能的有害后果。
实际上,以A7为例,2级攻击者仍然能够将IAT索引更改为任意值,但它不能利用这种能力来处理由于M5导致的可信内存泄漏。同样,由于A2A5, IAT值仍然可以被操纵,但随后的有效重放攻击被安全措施M2M3的组合禁用。

6.5.6 新的VulCAN攻击扩展梵蒂冈后端:消息抑制

尽管在此设计中采取了安全措施,但它允许对VulCAN的梵蒂冈后端进行涉及消息抑制的新颖攻击。本小节介绍了一个具体的攻击场景,并提出了有效的缓解措施。

攻击的场景。这种方法的动机使以前在VulCAN的梵蒂冈后端无效的消息抑制攻击场景成为可能。它与新鲜度保证没有直接关系,但是当启用这个建议的非once同步策略时,Level 1和Level 2攻击者都可以执行。具体地说,由于这种方法允许从消息丢失中恢复,因此从本质上也可以从故意的消息删除中恢复。

更具体地说,攻击者能够一次选择性地抑制多达2n个后续CAN应用程序消息,而所有其他消息都在接收端正常处理。这种攻击会损害车辆安全,例如,当故障组件的警告消息被抑制时,接收方在不知情的情况下继续正常执行,而当接收到这些被抑制的警告时,它会启动一些反应性操作序列。相比之下,在原始VulCAN设计中使用梵蒂冈后端意味着在消息抑制之后丢弃所有CAN流量(参见6.1节)。

请注意,在VulCAN的LeiA后端(不受此方法影响)中,此消息抑制攻击也是启用的,因为它明确传输nonce值的下半部分,提供与此扩展的梵蒂冈后端中形成此攻击向量相同的消息丢失阻力。

缓解。由于接收方无法区分由消息丢失或消息抑制引起的本地非once不同步,因此无法检测到要执行的这种攻击场景。此外,防止针对CAN的大量拒绝服务攻击[12,18,35],这使得有意的消息抑制,在当前的CAN设计中远远无法实现。因此,如果在其上下文中有必要,则由使用此扩展VulCAN库的应用程序来增强自身对消息抑制的抵抗力。具体地说,这样的应用程序可以在其CAN数据包中包含一些逻辑序列号,以便能够检测通过接收端VulCAN库到达的消息流中的丢失数据包。

6.5.7中断可信执行

这种非once同步方法,追求最大的认证帧定时精度,是建立在5.4节讨论和评估的中断驱动的到达时间注册方法之上的。更具体地说,图6.3显示了在接收端,如何在CAN消息到达时触发中断,在其中断服务例程中,其相对于最近到达的帧的时间被注册。在图6.4所示的系统模型中,这对应于接收器的CAN控制器中断接收器ECU上的执行,并将控制转移到其CAN驱动模块。

由于接收器ECU同时运行可信和不可信模块,因此该机制应该能够在不损害安全保证的情况下中断这两个模块。有关的ISR嵌入在不受信任的CAN驱动程序软件中,这意味着中断不受信任的执行不会带来任何安全问题。相比之下,受保护的飞地中断涉及退出和重新进入可信上下文,如果实现不当,这确实会影响安全保证

基于中断的保护模块攻击。在Sancus[31,32]以及其他tee[23]中,对飞地进入和退出本身进行了深入的研究,并利用它们来支持可中断飞地[9]。然而,Nemesis攻击[54]已经证明了Sancus和Intel sgx保护模块的中断延迟会泄露有关封闭指令序列的信息,并通过扩展封闭数据(如密码和PIN码)泄露信息。在并发研究中,SGXlinger[14]显示了Intel SGX中的中断延迟,以泄漏有关封闭执行的更粗粒度的信息。因此,如果在可信执行环境中未启用以下缓解措施,则此处假设的系统模型中的接收器ECU的中断将被视为容易受到类似nemesis的侧通道攻击。

缓解1:不可中断的飞地。考虑到这些已知的可中断enclave漏洞,一种天真但有效的对策是在enclave执行期间禁止中断,就像最初的Sancus设计[31]一样。正如Busi等人[5]所指出的那样,这种方法冒着无限的enclave执行风险,危及可用性保证,并限制了enclave应用程序的功能。
在这种nonce同步机制的特定上下文中,当enclave中断被禁用时,即使没有恶意行为者,其正确的功能也确实会被破坏。实际上,当在可信执行期间禁用中断时,身份验证帧定时注册可能会延迟到enclave退出之后,从而可能导致严重的准确性损失。实际上,在enclave执行期间的任何时间到达的消息都被注册为发生在enclave出口时,而不考虑它们的确切时间。根据受保护的模块软件属性,这种准确性的损失可能会使这种非once机制变得无用,也就是说,在防止消息丢失的弹性方面,对当前的VulCAN设计没有有意义的附加价值。

缓解措施2:消除侧信道。由于可中断飞地攻击主要利用由中断延迟测量产生的侧通道,因此在保留飞地可中断性时,它们的缓解必须明确地消除此类信息泄漏。Busi等人[5]提出了一种可证明安全的可中断飞地设计,依靠完全抽象来证明其安全保证。简而言之,他们的方法通过中断延迟填充扩展了现有的可中断飞地设计,这样攻击者就无法从延迟测量中获得任何信息。

认证帧定时效果。如图6.3所示,在这种设计中,应用程序和身份验证帧到达接收器ECU时都会触发中断,在此基础上,它们的时间被记录在该中断的处理中。将控制转移到中断服务例程时产生的开销取决于是否中断了受信任的或不受信任的执行,因为前者上下文需要退出受信任的enclave,而后者不需要。然而,由于到达间隔时间是在相关的ISR中测量的,只要应用程序和身份验证消息到达中断不受信任的执行或受信任的执行,存储在接收方IAT缓冲区中的值就不会受到这种可变性的影响,除非在后一种情况下可能出现的nemesis -可利用的变化。否则,当分别只有应用程序帧或其对应的身份验证帧中断一个飞地时,它们的间隔到达时间将被注册为较低或较高。这些考虑在附录B中进行了评估和确认。
除了IAT效应之外,接收端执行中断的性质还会影响启用此处提出的VulCAN扩展所产生的计算延迟量,正如第6.3节中反复指出的那样,这可能会破坏对实时敏感的VulCAN应用程序的向后兼容性。

6.6 结论

本章讨论了如何利用VulCAN的梵蒂冈后端中的身份验证帧定时进行非一次性同步。提出这种方法的动机在于当前VulCAN设计中与性能和安全性无关的挑战,以及从隐蔽通信中获得的向后兼容性和透明性的好处。该方案对用于认证帧计算的nonce值的N个最低有效位进行编码,用于该帧的定时。当身份验证在接收端失败时,该时间将被解码为构造一个可选的nonce值,并使用该值重新尝试身份验证。因此,当正确建立IAT值时,可以恢复多达2n的后续消息丢失,而原始VulCAN设计的梵蒂冈后端则为零。

由于这种方法涉及到nonce(通常是出于安全目的而安装的),因此对这种方法的安全含义进行了彻底的研究。定义了两种攻击者模型,其中一种更强大,与原始VulCAN设计中考虑的攻击者模型等效。接下来,安装了适当的安全措施,以提供针对两种攻击者配置文件的弹性,其讨论的结论是,此扩展不会扩大VulCAN的攻击面,除了引入消息抑制攻击向量之外,VulCAN的替代LeiA后端已经容易受到攻击。最后,由于该方法建立在中断驱动的时间通道上,因此考虑了不同的enclave中断方法对中断可信执行的安全性和延迟的影响,并针对该特定的VulCAN扩展进行了评估。

第七章 结论

在这项工作开始时提出的问题陈述,解决了像CAN这样的车载网络如今如何面对强大的远程攻击者,以及现有的安全措施如何有效地违背了这种安全关键汽车环境的强大性能要求。在一种资源密集程度较低的保护CAN通信的方法中,TACAN[58]建议重新利用通常作为攻击向量[54,17,22]的侧信道,通过使用它们提供的补充带宽来适应安全措施而不增加网络负载,从而进行防御而不是伤害。

在这篇硕士论文中,发现这种隐蔽通信提供了相当大的带宽和可靠性,以及与现有安全实现结合时的实质性好处,同时表现出很大程度的向后兼容性和透明度。

最后一章首先重申在这方面所作的贡献,然后将其剩余的局限性与今后可能开展工作的领域联系起来。

7.1 贡献

下面列出了本硕士论文的主要贡献。

——对CAN中的隐蔽带宽源进行了分析,并将其结果合成为矩阵结构。第3章讨论了用于确保这种探索的结构化方法及其结果的方法。

——对CAN中基于时序的隐蔽通信进行了定量评估,并通过数据包到达间时间通道的几个实际实现实现。第4章考虑了Java中的概念验证实现,其性能和可靠性通过第5章中讨论的低级原型得到了改进。第5.4节还展示了如何扩展该原型以在CAN到达时触发中断,从而获得更高的定时精度,从而进一步增强该信道的性能和可靠性。这个中断驱动的原型在https://github.com/Stienvdh/Sancus-IAT上公开发布。

——第6章提出了对现有VulCAN[51]设计的CAN消息认证的扩展。它通过扩展其非once同步方案,部分解决了VulCAN当前的梵蒂冈[34]后端所面临的可用性问题,并通过利用第5.4节中中断驱动的IAT通道原型中提供的隐蔽传输来确保向后兼容性和透明性。该方法的安全含义以及中断可信Sancus enclaves[31]对延迟和安全性的影响在第6.5节中进行了评估。该讨论显示了该扩展的精心设计如何不会损害VulCAN的原始安全保证,除了在其梵蒂冈后端引入消息抑制攻击向量之外,该攻击向量已经存在于其替代LeiA[36]后端。

这个扩展的实际实现是公开的,可以在https://github.com/Stienvdh/vulcan/ tree/iat-nonce上合并VulCAN的上游。

7.2 局限性和未来工作

本节承认本硕士论文的局限性及其贡献,并利用这些局限性提出研究本工作研究假设的可能未来方向。

CAN的限制。几个隐含的固定变量存在于整个硕士论文的工作中。例如,在CAN的特定上下文中研究了隐蔽带宽的使用,而在替代网络协议中也可能存在其他有趣的机会。其中一个这样的协议是CAN+[60],它形成了CAN的扩展,并且基于利用大多数嵌入式设备相对于其CAN总线速度的较高时钟频率,在其超频周期内进行额外的CAN传输。这种情况可以允许更复杂的隐蔽信道,例如,基于这种超频时间间隔内传输的定时特性。这种方法可以允许类似于第5章中提出的定时通道,而不需要其底层通信的周期性先决条件,因为这种特定类型的定时信息可以包含在每个单独消息的传输中。

IAT通道原型技术依赖。第5章中提出的基于时序的隐蔽通信原型,以及5.4节中讨论的中断驱动增强,其应用逻辑绑定在MSP430硬件上,并依赖于MCP2515控制器来调节CAN通信。推而广之,该原型的评估结果是针对这些技术的。同样,这个原型设计中包含了对计算延迟的几个修正,如第5.1.3节所述,这显然也依赖于技术。如果这个时间通道原型因此被移植到不同的硬件在未来的努力,重新考虑其性能,可靠性和配置是应有的。

IAT通道设计缺陷。在第四章和第五章中讨论和评估的到达间时间信道在设计上有一个相当微妙的缺陷。实际上,这个IAT通道操纵每个消息与其前一个消息之间的时间间隔,以便在此间隔与预定义的固定值的偏差中对有效负载进行编码。尽管这种方法在暴露隐蔽带宽方面是有效的,但它可能对消息延迟产生相当大的长期影响。实际上,消息的延迟(远征)相对于之前发送的消息,意味着所有后续流量的绝对大小相等的延迟(远征),以保留后者假定的到达间定时属性。当相对计时的减少和增加以相同的速率发生时,这种长期延迟得到补偿,这降低了这种考虑的严重性。然而,通过消除这一缺点,可以改善IAT信道的可用性,例如,通过仅在每个其他消息的相对定时中编码隐蔽有效负载,并使用下一个来抵消其对长期消息延迟的影响,或者通过改变在这个定时信道中编码隐蔽有效负载的方法。

VulCAN扩展技术依赖。与前面讨论的IAT通道原型的局限性类似,第6章中提出的VulCAN扩展的实现及其结果在附录B中显示,是高度技术特定的。例如,它的设计假定了CAN到达的中断机制,这在其他硬件上可能不可用。第二个例子是,第6.5.7节中对中断可信执行的考虑,并在附录B中进行了量化,这些考虑是专门针对Sancus enclaves表达的,对于其他tee可能会有很大的不同[23]。

VulCAN扩展适用性限制。第6章中提出的VulCAN扩展具有相当有限的范围,因为它是建立在VulCAN特定的消息认证方法上的,该方法将每个消息与随后的认证帧配对,控制两者的传输和到达,并具有对认证流量透明的用户界面。因此,所建议的方法通常不能移植到其他消息身份验证框架。此外,此扩展的适用性仅限于VulCAN的梵蒂冈后端,使得其LeiA对应物所面临的问题无法解释。然而,建议的设计独立于它们的使用注册消息计时,如果出现合适的应用程序上下文,这也可能使它们有利于LeiA后端。
尽管定时注册是在不考虑其使用的情况下完成的,但当前的方法无法启用隐蔽带宽的应用程序上下文,因为调节认证帧定时通信的发送端逻辑目前嵌入在VulCAN代码本身中。在这种情况下,未来的工作可以扩展VulCAN的用户界面,以允许在传输中规范认证帧定时参数,从而实现该VulCAN扩展所暴露的隐蔽带宽的通用使用。

VulCAN以外的应用。本文讨论了隐蔽传输在VulCAN消息认证方法中的实际应用。然而,第3章中讨论的隐蔽通道是为CAN通信制定的,这意味着它们也可以使VulCAN以外的应用领域受益。此外,它们并不局限于用于消息身份验证或其他安全机制,因为它们提供了可用于任何目的的补充带宽。因此,当嵌入到CAN驱动软件中时,它们甚至可以作为CAN通信本身的扩展来实现,而不是合并到现有的应用程序和设计中。因此,它们可以为CAN应用程序中的任何现有带宽短缺提供向后兼容、透明的缓解。

7.3 最后的想法

当反思这篇硕士论文的结果,以及它在比问题陈述更广泛的背景下的意义时,几个最终结论出现了。首先,它展示了侧通道(攻击者在从受保护的内存中提取可信信息时使用的附带传输形式)如何不仅仅是要从安全实现中消除的攻击向量。相反,当它们的带宽被用于容纳安全措施而不是泄露数据时,它们可以加强这样的实现。对于CAN来说,这种隐蔽传输的机会是具体的,它们的评估显示出它们在汽车工业、工业控制、农业或任何其他使用CAN的环境中有益于实际应用的巨大潜力。

其次,假定的秘密通信的实际可行性是在一个相当具体的背景下使用的实例。更具体地说,它被用来提高现有消息身份验证方案的健壮性,而不会损害其强大的安全保证。这种努力成功地实现了这种健壮性,同时没有产生传统消息身份验证策略所不允许的额外带宽使用。虽然这种方法的范围是有限的,但其结果证实了利用隐蔽带宽来增强广泛的实际应用领域的类似努力的可能性。

因此,本硕士论文的结果鼓励广泛使用隐蔽通道来解决现有和/或未来安全框架,甚至任何类型的良性应用逻辑所面临的众多挑战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/211345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux复习笔记06(小滴)

演练企业静态ip地址配置过程 我们有时候会发现,在使用虚拟机的时候,如果使用远程连接工具,我们会发现,有时候连接不上去,但是我们去用ifconfig去查看的时候,我们发现是ip地址换了。所以往往我们也需要去固…

SVN下载使用和说明

一、SVN <1>SVN的简介 1、svn是什么&#xff1f; 2、作用 3、基本操作 <2>服务器端的软件下载和安装 1、下载 2、查看环境变量 3、验证安装是否成功 <3>创建项目版本库 1、创建项目版本库&#xff08;svn reponsitory&#xff09; 2、svn版本控制文件说明…

BUUCTF [GXYCTF2019]SXMgdGhpcyBiYXNlPw== 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;解压得到flag.txt文件。 解题思路&#xff1a; 1、打开flag.txt文件&#xff0c;内容如下。 Q2V0dGUgbnVpdCwK SW50ZW5hYmxlIGluc29tbm…

7.C转python

1.对字典的各种操作都是对键来进行的 2.关于字典的遍历操作 例: 还可以这样遍历 所以生成了一个固定模版来遍历字典: 例: 那两个名字可以换 例: 3.合法key的类型: 要求可哈希 在python中,专门提供了一个hash()函数来计算哈希值 例: 有的类型是不能计算哈希的,如:列表,字…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

QProcess 启动 进程 传参数 启动控制台进程 传参

目录 QProcess 启动外部程序的两种方式 依赖式 分离式&#xff1a; 启动进程前的预处理 设置启动路径 设置启动命令参数 设置启动工作目录 设置启动所需环境&#xff1a; 启动的状态 code smple: QProcess 控制台进程 QProcess启动控制台不显示窗口 注意&#xff1a;…

一、服务器准备

本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群&#xff0c;所用软件及版本如下&#xff1a; Centos7.7-64bit 1、三台虚拟机创建 第一种方式&#xff1a;通过iso镜像文件来进行安装(不推荐) 第二种方式&#xff1a;直接复制安装好的虚拟机文…

Linux多核飞控

Linux多核飞控是一种基于多核处理器构建的飞控系统&#xff0c;用于控制飞行器的飞行。这种飞控系统使用Linux操作系统作为主要的控制平台&#xff0c;可以支持多个处理器核心同时工作&#xff0c;以实现更高的性能和更快的响应速度。 Linux通常用于具有较高计算量和较大内存需…

ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)

漏洞描述 影响范围 FFmpeg 2.8.x < 2.8.5FFmpeg 2.7.x < 2.7.5FFmpeg 2.6.x < 2.6.7FFmpeg 2.5.x < 2.5.10 漏洞环境及利用 搭建docker环境 访问8080端口看到上传界面 由于vulhub并没有讲述该漏洞如何复现&#xff0c;我们需要进入环境查看源码 <?php if(!…

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库 1. 专门用来实现一个SPA单页面应用 2 .基于vue的项目基本都会用到此库 SPA的理解 1) 单页Web应用&#xff08;single page web application&#xff0c;SPA&#xff09; 2) 整个应用只有一个完整的页面 3) 点击页面中的链接不会刷新页面, 本…

对于Kotlin DSL的简单解析与使用

DSL(领域特定语言)是Kotlin所带来的强大语法特性之一&#xff0c;也是Java中所不存在的功能&#xff0c;JetBrain也基于DSL开发出了众多的开源库&#xff0c;Kotlin的开发者可以使用DSL来重构许多已有的代码&#xff0c;甚至有可能做到彻底抛弃HTML&#xff0c;XML&#xff0c;…

【智能家居】一、工厂模式实现继电器灯控制

用户手册对应的I/O 工厂模式实现继电器灯控制 代码段 controlDevice.h&#xff08;设备设备&#xff09;main.c&#xff08;主函数&#xff09;bathroomLight.c&#xff08;浴室灯&#xff09;bedroomLight.c&#xff08;卧室灯&#xff09;restaurantLight.c&#xff08;餐厅…

2017年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 Section I Use of EnglishSection II Reading ComprehensionText 121-细节信息题22-细节信息题23-推断题24-细节信息题25-态度题 Text 226-细节信息题27-细节信息题28-细节信息题29-细节信息题30-细节信息题 Text 331-细节信息题32-细节信息题33-猜词题34-细节信息题3…

基于SSM的生鲜在线销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

初始数据结构(加深对旋转的理解)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/rotate-array/submissions/ 与字…

python ping3库检测主机是否能ping通(ping命令)代码示例

文章目录 代码示例 代码示例 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import ping3 import timeencoding utf-8def ping(host, time_out1):"""检查ip是否能被ping通&#xff0c;time_out为超时时间&#xff0c;单位为秒&#xff0c;默认为1秒"&q…

openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性

文章目录 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性138.1 操作步骤 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性 数据库事务一致性通过逻辑时钟保证&#xff0c;与操作系统时间无关&#xff0c;但是系统时间不一致会导致…

【C/C++笔试练习】公有派生、构造函数内不执行多态、抽象类和纯虚函数、多态中的缺省值、虚函数的描述、纯虚函数的声明、查找输入整数二进制中1的个数、手套

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;公有派生&#xff08;2&#xff09;构造函数内不执行多态&#xff08;3&#xff09;抽象类和纯虚函数&#xff08;4&#xff09;多态中的缺省值&#xff08;5&#xff09;程序分析&#xff08;6&#xff09;重载和隐藏&a…

函数指针和指针函数的讲解

文章目录 指针函数函数指针函数指针的定义与指针函数的声明的区别函数指针的定义指针函数的声明 typedef在函数指针方面的使用typedef和using 给函数指针的类型取别名typedef和using 给函数的类型取别名 指针函数 指针函数&#xff1a; 也叫指针型函数&#xff0c;本质上就是一…

VBA数据库解决方案第七讲:如何利用Recordset对象打开数据库的数据记录集

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…