了解物联网中的安全性:WPAN 链路层

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在本安全系列的最后一篇文章中,我们开始研究无线网络中的安全性。具体来说,我们探索了 Wi-Fi 链路层安全性 以及它为我们的物联网产品提供了多少保护。在今天的帖子中,我们将继续关注无线网络中的安全性,但这次我们将关注 WPAN(无线个人区域网络),例如蓝牙和 ZigBee。这些技术可以为物联网产品提供很多帮助,因为它们提供的无线通信功率比 Wi-Fi 低得多。但是任何开发人员都必须问自己的一个重要问题是,如果我使用用户的数据,它们是否安全?

继续我们之前帖子的主题是 tl;dr 版本——是的,如果正确使用这些技术,您的用户数据可以得到保护。让我们更深入地了解如何做到这一点。

蓝牙 – 包括 LE

蓝牙是一种非常流行的无线技术,已在许多领域得到应用,包括无线耳机、键盘、鼠标以及最近用于 Fitbit 等可穿戴健身产品。粗略地说有两种变体,经典蓝牙(正式名称为蓝牙 BR/EDR – 基本速率/增强数据速率)和蓝牙 LE – 低功耗。顾名思义,蓝牙 LE(或 BLE)旨在用于特别低能耗的设备;例如我们之前讨论的那些可穿戴健身产品。从安全的角度来看,这两种变体在保护数据交换安全方面存在一些差异。

经典蓝牙

在蓝牙中,术语配对指的是创建一个或多个共享密钥的过程,这些密钥将用于加密数据交换。为了确保我们拥有良好的安全性,我们不仅需要良好的加密机制,还需要良好的配对机制——否则设备的共享密钥可能会受到损害,被动窃听者可能会收集和解码您设备的所有通信。

根据您的设备支持的经典蓝牙版本,您的安全性将属于传统配对、安全简单配对 (SSP) 或安全连接三类之一。传统配对涉及用户在要配对的两个蓝牙设备上输入 PIN。然后设备独立创建一个初始化密钥,交换加密的随机值并导出链接密钥。作为两个设备相互验证的最后一步,以确保它们都具有相同的链接密钥。虽然这看起来很安全,但如果攻击者可以窃听配对过程,他们就可以发动离线攻击来恢复密码。 Yaniv Shaked 和 Avishai Wool 在他们的论文 破解蓝牙 PIN 中概述了这种攻击。

除此之外,Legacy Pairing 还使用来自 SAFER+ 加密套件的算法对数据进行加密。美国国家标准与技术研究所的 蓝牙安全指南 指出,套件 E0 算法(用于传统配对加密阶段)不是联邦信息处理标准 (FIPS) 批准的算法,其强度受到质疑。

安全简单配对

SSP 在蓝牙 2.1 版中引入,并利用 FIPS 认可的算法进行密钥交换。 SSP 通过使用椭圆曲线 Diffie Hellman 密钥交换来减轻被动窃听攻击。

SSP 还将关联模式的概念引入到蓝牙配对中。关联模式是允许两个蓝牙设备相互配对的方式。它们包括数字比较、Just Works、Out of Band 和 Passkey Entry。如果两个设备都有显示屏并且可以接受是/否输入,则使用数字比较。数值显示在两个设备上,如果匹配,用户应接受配对。数字比较提供针对中间人 (MITM) 攻击的保护。

Just Works 用于一台设备没有输入或显示功能的配对。在这种情况下,系统可能会提示用户接受连接——假设第二台设备具有显示和输入功能。 Just Works 不提供 MITM 保护。

带外 (OOB) 配对包括用于设备发现和密钥交换的实现相关机制。该机制应包括安全措施以确保密钥交换不会受到损害。正确实施的 OOB 配对可以防止被动窃听和 MITM 攻击。

密钥输入配对主要用于一个设备具有输入功能而另一个具有显示功能的情况。一个六位数字显示在一台设备上,然后在另一台设备上输入。将这些值与完整配对进行比较。 Passkey Entry 提供针对 MITM 攻击的保护。

仅安全连接模式

安全连接模式(有时称为“FIPS 模式”)仅使用 FIPS 批准的算法。它稍微修改了 SSP,因为它使用 P-256 椭圆曲线进行密钥交换——这与 SSP 中使用的 P-192 曲线相反。此外,安全连接使用 AES-CCM 加密。如果保护数据比向后兼容更重要,则应使用安全连接模式。

安全连接保留了 SSP 中引入的所有关联模式。

低功耗蓝牙

Bluetooth LE 有两种配对模式,LE Legacy 和 Secure Connections。 LE Legacy 配对类似于经典蓝牙 SSP,但有两个重要区别。没有数字比较关联模式,也许更重要的是不使用 ECDH 密钥交换。

蓝牙 LE 还支持安全连接。 LE 安全连接支持经典安全连接中的所有四种关联模式,并且在功能上等同于这些模式。

在蓝牙 LE 配对的两种变体中,AES-CCM 用于加密数据。

显然,LE Legacy 配对的一个严重缺点是在配对阶段缺乏被动窃听保护。为了有效保护用户的数据,开发人员应该考虑使用 LE 安全连接,或者使用 OOB 配对机制来防止窃听。

ZigBee

ZigBee 是另一种在物联网市场上越来越受欢迎的低功耗无线网络技术。与蓝牙一样,在 ZigBee 网络中的设备之间建立安全通信的第一步是密钥交换。这种交换通常在 ZigBee 设备加入新网络时完成。它可以在新设备和现有设备之间执行,或者如果网络中安装了新设备和网络信任中心,则可以在新设备和网络信任中心之间执行。 ZigBee 规范 声明密钥材料将通过密钥传输、密钥建立或预安装获得。

预安装链接和网络密钥是确保密钥不被泄露的一种方法。然而,密钥传输和密钥建立依赖于主密钥来建立链接和网络密钥。可以使用密钥传输预先安装或交换主密钥。显然,破解这个主密钥是破解 ZigBee 网络的第一步。

预装的主密钥有两个问题。如果您将主密钥设置为特定于您的产品范围,您将面临与其他供应商互操作性的风险。另一方面,如果您使用由多个供应商使用的通用主密钥,您就会让自己(更多)暴露在被动窃听攻击之下。

可以使用带外方法安装主密钥。这些方法可以增加应用程序所需的安全性。

结论

攻击蓝牙或 ZigBee 网络的两种途径是直接攻击加密和泄露密钥。仅使用采用更强大加密(特别是 AES-CCM)的实现可以减轻对加密的攻击。然而,密钥妥协可能有点棘手。

密钥泄露可能发生在生成时——这对攻击者有利,因为它有时意味着密钥或足够的信息来导出密钥将被无线传输。或者它可以通过访问设备和读取密钥来实现——这对攻击者来说不太有利,因为它经常(但不总是)需要对设备进行物理访问。

对于蓝牙,我们看到从 SSP 开始的所有实现都使用 ECDH 密钥交换。 ECDH 非常健壮,应该为用户提供保护,防止被动窃听密钥交换步骤。

使用 ZigBee,链接密钥和网络密钥可以以加密格式交换。但正如我们所见,这需要知道两个设备交换密钥的主密钥。为确保这个主密钥不被泄露,它不应该被无线传输——因为这样的传输是未加密的。使用预装的主密钥可能很有效,但也有缺点。带外交换方法,例如通过 USB 电缆,应该可以减轻被动窃听者的威胁。