专栏首页绿盟科技研究通讯基于ESP8266 Wi-Fi模组的弱终端安全功能构建研究

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

一、引言

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

然而,这类弱终端的安全性就可以置之不理了吗?必然是不行的。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)

本文分享自微信公众号 - 绿盟科技研究通讯(nsfocus_research)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解析5G安全(二):5G安全需求

    随着5G的快速建设,5G的安全问题亟待解决。解决5G的安全问题,首先要明确5G的安全需求。5G的安全需求涵盖许多方面,既继承了2/3/4G的传统安全需求,还在此...

    绿盟科技研究通讯
  • XAI系列二:模型可解释性技术概览

    传统网络安全威胁分析依赖专家知识及基本的数据分析,然而随着攻击技术的复杂化、安全数据接入的多元化,高性能人工智能技术越来越多的应用到威胁分析中,试图解放安全行业...

    绿盟科技研究通讯
  • 【RSA2019创新沙盒】DisruptOps:面向敏捷开发的多云管理平台

    DisruptOps Inc.成立于2014年,位于密苏里州堪萨斯城,该公司致力于通过为多云基础设施提供自动化的防护来提升云操作的安全性,实现对云基础设施的持续...

    绿盟科技研究通讯
  • NASA发布了一堆炫酷的免费软件,你一定要试试下面这几个!

    大数据文摘
  • Python实现任意进制之间的转换

      在日常生活中我们频繁使用到数学的进制,如季度逢三进一,星期逢七进一;×××、小时使用12进制,每天使用24进制,每月使用30进制,分秒使用60进制,一年使...

    py3study
  • 腾讯安全 X GeekPwn,一场产业安全攻防大秀 | 1024

    今天,国际安全极客大赛GeekPwn2019在上海正式拉开帷幕。作为GeekPwn的“老朋友”,腾讯安全连续六年来到现场,与GeekPwn一起见证极客的奇思妙想...

    腾讯安全
  • 安恒信息预警:OpenSSL再度爆发高危漏洞

      7月10日消息,继2014年4月9日爆出OpenSSL心脏出血漏洞,2015年1月8日连续爆发8个高危漏洞之后,7月9日再度爆发高危漏洞,CVE代号为:CV...

    安恒信息
  • CNCC最火论坛干货:神经形态芯片与神经形态计算机

    以深度学习为代表的人工神经网络是机器学习最重要的方法之一,在云端和终端都有非常广泛的应用。然而传统的CPU和GPU芯片在进行神经网络处理时遇到了严重的性能和能耗...

    新智元
  • Reality Zero One即将推出新平台,开发者可轻松采集3D对象

    VRPinea
  • Django-网站搭建-01-起航篇

    zishendianxia

扫码关注云+社区

领取腾讯云代金券