IoT 设备通信安全讨论

IoT 设备通信安全讨论

作者:360CERT

0x00 序言

IoT 设备日益增多的今天,以及智能家居这一话题愈发火热,智能家居市场正在飞速的壮大和发展,无数 IoT 设备正在从影片中不断的走向用户的身边。但是这其中却拥有着大量的安全问题和隐患。

此次以结合实际案例的方式来谈一谈目前国内 IoT 市场中普遍存在的安全问题。

0x01 历史回顾

在过去的一段时间内也曾暴露出了很多很多的 IoT 设备的安全问题。

可以看到自15年开始就频繁受到广大的黑/白帽子的关注了:

Mirai

而在去年2016年9月-10月期间Mirai在全球范围内爆发。

Mirai 的感染模式
  • 感染初始设备
  • 初始设备在网段内进行扫描,并做尝试,将有漏洞的设备 IP,PORT 等信息上传至 Loader 服务器
  • Loader 服务器对新的设备进行控制并下发控制程序
  • 循环往复
  • 受控设备足够多后,控制设备对 Victim 发起 DDoS

直到2016年10月26日,我们通过 Mirai 特征搜索 shodan 发现,当前全球感染 Mirai 的设备已经超过100万台,其中美国感染设备有418,592台,中国大陆有145,778台,澳大利亚94,912台,日本和中国香港分别为47,198和44,386台。

IoT reaper

而最近则是 IoT reaper,从2017-09-13开始,360NetLab捕获到了一个新型的针对 IoT 设备的恶意样本

样本中集成了9个 IoT 漏洞 IoT_reaper 完全放弃了 mirai 中利用弱口令猜测的方式,转为利用 IoT 设备的漏洞植入,当前样本中集成了了9个 IoT 设备漏洞。最近十天以来,攻击者正在积极的将漏洞利用集成进入样本中,其中一个漏洞在公开后仅2天就被集成。

IoT_reaper 感染流程图

IoTroop 是 IoT_reaper Botnet 在网络攻击活动中第一阶段使用的主要 payloads,该恶意软件借用了 mirai 的源代码,但是在几个关键行为上显著区别于 mirai,包括:

  1. C&C 服务器已经完全被重新设计,并使用了新的后台。 另外,IoTroop 的 C&C 服务器是用PHP编写的,而原来的 Mirai C&C 服务器是用 GO 编写的。
  2. 随着 C&C 后台的变化,C&C 通信协议也发生了变化,IoTroop 恶意软件使用了全新的 C&C 通信方式。
  3. IoTroop 恶意软件不再使用弱口令猜测、而是使用 IoT 设备漏洞,扫描效率大大提高。
  4. IoTroop 恶意软件不包含任何 DDoS 功能,实际上我们也没有观察到与该恶意软件有关的任何 DDoS 攻击,但所有与 DDoS 相关的功能都由 C&C 后台进行协调和管理,并作为单独的模块下载。
IoT_reaper 包含的一些漏洞

可以看到的是,IoT 设备的安全问题正在日益突出,并日益严重。

虽然厂商心中已经有了一定的警戒,并采取了一定的措施但是还远远不够。

0x02 现状

攻击中最复杂的部分是取得与相关设备的连接问题,只要能够连接上能够与之通信,可以说被控制被劫持都只是一些相对较小的问题了。

在连接上的安全措施往往是难以做到尽善尽美的,那么我们就着重来看看目前国内市场上IoT设备在连接上存在的诸多问题。

在 iot 设备领域存在一个是否致命的问题,就是产品更迭周期,在此领域因为涵盖着硬件设备,在升级上往往难以针对某些领域的问题进行修复。

目前在国内的形式大多数是采用的多方合作,而杂合而成的一个十分混乱的 iot 生态。

  1. A厂商从B厂商处采购主控芯片和开发套件,然后自己由这个主控芯片和开发套件对一些传感器进行集成连接,进行一些简单的包装。
  2. A厂商和C厂商进行深度合作在A厂商的APP中集成C厂商的控制程序,从而实现A厂商具有更为广大的智能家居生态。
  3. A厂商完成了硬件上的设计生产,而APP方面则采取外包方式获取。
  4. 为了照顾设备的网络情况以及性能情况作出的妥协。

在国内上述三种情况是十分普遍的,这种树状甚至是叉装的生态环境势必会产生无数的安全问题。

