前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ESP8266 Wi-Fi模组的弱终端安全功能构建研究

基于ESP8266 Wi-Fi模组的弱终端安全功能构建研究

作者头像
绿盟科技研究通讯
发布2020-03-12 16:12:13
7010
发布2020-03-12 16:12:13
举报

一、引言

随着智能家居设备的逐渐普及,智能家居终端带来的风险也逐步暴露,在智能终端上实现安全能力的需求也逐渐变大。像传感器这类简单的智能终端的防护工作应该如何开展,似乎成为了一个难题。一来,这类简单的终端没有通用操作系统或软件,篡改固件、网络攻击实施门槛较高;二来,终端的功能极其简单,在攻击方面利用价值不太大;三来,常见的弱终端通常在内部网络中,暴露面较小,攻击者难以接触。

然而,这类弱终端的安全性就可以置之不理了吗?必然是不行的。2018年2月3日,来自美国东北大学和SEEMOO实验室的两位研究员分享了如何破解小米生态下的智能设备的案例1,这些终端包括了智能传感器、智能灯泡在内的弱设备。可见弱终端的安全也应重视。尽管其存在配置较低、非常见操作系统等限制,但是也应配合适当的防护方法,如日常状态监控、异常分析和恶意行为阻断。

根据官网给出的文档,可以自行构建开发环境。笔者是用的Ubuntu 16.04 server 版本的Linux镜像,在虚拟机里面构建的编译环境2。构建好以后,就可以直接通过make flash monitor这一命令烧写固件到模组并查看相应的日志输出了。这些信息文档里面都有,搭建好编译环境即可熟练使用,本文不赘述。

如果需要配合服务端做行为监控,终端侧需要上传必要的、能反映出设备运行行为的信息才行。一般,需要采集的信息包含:终端基本信息、内存占用信息、IP、端口、域名等,以覆盖终端的运行信息以及联网信息。我们以ESP8266这个Wi-Fi模组为例,其功能结构如图1所示,以源码分析的方式,介绍数据的采集以及其实现方式。前两种是终端的指纹以及操作系统信息,后三种是终端的网络请求、连接信息,本文以后三者的信息收集功能为例,基于官方RTOS的SDK源码[1],介绍将信息上传到云端方法。

[1]ESP8266 Wi-Fi模组的官方SDK有两个,分别对应有无RTOS,这个RTOS是FreeRTOS。本文的实例基于RTOS版本的SDK。

图1 ESP8266 Wi-Fi芯片功能图

需要注意的是,必须打通一个安全通道,以安全地将数据送上云端,所以第一步是打通安全通道实现安全通信,第二步是上传数据进行异常检测与防护。接下来按照章节分别介绍。

二、安全通信

基于双向的SSL协议的应用层协议比较理想的安全通信方式。然而,单片机类终端或者模组本身的内存资源有限,采用双向的SSL通信,如果应用和SSL通信内存使用冲突时,安全就得让步,本文就以单向的SSL通信方式为例,介绍基于单向SSL的MQTT通信。

2.1

证书生成

网上有一些密钥生成的工具,mbedTLS的库目前对证书的校验过程,如果有SHA1算法做哈希参与,就会有哈希不匹配的问题,需要保证密钥是2048位以上且没有SHA1算法参与制作证书过程中。

运行如图2所示脚本3即可保证生成正常的密钥。如需对接密钥管理平台,请根据上述两个原则,自行适配。

图2 密钥生成脚本

脚本中需要配置好域名内容和密钥长度。一键生成即可。生成的tls.crt和tls.key分别可以作为客户端、服务端的证书和私钥,cacerts.pem是CA证书,用来校验客户端和服务端证书用的,如果是单向的,校验方只需要有这一个CA证书即可。CA的私钥请保管好,产品化则需要部署密钥管理系统。具体如图3所示。

图3 证书参数配置注意事项

2.2

证书烧录

搭建环境完成后,会存在~/esp/ESP8266_RTOS_SDK/examples/protocols/esp-mqtt/ssl,把这个目录复制到esp目录下,并将cacerts.pem改名为iot_eclipse_org.pem放到esp/ssl /main目录下。在ssl目录里面运行如下命令make menuconfig配置好热点参数以及云端服务信息(基于SSL的MQTT服务配置,网络上有很多资源,本文不赘述),并运行make flash monitor生成固件并烧录到模组即可将证书烧录到模组中。esp/ssl/main目录下的component.mk中配置了证书的位置及命名。

