低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

通过 AWS IoT Device Defender 检测异常设备行为防止非法入侵

2019 年 9 月 23 日

通过 AWS IoT Device Defender 检测异常设备行为防止非法入侵

我们经常在媒体和流行文化中看到安全违规事件。在 HBO 电视剧《硅谷》中,黑客 Gilfoyle 使用一台被攻破的冰箱来运行恶意软件。联网设备的实际情况与此虚构的情景并无太大不同。


被攻破的冰箱可以向未经授权的终端节点发送消费者数据。联网冰箱等物联网设备需要得到安全防护,以确保 IoT 应用程序的安全运行。


但对于企业而言,管理好联网设备的安全绝非易事。尽管已经采取各种安全措施,像 Gilfoyle 这样下定决心的黑客仍可能成功侵入您的联网设备。要及时采取行动,关键是要检测到已被攻破的设备。AWS IoT Device Defender 与在您的设备上运行的代理结合,可以让您发现异常的设备行为并采取必要的行动。


在本文中,我们将为您演示下列步骤:


  • 设置联网设备与 AWS IoT Core 交互

  • 部署并配置 AWS IoT Device Defender 代理以从设备采集诊断数据

  • 创建云资源以监控和检测行为异常的设备

  • 在设备上运行恶意程序代理来模拟被攻破的设备

  • 验证在响应恶意活动时发送的通知

  • 下图显示了我们设置的简要架构



设置联网设备

遵循如下步骤以在 AWS IoT Core 中创建您的设备,并生成必要的安全凭证以便您的设备与 AWS IoT Core 交互。


假设该设备叫做“MyDevice”。这时,您将已经在您的 AWS 账户中创建了一个叫做“MyDevice”的 AWS IoT 事物。此外,您还应该已经将安全凭证下载到了您的设备中。您的 AWS IoT 控制台中应会显示新创建的设备,如下所示。



安装并配置 AWS IoT Device Defender 代理

  • 将 AWS IoT Device Defender 代理 下载到您的设备中一个叫做“DDAgent”的文件夹中。

  • 将您之前在设置联网设备期间创建的下列 x.509 证书、私有密钥以及根 CA 导入到“DDAgent”文件夹:

  • MyDevice.cert.pem

  • MyDevice.private.key

  • root-CA.crt

  • 运行如下命令以启动 AWS IoT Device Defender 代理。您还可以使用高级权限来运行代理,以允许它采集必要的指标。


Python ./agent.py \  --endpoint "xxxxxxxxxxxx.iot.us-east-1.amazonaws.com" \  -r ./root-CA.crt -c ./MyDevice.cert.pem -k MyDevice.private.key \  -id MyDevice  --format json -i 300AWS IoT Device Defender
复制代码


代理现在应会发布指标并且您应会看到终端设备中的日志,如下所示。


AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - Performing sync publish...Received a new message: {"thingName":"MyDevice","reportId":1532146181,"status":"ACCEPTED","timestamp":1532146183087}from topic: $aws/things/MyDevice/defender/metrics/json/accepted
复制代码


创建云资源以监控和检测异常行为

云基础设施涉及下列操作和资源:


  1. 以 AWS IoT 事物组的形式将设备分组,以便于检测异常。

  2. 定义您账户中一组设备或全部设备的异常行为,并指定检测到异常时要采取哪些行动的安全配置文件。

  3. 告诉 AWS IoT Device Defender 如何识别设备发生异常的行为。行为用一个指标、一个指标运算符、一个将与该指标进行比较的值以及一个(在某些情况下)时间段来定义。

  4. 将在设备执行的操作与第 2 步中所定义行为不一致时发出的警报。


异常检测目标分组

我们创建了一个叫做“allMyDevices”的 AWS IoT 事物组,以与 AWS IoT Device Defender 安全配置文件关联。我们将我们在上面创建的“MyDevice”事物添加到该组。


  1. 导航至 AWS IoT 控制台。

  2. 在管理部分,选择组。

  3. 选择创建。

  4. 在创建事物组对话框中,将名称指定为“allMyDevices”,然后选择创建事物组。

  5. 您应会看待新创建组的详细信息,如此处所示

  6. 现在选择操作下的添加事物,然后选择 MyDevice。



