IoT 自动化安全评估探索之路 – Cylons

1. 背景介绍

在“物联网”的行业背景之下,如今的 IoT 智能硬件设备严重依赖网络通讯,这里尤指互联网。在一个烤面包机连接到云端的同时,它也可能暴露了很多的攻击面。因此网络侧的安全评估在 IoT 安全开发生命周期(SDL)中扮演着不可或缺的角色,能够有效发现身份认证缺失、明文传输敏感信息,还有不安全编码导致的 DoS/RCE 等问题;

而在网络相关的评估工作中, 无线/有线网络的搭建、网络抓包、DNS 劫持、TCP/IP 报文解析、TLS 安全性检查等重复性工作耗费了较多精力。于是我们将常用的测试评估过程总结、提炼成自动化工具(Cylons), 和开源的路由器固件 OpenWRT 相结合,利用 OpenWRT 的网络配置能力,来对 IoT 设备的流量进行自动化/半自动化的安全检测。

2. 功能与架构简介

2.1 开发语言

对于任何网络相关的软件、工具来讲, 运行性能都是其无法避开的技术挑战,在此我们选择了安全社区较为流行的 Rust 编程语言 来进行 Cylons 的开发。

Rust 作为新时代的内存安全型语言,得益于其特有的“所有权”(ownership,类似于 C++ 的智能指针) 机制,同时具备内存安全特性和堪比 C 语言的运行时性能。此外,Rust 具备现代化的包管理和构建工具,因此非常适合作为系统网络级别的开发语言。并且 Rust 支持跨平台交叉编译,我们可以轻松地编译出不同架构下的二进制程序,如 ARM、AARCH64 和 MIPS 等,方便与 OpenWRT 集成在不同架构的硬件设备上。

        

      图1. Rust 语言 LOGO                        图2. Rust 社区吉祥物

2.2 基本功能

在 OpenWRT 的帮助下,我们可以从繁琐的网络配置工作中解放出来,专注于网络流量的监控与解析。一旦目标设备连上我们的评估网络,Cylons 可以自动化地完成一些任务:

  • 网络抓包,协议解析与日志记录
  • 主动端口扫描与被动端口发现
  • DNS 投毒/污染
  • TCP 会话注入(injection)和重置(reset)
  • 基于 TCP 会话注入进行简单的客户端 fuzz 测试
  • 通过实时 TLS 中间人代理(MITM) 和 SNI 代理来发现不安全的 TLS 证书校验
  • TLS 协议安全性检测,包括加密套件(ciphersuite)、协议版本和配置等
  • 明文信息及敏感信息检测
  • 为目标设备的网络链接及网络端点(endpoint)构建知识图谱

除了以上一些核心功能之外,Cylons 还提供了其他一些特性:

  • RESTful 风格的 API 接口
  • 基于 LuCI 框架的可视化 Web 控制台
  • 一些第三方 API 接口的集成,如威胁情报服务, SSL Labs 扫描服务

演示视频:
<略>

2.3 组件架构 & 数据流程

3. 部分功能实现

3.1 TCP 会话劫持(Session Injection)

TCP 链接的建立是通过三次握手完成的,在完成之后双方正常通讯,报文头部的 seq、ack 字段被用于指示当前发送报文序号及已收到的报文序号。
由于报文序号(seq) 起始值与操作系统状态有关,或者是完全随机的,所有如果想要劫持一个已建立的 TCP 会话,不仅需要伪造源IP、源端口,还需要知道正确的 seq、ack 值。

Cylons 运行在网关设备上,因此可以获得所有网络报文,可以在需要的时候,通过伪造源 IP、端口的方式,劫持目标设备(即 TCP Client)与云端的 TCP 通讯;并且,在 Cylons 发送任意数据给目标设备之后,原 TCP 连接的 SEQ、ACK 被打乱,来自云端的报文将会被目标设备丢弃。

在成功劫持了 TCP 会话之后,Cylons 就可以向客户端发送随机数据,进行简单的 Fuzz 操作。

3.2 实时 TLS 中间人代理(MITM/SNI Proxy)

TLS 中间人可以用来自动化地发现 “TLS证书校验缺陷” 相关的问题、风险,为了达到这一目标,我们需要实现以下功能:

  • 完全控制 TLS 请求的 TCP 连接 (TCP 劫持不能满足需求)
  • 根据目标域名判断进行 TLS 中间人劫持还是正常放行(SNI Proxy 和 transparent proxy)
  • 根据目标域名实时签发证书(伪造证书)
  • MITM 成功的连接,通过 MITM Proxy 代理请求,记录请求与响应数据
  • MITM 失败一定次数的域名,通过 SNI Proxy 代理其流量,使其正常建立连接

4. 未来规划

  • 完善 Web GUI 功能,增加 “上传 pcap 文件分析” 的功能
  • 完善 TCP 客户端 Fuzz 的功能,参考 Boofuzz 和 Kitty 项目,增加反馈或状态检测逻辑
  • WiFi、蓝牙协议历史漏洞的扫描检测,如 KRACK、BlueBorne 等
  • 其他无线电协议安全评估, 如针对低功耗蓝牙 (BLE) Characteristics 的 Fuzz

5. 参考资料

发表评论

您的电子邮箱地址不会被公开。