在物联网IoT不断扩展的新时代,管理安全性是一项挑战。意外USB访问是可能导致设备数据泄露和系统可用性中断的风险之一。通过多层次的安全策略,结合硬件与软件解决方案,能够有效保护设备免受此风险。本文将介绍如何使用USBGuard及AWS IoT设备管理来实现这一保护措施。
物联网IoT行业正以迅猛的速度发展。随着连接设备数量的增加,保障这些设备安全显得尤为重要。IoT设备面临的一个潜在风险是意外USB访问,这通常发生在通过USB端口建立未授权连接时。例如,如果用户获得了安全摄像头系统的物理访问权限,他们可能会插入一个未授权的USB设备,从而访问摄像头系统及其数据。这将导致敏感数据被未授权访问或系统可用性遭到破坏。
要保护IoT设备免受意外USB访问,需采取多层次的安全措施,包括硬件和软件解决方案。硬件解决方案包括在USB端口实施额外的安全层并限制物理访问设备。软件解决方案则包括实施固件和软件更新,以及实施能够检测和防止意外USB访问的安全协议。
设备的访问级别也可能因其服务模式或调试模式而异。当设备处于服务状态时,USB端口应得到全面保护;而在调试模式下,有时需要开放USB端口,以允许技术人员插入诊断软件。设备模式的控制需由安全或DevOps团队安全执行,如图1所示。
本文将介绍如何使用USBGuard保护基于Linux的IoT设备及计算机免受意外USB访问,并如何利用AWS IoT设备管理安全地将设备从服务模式切换到调试模式。
图1:用例说明
飞兔加速器官网ios以下图2所示,展示了通过AWS IoT Core利用MQTT连接的基于Linux的设备架构。在设备上,已安装并启用USBGuard服务。USBGuard是一个软件框架,提供USB设备的允许/拒绝列表机制。这一灵感来源于BadUSB等问题。它利用Linux内核中包含的设备拦截基础设施。
设备的设备模式属性已定义。您可以通过AWS IoT的作业功能将设备模式设置为服务模式或调试模式。IoT作业定义了一组可以发送并在连接到AWS IoT的一个或多个设备上运行的远程操作。在此用例中,定义了两个作业:setdebugmodejob和setinservicemodejob。您可以通过AWS IoT设备管理Fleet Hub监控设备模式属性并执行作业。
运行setinservicemodejob时,IoT通信客户端将提取该作业,设置USBGuard策略以限制USB端口仅允许特定USB设备访问,阻止其他包括隐藏键盘接口的USB闪存驱动器,并将设备Shadow属性设置为inservice模式。相对而言,运行setdebugmodejob时,将放宽USB端口的规则例如,USBGuard策略允许所有USB端口访问,并将设备Shadow属性设置为debug模式。这样,技术人员就可以插入鼠标和键盘并通过USB端口运行调试软件。
图2:解决方案架构
可以通过以下流程完成该功能:
配置AWS IoT Core策略和设备属性供应设备在设备上安装USBGuard实现IoT通信客户端代码配置IoT作业文档创建AWS IoT设备管理Fleet Hub应用程序第1步和第2步可以在AWS IoT Core控制台或通过AWS CLI执行。本文中,我们将使用AWS CLI命令进行演示。第3步和第4步需要在IoT设备上配置,而第5步和第6步在AWS IoT控制台中完成。

