- A+
前情提要
欢迎继续阅读《物联网安全专题》系列文章!
希望您已经读过了上一篇介绍物联网入门和架构的文章,这将有助于理解物联网的概念和架构。现在开始将进入物联网安全的话题,本文中试图定义一种方法,理解并创建一个结构化的流程来进行物联网的安全性研究或渗透测试。
在前一篇文章中提到了物联网的定义及体系结构,读者可以清楚地、容易地将物联网的组件分离开来,本文中我们就尝试为每一个组件单独定义其攻击面,然后将它们结合起来,创建物联网生态系统攻击面的整体概览。
之所以将它称为物联网生态系统,而不是物联网产品,是因为它确实是一个由不同组件组成的生态系统,组件之间相互交流,用于解决了一个特定的现实世界的问题。接下来就让我们来定义物联网生态系统的攻击面,并详细讨论每个组件的攻击面。
组件的攻击面可以分为3或者4部分(如果把通信也作为攻击面的话),包括::
- 移动端
- 云
- 通信
- 设备
OWASP在物联网安全方面也做了很多的工作,包括定义了其攻击面,感兴趣的话可以区了解以下,对同一事物有不同的理解和看法是好事,有助于辩证思维,可以帮助你创建自己的、更全面的物联网攻击面。
注意:
1.“微控制器”一词在本系列中通常是指微控制器、微处理器或SOC(芯片上的系统),除非有特别的其他说明。
2.下面的攻击面是由我们定义的,可能与其他组织或个人的不同。
物联网组件的攻击面
移动端
移动端APP的界面是物联网生态系统的重要用户界面之一,通过它,终端用户可以了解物理世界的状态。用户通过移动应用程序与物联网生态系统进行通信,发送命令和读取数据,因此它就成为了进入物联网生态系统的切入点之一。我们将试着从物联网的角度列出移动端的攻击面。
- 存储
- 认知
- 加密
- 通信
- 通用的移动漏洞,如:OWASPMobileTop10
云
云是物联网生态系统中非常重要的一部分,通常来自产品线所有实例的数据都汇聚在云端。这是一个非常有趣的攻击点。在上一篇文章中提到过物联网不仅仅是指硬件,原因是云将保存所有已部署的物联网实例的数据,并有权向所有这些对象发送命令。一般来说,它是由用户创建的,但一旦被攻破,攻击者将获得用户在全球范围内部署的所有设备(及其数据)的控制权,这是极其危险的。总的来说,云的攻击面侧重于其提供的接口,包括:
- 存储
- 认知
- 加密
- 通信
- APIs
- 通用的Web/Cloud 漏洞,如OWASP WebTop10
设备
设备可以看作是物联网技术的游戏规则改变者。它是物理世界和虚拟世界的连接点,是物理世界数据的第一站。这里还有一个与存储用户敏感数据(例如家庭统计数据、个人统计信息、个人信息)有关的围绕用户隐私的争论。未来的物联网设备可能会允许用户使用加密货币(通过他们的钱包或一个单独的临时钱包)直接进行购物、维修等操作。设备的攻击面包括:
- 存储
- 认证
- 加密
- 通信
- 传感器接口
- 外围接口
- 硬件接口
- 人机界面
通信
上述三种攻击面都是有形的攻击面,理想的情况下,有形的攻击面是指通信接口和负责通信的各种驱动程序/固件。虽然通信本身并不是一个有形的攻击面,但我们这里仍然将它单独的列为一部分,因为物联网生态系统中有各种各样的通信协议,可以在有线和无线介质上使用。构成通信攻击面的一些区域包括:
- 认证
- 加密
- 与协议标准有偏差
- 协议实现异常
尽管硬件接口允许实际通信,但实际的数据通信/数据包在上层的软件层中实现的。因此,在这个通信的攻击面中,我们只讨论协议。尽管针对协议中的漏洞利用可能会驻留在协议使用终端如移动端、设备或云上,但我们仍然将通信协议作为一个单独的攻击面记录。物联网生态系统中有太多的标准,本文中我们将列举一些在各种互联网产品中使用的通用协议:
1.Web
Web或者说HTTP(S)是最常用的通信协议,可以在任何地方被使用。单独将其列为一个条目,是因为Web上的攻击面是巨大的。然而,好消息是由于由来已久,经过20多年的研究,Web攻击面、脆弱性和缓解技术大多都已经标准化了。网上可以搜索到大量的资源用来详细描述这类Web攻击及其防护方案。这里仍以OWASP为例,他们已经做了大量工作,如OWASP Web Top10、测试指南和各种开源工具(www.owasp.org)。
2.其他的
除了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
- 其他……
上面的内容应该能让您对物联网生态系统的攻击面有一个更高层次的概述。现在,我们已经对它有了一个概括性的认识,在一个标准的物联网的渗透测试过程中,需要为设备定义详细的攻击面,这样做也有助于物联网安全架构师建立物联网产品的威胁模型。
请注意,我们不打算重新定义移动端和云的攻击面,因为您可以在互联网上找到大量相关的资料。本专题的想法是为安全研究人员进入物联网安全世界搭建一个桥梁,所以我们将专注于目前不可用或未结构化的知识。
设备的攻击面
好,让我们开始吧!
下面将讲述独立的和结构化的物联网攻击面的定义。请注意,这是依据我们的理解做出的,并没有其他来源。
1.存储
设备使用的存储空间。这一项可以进一步分为内部的和外部的,持久的和易变的。
1.1SD卡
SD卡通常用于存储配置和产品数据。他们也可能被用来存储固件更新。这是一个非常有趣的攻击面,我们将在稍后的文章中讨论通过SD卡进行攻击的可能性。
1.2 USB
某些物联网产品可以使用USB驱动器来存储类似于SD卡中的数据,也可以通过读取将数据下载或存储在USB驱动器上。类似于SD卡的攻击也适用于USB存储的情况。
1.3内存(非易变的)
这类包括读/写传感器数据、引导程序、固件、凭证、密钥等。在测试硬件面板时,查看存储在芯片上的数据是非常重要的。我们还可以针对内存和微控制器之间的通信进行分析,通过使用逻辑分析器嗅探总线通信,分析在不同操作期间存储/读取的数据类型。还可以在触发设备上的特定操作的同时,读取/写入有趣的数据。有多种不同类型的内存芯片,举例如下:
- EPROM
- EEPROM
- FLASH(由于速度和效率的原因,Flash更为常用)
I2C串行EEPROM
1.4内存(易变的)
当谈到易变/易失性的内存时,RAM这个词立即出现在我们的脑海中。它们广泛应用于个人计算机和嵌入式系统,并在运行时保存代码和数据。关机时数据丢失。一些常见的RAM类型如下所示:
- SRAM(静态随机存取内存):一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,这种RAM可以保存芯片断电时丢失的数据。
- DRAM(动态随机存取内存):这种内存上的数据保存一段时间后丢失,除非在运行时刷新。这意味着即使与SRAM相比,此类芯片的供电时间更短。芯片断电时数据丢失。
1.5单片机的内部存储器
微控制器也有自己的内部存储器,通常用来存储代码。在调试微控制器(如通过JTAG调试)时,这些存储器通常是可访问的。例如:
- SRAM
- EEPROM
- FLASH
2.硬件通信接口
同一个主板上的不同硬件组件需要相互交流,并与外界通信。所有这些通信都是使用定义良好且标准的硬件通信协议完成的。从攻击者的角度来看,它可以通过嗅探或注入恶意数据来分析实际的通信。为了找出安全问题,应该分析一些最常见的接口。
2.1UART
UART(通用异步收发器)是一种硬件组件,它允许两个外设的硬件之间进行异步串行通信。通信的硬件可以是在同一个主板上(例如微控制器与一个电机或LED屏幕通信),或者在两个不同的设备上(例如微控制器和PC机)。
这是一个有趣的攻击面,因为它可能允许对串行的设备进行读/写访问。在许多设备上UART接口处于开启状态,任何人都可以连接和串行访问,获得某种类型的控制台,如简单的shell、自定义命令行、日志输出等。设备通常会有一组连接到单片机的UART RX和TX引脚的针脚,用于发送和接收串行数据。我们将在以后的文章中详细讨论如何识别和访问设备上的UART端口。
一个典型有4个pinout 的UART接口
2.2微控制器的调试端口
微控制器规定在运行时使用指定的引脚进行调试。开发人员和设计人员使用这些引脚(端口)进行调试、读/写固件和微控制器内部存储器、控制/测试生产后的微控制器引脚,这就使得调试端口成为最关键的攻击面之一,这些调试接口会授予能力和访问权限。有几个标准接口用于调试,举例如下:
- JTAG(联合测试行动组)
由于微控制器和PCBs变得越来越小,生产后测试它们变得越来越困难。因此,为了有效地测试生产后的面板,电子工业协议创建的一个标准,这个标准在80代是通用的。TAG技术实际上称之为IEEE1149.1或边界扫描,由于电子行业几乎每个人都熟悉"JTAG"这个名称,所以就使用了相同的名字来表示IEEE1149.1标准。
JTAG协议定义了可用于测试和调试微控制器的标准接口和命令,JTAG接口定义了4个引脚接口(和一个可选的额外的引脚TRST):
- TMS :测试模式选择
- TCK:测试时钟
- TDI:测试数据输入
- TDO–测试数据输出
- TRST–测试复位(可选引脚)
除了测试芯片外,这些引脚被调试器用来实现于微控制器上的TAP(测试访问端口)的通信。从安全的角度来看,识别JTAG端口和它的接口,可能允许攻击者提取固件,反向工程,植入恶意固件。关于这一话题的更多资料,将在以后的文章中进行介绍。
2.cJTAG(紧凑型的JTAG)
这是一个全新的、支持多种操作系统模式的2-引脚测试/调试端口,在IEEE 1149.7标准中被定义的一种新的JTAG协议。它并不取代1149.1标准,只是做了进一步的扩展,向后兼容JTAG。它定义了一个2个引脚接口(TCK和TMS)和一个新的TAP功能。
3.SWD(串行线调试)
SWD是另一个接口/协议,用于调试微控制器。它是一个2-引脚接口:a. SWDIO (双向)、b. SWCLK (单向),定义了一个ARM具体的标准规范,利用ARM CPU标准的双向通讯协议,定义了在ARM调试接口v5。SWD的好处是其声称比JTAG更高效。
JTAG端口样图
注意:JTAG端口不一定非要是上图中的10个引脚
2.3I2C
I2C是一种用于同一芯片上芯片间通信的短距离通信协议。它是由Philips(现在NXP)公司开发的一种简单的、双向二线制同步串行总线,采取主从式结构:
1.SDA:串行数据线
2.SCL:串行时钟线
它通过SDA及SCL两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件,不管是单片机、存储器、LCD驱动器还是键盘接口。典型的攻击包括篡改数据、提取敏感信息、破坏数据等。我们应该在EEPROM芯片上分析数据,并通过嗅探I2C通信来执行运行时分析,以了解其行为和安全含义。之后我们会有专门的章节对此进行分析。
2.4 SPI
SPI(串行外设接口)也是一种用于同一芯片上芯片间通信的短距离通信协议。它是由摩托罗拉开发的、全双工的,采用主从式架构(单主)的标准协议。与I2C相比,它具有更高的吞吐量,使用四线串行总线:
1.SCLK:串行时钟线,由主设备产生,也被称为SCK;
2.MOSI:主设备数据输入,从设备数据输出,也被称为SIMO、SDI、DI、DIN、SI、MTSR;
3. MISO:主设备数据输出,从设备数据输入,也被称为SOMI、SDO、DO、DOUT、SO、MRST;
4. SS :从设备使能信号,由主设备控制,也被称为S̅S̅、SSEL、CS、C̅S̅、CE、nSS、/SS、SS#;
其测试和分析的方法与I2C类似,后续将详细讲解。
2.5 USB
物联网设备可能会有USB接口,用于充电或通信。对于后者,需要测试接口的已知或未知的问题。我们应该嗅探通信的运行时分析,并使用模糊测试的方式检测USB接口的未知错误。
2.6传感器
这是一个宽泛的名称,它可能不限于一个感应式的界面。例如,可能指一个温度传感器,也可能是一个门锁,它没有任何感觉,但能控制物理世界的“锁定/解锁”的操作。基于它们的操作可以将传感器分为三种类型:
1.监视器:这与传感器的字面意义更贴合,即感知或监视物理世界的任何变化,如温度、运动、脉搏、血压、轮胎气压等。
2.控制器:这些类型的设备以某种方式控制物理世界,如锁具、售货机等。
3. 混合式的:是以上两种类型的组合,如温度控制器。因为来自物理世界的所有值和数据都将被转移到云上,所有决策和统计数据都基于此数据而做出的,所以这是关键的接口之一,试想如果攻击者可以用格式错误的数据来强制设备进行特定的操作,那么整个生态系统就会受到影响。换句话说,这是物联网生态系统的关键。这里的错误值会对生态系统做出的决定产生灾难性的影响。
2.7人机接口
与传感器接口一样,我们使用HMI作为一个通用术语来定义用户和设备之间的接口,而不将其限制为工业控制系统中使用的术语。用户可以使用人机接口与设备进行通信,或者直接操作设备。一些常见的例子是触摸屏、按键、触摸板等,测试这个接口来找出任何旁路机制、安全漏洞等是非常重要的。