亚马逊AWS官方博客

通过 AWS IoT Device Defender 检测异常设备行为防止非法入侵 | AWS 上的物联网

Original URL: https://aws.amazon.com/blogs/iot/detect-anomalies-connected-devices/

我们经常在媒体和流行文化中看到安全违规事件。在 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 300

AWS 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 主题下的创建订阅,选择电子邮件以作为协议,然后提供您电子邮件地址以作为终端节点。然后选择创建订阅

您将在此流程结束时收到一封电子邮件。使用电子邮件中的链接完成 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 callback
def messageReceivedCallback(client, userdata, message):
    print('From topic %s, Received data %s\n' % (message.topic, message.payload))

# Connect and subscribe to AWS IoT
rogueAgent.connect()
rogueAgent.subscribe(topic, 1, messageReceivedCallback)
time.sleep(2)

# Publish to the same topic in a loop forever every 1 sec
while 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 控制台