bashPOLICYNAME=IoTJobDemoPolicyTHINGTYPENAME=DemoDevice
aws iot createpolicy policyname POLICYNAME policydocument { Version 20121017 Statement [ { Effect Allow Action iotConnect Resource arnawsiotuseast1123456789012client/uniqueThingName } { Effect Allow Action iotPublish Resource [ arnawsiotuseast1123456789012 ] } { Effect Allow Action iotSubscribe Resource arnawsiotuseast1123456789012 } { Effect Allow Action iotReceive Resource [ arnawsiotuseast1123456789012topic/test/dc/subtopic arnawsiotuseast1123456789012topic/aws/things/uniqueThingName/jobs/ ] } { Effect Allow Action [ iotDescribeJobExecution iotGetPendingJobExecutions iotStartNextPendingJobExecution iotUpdateJobExecution ] Resource arnawsiotuseast1123456789012topic/aws/things/uniqueThingName } ]}
bash
aws iot createthingtype thingtypename THINGTYPENAME
aws iot createdynamicthinggroup thinggroupname Debug querystring shadownamedevicemodereportedmodeDebug gt /dev/nullaws iot createdynamicthinggroup thinggroupname InService querystring shadownamedevicemodereportedmodeInService gt /dev/null
bashTHINGNAME=lt你的设备唯一标识符gtTHINGPATH=lt你的工作目录gt/THINGNAME
aws iot creatething thingname THINGNAME thingtypename THINGTYPENAME
aws iot createkeysandcertificate setasactive privatekeyoutfile THINGPATH/privatekey certificatepemoutfile THINGPATH/certificatepem gt THINGPATH/keysresponse
wget https//wwwamazontrustcom/repository/AmazonRootCA1pem O THINGPATH/rootCApem
CERTIFICATEARN=(jq r certificateArn THINGPATH/keysresponse)CERTIFICATEID=(jq r certificateId THINGPATH/keysresponse)
aws iot attachpolicy policyname POLICYNAME target CERTIFICATEARN
aws iot attachthingprincipal thingname THINGNAME principal CERTIFICATEARN
按照公共文档安装USBGuard。
生成两个USBGuard策略:debugrulesconf和inservicerulesconf。inservicerulesconf包含严格规则,将用于设备的服务模式;debugrulesconf放宽USB端口的规则,将用于设备的调试模式。
例如,debugrulesconf可以是允许所有USB端口访问的策略:
bashecho allow id gt debugrulesconf
而inservicerulesconf可以包含拒绝任何实现键盘或网络接口的USB闪存驱动器的规则:
bashallow withinterface equals { 08 }reject withinterface allof { 08 0300 }reject withinterface allof { 08 0301 }reject withinterface allof { 08 e0 }reject withinterface allof { 08 02 }
在IoT设备上,创建工作目录:
bashWORKDIR=lt你的工作目录gtTHINGPATH=WORKDIR/THINGNAMEmkdir p THINGPATH
将第2步获得的certificatepem、privatekey和rootCApem放入THINGPATH下。
我们将使用AWS IoT设备客户端在设备上进行通信。AWS IoT设备客户端是免费的开源模块化软件,使用C编写,您可以将其编译并安装到嵌入式Linux IoT设备上,以访问AWS IoT Core、AWS IoT设备管理和AWS IoT设备防御功能。要安装并配置该客户端:
bash
cd WORKDIRgit clone https//githubcom/awslabs/awsiotdeviceclientcd awsiotdeviceclientmkdir buildcd buildcmake /cmake build target awsiotdeviceclient
cd //setupsh
此时,您需要根据提示输入信息,包括您的设备证书路径:
plaintext你想为AWS IoT设备客户端交互生成配置文件吗?y/ny指定要使用的AWS IoT端点:lt这是iotDataATS端点。有关更多信息,请查看https//docsawsamazoncom/iot/latest/developerguide/iotconnectdeviceshtmlgt指定公共PEM证书的路径:THINGPATH/certificatepem指定私钥的路径:THINGPATH/privatekey指定ROOT CA证书的路径:THINGPATH/rootCApem 指定事物名称也用作客户端ID:THINGNAME你想配置日志记录吗?y/nn启用作业功能吗?y/ny指定作业处理程序目录的绝对路径:WORKDIR/awsiotdeviceclient/jobs启用示例Shadow功能吗?y/ny指定要创建或更新的功能的Shadow名称:devicemode指定要从中读取的文件路径:WORKDIR/awsiotdeviceclient/devicemodeinputjson 指定将Shadow文档写入的文件路径:WORKDIR/awsiotdeviceclient/devicemodeoutputjson 你想将AWS IoT设备客户端作为服务安装吗?y/nN
在WORKDIR/awsiotdeviceclient/jobs中,创建一个usbguardpolicy目录,并将第三步生成的debugrulesconf和inservicerulesconf放入其中。
在WORKDIR/awsiotdeviceclient/jobs中创建两个相应的作业处理程序脚本,以处理设备模式的设置。这些脚本将由IoT作业文档触发。
设置设备为调试模式的脚本:setdebugmodesh
bash
set e
BASEDIR=(dirname 0)echo {mode Debug} gt BASEDIR//devicemodeinputjsoncat BASEDIR/usbguardpolicy/debugrulesconf gt /etc/usbguard/rulesconfsystemctl restart usbguardservice
将设备设置为服务模式的脚本:setinservicemodesh
bash
set e
BASEDIR=(dirname 0)echo {mode InService} gt BASEDIR//devicemodeinputjsoncat BASEDIR/usbguardpolicy/inservicerulesconf gt /etc/usbguard/rulesconfsystemctl restart usbguardservice
现在,所有配置均已在设备上完成,您可以通过以下命令启动设备客户端:
bashcd WORKDIR/awsiotdeviceclientsudo /build/awsiotdeviceclient
在IoT作业中,需要创建两个作业文档:setdebugmodejson和setinservicemodejson。这两个文档将分别触发我们在第4步中编写的setdebugmodesh和setinservicemodesh处理程序。
setdebugmodejson示例:
json{ comment 此示例JSON文件可用于设置调试模式。 version 10 steps [ { action { name 设置设备模式为调试 type runHandler input { handler setdebugmodesh } runAsUser root } } ]}
创建一个Amazon S3桶并上传作业文档。在AWS IoT作业控制台中,使用这些作业文档配置作业模板:
按照博客文章使用Fleet Hub for AWS IoT设备管理入门设置Fleet Hub。在您的Fleet Hub应用中,您应该能够看到设备及其模式。
您还可以通过仪表板中的作业控制来切换模式。
在设备上,您应该能够观察到对任何USB端口的访问与您为设备模式设置的规则相对应。
为了避免未来的费用,请删除您创建的所有资源。
Fleet Hub应用可以通过首先在AWS IoT控制台中导航到Fleet Hub,然后选择应用程序进行删除。选择您的应用程序并单击删除。
AWS IoT Core设备索引可以通过导航到AWS IoT Core控制台,选择设置,然后转到管理设备索引,并分别禁用物品索引和组索引。
在AWS IoT Core控制台中,删除设备、设备组和设备类型,将“事物”和IoT策略从注册证书中分离。删除设备证书、‘事物’和IoT策略。
在本文中,我们展示了如何使用USBGuard保护基于Linux的IoT设备和