增强物联网设备安全性:硬件安全模块与AWS IoT设备SDK的结合
作者:Daniele Crestini 和 Iacopo Palazzi 发表于2023年1月20日
关键要点
安全性优先:在处理敏感信息的客户中,数据与操作的安全性是最高优先级,尤其是在高度监管的市场上。HSM的运用:硬件安全模块HSM提供了一种高效的硬件机制,以防止私钥的泄露并保护数字密钥和证书。实施示例:文章将展示如何在 AWS IoT 上实现一个安全的 MQTT 客户端,采用少量代码即可完成。引言
对于处理敏感信息或在高度受监管市场中运营的客户而言,操作安全和数据安全是首要任务。物联网IoT客户面临着向其云平台启用高安全标准的额外挑战。数据加密以及不对称算法和加密密钥是广泛采用的通信流量安全机制。
与物联网设备加密密钥相关的最重要要求是,必须安全存储以防止恶意用户直接访问。如果私钥泄露,恶意用户就可以冒充物联网设备,访问企业IT中的敏感资源,或发送仿冒数据,从而造成严重后果。
硬件安全模块HSM提供了一种有效的硬件机制,防止私钥的泄露,并且在希望保护数字密钥和证书的客户中逐渐流行。然而,将其集成至物联网设备的软件栈并非易事。
本文将通过一些物联网行业的安全挑战显著案例,提供一个样本实现,演示如何使用模拟的硬件安全模块、AWS IoT设备SDK v2和AWS IoT构建安全的通信物联网客户端,代码行数简洁。
物联网中的网络安全:保护设备秘密
在物联网通信安全中,一个常见的标准是利用传输层安全TLS协议来保护设备与云之间的数据移动。例如,AWS IoT Core采用TLS v12和X509证书作为其物联网传输层安全的基础。
在安全通信场景中,物联网设备会被分配一对密钥,包括私钥和公钥证书,以及一个包含服务器证书授权CA链的信任存储。这些信息用于在客户端进行服务器认证使用信任存储,在服务器端进行客户端认证使用密钥对。这种方法称为互TLS认证,如下图所示。
魔方加速器官网入口图1:物联网设备与AWS IoT Core之间的互认证的总体功能视图
负责管理物联网设备软件和操作的客户,最终要负责配置、存储和使用这样的秘密信息,并限制密钥的暴露。有关如何管理工作负载安全的更多信息,可以参考AWS的共享责任模型。
IoT设备秘密泄露的风险
物联网设备秘密泄露的风险示例包括:
汽车遥感物联网客户面临恶意攻击者冒充车辆、向云发送仿冒数据或从企业数据中心下载敏感数据的风险。
2021年3月,联合国欧洲经济委员会UNECE批准并发布了《网络安全UN R155和软件更新UN R156》法案。该法规中,针对加密密钥存储的安全控制是防范网络威胁的建议缓解措施之一。智慧城市物联网客户面临其连接的智能灯杆、交通信号灯等的操作可能被篡改,造成服务中断或公共安全问题的风险。
智能电网物联网客户担心欺诈用户篡改连接的智能电表,并向中央电网系统提供虚假数据。
设备秘密是如何被破解的?
在一个典型的生命周期中,物联网设备的安全密钥需要被配置、存储、定期更换并用于加密操作。
生命周期状态安全威胁缓解策略配置从设备外部注入密钥会导致潜在的暴露风险。在设备内生成私钥,且绝不暴露外部。存储恶意攻击者可能篡改设备及/或控制设备软件以访问其非易失性内存。使用具有防篡改机制的设备如HSM。若不可用,加密存储可以降低风险。使用如果使用软件加密库,软件需要通过易失性内存不加密访问秘密。攻击者可能通过JTAG联合测试行动组调试器等机制获取。在芯片外执行加密操作,以避免密钥在软件流程中暴露。通常情况下,将设备密钥存储在设备内存或云存储中并不可取。在2020年被称为SolarWinds黑客事件中的安全事件中,恶意攻击者能够访问客户在活动目录联盟服务ADFS中保护的数据,收集存储在系统中的加密密钥并利用这些密钥冒充合法用户,盗取敏感数据。
如何提高物联网通讯安全性
硬件安全模块HSM是一种物理模块,通常以加密芯片的形式存在。它可以被焊接在设备电路板上,或连接到高速总线。它提供以下功能:
一个安全的密钥库存储和基于熵的随机密钥生成。在芯片上实现加密操作,而不会暴露给软件堆栈。先进的防篡改机制,保护芯片的非易失性内存NVM。图2:硬件安全模块(HSM)与业务应用集成的总体功能视图,采用PKCS#11 API
使用这种设备,客户可以减少安全密钥的暴露,因为私钥生成和加密操作发生在芯片内部。应用程序通过特定的专用API与设备交互,其中一个行业标准是PCKS#11或“Cryptoki”。有关PKCS#11 API的完整描述可以参考OASIS PKCS#11规范。
使用HSM可以降低私钥暴露的风险,如下表所示:
生命周期状态安全威胁配置从设备外部注入密钥会导致潜在的暴露风险。存储恶意攻击者可能篡改设备及/或控制设备软件以访问其非易失性内存。使用若使用软件加密库,软件需通过易失性内存不加密访问秘密。攻击者可利用JTAG调试器等机制获取。由于实现的复杂性,通过PCKS#11与HSM接口可能对物联网工程师来说是一项耗时且具有挑战性的任务。
AWS IoT设备SDK v2帮助希望实现基于HSM的设备安全的客户,提供专门的库,帮助开发者以少量代码实施安全的MQTT客户端连接。
使用AWS IoT设备SDK for Python v2和软件HSM实现安全的MQTT客户端
在本博客中,您将复现设置到 AWS IoT Core 的MQTT物联网客户端所需的步骤,采用硬件安全模块和AWS IoT设备SDK for Python v2的少量代码。
以下图说明了提出解决方案的架构:
图3:物联网设备与AWS IoT Core之间安全通信的提议解决方案的高层架构图
本文示例使用softHSM2从OpenDNSSEC项目模拟硬件安全模块。
设备证书将由内置于AWS IoT Core的Amazon根CA签名。如使用私有CA,则请求必须发送至指定的客户公钥基础设施PKI。
前提条件
AWS账户。一台基于Debian的Linux计算机。在您的计算机上安装OpenSSL 30请参考此链接获取说明。在您的计算机上安装Python 36请参考此链接获取说明。安装softHSM版本2请参考此链接获取说明。下载Amazon RSA 2048位根CA 1密钥此处。步骤1:通过HSM在AWS IoT Core上配置设备证书
必须在AWS IoT Core上为您的设备配置并激活设备证书。您可以使用softHSM2软件模拟HSM,使用openssl生成证书签名请求CSR。
本博客不提供使用softHSM2和openssl的示例,请参考软件文档。
所需步骤如下:
安装softHSM2和PKCS11工具请参考此链接获取说明:bash sudo apt install softhsm sudo apt install opensc openscpkcs11 openssl libenginepkcs11openssl
配置一个令牌并生成私钥:bash sudo softhsm2util inittoken free label lttokenlabelgt
此命令应提示您输入PIN,请按指示操作并记住该PIN。
获取插槽ID:当您配置令牌后,需要检索用于下一个命令的插槽编号。运行以下命令:
bash sudo softhsm2util showslots
您应该会得到如下响应:
Available slots Slot lt slotidgt Slot info Description SoftHSM slot ID 0x35927c85 Manufacturer ID SoftHSM project Hardware version 26 Firmware version 26 Token present yes Token info Manufacturer ID SoftHSM project Model SoftHSM v2 Hardware version 26 Firmware version 26 Serial number aede8dd735927c85 Initialized yes User PIN init yes Label lt tokenlabelgt Slot 1 Slot info Description SoftHSM slot ID 0x1 Manufacturer ID SoftHSM project Hardware version 26 Firmware version 26 Token present yes Token info Manufacturer ID SoftHSM project Model SoftHSM v2 Hardware version 26 Firmware version 26 Serial number Initialized no User PIN init no Label
检查哪个插槽包含之前命令相关的标签,并获取其ID即“Slot ”行左侧的内容。
生成证书:一旦您在softHSM2上生成了令牌并获得了ltslotidgt,可以使用pkcs11tool在其上生成密钥对。使用以下命令,替换ltPINgt和lttokenlablegt占位符。
注意:模块路径/usr/lib/softhsm/libsofthsm2so基于保证计算机的Ubuntu环境,可能会根据测试环境而有所不同。
bash sudo pkcs11tool l pin ltPINgt keypairgen hashalgorithm SHA256 keytype RSA2048 label lttokenlabelgt slot ltslotidgt module /usr/lib/softhsm/libsofthsm2so
您应得到如下响应:
Key pair generated Private Key Object RSA label lt tokenlabelgt Usage decrypt sign unwrap Access sensitive always sensitive never extractable local Public Key Object RSA 2048 bits label lt tokenlabelgt Usage encrypt verify wrap Access local
使用openssl和softHSM2创建证书签名请求。 请参阅以下链接以获取样本演练。生成长度为2048位的RSA密钥和SHA256算法的证书签名请求。有关支持的所有证书签名算法的完整列表,请参考AWS IoT Core文档:bash sudo openssl req new engine pkcs11 keyform engine key “pkcs11object=lttokenlabelgtpinvalue=ltPINgt” out certificatecsr
此命令将提示您输入要嵌入签名请求中的证书信息。
使用以下命令检查证书签名请求是否已填充正确信息:bash openssl req in certificatecsr noout text
发出以下AWS CLI命令,使用您的CSR生成设备证书:bash aws iot createcertificatefromcsr setasactive certificatesigningrequest=file//certificatecsr
此命令将提供证书的Amazon资源名称ARN及其内容:
json { certificateArn arnawsiot{region}{accountId}cert/{certificateId} certificateId {certificateId} certificatePem ltcertificatetextgt }
使用以下AWS CLI命令将您的公钥证书存储在设备中的名为deviceCertificatepem的文件中:
bash aws iot describecertificate certificateid {certificateId} jq r certificateDescriptioncertificatePem gt deviceCertificatepem
创建一个名为policyjson的文件,表示仅有“连接”操作权限的IoT策略:
json{ Version 20121017 Statement [ { Effect Allow Action iotConnect Resource arnawsiot{region}{accountId}client/{iotConnectionThingThingName} } ]}
请记住用您的数据替换{region}和{accountId}。
使用以下AWS CLI命令在AWS IoT Core中创建IoT策略资源:
bashaws iot createpolicy policyname HSMDevicePolicy policydocument file//policyjson
在AWS IoT Core中创建一个“thing”,将IoT策略附加到证书,并将证书附加
使用 Amazon Connect 分析数据湖简化自定义联系中心洞察 新闻博客
简化自定义联络中心洞察与亚马逊 Connect 分析数据湖关键点摘要亚马逊 Connect 分析数据湖现已全面上线,旨在简化联络中心数据分析的复杂性。无需构建和维护复杂的数据管道,采用零 ETL提取、...
如何更新 AWS IoT Core 中变化的证书要求 官方博客
更新 AWS IoT Core 的证书要求关键要点在这篇文章中,我们将讨论如下要点:由于新版本的安全性要求,AWS IoT Core 将默认启用 TLS 12。重要的 Symantec Server ...