4.2 IEEE 802.15.4协议安全分析
1.协议安全架构概述
链路层安全协议提供4种基本的安全服务:访问控制、消息完整性、消息保密性和重放保护。首先,访问控制意味着链路层协议应该阻止未授权的一方参与网络。合法节点应该能够检测到来自未授权节点的消息并拒绝它们。其次,安全的网络应该提供消息完整性保护:如果攻击者在消息传输过程中修改了来自授权发送方的消息,那么接收方应该能够检测到这种篡改。在每个数据包中包含一个消息验证码(MAC),以提供消息验证和完整性。MAC可以看作消息的加密安全校验和,计算它需要授权的发送方和接收方共享一个秘密的加密密钥,而这个密钥是计算输入的一部分。发送方用密钥计算数据包上的MAC,并将MAC包含在数据包中。共享相同密钥的接收方重新计算MAC,并与报文中的MAC进行比较。如果数据包相等,则接收方接收,否则拒绝接收。没有密钥,消息验证码便很难伪造。因此,如果对手更改了有效消息或注入了伪造消息,授权接收方将无法计算相应的MAC,授权接收方将拒绝这些伪造消息。此外,保密性是指对未经授权的一方保密信息,它通常是通过加密来实现的。优选的加密方案不仅应防止消息解密,还应防止攻击方部分地了解已加密消息的信息。这个更强的属性被称为语义安全。语义安全的一个含义是,对同一明文进行两次加密应该得到两个不同的密文。如果对同一消息两次调用的加密过程是相同的,那么显然违反了语义安全性:产生的密文是相同的。实现语义安全的一种常见技术是对加密算法的每次调用使用唯一的随机数。随机数可以被认为是加密算法的一个输入侧。使用随机数的主要目的是,当消息集合中几乎没有变化时,向加密过程添加变化。由于接收方必须使用随机数来解密消息,所以大多数加密方案的安全性不依赖于随机数的保密性。随机数通常以明文发送,并与加密数据包含在同一个数据包中。窃听在两个授权节点之间发送的合法消息,并在稍后的某个时间重放该消息的攻击方就参与了重放攻击。由于消息来自授权的发送方,所以它将有一个有效的MAC,因此接收方将再次接收它。重放保护可以防止这些类型的攻击。发送方通常为每个数据包分配一个单调递增的序列号,而接收方拒绝序列号小于它已经看到的序列号的数据包。
在802.15.4协议网络安全架构中,有两种重要的包类型与802.15.4协议的安全性有关:数据包和确认数据包。如图4.3(a)所示,数据包具有可变长度,节点使用它向单个节点发送消息或向多个节点广播消息。每个数据包都有一个Flags字段,它指示数据包类型、是否启用安全性、使用的寻址模式以及发送方是否请求确认。一个1字节的序列号用于识别确认的包号。包可选择性地包括源地址和目的地址。每个字段的大小在0~10字节之间变化,数据有效负载字段位于寻址字段之后,它小于102字节。最后是一个2字节的CRC校验和字段保护包,以防止传输错误。如图4.3(b)所示,只有当相应的数据包没有发送到广播地址且发送方请求确认时,接收方才发送确认包。它的格式很简单,包括一个与数据包中相似的2字节标志字段,它所确认的数据包的1字节序列号,以及一个2字节的CRC。确认包中没有寻址信息。
图4.3 数据包和确认数据包格式
802.15.4安全套件在应用程序控制之下的MAC层中进行处理。应用程序通过在无线电堆栈中设置适当的控制参数来指定其安全要求。如果应用程序没有设置任何参数,则默认情况下不会启用安全性。除去这种情况,应用程序必须显式地启用安全性。安全要求为媒体访问控制层定义了4种数据包类型:信标数据包、数据包、确认数据包和控制数据包。该安全要求不支持确认数据包的安全性;其他分组类型可以可选地支持分组数据字段的完整性保护和机密性保护。
应用程序可以选择不同类型的安全套件为传输数据提供安全保护。每个安全套件都提供一组不同的安全属性和保证,并最终提供不同的数据包格式。802.15.4协议定义了8种不同的安全套件,见表4.1。我们可以根据套件提供的属性对其进行大致分类:无安全性、仅加密(AES-CTR)、仅身份验证(AES-CBC-MAC)以及加密和身份验证(AES-CCM)。根据MAC长度的大小,支持身份验证的每个类别有3种变体。每个变体都被视为不同的安全套件,并有自己的名称。MAC可以是4、8或16字节长。MAC越长,对手通过猜测合适的代码来伪造的概率就越低。例如,对于8字节的MAC,对手有2-64的概率伪造MAC。以更大的数据包大小为代价来增强对真实性攻击的保护。此外,对于每个提供加密的套件,接收者可以选择启用重放保护。无线电设计师不必实现所有套件,802.15.4协议仅要求无线电芯片支持空套件和AES-CCM-64套件,而其他套件是可选的。
表4.1 802.15.4协议支持的安全套件
应用程序根据源地址和目的地址指示其对安全套件的选择。802.15.4协议中的无线电芯片有一个访问控制列表(ACL),控制使用什么安全套件和密钥信息。兼容设备最多可支持255个ACL条目。每个条目包含一个802.15.4地址、一个安全套件标识符、密钥、IV标识和重放计数器,如图4.4所示。安全材料是执行安全套件所必需的持久状态,它由加密密钥组成,对于提供加密的套件,还包括在不同的数据包加密调用中必须保留的随机数状态。当调用重放保护时,安全材料还包括最近接收到的分组标识符的高水位线标记。
图4.4 ACL条目
传出数据包的目的地址与ACL条目中的地址字段相匹配。然后,使用ACL条目中列出的密钥、IV标识和指示的安全套件来处理数据包。对于传入的数据包,源地址与ACL条目中的地址字段相匹配。加密操作使用ACL条目中的密钥。如果启用了重放检测,重放计数器字段将作为高水位线。
作为发送数据包接口的一部分,应用程序必须指定一个布尔值来指示是否启用了安全性。如果没有启用安全性,数据包将按原样发送出去。如果启用了安全性,媒体访问控制层会在其ACL表中查找目标地址。如果存在匹配的ACL条目,则使用该ACL条目中指定的安全套件、密钥和随机数来加密和/或验证传出数据包,并相应地设置传出数据包的标志字段。如果目的地址没有列在ACL表中,则使用默认的ACL条目;默认的ACL条目与其他ACL条目相似,只是它匹配所有目的地址。如果默认ACL条目为空,并且应用程序已启用安全性,则媒体访问控制层会返回错误代码。
在分组接收时,媒体访问控制层查阅分组中的标志字段,以确定是否已经对该分组应用了任何安全套件。如果没有使用安全措施,数据包将按原样传递给应用程序,否则,媒体访问控制层将使用类似的过程来查找适当的ACL条目(这次是基于发送者的地址),然后,它对传入的数据包应用适当的安全套件、密钥和重放计数器。如果找不到适当的ACL条目,则向应用程序显示错误消息。
当使用提供机密性保护的安全套件时,接收者可以选择启用重放保护,这包括AESCTR和所有AES-CCM变体。接收方用帧和密钥计数器作为一个5字节值,即重放计数器,密钥计数器占据该值的最高有效字节。接收方将传入数据包的重放计数器与存储在ACL条目中的最高值进行比较。如果传入的数据包的重放计数器比存储的最高值还大,则接收该数据包并保存新的重放计数器。但是,如果传入的数据包具有较小的值,则该数据包会被拒绝,并且应用程序会收到拒绝通知。尽管重放计数器与随机数是同一个计数器,但它的逻辑用途与随机数不同,后者用于保密。重放计数器不向要使用的应用程序公开。
下面具体介绍一下安全套件的相关类别。
①空套件:最简单的安全套件。该套件必须包含在所有的无线电芯片中,它没有任何安全材料,仅有验证身份功能。它不提供任何安全保证。
②AES-CTR:该套件使用带计数器模式的AES分组密码提供机密性保护。为了在计数器模式下加密数据,发送者将明文分组分成16字节的块p1,…,pn,并计算ci=pi⊕Ek(xi)。每个16字节的块使用自己的可变计数器,我们称之为xi。接收者通过计算pi=ci⊕Ek(xi)来恢复原始明文。显然,接收者需要计数器值xi来重建pi。xi计数器,也被称为随机数或IV,由一个静态标志字段、发送方地址和3个独立的计数器(包括一个识别数据包的4字节帧计数器、一个1字节密钥计数器和一个对数据包中的16字节块进行编号的2字节块计数器)组成,如图4.5所示。帧计数器由硬件无线电维护,发送方在加密每个数据包后将其递增,当它达到最大值时,无线电返回一个错误代码,并且不可能进一步加密。密钥计数器是受应用程序控制的一个字节计数器,如果帧计数器达到其最大值,它可以递增。随机数不能在任何单个密钥的生命周期内重复,而帧和密钥计数器的作用便是防止随机数的重复使用。2字节块计数器确保每个块将使用不同的随机值;发送者不需要将它包括在分组中,因为接收者可以推断出它对于每个块的值。总之,发送方将帧计数器、密钥计数器和加密的有效载荷包含在数据包的数据有效载荷字段中,如图4.6(a)所示。
③AES-CBC-MAC:该套件使用CBC-MAC提供完整性保护。发送方可以使用CBCMAC算法计算4、8或16字节的MAC,从而产生3种不同的AES-CBC-MAC变体。MAC只能由使用对称密钥的一方来计算。媒体访问控制保护数据包报头和数据有效载荷。发送方将明文数据附加到媒体访问控制上,如图4.6(b)所示,接收方通过计算媒体访问控制,并将其与数据包中包含的值进行比较来验证媒体访问控制。
图4.5 xi计数器的格式
④AES-CCM:该安全套件使用CCM模式进行加密和身份验证。广义地说,它首先使用CBC-MAC对报头和数据有效载荷进行完整性保护,然后使用AES-CTR模式加密数据有效载荷和MAC。因此,AES-CCM包括来自认证和加密操作的字段:一个MAC、帧和密钥计数器。这些字段具有与上述相同的功能。就像AES-CBC-MAC根据MAC的大小有3种变体一样,AES-CCM也有3种变体。图4.6(c)展示了它的数据字段格式。
图4.6 3个主要安全套件的数据字段格式
802.15.4协议存在的缺陷及对策
2.协议中存在的安全问题
802.15.4协议同样存在一些漏洞和安全问题,主要分为3类:IV管理、密钥管理和完整性保护。
(1)IV管理
第一,多个ACL条目中可能包含相同的密钥。如上所述,最多有255个ACL条目用于存储不同的密钥及其关联的随机数。发送方根据目的地址选择合适的ACL条目。但是,如果在两个不同的ACL条目中使用相同的密钥,则会存在漏洞。在这种情况下,发送方很可能会意外地重复使用随机数。例如,假设发送方使用AES-CCM-64安全套件,对接收方r1和接收方r2使用相同的密钥k,并将两个接收方的帧和密钥计数器初始化为0x0。如果发送方将数据为0x AA00的消息m1传输到r1,然后将数据为0x00BB的消息m2传输到r2,则发送方最终将重复使用相同的随机数(帧计数器为0x0,密钥计数器为0x0)。这是因为每个收件人都有自己带有独立随机数状态的ACL条目。因为AES-CCM使用类似于流密码的CTR模式,所以对手可以通过计算两个密文的异或来轻松恢复明文的异或,在这种情况下0x AABB完全破坏了机密性。有一些方式可能会使两个不同的收件人在两个不同的ACL条目中使用相同的密钥:粗粒度ACL控制,组密钥没有得到很好的支持,应用程序设计人员可能会尝试通过创建共享同一密钥的两个独立的ACL条目来实现组密钥。这看似可行,但并不安全。路由改变协议下的竞争,假设一个节点使用密钥k1来保护与路由树中任何父节点的通信,使用密钥k2来保护所有其他通信,密钥k2将被列为默认的ACL条目,一个单独的ACL条目指定地址p和密钥k1,如果在删除p的条目之前,应用程序决定通过为p0添加一个ACL条目来将父项从p切换到p0,则存在一个竞争条件,在该条件下,同一密钥同时在ACL列表中处于活动状态。我们认为,如果一个应用程序在两个不同的ACL条目中设置了相同的密钥,随机数重用可能会发生。在这种情况下,虽然完整性不受影响,但保密性将受到侵犯。问题是,如果应用程序的程序员不警惕,这个错误很容易发生。我们应该指出,发送者可以使用相同的密钥安全地向两个不同的接收者发送两条消息,只要它小心地管理随机数状态。最简单的方法是使用单个ACL条目,发送者可以发送第一条消息,更改ACL条目中的目的地,然后发送第二条消息。防止随机数重用的一般原则是随机数状态永远不应该与密钥分开。
第二,电源中断等原因会导致ACL状态丢失。考虑当节点遇到电源故障时,如果ACL状态丢失会发生什么。如果没有采取特殊的预防措施,当电源恢复时,该节点将出现一个清除的ACL表。据推测,节点的软件可以用适当的密钥重新填充ACL表。然而,现在还不清楚该如何处理这些临时状态。如果所有随机数都重置为已知值,如0,则随机数将被重用,从而危及安全性。如果应用程序的设计人员能够检测到电源中断,那么可以通过多种方式避免临时重用。首先,节点可以在电源中断后建立新的密钥,这样它们就不会用同一个密钥重复使用同一个随机数两次。或者,可以始终将密钥计数器存储在不可擦除的闪存中,在发送每个数据包后递增。然而,由于在闪存中存储速度慢且能源效率低,应用程序的设计人员可以通过“租赁”一个计数器值块并将其存储在闪存中来分摊写入闪存的成本。当计数器值用完时,节点可以获取一个新的计数器值块,并将租用信息存储在闪存中。重新启动后,节点可以使当前闪存中的所有计数器值无效,并获取下一个值块。与电源故障相关的一个问题是,如果节点进入低功耗操作,如何保持当前状态。为了延长电池的使用寿命,这些设备必须进行某种工作循环,从而使设备的某些部分只在一小部分时间内处于开启状态。由于802.15.4协议中的无线电芯片可以在1.8 V、19.7 m A下接收输入数据包,将无线电芯片保持在较低功率模式可以大大地提高设备的功耗效率。如果无线电芯片出现低功耗状态,并清除了ACL,将再次重用随机数值并破坏机密性。在低功率条件下保持随机数是比较容易解决的,因为无线电芯片知道它何时将进入和离开低功率模式;由于这种情况经常发生,无线电芯片必须使用有效的机制。不幸的是,820.15.4协议没有解决无线电芯片在低功耗状态下如何工作的问题。在软件中保存和恢复随机数状态是一个合理的解决方案。然而,这种解决方案并不便宜:每个ACL条目至少有10个字节的状态需要存储(5个字节用于入站重放计数器,5个字节用于出站随机数,用于该密钥),有255个ACL条目,这超过了2 000字节的状态,带来了大量的内存和计算开销。另一种选择是,保持访问控制列表内存的电源,以便访问控制列表的内容不会在低功耗操作期间丢失,这是可行的,缺点是在低功率操作中功耗增加。
(2)密钥管理
第一,对于组密钥支持不足。支持802.15.4协议的组密钥是笨拙的。例如,假设节点n1,…,ns希望使用密钥k1在它们之间进行通信,而节点n6,…,n9使用密钥k2。因为每个ACL条目只能与一个目的地址相关联,所以没有好的方法来支持这种假设的模型。简而言之,在802.15.4协议网络中,似乎没有简单的方法可以安全地使用组密钥。许多在802.15.4协议中使用组密钥的尝试最终会得到看似正常但实际上危及安全性的配置。
第二,网络共享密钥与重放保护不兼容。当使用单个网络范围的共享密钥时,没有办法防止重放攻击。要使用网络共享密钥模型,应用程序必须使用默认的ACL条目。现在,假设网络共享密钥被加载到默认ACL中,节点s1使用重播计数器0,…,99发送100条消息。接收方获得这些数据包,并希望执行重放保护。它必须保持迄今为止最大的重播计数器的高水位。根据规范,当每个数据包到达时,接收器会更新与默认ACL相关联的重播计数器。现在,如果发件人s2以其重播计数器从0开始发送消息,收件人将拒绝该消息,因为它只接收重播计数器大于99的消息。因此,对于使用共享密钥模型的重放保护的接收者,发送者必须协调对重放计数器空间的使用。当一个组中有多个成员时,这是不可行的,无法使用共享网络密钥的重放保护。
第三,不充分支持成对密钥。我们还注意到,802.15.4协议可以包括对成对通信的更强支持。该规范允许802.15.4中的无线电芯片最多有255个ACL条目,但没有指定所需的最小ACL条目数。特别地,兼容的无线电芯片不需要有一个或两个以上的ACL条目。一个ACL条目不能在一组多个节点之间安全共享,这意味着在成对密钥模型中,支持n个ACL条目的无线电芯片仅支持最多包含n个节点的网络,这对可扩展性造成了很大的限制,意味着成对密钥只能在支持大量ACL条目的无线电芯片上可行。为了支持成对键控,我们认为修改协议以规定合理的最小ACL条目数可能是有意义的。
(3)完整性保护
第一,存在未经验证的加密模式。AES-CTR套件使用不带MAC的计数器模式,820.15.4协议没有要求无线电设计人员支持CTR模式套件,只有AES-CCM-64是强制性的。然而,我们认为AES-CTR非常危险,因此永远不应该启用或实施。未经身份验证的加密会带来巨大的协议安全漏洞。研究人员发现了一些协议中的漏洞,这些协议使用仅由循环冗余校验保护的加密,而不是加密的强消息认证码。所有的攻击都集中在修改密文的过程中,对手可以对循环冗余校验进行适当的修改,以便接收方接收数据包。研究人员在IPSec、802.11和SSH(版本1)中发现了未经身份验证的加密漏洞,这些漏洞不仅危及所传信息的完整性,还危及其保密性。任何使用AES-CTR安全套件的应用程序都容易受到类似的攻击。
第二,对于AES-CTR的拒绝服务攻击。接下来,详细描述一个简单的单数据包拒绝服务攻击,该攻击适用于802.15.4协议网络使用启用了重放保护的AES-CTR套件的情况。假设发送者和接收者使用密钥k与AES-CTR套件通信,并且接收者启用了重放保护。回想一下,接收者保持由密钥和帧计数器组成的高水位线,拒绝计数器小于高水位线的数据包。考虑当对手发送带有源地址s、密钥计数器0x FF、帧计数器0x FFFFFFFF和任何有效载荷(不一定是密钥k下的有效密文)的伪造数据包时会发生什么。接收者将在密钥k下解密数据包,导致随机垃圾产生。由于没有访问控制或消息验证,即使数据包包含垃圾信息,接收者也将接受该数据包。但是,在将乱码的有效负载传递给应用程序之前,媒体访问控制层会将高水位线更新为0x FFFFFFFFFF。下一次真正的发送者试图发送一个合法的数据包时,无论接收者做什么,接收者都无法收到数据包,因为高水位线已经达到最大值,任何后续的数据包都将被重放。类似的攻击也可以用来阻止在某个链路上发送n个数据包,其中n可以由攻击者选取。这表明,如果802.15.4链接使用启用了重放保护的AES-CTR,攻击者可以永久中断该链接。攻击很容易发动,因为攻击者不需要特殊的通道或设备,只需要发送一个伪造的数据包即可。
第三,确认数据包不完整。802.15.4协议不包括对确认数据包的任何完整性或机密性保护。发送数据包时,发送者可以通过在标志字段中设置一个位来请求接收者确认。如果设置了确认请求标志,接收者将返回一个包含数据包序列号的确认数据包。如果没有及时收到确认,发送者的媒体访问控制层会将数据包重新发送有限的次数。当确认数据包到达时,发送应用被通知。然而,由于缺少覆盖确认的媒体访问控制,对手可以伪造任何数据包的确认。这个弱点可以与有针对性的干扰相结合,以防止选定的数据包的传递。假设攻击者识别出一个希望确保不会被预期接收者接收到的数据包,攻击者可以在发送数据包的同时发送短脉冲干扰,导致接收者的循环冗余校验无效,数据包被接收者丢弃。然后,攻击者可以伪造一个看起来有效的确认,欺骗发送者数据包已经收到。当对手出现时,此漏洞会使确认变得不可信。例如,假设应用程序使用确认作为可靠发送接口的一部分,只要数据包未被确认,应用程序就会一直尝试发送数据包。如果发送应用程序收到确认,它永远无法确定数据是否真的到达了目的地。这种承认可能是合法的,也可能是伪造的。
综上,我们已经概述了使用802.15.4协议时的一些问题和陷阱,这些问题会导致部署的应用程序中出现未检测到的安全漏洞。尽管存在这些缺陷,802.15.4协议的安全体系结构依然是健全的,它包括许多精心设计的安全功能,并在嵌入式设备的无线安全方面迈出了一步。正确使用安全应用编程接口,并意识到它的微妙之处,可以带来安全的应用程序。