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

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

  1. IoT设备程序开发及编译环境搭建初体验

    引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...

  2. IoT设备上的恶意软件——通过漏洞、弱密码渗透

    2018年,是 IoT 高速发展的一年,从空调到电灯,从打印机到智能电视,从路由器到监控摄像头统统都开始上网.随着5G网络的发展,我们身边的 IoT 设备会越来越多.与此同时,IoT 的安全问题也慢慢 ...

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

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 前几章我 ...

  4. 操作 IoT 设备内嵌 SQLite

    Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD   Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本 ...

  5. 恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备

    恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备   想要起来时,一种沉重感阻碍着他,这是一种安全感:感觉到一张床为他铺好了,而且只属于他:想要静卧时,一种不安阻碍着他,把他从床上赶起来,这是 ...

  6. 省钱版----查找 IoT 设备TTL线序__未完待续

    作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...

  7. Remaiten-一个以路由器和IoT设备为目标的Linux bot

    Remaiten-一个以路由器和IoT设备为目标的Linux bot ESET的研究人员正在积极地检测以嵌入式系统为攻击目标的木马,受影响的有路由器,网关和无线访问点.近期,我们已经发现了一个相关的b ...

  8. 安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备

    安天透过北美DDoS事件解读IoT设备安全 安天安全研究与应急处理中心(安天CERT)在北京时间10月22日下午启动高等级分析流程,针对美国东海岸DNS服务商Dyn遭遇DDoS攻击事件进行了跟进分析. ...

  9. IOT设备的7大安全问题

    IOT设备的7大安全问题 串口安全 IOT设备一般包含各类串口,并且这些串口缺乏认证机制.一旦暴露给了hacker,hacker可以很容易的查找敏感信息和dump固件,从而导致各类安全问题.建议厂家在 ...

随机推荐

  1. MFS分布式文件系统

    一.MFS概述: MooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结构(目录树 ...

  2. ssm整合的spring.xml文件配置(applicationContext.xml)

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. Introduction to statistical learning:with Applications in R (书,数据,R代码,链接)

    http://faculty.marshall.usc.edu/gareth-james/ http://faculty.marshall.usc.edu/gareth-james/ISL/

  4. MySQL知识篇-SQL2

    1 数据库基本操作? (1) 查看数据库 show databases; (2)切换到指定的数据库 use dbname; (3)创建数据库 create database 库名 charset=ut ...

  5. 【计算机视觉】极限优化:Haar特征的另一种的快速计算方法—boxfilter

    这种以Boxfilter替代integral image 的方法很难使用到haar.LBP等特征检测中,因为像下面说的,它不支持多尺度,也就是说所提取的特征必须是同一个大小,最起码同一个宽高比的,这一 ...

  6. Design Linked List

    Design your implementation of the linked list. You can choose to use the singly linked list or the d ...

  7. [转帖]传输层安全协议TLS 1.3 RFC 8446使互联网更快、更安全

    传输层安全协议TLS 1.3 RFC 8446使互联网更快.更安全 2018-08-12 11:38:19作者:LINUX人稿源:开源社区 https://ywnz.com/linuxyffq/261 ...

  8. T100——上传图片

    例子可参考aooi100,上传集团logo的程序 ON ACTION btn_updatelogo #選取上傳檔案,GDC專用 LET gs_upload = NULL CALL cl_client_ ...

  9. Make It One CodeForces - 1043F (数论,最短路,好题)

    大意: 给定序列$a$, 求最小子集, 使得gcd为1. 对于数$x$, 素因子多少次幂是无关紧要的, 这样就可以用一个二进制数来表示. $x$取$gcd$后的二进制状态最多$2^7$, 可以暴力枚举 ...

  10. Scala学习三——数组相关操作

    一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 固定长度数组: 如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0; val ...