反过来回顾世界前列的互联网公司里 Apple,是唯一的一家最接近垂直生态公司,即使是这样,每年也有大量的漏洞被发现,就更何况国内的这些公司了。

0x03 分析

与上面的点一一对应

1.由于采用采购和使用开发套件的方式,势必会有大部分的逻辑是和供应商所提供的运行模式和设计理念是一致的,从这里入手就很容易看到对应的A厂商的设备的大致工作模式

实例:

根据上面的文档可以看出这里设计出了一种工作模式,在智能硬件中会有一份主体固件 user1.bin,然后在后期可以通过 user2.bin 的方式对设备进行一定程度的更新。

为什么要说一定程度呢?首先,这里采用这种模式就肯定是为了减少更新完整固件包所带来的更新时间和下载内容大小,也从而被获得后直接逆向出完整设备工作流程的危害。

  • iot设备大多采用低成本的处理控制单元和极小的板载存储flash芯片,已经极小的内存容量,如果采取互联网全量更新,首先是机器本身无法存储,处理器,和内存也无法胜任此工作
  • iot设备为了长期稳定的工作,肯定无法去更新核心部分的工作,只会以修复一些细小的功能性问题而更新

那这里从实际的案例出发对这个现象的论证就是

在2015年的A厂商在通信过程中使用的AES加密,但在APK中由于开发没有良好的安全意识,导致被轻易的提取出了AES的密钥,而在我们进行分析的今天,该厂商的密钥也没有更换,亦可以在网上搜索得到这串长期没有更换的密钥进行通信消息的解密

而在今天厂商也仅仅只是将其放在了一个动态链接库中稍加混淆

就这样一个问题,在一个厂商长发2年都没有一个良好的解决方案足以说明问题的严重性

2.在厂商与厂商的合作之间势必会相互开放sdk或者api接口以及通信密钥,一系列相关资源,这就导致了,但凡有一家合作厂商的安全做的不够出色这就会导致短板效应的出现而导致拉低了众多厂商的安全等级

A厂商和C厂商的合作使得A厂商几乎只承担的了集成SDK的成本就获得了一项智能家居产品,而C厂商也仅仅是提供了SDK就拓宽了自己的销售渠道,这样的合作模式肯定受到双方欢迎的,但是这之间的安全问题是值得关注的。

  • 通信的密钥
  • 身份TOKEN
  • 完整的设备信息
  • 完整的控制请求

根据上述的问题,再结合一定的分析往往就能很容易的得出一份令人满意的漏洞

实例:

可以很清晰的看到,拥有SDK的TOKEN,完整的控制函数

可以看到通信的地址,以及通讯认证的详细过程

可以看到另一家合作厂商的密钥位置

3. APP的编写,这明显不是传统的硬件厂商所擅长的,而外包基本成了主要解决办法

然而厂商也自身没有太高的安全意识在验收成果的时候,主要着力于功能的完善情况,以及界面交互是否有效上面这就会导致许多隐患

  • 通信模型设计不当
  • 验证认证流程存在绕过,或极不完善
  • 查询接口权限认证粗糙
  • 涉及服务器敏感信息泄露

这诸多问题都是一个个良好的突破口和值得关注的点

实例:

从这里可以看到从 apk 中加载了通信使用的证书,故可以从 apk 中提取出来,也涉及了服务器的通信地址和端口

可以看到另一处TCP直接通信的地址和端口

这里可以看到,单凭一个手机号就获取了大量设备关键信息,包括密码等

这里可以看到,以任意设备mac来获取对应的用户手机号的操作

再根据已掌握的信息,进行设备控制指令的生成也是十分简单

4. 在结合国内的平均网络质量在全球排名处于中下游水平的情况下,并且要照顾多地区的复杂网络环境

在与智能硬件的通信过程中势必会有很多的妥协,因为产品的第一点是务必满足有良好的用户体验

进而就会产生

  • 与服务器通信认证手段单一
  • 身份识别过程简单
  • 消息内容格式化程度高
  • 分两套通信手段,一套局域网,一套互联网
  • 服务器通信内容不认证用户身份

实例:

A厂商在为了解决远程控制这一问题上

互联网层面远程控制由XMPP协议进行通信

但国内的厂商在使用上仅仅着手于XMPP协议的及时性和开放性,对于一些必要的安全措施并没有进行良好的设计