警报

我们将创建一条 SNS 通知“MisbehavingDevices”,然后添加订阅该通知的电子邮件。


  1. 打开 Amazon SNS 控制台。

  2. 选择创建主题。

  3. 将您的主题命名为“MisbehavingDevices”。

  4. 选择创建主题。

  5. 选择新创建 SNS 主题下的创建订阅,选择电子邮件以作为协议,然后提供您电子邮件地址以作为终端节点。然后选择创建订阅。

  6. 您将在此流程结束时收到一封电子邮件。使用电子邮件中的链接完成 SNS 通知流程。记下我们创建的 SNS 主题的 ARN。我们将在定义安全配置文件期间用到此参数。


安全配置文件

现在我们将创建一个名为“CheckRogueDevices”的安全配置文件,并将它与我们之前创建的目标组“allMyDevices”关联。我们还将添加我们创建的警报“MisbehavingDevices”。


在此安全配置文件中,我们将添加两个行为:一个在云端,一个在设备端。设备端行为由我们之前安装的 AWS IoT Device Defender 代理报告。


第一个行为“msgReceive”会验证每五分钟从我们的设备收到的消息数低于 100。此行为无需运行任何设备端代理。}第二个行为“bytesOut”会验证每五分钟从设备发出的字节数低于 10000(大约为 10K)。AWS IoT Device Defender 依赖代理来报告此指标,因此对于此指标,代理必须在设备上运行。


{  "name": "bytesOut",  "metric": "aws:all-bytes-out",  "criteria": {      "comparisonOperator": "less-than",      "value": {          "count": 10000      },      "durationSeconds": 300  }}
复制代码


返回到 AWS IoT Device Defender 控制台。导航至保护、检测部分下的安全配置文件,然后选择创建。将您的安全配置文件命名为“CheckRogueDevices”。通过选择添加行为,然后选择相关指标、运算符和值,创建两个行为:“msgReceive”和“bytesOut”,如下图所示。



依次选择检测、安全配置文件、CheckRogueDevices。这时,您应会在 AWS IoT Device Defender 控制台中看到如下屏幕。



运行恶意程序代理

现在运行一个会生成随机数据包,并将这些数据包发送到 AWS IoT Core,同时也会收到相同数据包的代理,模拟一个遭受黑客入侵的设备。此恶意程序代理生成的流量要高于我们在上面创建的行为中规定的标准,并且应会足以产生 AWS IoT Device Defender 违例。


下面是正在生成恶意流量的恶意程序代理的代码段。


# MQTT message callbackdef messageReceivedCallback(client, userdata, message):    print('From topic %s, Received data %s\n' % (message.topic, message.payload))
# Connect and subscribe to AWS IoTrogueAgent.connect()rogueAgent.subscribe(topic, 1, messageReceivedCallback)time.sleep(2)
# Publish to the same topic in a loop forever every 1 secwhile True: message = {} # Generate random 100 character string message['message'] = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(100)) messageJson = json.dumps(message) rogueAgent.publish(topic, messageJson, 1) print('To topic %s: Published data: %s\n' % (topic, messageJson)) time.sleep(1)
复制代码


rogueAgent.py 文件的代码复制到您早前创建的 DDAgent 文件夹中。


运行如下命令以启动恶意程序代理:


python ./rogueAgent.py \  --endpoint "a2axmuvv63ixxq.iot.us-east-1.amazonaws.com" \  -r ./root-CA.crt -c ./MyDevice.cert.pem -k MyDevice.private.key \  -id RogueAgent
复制代码


恶意程序代理应会向 AWS IoT Core 发送和接收随机消息。您会在您的控制台中看到消息,如下所示:


Published to topic /rogue/agent: Published data: {"message": "411BV90X7CO4XHOU77U3QFPJZ1E9JWVIZRMF9ET1QPFO6LY14FQF4WD6XFF9F6PP7SAHPIOEM6UHY0WNKBWQEWD1K8Y1UBF60V57"}
From topic /rogue/agent, Received data {"message": "411BV90X7CO4XHOU77U3QFPJZ1E9JWVIZRMF9ET1QPFO6LY14FQF4WD6XFF9F6PP7SAHPIOEM6UHY0WNKBWQEWD1K8Y1UBF60V57"}
复制代码


