无线传感器网络安全证明机制综述

无线传感器网络中的证明:一项调查

1. 引言

无线传感器网络(WSNs)具有广泛的应用,可适用于从最简单到极其复杂的各种场景[Borges et al. 2014]。在一些关键应用中,例如医疗紧急情况检测[Ko et al. 2010],、火山监测[Werner‐Allen et al. 2006],和森林火灾检测[Hartung et al. 2006],等,显而易见,安全至关重要。一个被入侵节点可能会破坏网络运行,或导致其报告虚假信息,从而造成潜在的灾难性后果。因此,必须能够判断是否应信任这些传感器所报告的数据。然而,即使是在诸如智能家居中使用的基于传感器的信息设备[Petriu et al. 2000],这类不那么关键的应用中,尽管传感器监测的数据本身可能并不重要,但安全性和特别是传感器节点的完整性仍然至关重要。攻击者有可能利用一个被入侵节点不仅来攻陷其他传感器,还可将其作为入口点,破坏传感器网络所连接的整个系统。

无线传感器网络的安全性相关研究大多集中在保护其底层协议[Zhou et al. 2008],或信任与声誉管理[Lopez等 2010]在网络中。然而,通过利用现有的软件漏洞,攻击者可以轻易地入侵高信誉的节点,而无需破解其协议。正如Gu和Noorani [2008],所指出的,由低级内存故障引发的漏洞(例如臭名昭著的堆栈溢出[)以及更近期的复杂利用技术,如面向返回编程(ROP)[Shacham 2007;Buchanan等 2008],,对无线传感器网络构成了真实威胁。事实上,这些漏洞已被用于代码注入攻击[Francillon和Castelluccia 2008]以及自传播的恶意数据包[Gu和Noorani 2008]。因此,必须有一种机制来证明传感器节点的完整性。节点的完整性是一种二元属性,用于表明其是否以未经授权的方式被修改[Sailer等 2004]。受损节点不可信,因为它们可能出现故障或表现出恶意行为。

无线传感器网络可以包含分布在环境中的数百或数千个传感器节点。在许多情况下,节点的部署是无序的,因此很难确定它们的位置。尽管对于大多数应用场景而言,物理访问并验证每个组成网络的节点完整性并不现实,但对某些场景来说,甚至根本无法进行物理接触以验证节点的完整性。因此,需要一种机制,不仅能够验证节点的完整性,而且能够在无需物理访问被验证设备的情况下远程完成此验证。

在这些情况下会出现许多挑战:如何为大量设备扩展验证;此类设备的异构硬件和软件架构;它们所拥有的有限能量;以及它们通信所依赖的本质上不可靠的无线介质。尽管如此,过去几年中已提出了多种证明机制[Spinellis 2000;Seshadri 等人,2004;Kil 等人 2009]。然而,现有方法对系统与攻击者模型做出了不同的假设,因此难以比较这些方法,并分析其所提供安全属性。此外,这种缺乏一致性的状况已经导致新提出的方案[金等人 2010;维特尔和韦斯特霍夫,2012;清本和宫岳 2014;谭等人 2015;杨等人 2015;阿索坎等人 2015;Ibrahim 等人 2016]容易受到先前已知的攻击[Castelluccia 等人 2009]。

所采用假设的多样性、提出的大量技术以及文献中遇到的一些争议是本综述的动因。在本文中,我们对无线传感器网络(WSNs)环境下的认证机制的现有技术水平进行了广泛分析。我们在第2节首先概述了证明的基本概念,接着对系统与攻击者模型进行了全面分析。然后我们讨论了常见的攻击和假设,及其在无线传感器网络背景下的相关性。在第3节中,我们提出了一种分类法,以捕捉现有解决方案之间的根本差异。我们分类法中使用的每个区分特征都通过来自现有技术水平的代表性示例加以说明,从而能够评估现有方法的优缺点。在此分析之后,我们在第4节讨论了开放性研究问题,并给出了应对这些问题的方向。最后,我们在第5节对文章进行总结。

2. 认证

典型的认证机制遵循挑战‐响应协议,如图1所示。一个可信设备验证一个需要证明其清白的不可信设备的完整性。这些设备通常根据其角色分别命名为验证者和证明者。证明程序的目标是允许一个诚实且未被攻破的证明者生成一个响应,以向验证者保证该证明者处于合法状态[Francillon等 2014]。一个已被攻破的证明者将要么生成无效响应,或无法在预期的时间限制内生成有效响应。

通常假定验证者预先知道证明者正确的内部状态——即内存内容。因此,验证者向证明者发起挑战,以验证其是否处于有效且预期的状态。证明者随后执行一个证明例程,根据从验证者接收到的挑战及其内部状态计算并返回响应。验证者将从证明者接收到的响应与预期响应进行比较,如果两者一致,则可以断定该设备未被攻破。然而,验证者仅在有限的时间 TA内等待证明者的响应,该时间必须至少等于证明者执行真实证明例程所需的时间。如果接收响应与发出挑战之间的时间差TR − TC超过TA,则验证者知道证明者可能存在异常。需要注意的是,在网络上执行认证时,消息发送和接收的时延也必须予以考虑。正如我们将在第3节进一步讨论的,关于时间控制有两种不同的方法:严格和宽松。

我们并非首个分析证明过程的研究者。然而,现有分析基于不同的假设构建。例如,Datta 等人 [2009],、Coker 等人 [2011], 以及 Francillon 等人 [2014] 假设验证者与证明者需要共享某些秘密信息,例如一个加密密钥。他们假定该密钥在网络部署前已定义,并且存在某种硬件支持以防止攻击者访问该密钥。然而,他们的模型并未考虑时序要求。

另一方面,Armknecht 等人 [2013] 和 Li 等人 [2014] 则专注于基于软件的证明技术,这些技术不依赖硬件支持,仅关注对程序内存的认证。Li 等人 [2014] 的分析还涵盖了完全擦除证明者数据存储器的方法。然而,这两项研究均未涵盖试图验证数据内存内容而非简单清除其内容的方案。

在本研究中,我们沿袭了现有的分析方法;然而,我们的目标是提供一个更全面的模型,能够涵盖所有与无线传感器网络相关的方案,从而让我们评估不同技术之间的权衡。在此背景下,无线传感器网络的内在特性起着重要作用。传感器节点简化的硬件和软件架构既有积极的一面,也有消极的一面。由于其存储空间有限,攻击者可利用的内存也相应减少。此外,与通用计算机不同,每个节点都有明确的应用程序需要执行,因此更容易确定这些设备预期的内存内容。而且,传感器节点通常配备单核处理器,并具有单一执行流,这减少了攻击者在认证过程中进行并行操作的可能性。

2.1. 系统模型

在对认证机制建模时,需要考虑三个实体:验证者 V、证明者 P 和攻击者 A。尽管认证机制也可应用于其他场景,但本文仅关注无线传感器网络。因此,验证者和证明者均为无线传感器节点。验证者可以比普通网络节点具备更强的计算能力,但这并非必需。同时,攻击者要么远程发起攻击,要么利用已被攻陷的网络节点。表I总结了本文采用的符号表示。

证明者 P具有一个内部状态State(P) = S,该状态反映了其内存M中的内容。理想情况下,所有内存内容都应被证明,包括程序存储器Mp、数据存储器Md、寄存器Mr、MMIO Mmmio,甚至外部内存Me。然而,不同的证明机制覆盖了内存的不同部分,在实际中,M的某些部分可能未被验证。例如,Spinellis [2000]仅检查Mp,而Zhang和Liu [2010]仅部分验证了Md且未涉及其他部分。为简化起见,我们采用如下约定(如所采用的符号所示):证明者P的状态 S仅对应于被认证的内存部分。

有人可能认为,当覆盖更大容量的内存时,认证会更安全。然而,情况未必如此。通常情况下,Mp远大于Md,但某些攻击只需修改Md即可成功[Shacham 2007;Buchanan等2008]。因此,更安全的方法是对所有不同类型的内存进行认证[Castelluccia等 2009]。然而,即使覆盖了全部内存,攻击者仍可实施多种类型的攻击。

在实践中,认证仅能为证明者的完整性提供概率性保证。本文旨在识别影响该概率的因素。

认证过程包含三个主要组成部分:CHALLENGE、 ATTEST 和 VERIFY,这些组成部分存在于文献中描述的所有方法中,尽管其实现方式可能有所不同。下面我们分别讨论每一个部分,并强调为实现安全认证必须遵循的设计原则。如前所述,我们采用了之前的许多分析成果[Datta 等人,2009;Coker 等人,2011;Armknecht等,2013年;Li 等,2014年;Francillon 等 2014],同时将讨论集中在无线传感器网络上。

挑战() 该过程由验证者执行。它输出一个随机的挑战c,并将其传输给证明者,该挑战可包含随机数、时间戳、内存地址,甚至是要由P执行的证明例程。CHALLENGE必须遵循三个设计原则:真实性、新鲜性和不可预测性。前两个原则对于防止攻击者通过无限制地强制P执行ATTEST来实施拒绝服务(DoS)攻击至关重要。然而,在传感器节点的认证中,拒绝服务攻击并非主要问题,因为存在更简单的方法来实现相同效果,例如信道干扰。最后一个原则可防止攻击者提前计算出证明例程的结果,因为 ATTEST要么将不可预测的挑战作为输入,要么其本身即为生成的不可预测挑战。形式上可以描述如下:不存在任何高效的算法Alg ,使得对于非可忽略的 ε, Pr[Alg()i= Challenge()i+1:i ∈ N+]> ε.

ATTEST(S, c) 证明例程由证明者执行。它以证明者 P 的状态 S 和验证者 V 发送的挑战 c 作为输入。当 c 是证明例程本身时,该例程会被下载并安装到 Mp 中的一个预定义内存空间中。 ATTEST的目标是计算一个较小的证明响应r,该响应必须直接基于 S 和 c。这极大地减少了从 P 传输到 V 的数据量,否则证明者将不得不将其全部内存内容传输给验证者以证明其真实性。ATTEST必须遵循五个设计原则。真实性 使验证者能够确认 r 的来源。原子性 保证 ATTEST 在执行过程中不会被中断,从而防止攻击者修改 S、移动恶意软件以逃避检测或并行化计算。不可伪造性 防止攻击者生成相同的响应 r,至少不能比 ATTEST 更快地生成。动态性 意味着 r 应反映实际运行的系统,而不仅仅是内存的某个静态部分。最后,确定性 使验证者能够独立得出相同的结果 r。形式化地:Pr[∃ S = S˜: Attest(S, c)= Attest(S˜, c)] ≤ ε.

验证(S, c, r, TA, TC, TR) 该函数由验证者执行,输入包括证明者的预期状态S、验证者生成的挑战c、来自P的响应r、证明时间限制TA、挑战发送时间TC以及响应接收时间TR。VERIFY必须遵循一个设计原则:确定性,因此当且仅当响应r同时反映S和c,并且TR − TC ≤ TA时,该函数才接受响应。此外,VERIFY必须始终接受未受侵害的证明者的响应。形式化地:Pr[Verify(S, c, r, TA, TC, TR)= accept|State(P)= S ∧r= Attest(S, c) ∧ TR − TC ≤ TA]= 1.

在确定了主要组件之后,我们现在可以形式化验证者与证明者之间的交互。图2展示了迄今为止描述的所有步骤,这些步骤存在于所有现有方法中。然而,在某些方法中,这些交互可能略有不同。例如,它们之前可能增加一个额外的步骤,即证明者主动请求被验证。Park和Shin [2005]要求每个传感器在接入网络之前必须向验证服务器证明其完整性,因此新传感器必须在使用网络资源之前请求被证明。AbuHmed等人 [2009]提供了交互变化的另一个示例:为了验证挑战请求的新鲜性和真实性,证明者将挑战连同加密信息一并用一个随机数,返回给验证者。然后验证者解密该消息,并将加密的随机数发回给证明者。

2.2. 攻击者模型

攻击者的目标是在不被证明程序检测到的情况下破坏传感器节点。我们不讨论用于破坏节点的技术——感兴趣的读者可参考Francillon和Castelluccia [2008],、Gu和Noorani [2008],以及Giannetsos和Dimitriou [2013]以获取有关该主题的更多信息——而是重点介绍攻击者为规避认证可能实施的攻击。正如Armknecht等人[2013],所指出的,攻击者有两个不同的攻击阶段:第一个是认证开始前的初始阶段,第二个是证明者受到挑战后开始的阶段。在认证开始前,攻击者可以使用无限资源,并可随意修改证明者的状态S,从而得到一个新的˜状态S。然而,在受到挑战后,攻击者只有有限的时间来发送响应˜r。

2.2.1. 攻击

文献中通常描述了一系列攻击,说明攻击者在攻破设备后可能如何破坏认证过程。我们将在下文逐一描述每种攻击。

预计算。 攻击者可以预计算证明例程中所有不受挑战影响的操作,从而节省时间,以便在认证过程中执行其他操作。此外,如果攻击者能够预测验证者生成的挑战,则可以预先计算出有效响应。

重放。 攻击者可以窃听来自未被入侵节点的有效证明响应,将其存储,并在受到验证者挑战时重新发送该消息。由于响应反映了证明者的内部状态和挑战,因此只有当两个节点执行相同的程序并接收到相同的挑战时,此方法才可能成功。

伪造. 攻击者可能会试图生成有效响应,即使证明者的内部状态已被修改。这可以通过执行一个修改版本的证明例程,或以某种方式更改内存内容,使得在响应计算过程中修改相互抵消来实现[Castelluccia etal.2009]。

内存复制。 如果有足够的内存空间,攻击者可以存储其恶意数据,同时仍保留原始内存内容的副本 [伍斯特等人 2005]。然后,攻击者可以修改证明例程,使其在维护原始内容副本的内存位置上计算响应。

数据替换。 这种攻击是内存复制攻击的一种特殊情况,当没有足够的空间来保存原始内存内容的完整副本时就会发生。攻击者可以修改部分原始内容,并且仅保留被覆盖数据的副本[Seshadri et al. 2005]。在这种情况下,必须调整证明例程,以将来自已更改内存地址的内存读取重定向到原始内容副本的位置。

压缩。 在内存复制攻击的另一种特殊情况下,攻击者可以压缩原始内容,以获得足够的空间来存储其恶意数据[Castelluccia et al. 2009]。在认证过程中,攻击者随后可以动态解压原始内容以计算预期的响应。

共谋。 被入侵节点可以协同计算出有效响应。例如,多个运行相同应用程序的节点可以将恶意软件安装在不同的内存位置[Yang et al. 2007]。然后,在证明过程中,这些节点可以通过交换消息来恢复原始的内存内容。另一种可能性是将证明例程的操作分配到多个设备上,以加快响应的计算速度。

冒充。 攻击者可以拥有多个身份并冒充其他节点(也称为女巫攻击 [Newsome et al. 2004])。通过这种方式,它可以在认证过程中伪装成合法节点并发送无效响应,从而使验证者认为原始节点已被入侵。此外,一个被入侵节点还可能冒充基站,将其接收到的挑战转发给一个合法节点,然后将正确的响应再转发回基站。

代理。 这种攻击是共谋和冒充攻击的一种特殊形式,因为它需要一个计算能力优于证明者的设备。每当被入侵节点受到挑战时,它会将挑战转发给该代理设备。代理保存了该节点原始内存内容的副本,并能够冒充该节点以计算出有效响应。由于代理设备具有更强的计算资源,因此它还可以比普通节点更快地执行证明例程。

面向返回编程。 面向返回编程(ROP)攻击[Shacham 2007;Buchanan 等人 2008]利用现有代码,在不修改代码的情况下执行恶意操作。攻击者可以通过链接现有程序中存在的称为 小工具 的短指令序列,来执行任意复杂的恶意操作。最初,每个小工具以 ret 指令结尾,攻击者可通过修改堆栈将不同的小工具串联起来,使它们依次执行。后续研究表明,此类攻击不仅可通过 return 操作实现,还可通过其他改变程序控制流的指令 (如 分支、调用 和 跳转 [Checkoway等人 2010])来完成。由于小工具由原始程序指令构成,ROP攻击能够绕过那些假设攻击者必须修改或插入新代码的防御机制 [Buchanan 等人 2008]。

有趣的是,大多数攻击并不要求恶意节点与其他设备进行交互。只有重放、共谋、冒充和代理攻击需要这种交互。

2.3. 假设

我们在此介绍了文献中最常见的假设,并考察了现有假设中的例外情况和冲突。

验证者不会被攻击者攻破。在许多情况下,验证者是网络的基站。由于基站充当连接传感器网络与外部世界的网关,因此通常假设其不会被攻破[Seshadri et al. 2006]。然而,并非所有方法都基于这一假设。例如,Yang et al. [2007]提出了一种分布式认证方案,其中网络中的所有节点都可以充当验证者。但由于所有节点都可能受到攻击,证明过程不再依赖于单个验证者。相反,一个节点的多个邻居共同协作对其进行证明。在这种情况下,证明结果还取决于攻击者已攻破的设备数量。

验证者知道证明者的预期状态。为了证明一个设备未被攻破,验证者必须知道该设备应有的行为。在大多数方法中,验证者完全了解应在证明者设备上运行的软件[Kennell 和 Jamieson 2003]。通过这些信息,验证者可以确定证明者可能处于的有效状态集合。另一种策略是为每个节点颁发其有效配置的证书[Asokan 等人 2015]。这使得验证者无需详细了解设备的设置即可对其执行证明。

验证者了解证明者的硬件架构。 证明者的硬件在证明例程 ATTEST 的构建中起着重要作用。它定义了证明者为证明其完整性必须执行的操作。例如,ATTEST 可以利用任何可用的防篡改硬件来执行操作并保护秘密信息。另一方面,当没有此类硬件可用时,必须仔细设计证明例程。在这种情况下,通常假设 ATTEST 是最优的,因此攻击者无法对其进行优化,也无法执行额外操作来隐藏其修改并仍在有效时间内做出响应。因此,验证者必须了解证明者的微控制器、时钟频率、指令集架构和存储器架构 [Seshadri et al. 2004]。

攻击者可以对证明者的软件和硬件进行逆向工程。通用传感器节点 [希尔等人,2004;亨普斯特德等人,2008;希利等人 2008]不提供任何防篡改硬件,因为这类节点需要价格低廉且体积小。因此,节点的软件通常存储在非受保护内存中,攻击者可以读取、逆向工程并修改这些内容。因此,证明程序不能依赖于存储在非受保护内存中的秘密信息 (如加密密钥)。当然,这一假设不适用于针对具备防篡改硬件设备所设计的机制。

攻击者完全控制证明者内存。在缺乏硬件控制来保护证明者程序存储器的情况下,攻击者可以随意修改底层软件。因此,攻击者能够控制证明者及其所有通信,并可实施被动和主动攻击,例如窃听、数据包注入、重放、选择性转发以及其他多种攻击。一些机制探索使用防篡改硬件、只读存储器(ROM)甚至内存保护单元(MPU)来限制攻击者的控制。

攻击者无法修改证明者的硬件。通常假设攻击者无法对传感器节点进行任何硬件修改,例如添加更多内存、改变内存访问时序,甚至更改处理器时钟速度[Seshadri等 2004]。这一假设通常基于攻击的成本和可行性来证明其合理性。攻击者不仅需要物理访问传感器以修改其硬件,还需要具备手段和时间来对无线传感器网络中的大量传感器执行修改操作。为了与此假设保持一致,还必须考虑到在这种情况下,认证机制同样不能依赖物理访问来验证节点的完整性,并且必须可以远程完成。请注意,认证作为第一道防线,会迫使攻击者要么修改单个传感器,要么在网络中部署新的、已经篡改过的传感器。正如Park和Shin [2005],所指出的,诸如入侵检测系统[da Silva 等人 2005;Roman 等人 2006;Sun 等人 2007]等其他技术可与认证结合使用,以防御此类攻击。

3. 分类法

在过去几年中,人们提出了多种认证机制。然而,如第2节所述,这些机制采用了不同且有时相互冲突的假设,因此在实现目标时采用了本质不同的方法。目前的文献通常将认证分为两类:基于硬件和基于软件。但我们认为这种分类并不总是有帮助的,因为它阻碍了从所实现的安全属性方面对现有方法进行比较。认证过程涉及的内容远不止是否使用防篡改硬件。在本节中,我们回顾了现有方法的主要特征,并提出一种新的分类法来对已提出的各种技术进行分类。这使我们能够比较它们的优点、缺点和漏洞。我们提出的分类法如图 3所示,识别出认证机制的八个主要特征,每个特征都可以通过不同方式实现。我们将在下文更详细地讨论这些特征。

3.1. 证据获取

可以说,认证中的最大问题在于验证者获取证明者完整性证据的方式,以及这些证据在多大程度上可信。文献中可以识别出三种主要的不同方法:hardware-based、基于软件的和 hybrid技术。

基于硬件的技术 依赖于防篡改硬件,例如可信平台模块(TPM)[TCG 2011]或物理不可克隆函数(PUFs)[Pappu 等人 2002;Gassend 等人 2002]。例如,Tan 等人 [2015]描述了一种为无线传感器网络(WSNs)设计的基于TPM的远程认证协议(TRAP),其中所有传感器节点都配备了TPM,用于保护预加载的秘密信息。在网络部署之前,每个节点都预加载了加密密钥,以便与邻近节点和基站进行安全通信。当节点上电时,它将控制权转移给其引导加载程序( bootloader),与应用程序不同,引导加载程序的代码在节点部署后无法更新。因此,引导加载程序的代码被用作第一道防线。在初始化阶段,每个节点计算其引导加载程序代码的哈希值,并将其存储到TPM平台配置寄存器中,然后利用该哈希值将加密密钥封装到TPM中。当引导加载程序运行时,它会计算并存储自身代码的哈希值。因此,如果引导加载程序的代码被篡改,那么 TPM 解封命令将失败,节点将无法生成有效的证明响应。引导加载程序还会计算应用程序代码的哈希值并将其存储到 TPM 中。在认证过程中,验证者(可以是证明者的任何邻居)使用 TPM 生成一个随机数,并使用与证明者共享的密钥对其进行加密。然后它向证明者发送挑战,并向基站请求获取证明者的哈希值及其公钥。证明者收到挑战后,必须先解密,然后将其作为随机数传递给 TPM,并根据 TPM 的输出构造响应。只有在应用程序代码未被篡改的情况下,该响应才是正确的。然而,这种方法仅验证了证明者的 Mp。因此,它容易受到 ROP 攻击的影响,因为 ROP 攻击只需修改调用栈即可成功。

基于软件的技术 不依赖于安全硬件。相反,证明者执行一个认证例程,生成一个据称不可伪造的结果。Spinellis[2000]是关于基于软件的认证最早的文献之一。作者提出使用反射来进行软件完整性验证,尽管该方法并非专门为无线传感器网络设计,但其计算性能仍在无线传感器网络节点的实际可接受范围内。在此方法中,验证者随机选择证明者的内存p中两个重叠的内存区域,其中一个区域覆盖初始内存地址,另一个覆盖末尾地址,两者在中间某处重叠。证明者随后为每个区域计算加密哈希值。验证者也从其自身保存的被证明内存副本中计算相应的哈希值,并将其与接收到的值进行比较。由于哈希值覆盖了整个内存p ,因此对其所做的任何修改都将被检测到。然而,这基于一个假设:攻击者无法中断验证过程并移动恶意软件,使其始终位于当前哈希计算范围之外。此外,由于哈希计算彼此独立,共谋的节点可以分别并行地执行这些计算,以避免通过时间差异被检测。Spinellis还描述了该过程的一个扩展版本,其中证明者还会发送有关其处理器状态的数据,例如CPU缓存或性能计数器。但由于这些信息并未用于哈希计算中,一旦攻击者窃听到一个有效响应,就可以简单地提取这部分信息并进行重放。

我们将那些不依赖防篡改硬件但需要特定硬件(例如ROM)来实现认证的方法归类为混合型技术。例如,Perito和Tsudik[2010]提出了一种基于安全擦除证明(PoSE)的嵌入式设备安全代码更新机制。该过程需要少量ROM来存储证明例程,从而防止攻击者对其进行修改。验证者发送足够多的不可压缩的随机噪声,以完全填满证明者的可写内存。证明者使用存储在ROM中的代码对所有接收到的数据计算消息认证码(MAC),并使用最后几位作为密钥,然后将结果发送回验证者进行校验。此过程还特别适用于安全代码更新,因为“不可压缩的随机噪声”可以是发往节点的新代码的加密形式。一旦验证者确认了 MAC,就可以向证明者发送用于加密的密钥,证明者使用该密钥解密代码并执行代码更新。这种方法的主要缺点是引入了较高的通信开销。为了传输足以完全填满证明者可写内存的数据,消耗了大量的时间和能量。此外,该方法隐含地假设在接受认证的节点之间不会发生共谋。

3.1.1. 讨论

防篡改硬件作为信任根,其提供的所有信息和服务都被视为可靠的,从而促进了证明程序的进行。然而,基于硬件的技术的一个主要缺点是因此,它们无法用于没有此类硬件的遗留设备。此外,使用防篡改硬件会增加传感器成本和能耗,使其在许多场景中不适用。随着攻击者仍可利用多种类型的攻击手段,依赖防篡改硬件足以建立信任这一假设也正面临日益严重的威胁[Anderson 和 Kuhn 1996]。侧信道攻击如时序[Kocher 1996],、功耗[Kocher 等人 1999],以及电磁分析[Gandolfi 等人 2001]就是一些例子。最近,可信平台模块(TPMs)[Kursawe 等人 2005年;Kauer 2007年;Sparks 2007年;Parno 2008年;Winter 和 Dietrich 2013]以及物理不可克隆函数(PUFs)[R¨uhrmair 等人 2010年;Merli 等人 2011年; Helfmeier 等人 2013]也成为攻击目标。相比之下,基于软件的技术不依赖于防篡改硬件。这些方法的优势在于可应用于遗留设备,并且不会增加节点的成本和尺寸。因此,大多数为无线传感器网络提出的认证机制都是基于软件的也就不足为奇了。混合型方法兼具硬件和基于软件的技术的优缺点。例如,将证明例程写入只读存储器(ROM)可确保其不会被攻击者篡改。然而,这种方法依赖于ROM中有足够的可用空间,而遗留设备可能并不具备这样的条件。此外,由于物理攻击难度大且成本高,使用防篡改硬件可能显得过于冗余。例如,可以改用内存保护单元(MPU)来防止对机密信息的非法访问[Eldefrawy 等人 2012年;Koeberl 等人 2014]。

关于仅使用基于软件的技术进行远程认证的可行性存在大量讨论。在这些方案开始应用于无线传感器网络(WSNs)之前——理论上这有助于其实施,因为传感器节点的架构要简单得多——Kennell 和 Jamieson [2003]提出利用 CPU 执行副作用(例如转换检测缓冲区未命中)来进行真实测试。随后,此类副作用的可行性和可靠性引发了广泛争议 [Shankar 等 2004a;Kennell 和 Jamieson 2004;Shankar 等 2004b]。Castelluccia 等[2009]研究了现有方法在嵌入式设备上的不足,并提出了两种通用攻击,这些攻击后来被 Perrig 和 Van Doorn 反驳,又被 Francillon 等 [重新确认 2010]。他们认为,由于实现必须高度优化,因此很难正确设计具有严格时序条件的认证方案。他们还声称,与某些现有方案相反,证明方的所有内存都必须被证明,而要做到这一点非常具有挑战性。Francillon 等 [2014]断言,基于软件的技术只有在证明者和验证者直接通信且无中间节点的情况下才可能是安全的,因此无法用于执行跨网络的认证。然而,Yang 等 [2015]提出了一种抗延迟的基于软件的认证机制,能够执行多跳认证,名为低成本远程内存认证 (LRMA)。LRMA 要求响应数据包沿挑战所经过的相同路径返回。中继节点记录接收到每个数据包的时间,并将该信息报告给验证者,验证者据此估算平均单跳延迟,并使用贝叶斯分类器检测被入侵节点。此外,如果网络采用基于时分多址(TDMA)的媒体访问控制(MAC)[van Hoesel 等 2004],,则网络延迟是已知的。此外,也可以在不使用多跳认证的情况下对所有网络节点进行认证。例如,Seshadri 等 [2006]提出了一种扩展环方法,其中基站首先认证距离其一跳远的节点,然后要求这些节点认证它们的邻居。验证过程以逐跳方式进行,类似于一个扩展的环。Yang 等 [2007]提出了另一种替代方案,作者提出了一种多对一认证,其中证明者的邻居执行验证程序,从而避免了多跳认证的需求。

3.2. 完整性度量

证明者的内部状态可以包括其程序存储器、数据存储器、寄存器、MMIO,甚至外部内存。内存可进一步划分为在正常软件执行期间内容永不改变的静态部分和内容可能被插入、删除或修改的动态部分。

静态完整性度量方法 仅验证证明者内存的静态部分。例如,在Kiyomoto和Miyake提出的面向WSN的轻量级认证方案[2014],中,所有节点将其内存分为两部分:用于存储程序代码和数据的程序区域MP,以及另一个用于认证的区域MA。这两个MP和MA被划分为作者称为寄存器的单元(但未讨论寄存器的大小——因此它可能是一个单独的内存地址或一组地址块)。如果程序代码不足以填满MP,则使用额外的随机数据填充。在初始化阶段,一个传感器节点从其某个邻居节点中随机选择一个寄存器,计算其哈希值,并将结果存储在MA中。然后该节点重复此过程,从不同的邻居节点中随机选择不同的寄存器,直到填满 MA。在认证过程中,节点随机选择一个来自MP或MA的寄存器。如果选择了来自MP的寄存器,则该节点获取其某个邻居节点中存储的对应MA寄存器;否则,如果选择了来自MA的寄存器,则获取其某个邻居节点中存储的对应MP寄存器。在这两种情况下,都会重新计算来自MP寄存器的哈希值,并将结果与MA寄存器中的值进行比较。如果两者不匹配,则说明一个或两个节点已被攻击者攻破。然而,无法确定是哪个节点被攻破,因此两个节点都必须终止运行。已终止的节点将停止与网络通信,以防止恶意代码传播。但是,成功攻破节点的攻击者有可能修改代码,使得即使认证未通过,节点也不会终止运行。此外,该认证机制每次仅验证一个寄存器,因此内存覆盖率较低,例如,攻击者若仅修改一个寄存器,则有很大可能不会被检测到。

动态完整性测量方法 检查在证明者上执行的软件的运行时属性,这些属性代表程序正常执行期间必须满足的行为。例如,堆栈帧以链表形式排列,其中某一帧的基指针指向前一帧的基指针。远程动态认证系统(ReDAS) [Kil et al.2009] 就是这种方法的一个例子。它在离线阶段自动从每个应用程序的源代码和二进制文件中提取属性。然后,在程序执行期间记录任何完整性违规证据。为了防止攻击者修改已记录的证据,每个证明者都配备了一个可信平台模块(TPM)。因此,当检测到违规时,该信息会立即被密封到TPM中。随后,当验证者发起挑战时,证明者只需发送已密封的信息即可。然而,ReDAS仅检查所有可能的动态系统属性的一个子集,并且仅在系统调用时测量系统完整性。因此,如果攻击者仅修改ReDAS未覆盖的属性,或在系统调用之间隐藏修改,则仍可能成功。

3.2.1. 讨论

为了检查设备是否已被攻破,验证者必须预先知道该设备的有效状态集合。由于静态内存区域中的内容在正常软件执行期间不会改变,因此它们为证明设备提供了一种直接的方法。验证者向证明者发出挑战,要求其计算这些内存区域的校验和并生成有效响应,除非这些内存区域未被修改,否则实现这一目标将非常困难。虽然困难,但并非不可能。正如我们所见,攻击者可能使用多种方法为了规避认证,可能会出现伪造、内存复制和共谋攻击等情况。如果证明过程在现实假设下没有经过谨慎实施,则攻击者可能成功。因此,即使设备给出了有效响应,也不意味着它未被攻破。静态完整性度量方法极易受到ROP攻击,因为此类攻击利用已存在的代码而不对其进行修改。与验证静态内存区域中的代码是否被篡改同等重要的是,验证代码是否按照预期方式执行。这正是动态完整性度量方法的目标。然而,由于运行时属性的多样性和动态性,识别动态对象的已知良好状态并非易事[Kil et al. 2009]。

3.3. 时序

在任何认证机制的实际实现中,验证者在发送挑战后只会等待证明者的响应一段有限的时间。虽然一些方案具有严格的时序条件,但其他方案则采用更宽松的方法。

**基于软件的证明(
SWATT)[Seshadri 等人 2004]是首个专为嵌入式设备设计的认证机制。它依赖于严格的挑战/响应时序来检测被攻破的证明者。验证者向证明者发送一个随机生成的随机数,该随机数作为证明者伪随机数生成器(PRNG)的种子。证明者随后执行基于单元的伪随机内存遍历,迭代读取内存字并计算其程序内存内容的校验和。因此,攻击者无法预测内存访问的顺序;如果内存内容被篡改,则攻击者必须修改证明例程,并插入语句以检查当前地址是否已被修改。如果是这样,为了得到正确的响应,攻击者必须将内存访问重定向到存储原始值的内存位置。作者们的主要假设是,证明例程以时间最优的方式构建,因此对其所做的任何修改都会导致计算时间明显增加,从而被验证者检测到。因此,验证者通过校验和错误或响应延迟来检测被攻破的证明者。然而,Castelluccia 等人[2009],提出了一种比 SWATT 作者所考虑的更快的攻击方式。此外,另一种可能性是对证明者的CPU进行超频,使得即使需要执行更多指令,总耗时仍在允许范围内。尽管如此,这将被视为一种硬件修改攻击,因而假设不会发生。为了部分解决这一问题,Kong 等人 [2014]提出在校验和计算中引入物理不可克隆函数(PUF)的输出,以抵御超频以及冒充攻击。

Choi 等人[2007]提出了一种适用于具有宽松时序条件的无线传感器网络的主动代码验证协议。本质上,其主要思想是填满证明者内存,使攻击者无法隐藏其恶意代码。基站充当验证者,并假设与网络中的每个节点共享一个成对密钥。证明者从基站接收一个随机数,并将其作为伪随机函数(PRF)的种子,利用该函数的输出填充空闲内存区域。随后,证明者对其内存计算哈希值,并将结果发送至基站进行验证。该方法的一个问题是,用于填充内存的随机内容是由在证明者上执行的伪随机函数(PRF)生成的。因此,一旦节点被攻破,攻击者便可访问该伪随机函数(PRF),并利用它动态生成哈希值,而无需将其输出实际存储在内存中。即使这比正常协议执行所需时间更长,但所提出的方案并未严格控制证明例程的执行时间,因此该攻击将无法被检测到。第二个问题再次在于使用了无防篡改硬件保护的加密密钥。

3.3.1. 讨论

理论上,证明者响应挑战的时间限制越长,攻击者能够探索的攻击数量就越多。一种方法是否依赖于对证明例程执行时间的精确测量,取决于系统模型和所作的假设。

具有严格时序条件的方法不依赖于防篡改硬件,并假设证明例程的时间最优实现。否则,攻击者可能会开发出更快的例程,并利用节省下来的时间伪造有效结果。然而, Castelluccia 等人的工作 [2009] 指出了这些方法存在的一些局限性。首先,正确设计一个时间最优的证明例程非常困难,因为其实现必须小巧且简单。这排除了使用复杂且耗时的密码学函数的可能性,而倾向于使用如add和xor等简单指令,但这些指令可能带来较差的安全性。其次,为了达到最高速度,这些例程通常用汇编语言实现,而这种方式极易出错。第三,证明证明例程以及最佳可能攻击的运行时最优性仍然是一个开放的研究问题。这些方法的另一个问题是,在大多数场景中,它们无法用于多跳认证,因为网络延迟可能是不可预测的。另一方面,那些不依赖执行时间精确测量的方法,要么依赖防篡改硬件,要么基于限制攻击者能力的假设。其中一个假设是:如果证明者的全部内存都被填满,则攻击者将没有空间分配恶意软件并仍能计算出有效响应。然而,这些假设并不总是成立。例如,攻击者可能会压缩内存中的现有代码,从而腾出足够的空间容纳恶意软件;或者共谋节点可能将恶意软件安装在不同的内存位置,当它们通信时可以恢复被本地覆盖的内容。

3.4. 内存遍历

在认证过程中,证明者使用其内存内容作为其可信度的证据。证明者遍历内存的方式基本上有两种:顺序式 或 伪随机式,其中后者又可进一步分为 基于单元 或 基于块。

顺序内存遍历方法 以迭代方式从头到尾遍历证明者内存。例如,Park和Shin [2005]提出了一种基于程序完整性验证(PIV)的无线传感器网络软防篡改方案。该网络被划分为多个由簇头管理的簇,这些簇头被称为PIV服务器(PIVSs),其计算和存储能力优于普通传感器。PIVS作为验证者,在每次认证轮次中生成不同的证明例程——PIV代码(PIVC),并由证明者执行。通过使用随机化哈希函数(RHFs),PIVS为每个生成的PIVC随机编码哈希计算算法。为了保护传感器免受冒充PIVS的攻击者侵害,网络中部署了多个认证服务器(AS)。AS充当可信第三方(TTP),使传感器节点能够确认PIVS的真实性,从而确认 PIVC的真实性。作者未进一步讨论AS的具体实现,指出AS可以与节点共享对称密钥,或使用公钥密码学;然而,同样地,节点不被认为也不太可能具备防篡改硬件来保护加密密钥。在部署之前,节点的程序存储器被划分为多个代码块。针对每个代码块,计算摘要并存储在所有PIVS均可访问的数据库中。这些摘要随后被分为三类:所有节点共用、一组节点共用或特定节点独有。因此,需要存储的摘要数量可大幅减少。在接入网络之前,节点必须证明其完整性。因此,在初始化阶段,所有节点请求进行验证。如果RHF接收相同的输入,则生成相同的结果将程序块或其对应的摘要作为输入。因此,证明者和PIVS都能够获得相同的结果。从程序存储器的第一个地址到最后一个地址,为每个内存块计算校验和,这些校验和的最终校验和表示整个内存。作者们建议使用既无法预测也无法压缩的随机值来初始化数据存储器。然而,攻击者仍然可以压缩位于Mp的原始软件,并使用实时解压技术为压缩代码块计算摘要。

基于认证的安全代码更新(SCUBA)[Seshadri 等人 2006] 提出了一种用于无线传感器网络中检测和恢复被攻陷节点的机制。该机制依赖于无可争议的代码执行(ICE),可保证无论节点是否被入侵,代码执行均未被篡改。该方法要求每个传感器节点在只读存储器中保留足够的空间以存储其自身的节点ID和基站的公钥,因此即使节点被攻击者攻陷,这些值也无法被修改。该方法与SWATT类似,但不验证整个程序存储器,并将校验和计算扩展至包含动态数据。与Spinellis的方法不同,ICE将CPU状态——程序计数器(PC)、数据指针和状态寄存器——作为输入来计算校验和。为了确保其未被篡改的执行,证明例程会禁用所有中断,然后对包含自身、SCUBA协议可执行文件、节点ID、基站的公钥以及 CPU状态的内存区域计算校验和。随后将结果发送至基站,并在中断仍处于禁用状态下启动SCUBA可执行文件,从而保证其执行过程未被篡改。与SWATT一样,证明例程的设计使得如果该例程被修改,则校验和要么不正确,要么其计算时间明显变长。在这种情况下,基站可判断该节点已被攻陷并将其加入黑名单。否则,SCUBA协议可进一步验证该节点,并检查和修复其余内存。该方案的一个缺点是,程序计数器(PC)可能因平台不同而无法访问。此外,Castelluccia等人[2009]描述了一种能够绕过ICE校验和计算并执行任意代码而不被检测到的攻击。该攻击利用了ICE校验和函数在执行加法运算时忽略进位的特点,因此最高有效位(MSB)的变化可能不会改变校验和结果。这使得攻击者能够在不同的内存位置存储一份ICE函数的副本,其地址仅在最高有效位上与原始位置不同。

3.4.1. 讨论

顺序内存遍历方法易于实现且高效——其运行时间与内存大小成线性关系。此外,它们对被验证的内存区域提供完全覆盖,每个内存地址仅遍历一次。然而,这些优点伴随着一个缺点,即可预测性。由于内存地址仅以可预测的顺序检查一次,攻击者更容易伪造认证。例如,攻击者可以移动内存内容以逃避检测。当验证开始时,恶意软件可被移至内存末尾,在验证通过其原始位置后,再将其移回原处。另一种可能是两个共谋节点将恶意软件安装在不同的内存位置,当其中一个节点正在接受认证时,它可以向另一个节点请求其覆盖的内容。相比之下,伪随机方法本质上具有不可预测性,不易受到此类攻击的影响。然而,它们效率较低,仅能提供内存覆盖率的概率性保证。为了以高概率确保每个内存地址至少被访问一次,这些方案依赖于赠券收集问题的结果[Mitzenmacher 和 Upfal 2005],这表明,对于大小为 n的内存,需要执行 O(nlnn) 次内存读取。因此,某些内存地址会被多次访问,从而引入不必要的开销。为了减少这种开销,Yang 等人 [2007]提出以逐块方式遍历内存。基于块的方案不逐个地址访问内存,而是访问地址块并在块内执行xor操作。对于块大小 b,需要 O( nlnn b) 次迭代才能至少覆盖每个内存地址一次。有趣的是,当 b = 1 时,该方案表现为基于单元的方法,而当 b= n 时,则表现为顺序遍历。因此,选择 b 的大小是性能与安全之间的一种权衡。此外,正如 Armknecht 等人 [2013], 所指出的,如果块大小在认证之前就已确定,则攻击者可以对基于块的方案发起碰撞攻击。这类伪造攻击通过以某种方式修改块内的地址,使得修改相互抵消。

3.5. 证明例程

大多数现有方法在<网络部署>之前,将其<证明例程>embedded于<证明者>的<内存>中。然而,<验证者>也可以为每个<认证轮次>生成并向<证明者>发送不同的例程。 For example, Shaneck et al.[2005] proposes a remote software-based attestation framework where the attestation routine is generated on the fly. The base station plays the role of the verifier and is assumed to be within communication range of all network nodes. Furthermore, it shares a symmetric key with each node to secure communica-tion. At each attestation round, the base station generates a new attestation routine and sends it to the prover. It waits for a maximum time that comprises the time to send and receive a message, the attestation routine execution time, and the expected network delay. The procedure utilizes techniques such as randomization, encryption, obfuscation, and self-modifying code to prevent an adversary from avoiding detection. They propose to use random keys to encrypt the entire attestation routine and send a corresponding decryption routine together with the code. This routine is also re-sponsible for discovering the key, which is located somewhere in the prover’s memory, hidden through opaque predicates[Collberg et al. 1998]. The attestation routine has three main components: seed calculation, memory reads, and hash computation. The first component is responsible for initializing the PRNG, which determines the order of memory accesses. So it is in the interest of an adversary not to modify this part but to infer the seed value. However, the seed computation also uses opaque predicates. The other two components are part of a loop that reads memory addresses and use their contents to compute the hash. As with SWATT, it is necessary to iterate through the loop several times to cover the program memory. The second component is the one an adversary would attempt to modify so it could redirect memory reads. To avoid such modifications, this component has several junk instructions, which appear to be reachable due to opaque predicates, and it self-modifies its code relocating the read instruction at each iteration. After the hash calculation is complete, the result is sent to the base station. The authors have neither implemented nor evaluated their pro-posal, so it is difficult to discuss its security and even its feasibility. One difficulty to implement this proposal is that several commodity sensor nodes store the executable code in flash memories programmable only by pages. Another issue is the use of crypto-graphic keys to secure communication, which, once again, is made without considering that commodity nodes do not have tamper-resistant hardware to protect them from attackers.

3.5.1. 讨论

将证明例程嵌入证明者内存中的方法在设计上提供了安全。该证明例程被设计为安全的,如果证明者更改了证明例程或正在验证的内存内容,那么它将大概率无法提供有效响应。另一方面,动态生成证明例程的方法通过隐蔽性实现安全。由于每次认证轮次都会生成新的例程,攻击者无法预测应执行的指令,更无法预知其结果。该证明例程本身可能存在漏洞,但由于其实现对对手是隐藏的,这些漏洞不太可能被及时发现和利用。

3.6. 程序存储器

传感器节点的程序可能不会占用其全部程序存储器,从而留下空闲空间。因此,攻击者可以利用这些空间存储用于规避认证的数据。为了避免这种情况,一些方法建议使用不可压缩的随机噪声填充空闲空间。

例如,AbuHmed 等人 [2009]为无线传感器网络提出了两种基于软件的远程代码证明程序。作者们还考虑了一种场景,其中基站作为验证者,在没有任何防篡改硬件的情况下与传感器节点共享加密密钥。在此背景下,他们提出了两种技术,一种用于部署前,另一种用于部署后,通过不可压缩的随机噪声填充传感器节点的空闲内存空间。在部署前方 法中,每个节点的程序存储器使用种子进行填充,验证者则保存该种子及其对应节点ID的记录。然后,在认证时,验证者可以生成节点内存的副本以计算校验和,并将结果与接收到的结果进行比较。在部署后方法中,节点使用从环境中收集的某些动态数据作为种子来生成噪声并填充其内存。之后,传感器将种子发送给验证者并从自身内存中删除该种子。因此,之后攻击者即使攻陷了节点也没有空间存储其恶意代码;如果其确实覆盖了内存,则无法在没有种子的情况下恢复原始内容。作者们还提出了两种具有可变块大小的基于块的内存遍历算法,这与 Yang 等人 [2007]所采用的固定块大小不同。在第一种算法中,验证者在发出挑战的同时定义块的大小。在第二种算法中,采用在校验和计算过程中动态变化的块大小。然而,这两种方案仍然容易受到压缩攻击的影响,因为攻击者可以压缩原始软件,并利用实时解压技术对压缩后的代码块计算摘要。

3.6.1. 讨论

物理内存内容通常具有低熵,因此可被压缩[Douglis 1993]。因此,即使空闲空间被不可压缩的随机噪声填充,攻击者仍可能压缩原始程序代码,从而腾出足够空间植入其恶意代码[Castelluccia et al. 2009]。为了抵御此类攻击,Vetter 和 Westhoff[2012]提出了一种带有压缩指令代码的代码认证机制。每个传感器节点被加载一个压缩的代码镜像,其余程序存储器则填充不可压缩的随机噪声。该代码镜像被划分为等长的代码块,并对每个代码块单独进行压缩。然而,压缩后的代码块长度可能不同。因此,程序存储器被划分为两个部分:一部分用于存储压缩的代码块,另一部分称为行地址表(LAT),用于存储各代码块的偏移量。为了执行压缩的代码,他们引入了硬件扩展:一个专用微控制器利用 LAT 部分来解压代码块,并在节点的 RAM 中维护一个缓存,用于存储正在执行的解压后的代码块。他们采用了与 SWATT [Seshadri et al. 2004]相同的证明例程;但由于无需满足相同的严格时序条件,内存已完全填满。然而,数据存储器未被验证,攻击者可以执行ROP攻击,甚至修改缓存中存放的解压后的代码,从而破坏节点。此外,该方案需要专用微控制器来解压代码块,这对其适用性构成了严重限制。

3.7. 数据存储器

根据证明者的存储器架构,数据存储器和程序存储器的物理地址可以是共享的(冯·诺依曼架构),也可以是相互分离的(哈佛架构)。在后一种情况下,程序存储器的大小通常远大于数据存储器。因此,探索数据存储器的攻击者可用的空间有限[Shaneck et al. 2005]。此外,在哈佛架构中,数据存储器的内容不可执行。由于这些原因,一些方法不验证数据存储器。然而,已有针对数据存储器的攻击被成功实现。例如,Castelluccia 等人的研究 [2009]描述了一种基于rootkit的攻击,该攻击在认证过程中将恶意代码隐藏在数据存储器中。

一些 动态 证明机制尝试 验证数据存储器。例如,DataGuard [Zhang 和 Liu 2010]是一种基于数据边界完整性的动态数据完整性软件认证方案。每个节点都有一个唯一的种子,在初始化后该种子会被擦除,用于在数据对象周围插入数据保护符,类似于金丝雀值[Cowan 等人 1998],。当受到验证者的挑战时,证明者会根据所有数据保护符的值发送响应。因此,如果攻击者通过缓冲区溢出攻击等方式覆盖了某个数据保护符,则由于不再拥有原始种子,无法恢复原始的数据保护符值。然而,该方案也存在自身的局限性。首先,该方法容易受到不修改数据保护符的攻击。其次,它仅提供粗粒度数据保护,其中每个内存块被视为一个独立的对象,因此该方案无法保护单个数组元素。

其他方法,例如 Park 和 Shin [2005] 以及 Perito 和 Tsudik [2010], 提出的方法,会覆写数据存储器中的所有内容,从而在过程中擦除任何恶意数据。

3.7.1. 讨论

不验证数据存储器的方法本质上容易受到ROP攻击。然而,现有的验证数据存储器的方法也并非完全安全。由于难以预测动态数据的行为,现有方法仅部分覆盖了数据存储器。虽然擦除所有数据存储器是更安全的方法,但这实际上并未对内存内容进行认证。此外,这些方法在清除任何恶意数据的同时,也会消除节点在认证之前努力获得的所有数据。

3.8. 交互模式

大多数现有方法采用如图1所示的一对一交互模式,在每次认证轮次中,有一个验证者和一个证明者。然而,这并不是执行认证的唯一可能方式。

例如,Jin 等人[2010]提出了一种基于不可预测软件的证明解决方案(USAS),用于检测移动无线传感器网络中采用动态认证链的一对多交互模式下的受损节点。每条认证链包含一个发起者(I节点)和多个跟随节点(F节点)。在每次认证轮次中,作为验证者的基站会向随机选择的 I节点发起挑战。该挑战包含一个随机数,用作证明例程的输入,以及针对 I节点和 F节点的认证消息。当 I节点受到挑战时,它运行证明例程,并将其输出用于向 F节点发起挑战。然后执行证明例程,并将结果发送回基站。在网络部署之前,每个节点的程序存储器都被填充了伪随机噪声,而基站保存了所有节点所用种子的副本。基站随后将F节点的结果与预期结果进行比较,以检测被入侵节点。只要有一个F节点的结果有效,则I节点也可被视为真实的。然而,如果所有F节点返回的结果都无效,则无法对所有被证明的节点做出判断。在这种情况下,可能是所有F节点已被入侵,也可能是I节点已被入侵。执行整个认证链(这不是一个低成本的操作)却无法得出明确结论,这是该方案的一个重大局限性。该提议的另一个局限性在于,尽管它创建了认证链,但仅对能够直接与基站通信的传感器进行认证,以避免中间节点篡改消息。

另一种可能性是采用一种多对一的交互模式来协调分布式认证,其中某个节点的邻居共同协作来对其实施认证。例如,Yang 等人[2007]提出了两种基于软件的分布式认证方案,传感器节点相互协作以验证其邻居的完整性。与之前的方法主要不同之处在于,该方法仅涉及普通节点,且不需要可信验证者。作者提出在每个传感器的程序存储器中的空闲空间填充伪随机数,但与 Choi 等人[2007],不同的是,这一操作是在节点部署之前完成的。对于每个节点,使用不同的种子生成伪随机数。部署后,每个传感器发现其每一个邻居并与其建立成对密钥——同样,加密密钥的使用没有保护措施。在第一个提出的方案中,一个节点将其种子分割为多个种子分片,向每个邻居分别发送一个种子分片,然后从内存中删除该种子。当超过一半的某节点邻居检测到其异常行为时,就会触发一次认证。在这种情况下,所有邻居选举一个簇头,且每次认证轮次的簇头可能不同。簇头使用一个随机数向该节点发起挑战,并从其他邻居收集种子分片以恢复种子。然后,簇头在本地计算预期结果,并将其与被挑战节点的响应进行比较。作者提出了一种新的随机遍历程序存储器的方法:与 SWATT 中逐个读取内存字的方式不同,他们每次迭代读取一个内存地址块,并在块内执行xor操作。通过使用适当的块大小,他们能够在覆盖整个内存的同时减少总的迭代次数。在第二个方案中,每个节点还预先加载了针对其自身Mp的挑战与响应元组。节点不发送种子分片,而是向每个邻居发送一个元组,然后删除所有元组。当认证被触发时,每个邻居使用接收到的元组中的挑战与响应依次对该节点进行认证。如果一个节点未能通过大多数认证,则被认为已被入侵。这些方法的一个局限性是它们要求网络具有最低限度的网络密度才能正常工作。如果一个节点的邻居数量不足,则无法对其进行正确认证。此外,这两种方案都会带来相当大的通信开销。第一种方案更容易受到受损节点的影响,因为这些节点可以发送伪造的种子分片,甚至更严重的是被选为簇头。在第二种方案中,攻击者必须攻破超过一半的邻近节点才能成功。然而,后者方案要求证明者为其每个邻居各执行一次证明例程,这既耗时又耗能。

3.8.1. 讨论

简单性是一对一交互模式的主要优势。它允许验证者单独针对网络中的每个节点。然而,如果需要证明多个节点,则总时间将随着节点数量线性增加。采用一对多模式证明节点可以减少总体计算时间通过允许多个节点并行执行证明例程来实现。然而,如果采用Jin等人[2010]和Asokan等人[2015],所使用的认证链,则一个被入侵节点可能会使整个链失去可信性。一对一和一对多方法的一个重要特征是,验证者必须是一个可信实体。这一点具有重要意义,因为一些提出的认证机制要求证明者处于验证者的通信范围内。因此,需要使用移动验证者或在网络中分散布置多个验证者。此外,如果仅存在单个验证者,则该验证者将成为单点故障。多对一模式的主要特点是可以在无需可信验证者的情况下进行。这既有优点也有缺点。其优点在于,它允许以分布式方式同时对多个节点进行认证,且不存在单点故障。此外,由于邻近节点是被入侵节点的直接观察者,因此缩小了异常行为检测与认证之间的差距。其缺点是,该模式需要达到一定的网络密度,并且更容易受到受损节点的影响,因为这些节点不仅可以试图逃避检测,还可能误导其他节点认证的结果。

3.9. Overview

Having examined all characteristics and their instances, one can realize that there is no definitive attestation mechanism. Each approach has its own advantages and disadvantages. Choosing the best solution for a specific scenario depends on a series of factors, such as the assumptions made about the adversary, the environment in which the nodes are going to be deployed, how the sensors are going to be placed across it, and the underlying nodes hardware. Nevertheless, the discussion held in this section helps to clarify the tradeoffs between different techniques and can serve as a guideline to developers and engineers to find the techniques that best suits their needs. Table II maps, in chronological order, a representative number of attestation mecha-nisms to the taxonomy illustrated in Figure 3. To the best of our knowledge, there are no existing mechanisms that would not fit on the proposed taxonomy. Furthermore, we believe that our taxonomy still holds outside the WSNs scenario. One important note is that we classify the mechanisms as they are first described in their original arti-cles, without considering proposed extensions. To better visualise the influence of the mechanisms among themselves, we have plotted a citation graph, depicted in Figure 4.

Vertices represent attestation mechanism articles while edges represent citations. An edge from vertex A to vertex B indicates that article A cites article B. Inside each ver-tex, there are two numbers: the number of citations it has received and the number of it所获得的引用次数。我们观察到的主要问题是,即使在压缩和ROP攻击已被证明 [Castelluccia 等人 2009],之后,仍有新的静态方法被提出 [金等人 2010;维特尔和韦斯特霍夫,2012;清本和宫岳 2014;谭等人,2015;杨等人 2015;阿索坎等人 2015; Ibrahim 等人 2016],但这些方法完全忽略了或未能提供针对此类攻击的充分防护。我们认为,认证机制应反映实际运行的系统,而不仅仅是证明者内存中的某些静态部分。

4. 开放性研究问题

现有的认证机制远非完美,仍有很大的改进空间。在本节中,我们探讨开放性研究问题,并给出相应的研究方向。我们重点关注四个主要主题,认为这些主题非常重要并值得进一步关注。

4.1. 过度乐观的假设

问题不会因为被假定不存在就真的消失。在许多已提出的证明机制中,所做的假设与攻击者能力之间存在差距。因此,一些现有方法依赖于可能不成立的强前提。例如,SWATT [Seshadri 等人 2004]和 SCUBA [Seshadri 等人 2006]依赖于对认证例程执行的时间控制的严格要求。然而,正如作者们自己所认识到的,证明运行时最优性仍然是一个未解决的问题。其他方法假设填满证明者程序存储器中的空闲空间后,攻击者将无法在不被发现的情况下存储其恶意代码。然而,只有其中两种方法[佩里托和楚迪克,2010;维特尔和韦斯特霍夫 2012]能够防御代码压缩攻击,且它们自身也存在局限性。佩里托和楚迪克 [2010]要求覆盖证明者的所有可写内存,而维特尔和韦斯特霍夫[2012]则需要一个专用微控制器。大多数方法假设不会发生或对其发生施加限制的另一种攻击是合谋攻击。尽管可以设想出针对这些攻击的解决方案,例如干扰证明者或让其邻居在认证期间监控其通信,但这些解决方案的可行性、有效性和影响尚未得到分析。一些基于软件的方案假设在证明者与验证者之间通过在网络部署前定义的加密密钥建立安全可信通信信道。然而,这些方法所使用的节点并不具备保护这些密钥所需的必要硬件,而令人奇怪的是,正是这种硬件的缺失成为其开发的根本动机。不过,加密密钥可以在通用传感器节点上于运行时确定后使用。例如,用于密钥建立的软件认证(SAKE)[Seshadri 等人 2008]是一种在两个相邻节点之间建立共享密钥的协议,无需假设预先存在的可信或秘密信息。然而,SAKE 基于 ICE,这与 SCUBA 所使用的原语相同,且依赖于严格时间测量。另一种对传感器节点进行认证的替代方案是使用射频指纹技术,该技术可通过无线电发射器的独特特征来识别单个设备 [乌雷滕和塞林肯,2007;雷曼等人,2014;诺克斯和昆茨 2015]。绝大多数证明机制并未过多关注证明者的安全。这些机制的开发基于验证者始终可信的假设。然而,攻击者可利用这一点冒充验证者,对诚实设备发起拒绝服务攻击。Brasser 等人[2016]研究了在此背景下的攻击与对策。他们描述了攻击者可能采用的三种攻击方式:重放、重排序和证明挑战的延迟。对策包括使用密钥来认证验证者,以及使用挑战计数器或时间戳(这需要证明者和验证者之间具备同步时钟),这些都需要硬件保护。尽管攻击者发动需要物理访问以破坏传感器节点的大规模攻击是不切实际的,但攻击者通过这种方式仅破坏少数选定节点可能就已足够。然而,绝大多数基于软件和混合方法并未考虑物理攻击。作为替代方案,Ibrahim 等人[2016]提出了抗物理攻击设备认证 (DARPA)。该方案假设执行物理攻击时,攻击者必须捕获目标传感器并将其临时禁用一段可察觉的时间,DARPA要求所有节点定期广播一条消息以证明该节点处于活跃状态。所有节点都会记录这些消息,并在认证期间由验证者收集。虽然由于设备或网络故障可能导致该方案出现误报,但它是在检测物理攻击方面迈出的第一步。

4.2. 有效性

WSNs are usually constituted of resource constrained nodes that have limited energy, low processing power, and little storage space. In many application scenarios, the net-work needs to operate unattended for long periods of time, so battery depletion is crucial. So while ensuring the integrity of the sensor network is important, it is equally important that security mechanisms should not have a high impact on the system per-formance. Attestation procedures typically degrade both network throughput and the node’s battery lifetime. Furthermore, attestation only allows us to ascertain the state of the prover at a particular point in time. How often should then attestation be performed to provide assurance of the network’s integrity while not depleting resources? Chen 等人[2010]提出了一种模型,用于分析为最大化传感器寿命并有效检测被入侵节点,应以多高频率执行代码认证。然而,他们的模型仅考虑了概率性触发认证的设计,忽略了利用网络监控信息来决定下次触发认证时机等方面。因此,他们的模型得出了一个相当直接的结论:必须执行认证的频率直接取决于节点被攻陷的速率(攻陷率)。在实际中,攻陷率事先未知a priori,并且高度依赖于许多不同因素,例如网络部署、攻击类型以及网络所感知信息的价值和时效性。例如,已有研究表明,恶意数据包可以快速传播,并在短时间内攻陷整个网络[顾和努尔尼2008;Yang 等人 2008]。然而,在其分析中, Chen 等人忽略了这些方面,并假设攻陷率范围为每小时 0.0058 至 0.0072 个节点,相当于每5到8天有一个节点被攻陷。需要进一步分析,以确定不仅何时执行认证,还要确定对哪些设备进行认证,以及在检测到被入侵节点时应采取什么措施。例如,靠近基站的节点作为攻击目标可能具有更高的价值,因为它们还负责将外围节点的大量数据转发到基站,反之亦然。在决定对哪些节点进行认证时,应考虑这些因素,例如通过赋予不同的权重。此外,一个被入侵的节点可以轻易地向其邻居广播恶意数据包。因此,对被入侵传感器的邻居进行认证是降低攻击者入侵率并限制扩散的有效方法。

4.3. 检查时间到使用时间

在无线传感器网络中使用认证时,最大的问题可能是检查时间到使用时间(TOCTOU)[Bratus 等人 2008]之间的差距。对节点进行证明发生在某个时间点,并不能保证节点在此之前未被临时破坏,或在此之后不会立即被破坏。只要攻击者在认证开始前有未被测量的存储位置来隐藏其恶意数据,并能在认证结束后重新安装这些数据,就可以实施TOCTOU攻击[Kovah 等人 2012]。事实上,Castelluccia 等人 [2009]提出了一种基于 rootkit的攻击,正是利用了这一点。困难之处在于对证明者的全部内存进行认证。一些动态证明方法 [Kil 等人 2009;Zhang 和 Liu 2010]试图通过检查软件执行的运行时属性来缩小TOCTOU间隙。然而,预测动态数据的行为并不总是可行的,这些方法最终只能覆盖所需属性的一部分。ICE[Seshadri 等人 2006]试图保证一个未被篡改的执行环境,以确保一段代码能够未经修改地运行。该方法的局限性在于,它仅适用于不调用证明者上其他软件且在中断禁用情况下执行的自包含代码。另一种缩小 TOCTOU间隙的方法可能是将认证与控制流完整性(CFI)[Abadi 等人2005]技术相结合。保护程序的控制流可以防止攻击者任意更改其执行过程。CFI技术通过在原始应用程序中嵌入控制代码来实现这种保护。证明控制代码和应用程序代码均未被篡改,进一步表明原始程序正按照预期方式执行。Ferguson 和 Gu [2011]在无线传感器网络的背景下实现了控制流保护;然而,所描述的方案尚未与任何认证机制结合。控制流证明(C‐FLAT) [Abera 等人 2016]是一种类似但不同的方法。它不是嵌入代码来保护真实的应用程序流程,而是嵌入代码来监控其执行路径。这使得验证者能够认证证明者的运行时行为,检测任何控制流偏离。然而,需要注意的是,CFI并非万无一失[Goktas 等人2014],也不能确保数据流安全[Chen 等人,2005;Castro 等人,2006;Hu 等人 2016]。最近,人们投入了大量努力来研究能够防御ROP攻击的方法。这些方法大致分为两类:一类是前述的CFI,另一类是软件多样化[Larsen et al. 2014]。然而,到目前为止,所有提出的机制都可能在某种程度上被攻破。因此,相关理念仍在不断发展,新的方法也持续出现。一种有前景的应对措施是使用仅执行内存[Backes 等人,2014;Crane et al. 2015],,它允许将内存区域标记为可执行但不可读。然而,为了对设备进行认证,证明例程需要读取其执行的代码,而迄今为止,尚无方法将这两种技术结合起来。

4.4. 可扩展性

为了证明一个设备,验证者必须了解其预期的内部状态和硬件架构。在简单的无线传感器网络场景中,所有节点可能在同一硬件平台上运行相同的应用程序,这使得证明过程相对容易。然而,在许多其他情况下,网络通常是异构的,包含不同类型的传感器,或不同的集群节点运行不同的应用程序。在更极端的情况下,网络可能包含来自不同厂商的大量传感器,运行着多种不同的应用程序。那么,如何以可扩展的方式存储和管理用于证明这些设备所需的信息呢?Park 和 Shin [2005] 提出的方法将应用程序代码划分为多个代码块,为每个代码块计算摘要,并根据该代码块属于所有节点、某一组节点还是唯一节点对其进行分类。尽管该方法能显著减少所需信息量,但也存在自身的安全漏洞。例如,攻击者可能在修改内存之前计算出证明者的摘要,然后仅保留一份副本

**高校专业实习管理平台设计与实现** 本设计项目旨在构建一个服务于高等院校专业实习环节的综合性管理平台。该系统采用当前主流的Web开发架构,基于Python编程语言,结合Django后端框架与Vue.js前端框架进行开发,实现了前后端逻辑的分离。数据存储层选用广泛应用的MySQL关系型数据库,确保了系统的稳定性和数据处理的效率。 平台设计了多角色协同工作的管理模型,具体包括系统管理员、院系负责人、指导教师、实习单位对接人以及参与实习的学生。各角色依据权限访问不同的功能模块,共同构成完整的实习管理流程。核心功能模块涵盖:基础信息管理(如院系、专业、人员信息)、实习过程管理(包括实习公告发布、实习内容规划、实习申请与安排)、双向反馈机制(单位评价与学生反馈)、实习支持与保障、以及贯穿始终的成绩评定与综合成绩管理。 在技术实现层面,后端服务依托Django框架的高效与安全性构建业务逻辑;前端界面则利用Vue.js的组件化特性与LayUI的样式库,致力于提供清晰、友好的用户交互体验。数据库设计充分考虑了实习管理业务的实体关系与数据一致性要求,并保留了未来功能扩展的灵活性。 整个系统遵循规范的软件开发流程,从需求分析、系统设计、编码实现到测试验证,均进行了多轮迭代与优化,力求在功能完备性、系统性能及用户使用体验方面达到较高标准。 **核心术语**:实习管理平台;Django框架;MySQL数据库;Vue.js前端;Python语言。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
在电磁散射与雷达技术的研究中,涉及粗糙表面电磁特性模拟的核心概念包括统计参数化建模方法、不同电场矢量方向的极化模式、特定方向的能量反射现象、理想化波前模型以及具有随机起伏特征的界面。以下是对这些要点的系统阐述: 统计参数化建模是一种基于表面统计特征描述其不规则性的电磁散射计算方法,尤其适用于均方根高度较小的粗糙界面在微波至毫米波频段的散射特性分析。 水平极化与垂直极化分别指电场矢量平行于地面和垂直于地面的振动状态。在雷达探测中,采用不同的极化模式有助于提升目标辨识度并抑制环境干扰。 当电磁波与物体相互作用时,部分能量沿接近入射方向返回,这种现象称为反向散射。其在雷达系统的探测灵敏度与目标特征分析中具有关键作用。 平面波是在均匀介质中传播的理想波型,其电场与磁场分布保持一致的相位关系,常作为理论简化模型用于电磁问题的解析与数值计算。 粗糙界面指具有随机起伏特征的表面,其不规则程度可通过均方根高度进行量化。这种结构特性会改变电磁波的传播路径与能量分布,进而影响信号的接收与处理。 相关压缩文件可能包含了实现上述建模方法的程序代码,通常采用数值计算语言编写,用于模拟不同极化状态下粗糙表面对平面波的反向散射响应。通过此类仿真,能够预测各类场景下的散射参数,为雷达系统设计与遥感数据解译提供理论依据。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值