A厂商的XMPP的设计模式下,受控端设备,以及控制端设备全凭MAC地址或是UUID作为登录凭据,并且在密码设计上采用与用户名一样的方式.这就导致可以使用遍历MAC地址的方式将该厂商所有设备踢下线,使其无法正常通信或是响应命令.或是在APP端注册一个账号,然后获得UUID便可以向任意在网设备发送控制指令,这对于智能产品来说危害是巨大的,也会导致用户无法获得正常的体验

A厂商该特意设计了一个控制服务器,来接受和记录设备的绑定以及设备状态查询的服务,该服务器没有任何权限设置,亦无token之类的校验,可以抓包后任意重放,来获得任意设备mac所绑定的用户手机号,同时,还有一个逻辑错误,以及一个重大的安全错误

  • 在服务器上存储用户设备控制密码
  • 对设备控制权限变更无校验,任何人可以在任何情况下对设备进行重新绑定,解绑,添加信任用户等危险操作
  • 并在特殊的构造下,可以直接获取到任意设备的控制密码

在通信过程中消息内容采用固定格式wan_phone%015bee58-xxxx-xxxx-xxxx-31598127xxxx%password%open%relay

可以看到中间的uuid作为标识password是控制密码open是控制指令

那么其实很好类推关闭之类的指令

在APP的登录过程中,用户名为手机号

局域网内采用UDP无连接通信,通过向设备发送连续的UDP包来获得设备信息,同时为了更快的感同一局域网内的设备状态,采用广播心跳包的形式对所有在网内设备进行查询,同时所有设备收到此包后会回复自己的状态,以及控制密码的值,来确保用户能完成良好的控制

其次在标识上仅使用mac地址作为标识,这就导致,如果在相同包体里改变mac地址即可完成对设备的控制。

可以通过分析流量翻译出大量的操作指令

可看到流量中连续的广播包在发送

广播后,设备响应,解密后就能直接得到设备的控制密码

用脚本直接解密XMPP流量

[破解案例] : http://bobao.360.cn/learning/detail/163.html

而局域网和互联网通信内容又大相径庭,即使设计了一个良好的互联网通信模型,也会被找到破绽。

0x04 总结

根据此次分析,IoT生态混乱,通过实例分析验证了很多安全问题,以及潜在隐患,对现有用户会产生用户敏感信息泄露和IoT设备为攻击者大开方便之门的安全问题。最终甚至危害到广大用户的人生以及财务安全。

已有的改进

  • 尽量避免了将设备直接暴露在公网中
  • 已有一些通信上的加密措施,不再是任何人都可以向设备发送消息
  • 避免IoT设备的固件开发下载

尚存或演进的问题

  • 以CS模式通信,但是通信结构和验证过程过于简单或没有,导致一旦攻破便可危害所有在网设备
  • APP的安全开发意识十分薄弱
  • 厂商合作之间的信任链单一,信任关系简单
  • 多模式设计下,短板效应明显,在某一模式安全性的缺失则导致整套安全系统崩溃
  • 对用户信息,设备的存储和查询,存在致命的缺陷,对用户信息无任何保护手段,很容易获得设备用户的对应关系

这些存在漏洞的点都很普遍并容易被探测和发现,而造成的危害和损失却是巨大的

而抛开技术上的问题,在实际的物理世界中,核心的问题在于厂商不够重视安全,没有一个很好的统一解决方案,对应漏洞反应平平,甚至予以忽视,导致IoT安全漏洞和事件频发,各种黑天鹅事件告急。

过去的事件都以在公网上的设备受到攻击而需求感染设备去扫描发现新的设备,而现在只要一攻破上述任一一条,则可以在存在RCE等高危漏洞情况下迅速感染所有在网设备,攻击的成本大为降低。对于IoT安全社会各界应该予以更为重复的重视。

0x05 参考

    1. http://bobao.360.cn/learning/detail/3143.html
    2. https://paper.seebug.org/142/
    3. http://www.freebuf.com/articles/terminal/117927.html
    4. http://blog.netlab.360.com/iot-reaper-a-quick-summary-of-a-rapid-spreading-new-iot-botnet/
    5. http://bobao.360.cn/learning/detail/4635.html
时间: 2024-09-29 12:52:01

IoT 设备通信安全讨论的相关文章

Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD

Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 前几章我们讲了 Raspberry 安装 Win10 IoT 系统及搭建开发环境.部署程序及操作 GPIO 和 UART 的方法,通过这些功能我们已经可以获得到传感器发送给我们的数据,但是如果数据不能及时推送回服务器就需要在本地缓存,使用 SQLite 数据库是一个不错的选择.这一章我们来看如何操作 IoT