违规通知

让恶意程序代理运行五分钟以完成作业。来自该恶意程序代理的流量应会导致两个 AWS IoT Device Defender 违规:“msgReceive”和“byteOut”。您应会通过电子邮件收到这些违规的 Amazon SNS 通知。您还可以在 AWS IoT Device Defender 控制台查看违规。在导航窗格中,依次选择保护、检测、违例:



小结

AWS IoT Device Defender 可以检测异常设备行为并采取行动。即使《硅谷》电视剧中的 Gilfoyle 成功入侵您先进的下一代 Jetpack,您仍可以高枕无忧,因为您将在 Gilfoyle 的流氓程序代理开始任何活动时立即收到通知。要了解有关 AWS IoT Device Defender 的更多信息,请参阅 AWS 技术峰会芝加哥站的发布演示资料。要开始使用,请登录 AWS IoT Device Defender 控制台。


本文转载自博客 AWS。


原文链接:


https://amazonaws-china.com/cn/blogs/china/etect-anomalies-connected-devices/


2019 年 9 月 23 日 12:42258
用户头像

发布了 1249 篇内容, 共 33.1 次阅读, 收获喜欢 34 次。

关注

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

这场大数据+AI Meetup,一次性安排了大数据当下热门话题

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

Mobaxterm (安装 、汉化、使用)入门教程

Geek_Offset

Kafka的生产者优秀架构设计

奈学教育

kafka 分布式

2020年6月3日 对象与类

瑞克与莫迪

奈学教育:Hadoop源码编译全流程分享

奈学教育

如何挑选一份工作

池建强

求职 找工作

浅谈敏捷开发中的设计

czjczk

敏捷开发

分享一份阿里架构师 651 多个技术分支的脑图

奈学教育

大数据

我的个人知识管理方法

lidaobing

个人成长 知识管理 PKM

MyBatis之启动分析(一)

ytao

mybatis Java 面试

科学提升认知方法之贝叶斯公式

奈学教育

贝叶斯公式

普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。

why技术

个人成长 程序人生 随笔杂谈 北漂

一周信创舆情观察(5.25~5.31)

统小信uos

基础软件 操作系统 新基建

一文让你快速上手 Mockito 单元测试框架

mghio

Java spring 单元测试 Mockito

如何更好的交谈(以英语为例)

七镜花园-董一凡

学习 生活

计算机超全核心技术知识

cxuan

后端 计算机基础

千万别学编译原理

池建强

编译原理

原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

JAVA后端学习路线

敖丙

Java 学习 程序员 Java25周年

女朋友跟我吐槽Java中ArrayList遍历时删除元素的各种姿势

NotFound9

Java 架构 面试 编程语言 后端

SpringCloud-OpenFeign源码

云淡风轻

Spring Cloud

Sula - 可能是西湖区最好用的antd配置框架

开远

前端开发 antd sula 配置化开发 前端框架

CSS Tricks网站创始人作序推荐,这本书助你成为Web开发高手

图灵社区

CSS Web 开发 设计思维

JDK 15 都发布了,可 Java 8 依然是最爱

古时的风筝

Java Java 25 周年 Java版本

JUC整理笔记五之梳理Varhandle(下)

JFound

Java

ArrayList浅析

章小传

Java collection 原理 ArrayList

GitHub上10个不可错过的另类有趣项目

码农神说

GitHub 程序员人生 开源项目

产品的本质,知道却看不到

Neco.W

产品 产品经理 需求 产品开发

OFD版式技术解析系列(一):开篇

华宇法律科技

大话设计模式 | 0 面向对象基础

Puran

C# 设计模式

读懂才会用 : 带你见识 Redis 的 zset

小眼睛聊技术

redis 学习 程序员 架构 redis6.0.0

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

通过 AWS IoT Device Defender 检测异常设备行为防止非法入侵-InfoQ