物联网安全研究之二:IoT系统攻击面定义分析
在前文中,我们了解了IoT技术的基本架构,本文我将来说说IoT安全,在此过程中,我们会尝试定义一种新方法来理解IoT安全,同时也会创建一个结构化流程来方便认知IoT相关的攻击研究和渗透测试。
依据前文我们定义的IoT体系结构,现在我们可以非常清晰地分离出物联网系统的各种组件,并尝试为每种组件定义攻击面,各种组件的攻击面组合将形成一个整体的物联网生态系统攻击面。
我之所以把它称为物联网生态系统而不是物联网产品,是因为它确实是一个由不同组件组成的生态系统,它们相互通信并解决特定的现实问题。 我们先来详细讨论每种组件的攻击面,如果我们把通信作为一种攻击面的话,总体攻击面可分为以下四类:
移动端
云端
通信层面
设备层面
OWASP在IoT安全方面也做了很多工作,他们也给IoT架构定义了攻击面,值得认真研读一番(点此查看),你可以综合不同观点形成自己的看法。
移动端攻击面
移动端是IoT用户了解物理设备状态的一个重要接口,移动App与IoT系统之间的命令发送和数据读取,是与IoT通信的窗口。以下IoT系统移动端可能面临的一些攻击面:
存储介质
认证方式
加密手段
通信方式
原生移动端系统漏洞
云端攻击面
IoT系统不只包括硬件,云端服务对IoT服务来说同样重要,它是产品线的各种实例汇聚,而实例中又包含了所有终端用户使用者的相关数据,同时云端服务还具备一定的命令执行权限,攻击者一旦成功渗透,就能对相关部署设备形成管理控制,危害甚大。总体来说,云端服务攻击面主要体现在所提供服务的接口上:
存储介质
认证方式
加密手段
通信方式
APIs接口
原生Web端和云端架构漏洞
硬件设备攻击面
接下来就是IoT技术的关键角色-硬件设备,它是物理世界的接口体现也是虚拟数字世界的通信媒介。相关的数据转换会首先经过硬件设备,由于它本身存储了用户相关的敏感信息(例如家庭统计数据、身体统计信息、个人信息等),所以这种用户隐私存储机制也存在一些争议。而在未来,不同硬件设备还能使用用户的电子钱包或绑定账户实现商品购买或远程维护等服务。其存在的攻击面可能有:
存储介质
认证方式
加密手段
通信方式
感应接口
外设接口
硬件接口
人机交互接口
通信方式攻击面
尽管通信攻击不是一种有形的攻击,其理想的有形攻击面将是通信接口和负责通信的各个驱动器和固件,但这只是其中的一部份,因为无数通信协议会共同在有线和无线介质上作用于物联网生态系统。以下是通信方式可能存在的攻击面:
认证方式
加密手段
偏离协议标准
协议实现异常
硬件接口允许通信交互,然后实际的数据通信分组是由上层的软件实现定义的,因此,通信攻击面的问题我们就只讨论一些协议,虽然各种协议缺陷可能导致对移动设备、硬件设备或云端服务的端点攻击,但为了理解清晰,我们仍将其作为单独的攻击面来讨论,我会列出各种物联网产品中使用的一些通用协议。如下:
WEB
Web或HTTP(S)技术是常用的通信协议,由于Web端的攻击面非常广泛,但好在攻击面、漏洞和缓解技术很多都已经标准化了。网上有很多攻击描述和防护的详细资源。可以参考OWASP的Web Top 10、测试指南和各种开源工具。
其它
除了WEB端外还存在其它很多特定通用或高效的协议,为了简洁起见,我只列出一些通用协议供参考学习,经验告诉我们,所有协议都存在实施缺陷、协议设计缺陷和配置缺陷,这些缺陷则需要在深入的渗透测试中进行分析验证。
CoAP – https://en.wikipedia.org/wiki/Constrained_Application_Protocol
MQTT – https://en.wikipedia.org/wiki/MQTT
AMQP – https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
WebSocket – https://en.wikipedia.org/wiki/WebSocket
CANbus – https://en.wikipedia.org/wiki/CAN_bus
Modbus – https://en.wikipedia.org/wiki/Modbus
Profibus – https://en.wikipedia.org/wiki/Profibus
DNP3 – https://en.wikipedia.org/wiki/DNP3
BACNet – https://en.wikipedia.org/wiki/BACnet
HL7 – https://en.wikipedia.org/wiki/Health_Level_7
XMPP – https://en.wikipedia.org/wiki/XMPP
UPnP – https://en.wikipedia.org/wiki/Universal_Plug_and_Play
DNS
SSH
以上这些为你提供了有关物联网生态系统攻击面的一些全局概述,现在我们就尝试来对硬件设备定义一种详细的攻击面,以便我们知晓标准的物联网渗透测试攻击目标,这也有利于物联网安全架构师为物联网产品创建威胁模型。但请注意,我就不具体定义移动端和云端的攻击面了,因为可在互联网上找到大量的类似相关资源,该博客系列旨在为安全研究人员建立一个物联网安全研究的入门通道,所以我们只重点讨论硬件设备这种当前在IoT安全中未成型的知识。
具体定义硬件设备攻击面
以下就是根据我个人理解来定义的一些硬件相关的分离和结构化的IoT攻击面:
存储介质
涉及硬件设备使用的各种内部、外部、 持久性和易失性存储。它们包含:
SD卡:SD卡是一种典型的数据和配置存储介质,它们也可用来存储固件更新,利用SD卡可形成有意思的攻击面,后期我会在博客中作具体技术分析。
USB载体:某些IoT产品会使用USB载体代替SD卡,来存储和读写某些下载好或预先配置好的的数据。USB载体和SD卡的攻击手段相似。
非易失性内存:大量的感应读写数据、启动引导、固件、密码凭据等信息都利用这种内存进行存储,当测试硬件电路板时,存储在芯片上的数据至关重要。我们可以对存储器和微控制器之间的通信执行运行分析,以判断不同操作中存储/读取的不同数据类型。例如通过一个逻辑分析仪去嗅探总线通信,进而发现触发特定操作的各种读写数据。该种内存有不同类型的芯片:
EPROM(可擦除可编程只读存储器)
EEPROM(带电可擦除可编程只读存储器)
FLASH – (非易失性闪存,具备快速高效特点)
以下为一个I2C串行EEPROM:
易失性内存:这种内存也就是我们会想起的RAM(随机存取存储器), 它广泛应用于电脑电路板和一些嵌入式系统中的随机数据存储,当断电后其不能保存数据,它分为以下两类:
SRAM (静态随机存取存储器) – 芯片断电后不保存数据
DRAM (动态随机存取存储器) – 数据只能被短时存储,为了保持数据必须短时刷新,否则存储信息会丢失,且芯片断电后同样不保存数据
单片机内存:单片机或微控制器内部一样具备存储数据的内存,这种内存通常在使用JTAG等调试工具时可以访问到,这种单片机内存一般为以下类型存储:
SRAM (静态随机存取存储器)
EEPROM(带电可擦除可编程只读存储器)
FLASH – (非易失性闪存)
硬件通信接口
一块电路板上的不同硬件之间以及电路板与外部世界之间都需要进行相互通信,这些通信都基于定义好的标准硬件通信协议,从一个攻击者角度来看,可以通过嗅探或恶意数据注入等方式来了解这种实际的通信过程,从以下描述的通用接口中我们可以具体来分析一些安全问题:
UART:UART (通用异步收发传输器) 是一种硬件外设之间的异步通信收发器,它可用于同一电路板上(例如单片机与电机或LED屏幕通信)或两个不同设备(如单片机与PC通信)之间的通信。这是一个有意思的攻击面,它可能允许串行方式对设备进行读/写访问。 在许多设备中,电路板上的UART端口是开放的,任何人都可以通过串行连接和访问,以获得某种类型的shell控制权、自定义命令行控制端、日志输出等,为了发送和接收串行数据,这种设备通常具有一组输出连接到单片机UART的RX和TX引脚,后续我会发文讨论如何识别和访问设备的UART端口。以下为一个标准的4引脚输出UART端口电路:
单片机调试端口:单片机在运行时都能利用特定的引脚和输出对进行调试,这些引脚输出(端口)是为开发和设计者预留的,利用它们可以进行设备调试、固件内存读写、后期引脚控制测试等,因此,基于攻击者角度的权限来说,这类调试端口可能会成为最致命的攻击面。以下是包含调试端口的几类标准接口:
1.JTAG(联合测试工作组):随着单片机和电路板设计越来越小,成型产品的后期测试变得非常困难。因此,为了对电路板执行高效的后期测试,多家主要电子制造商联合成立了该组织,并确定了一系列电路板后期测试方法标准,后成为IEEE 1149.1,也称为JTAG测试协议,它具体定义了单片机调试的标准接口和命令。 标准的JTAG接口包括4个引脚接口和1个额外可选的TRST引脚接口:
TMS – 测试模式选择
TCK – 测试时钟
TDI – 测试数据输入
TDO – 测试数据输出
TRST – 测试复位 (可选)
除了芯片调试之外,调试器还能利用这些引脚与单片机上的测试访问端口(TAP)进行通信,从安全角度来看,识别JTAG端口并与之连接,攻击者可以实施固件提取、逻辑逆向、恶意固件植入等非法目的。
2.cJTAG (紧凑型JTAG): 这是一种新的JTAG测试协议(IEEE 1149.7),它不是对JTAG(1149.1)的取代,而是在其基础上的一个向后兼容扩展测试协议, 它定义了TCK和TMS两个引脚接口和TAP的一些实现特性。
3. SWD (串行线调试): 这是单片机调试的另一种方法,它定义了SWDIO(双向)和SWCLK (时钟)引脚接口,它是基于ARM技术的ARM CPU双向线标准调试协议,来源于V5版本的ARM调试接口定义,其中说明了SWD是一种比JTAG更高效的调试方法。
以下为一个电路板上的JTAG接口位置:
I2C(内置集成电路):I2C是飞利浦公司发明的,同块电路板上芯片之间进行短距离通信的协议,它具备主从架构和以下二线总线:
SDA – 串行数据信号线
SCL – 串行时钟信号线
I2C的典型应用就是在EEPROM(带电可擦除可编程只读存储器)芯片上连接I2C引脚并进行数据和代码存储,对这种协议的攻击包括数据嗅探、敏感信息提取、数据破坏等,我们可以对EEPROM芯片进行静态数据分析,也可对I2C通信进行动态嗅探来分析其行为和安全问题,后续我会发文讨论I2C的通信安全问题。
串行外设接口(SPI):串行外设接口也是芯片间的一种短距离通信协议,由摩托罗拉公司发明,它具备全双工和主从架构特点,比I2C吞吐量更高,并使用了以下四线串口总线:
SCLK – 串行时钟信号线或SCL
MOSI – 串行数据输出信号线
MISO – 串行数据输入信号线
SS – 从选择信号线
SPI应用于多种外设间的通信,闪存Flash和EEPROM同样使用SPI, 其测试分析方法类似I2C,只是总线接口不同。
USB:USB接口一般用于充电和数据通信,后期出于方便也用于问题调试,可进行动态数据嗅探和静态数据FUZZ来分析其中的安全问题。
传感器:它是物理设备的外部接口,但不仅限于温度计之类的感应类接口,还包括一些开关控制按钮。按照其实现操作可分为三类:
监控器: 这是最接近传感器意思表达的设备了,感应和监控外部世界变化,如温度、行为、脉博、血压和胎压等。
控制器: 多为控制外部设备的开关和行为,如开关、分发器等。
混合控制器: 是监控器和控制器的两种混合设备,如温度控制器、灯光感应器等,由于这类控制器的感应数据会被发往远程云服务端或其它控制端,所以其接口安全至关重要,攻击者可以向该类控制器发送畸形数据进行混淆干扰,进而对整个IoT系统形成影响,可以导致IoT系统瘫痪、产生运行异常甚至形成物理破坏。
人机交互接口(HMI):与传感器接口类似, HMI不局限于工控系统应用,它也被定义为IoT架构中用户与设备之间的通信接口,用户可以通过它来直接对设备进行操控,如触屏、按下按钮、触摸板等,HMI也会存在一些绕过机制和安全设置问题。
其它硬件通信接口:还存在其它与硬件设备的通信方式,作为渗透测试人员,要积极分析并擅于发现接口的一些安全绕过和设置错误问题,其它硬件通信接口包括(但不限于):
D-Subminiature – 显示器VGA类接口
ecommended Standards (RS232, RS485 etc) – 一些推荐性标准接口
On-board Diagnostics (OBD) – 汽车在线诊断接口
网络通信接口
该接口允许设备与包括传感器网络、云端和移动设备的其它数字设备进行网络通信,而负责网络通信的硬件接口可能包含自主独立的单片机/固件等,所以,这种情况的攻击面可能为底层通信实现的固件或驱动程序代码。
无线网络通信:无线网络通信接口存在一些已知的安全问题,从攻击角度看,可对无线芯片形成攻击乃至物理破坏、DOS、安全验证绕过或代码执行等。
以太网接口:以太网设备接口如wifi接口等都存在一些底层TCP/IP通信漏洞、硬件实现漏洞和其它攻击向量。
无线电通信接口:由于很多IoT产品都集成或转向无线电通信方式,无线电通信接口将会是一个关键的攻击面,在很多情况下,无线通信要比有线通信更加高效,这毋庸置疑。我之所以把无线通信单独列出,就是为了把它和需要网关设备的无线网络通信和有线通信区分开来,无线电通信与它们完全不同,它可以分为以下两类:
1.简单/非结构化:通常用于简单产品,如百叶窗、锁、门铃等。简单非结构化也即是它使用简单数据流,并通过无线接口进行发送。 作为渗透测试人员,需要对通信过程进行逆向,去发现其中的运行漏洞,可使用无线电嗅探硬件工具(如SDR等)对无线电通信流量进行抓包嗅探。
2.复杂/结构化:这种通信意味着它使用结构化数据包进行无线电通信,除了数据之外,它们在通信中携带了关于协议的附加信息和元数据,稍显复杂。 由于高效、标准、成本低廉、运行方便等原因,这类协议已物联网领域应用广泛,针对该类协议有多种嗅探和分析工具可以提取其中的通信数据。常见的该类协议包括:
Bluetooth (and BLE)
ZigBee
Zwave
NFC
RFID
LoRA
Wireless HART
以上就是我对IoT安全和其攻击面的一些个人理解和定义,不足之处,请多包涵。