烧录完固件后,在日志中即可看到连接到云端的信息,如图4所示,其中打码部分是笔者的调试信息,为防止理解有误已隐藏。

图4 运行成功表现

到此为止,模组已经通过基于单向认证的MQTT通信连接到了云端服务。下面介绍如何采集信息。

三、异常检测与防护

如果做异常检测,得有终端上传到云端的信息。当云端分析后,还要向终端下发控制指令,以保证告警,断开恶意连接。所以,终端需要具备信息上传和恶意连接阻断的能力。本章以上传IP、端口、域名信息为例,介绍信息上传的实现思路。

3.1

信息上传

每个例程中,main.c文件中都有一个app_main函数,该函数已被ESP8266框架内的入口函数调用,如图5所示。所以,用户如果想添加自己的应用程序,直接在app_main函数中操作即可。如需深入交流,可联系作者(zhangkelei@nsfocus.com),本文不再深究。

图5 app_main函数调用位置

esp_transport_ssl_init函数下有esp_transport_set_func承接了协议栈的标准函数,如图6所示我们只要通过ssl_connect函数即可找到数据采集的位置。因为在tcp连接建立时,必然会有域名、IP、端口的传递。

图6 函数转接

通过一步一步查找函数调用关系,可以找到ssl_connect-> esp_tls_conn_new_sync-> esp_tls_low_level_conn-> esp_tcp_connect的函数调用链条。开发者只需要在esp_tcp_connect函数中将域名、IP、端口信息提取出来即可,因为这个函数的输入参数就是域名、端口,经DNS解析后,IP信息就会存在于某一变量中。提取方法有多种,本文不再赘述。

3.2

防护

防护方案必须考虑产品本身被破解后的风险。例如智能插座,一般会被隐藏在内部往来中,已经能保证一定程度的安全,原因有两点:其一,如果攻击者想破门而入,必须突破门锁、门窗的安全防线;其二,如果想连入内网,必须突破网关的安全防线,一般是非常不易的。

像智能插座这类终端,除了加入芯片厂商自身提供的信息保护能力(如安全启动、安全存储,这种功能可根据芯片厂商提供的SDK实现),配合使用场景自身的安全能力以外,考虑产品网络侧的异常告警与阻断即可。而基于IP、端口的防护机制类似于防火墙,是比较容易实现和落地的。原因有二:其一,机制不依赖于硬件,可以单独作为模块嵌入到产品中;其二,终端行为非常简单,白名单中IP数量极少,总量甚至不到1KB(一个IP占用4字节),所以,在匹配白名单过程中,这种机制对内存的消耗比较小。

总之,从可行性角度来说,这种防护机制是能实现的。只需要在数据采集的位置之后,启动网络连接之前,将该机制插入进来即可。该机制相对比较简单,本节不再以代码作为示例呈现。

四、小结

在模组或者单片机类终端,功能和系统都比较简单,并没有比较复杂的操作系统,本身也没有非常多的资源供开发者使用。所以,除了注意一些硬件安全配置事项以外,还需要聚焦在安全通信和终端行为分析这两方面能力。从这些终端中构建安全功能,需要开发者既具备安全知识,又要有较强的嵌入式背景,才能比较顺利地完成安全开发。

参考文献:

1. RECON BRX 2018:Reversing IoT Xiaomi ecosystem,https://recon.cx/2018/brussels/resources/slides/RECON-BRX-2018-Reversing-IoT-Xiaomi-ecosystem.pdf

2. ESP8266官方文档及源码,https://github.com/espressif/ESP8266_RTOS_SDK

3. 一键生成ssl自签名证书脚本,https://www.cnblogs.com/kcxg/p/10671831.ht

关于格物实验室

格物实验室专注于工业互联网、物联网和车联网三大业务场景的安全研究。 致力于以场景为导向,智能设备为中心的漏洞挖掘、研究与安全分析,关注物联网资产、漏洞、威胁分析。目前已发布多篇研究报告,包括《物联网安全白皮书》、《物联网安全年报2017》、《物联网安全年报2018》、《物联网安全年报2019》、《国内物联网资产的暴露情况分析》、《智能设备安全分析手册》等。与产品团队联合推出绿盟物联网安全风控平台,定位运营商行业物联网卡的风险管控;推出固件安全检测平台,以便快速发现设备中可能存在的漏洞,以避免因弱口令、溢出等漏洞引起设备控制权限的泄露。

内容编辑:格物实验室 张克雷

原文来源:关键基础设施安全应急响应中心(微信号CII-SRC)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 绿盟科技研究通讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档