玩转树莓派——管理 Windows IoT 设备

安装完树莓派只是第一步,要让Windows 10 IoT Core在树莓派上跑起来,管理系统等成套的工具必不可少. 由于Windows 10 IoT Core运行在卡片电脑上,没有设置太多的UI操作,很多操作都要通过IoT Dashboard应用和设备门户来进行.简单说说怎么管理树莓派上的Windows 10 IoT Core吧. 可以使用IoT Dashboard直接下载Windows 10 IoT的镜像进行安装,并且可以在安装时指定设备名.管理密码.wifi网络等信息. 运行在同一网络的Wi

IOT设备的7大安全问题

IOT设备的7大安全问题 串口安全 IOT设备一般包含各类串口,并且这些串口缺乏认证机制.一旦暴露给了hacker,hacker可以很容易的查找敏感信息和dump固件,从而导致各类安全问题.建议厂家在推出IOT设备时,尽量关闭各类串口和加强认证机制. 默认证书(密码) 默认证书(密码)是攻击者常用攻击目标之一,许多IOT设备使用相同的默认密码,并且用户不能主动修改该密码,hacker可以在几分钟内就暴力破解这些密码,从而导致各类安全问题.Mirai就是很好的例子,由于默认密码过于简单,并且无法修

操作 IoT 设备内嵌 SQLite

Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 前几章我们讲了 Raspberry 安装 Win10 IoT 系统及搭建开发环境.部署程序及操作 GPIO 和 UART 的方法,通过这些功能我们已经可以获得到传感器发送给我们的数据,但是如果数据不能及时推送回服务

Azure IOT 设备固件更新技巧,看这一篇就够了

嫌长不看版 今天为大家准备的硬菜是:在 Azure IoT 中心创建 Node.js 控制台应用,进行端到端模拟固件更新,为基于 Intel Edison 的设备安装新版固件的流程.通过创建模拟设备应用,可实现 firmwareUpdate 直接方法,启动等待下载固件映像.下载固件映像,最终应用新版固件映像,并在每个阶段显示操作进度. 操作细节版 在进行物联网开发的过程中,很多用户会遇到这样的问题:物联网中的某些边缘设备上运行的固件存在问题需要修复,准备好新版固件后,如何集中批量部署给所有适合的

IOT设备连接上云

如何让我的设备连接上云?参考如下路径. 云 [![](http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/974556/156896265461629_zh-CN.png)](http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/974556/156896265461629_zh-CN.png) * [物联网平台](https://help.a

手机秒变IoT设备?——巧妙利用阿里云物联网平台

作者序 什么?嵌入五行代码可以实现用户定位,用户在线数量统计,还能和云端消息交互! 没错得益于阿里云物联网套件创建设备免费,消息收费也只有百万消息三块六(先使用后付费,不满不要钱),尤其对于学生党来说,基本是用不了这么多,也就意味着免费!(学生党福音[手动滑稽]) Talk is cheap,show me the code public static void main(String[] args) { //去阿里云官网上创建一个产品,设置好地理位置属性.可以变相用做分组 String pro

.NET Core / C# 开发 IOT 嵌入式设备的个人见解

( .NET Core 七龙珠 ) 一.IOT 平台的支持 先看国内优秀的云计算IOT平台(不含QQ互联.小米IOT等针对特定产品的开发者平台,仅列出部分云计算厂商的IOT平台) 阿里云 IOT https://iot.aliyun.com/ 华为物联网 https://developer.huawei.com/ict/cn/site-iot-next 腾讯云 物联网通讯 https://cloud.tencent.com/product/iothub 百度云 天工 https://cloud.

Azure IoT Hub 十分钟入门系列 (4)- 实现从设备上传日志文件/图片到 Azure Storage

本文主要分享一个案例: 10分钟内通过Device SDK上传文件到IoTHub B站视频:https://www.bilibili.com/video/av90224073/ 本文主要有如下内容: 1. 了解IoT Hub中文件存储在了哪里 2. 使用Node.js Device SDK 上传TXT文件 3. 在Storage中查看IOT设备上传的文件 图文内容: 本案例参考:https://docs.azure.cn/zh-cn/iot-hub/iot-hub-node-node-file-