渗透测试之IoT设备篇

IoT组件及架构

IoT三大组件云,管,端

iot components
iot components

iot architecture
iot architecture

本文主要针对“端”产品进行安全/隐私分析

设备端安全性分析

早期的物联网设备性能弱,相比于pc来说,可利用价值低,所以黑客针对物联网设备的攻击不会那么明显。随着物联网产业的发展,物联网设备的性能有了较大的提升,CPU、内存和硬盘等计算资源相对丰富,又搭载了标准的操作系统和应用环境,使其成为黑客攻击的理想对象,而且很多产品在开发初期对安全并没有太关注,导致对物联网设备的攻击不断提升。

本文中,我把针对IoT设备的攻击分成物理攻击,固件攻击,系统攻击,近端通信攻击,网络服务攻击这几个攻击面,每个攻击吗都可以从攻击模式+威胁建模+实际案例三个方面去分析安全性。当然了,这些都只能是抽象层面的安全分析,实际还是要贴近产品的业务逻辑来做安全分析的。

硬件安全

针对硬件的攻击,属于物理攻击。硬件即包括主板在内的,主板上的各个元器件,芯片,各类输入输出等装置的集合。

以智能音箱为例,在智能音箱样繁多的外形结构下,核心部件基本相似,主要包括全向麦克风、WiFi与蓝牙天线、WiFi与蓝牙芯片、DSP芯片、主板与电源,以及开关和按键等。

针对物理攻击,我认为可以从两个方面考虑,一方面是针对单一目标的分析及利用,这种情况比较少见,除非这类目标设备对攻击者来说有非常高的价值,另一方面是攻击者想通过一台设备去发现一些通用漏洞,特别是远程漏洞,以便可以迅速的适用到其他线上产品,达到攻击目的。下面我们将详细描述针对硬件的各个攻击面和威胁。

常见的硬件分析工具

硬件调试接口

像我们常见的Android手机,可以通过USB线让手机和电脑连接,然后可以通过ADB(Android Debug Bridge)可以获取手机系统的shell,这就可以说是一个硬件调试接口。对于嵌入式产品,串口就是常见的硬件调试接口。应该说硬件调试接口是作为攻击目标的一个手段更合适,攻击者可以通过硬件调试接口达到机密性窃取,完整性破坏,可用性破坏等目的。

一些常见的硬件总线及调试接口如下

作为一位分析人员,针对硬件的分析可以先分析一下该设备该硬件的调试接口。从调试接口出发收集信息,对产品进行硬件调试,查找漏洞。

FLASH读写

普通的PC电脑,会有硬盘存储操作系统。嵌入式产品一般不带硬盘,而是把操作系统写在ROM中,ROM经过不断的演变,从ROM到PROM到EPROM到EEPROM到FLASH,都只是一个存储器。现在很多产品都是使用FLASH,FLASH又分为NAND和NOR FLASH

针对FLASH的读写也有多种方式,比如直接拆焊FLASH芯片,使用编程器直接读写,通过调试接口读写,比如在uboot就支持对FLASH的读写命令,通过JTAG也可以dump出FLASH内容。

有时候一些重要的信息都是明文存储在Flash中的,比如设备序列号,hwid等,有可能这就是设备的唯一识别id,修改这些值可以仿冒任何设备。所以了解flash的分区结构,读取/写入Flash内容是一个重要的攻击点。

加密芯片分析

部分嵌入式产品支持扩展加密芯片,比如I2C加密芯片,另外有些支持TPM(Trusted Platform Module)可信平台模块扩展模块,有些cpu本身就集成了这个功能。这些安全/加密芯片 都有一些通用的功能比如提供对称,非对称加解密算法。另外这些芯片都支撑者设备的可信执行环境(TEE)。另外一个非常重要的功能是作为整个设备的可信根(Roots of Trust, RTS)保障整个系统的信任链(Chain of Trust)以达到实现可信执行环境(TEE)的目的。

目前我们暂未针对这一块内容做安全漏洞分析和研究。

UART串口攻击模式

相关文章

逻辑分析仪串口分析

通过u-Boot提取固件

查看是否可以通过串口进入u-Boot, 查看是否支持flash读写,内存读写等命令 一般来说,首先通过help和printenv命令查看u-Boot支持的命令和当前设置的环境变量,可以通过这两个命令了解u-Boot的基本信息,可以通过partition命令查看flash分区情况,一般来说有比如内核镜像分区,根文件系统分区,配置文件分区等等

提取步骤如下 首先通过flash读写命令,比如nand read命令,把分区字节读入内存地址,接下来再通过md等内存操作命令把内存数据打印出来,可以借助python的pyserial模块开发对应poc,把分区/完整flash读取出来

通过u-Boot篡改固件写flash

检查u-Boot是否支持U盘/sd卡/tftp协议把固件加载到内存,在通过flash写命令比如nand write把对应内存地址的数据写入flash中。

通过u-Boot设置环境变量

通过printenv查看环境变量,确认有没有敏感数据是保存在环境变量里,比如设备序列号,硬件id等等,另外内核的参数是通过u-Boot设置的,看看是否可以设置内核参数绕过一些安全设置。比如可以设置init=/bin/sh看是否可以进入系统shell

通过串口未认证获取OS shell

是否可以通过串口直接拿到OS shell?

通过OS shell查看系统敏感信息

拿到OS shell后,遍历系统文件,查看敏感信息,比如帐户密码,私钥文件等 查看系统支持的敏感命令,比如tftp,ftp,telnet,nc等等,系统支持这些命令为后续的操作提供便利。

通过OS shell提取敏感程序,进行逆向工程分析

可以检查系统是否支持tftp,ftp等命令,可以把敏感程序导出设备,或者查看是否支持nfs,可以远程挂载一个nfs目录到设备本地,把敏感程序拷贝出去。再通过IDA,ghidra等逆向工具逆向分析关键process,以找到漏洞并利用。

通过串口打印信息敏感信息泄露

查看串口打印信息,是否有敏感信息泄露。

敏感信息加密分析

在遍历目录时,有时发现敏感信息是经过加密的,此时应该结合逆向工程分析加密的方式和密钥的组成,尝试破解加密文件。

通过OS shell查看是否使用存在漏洞的内核/库/中间件

确认系统是否存在 DirtyCow等内核提权漏洞,是否使用存在漏洞的libc,是否使用存在漏洞的中间件。这些验证操作可以借助NESSUS/openvas等漏洞扫描工具进行凭证扫描

通过串口窜货分析

窜货是指货物在不同地区价格不一样,固件是不兼容的(特别是不同语言地区的固件),有些攻击者利用漏洞篡改固件赚差价,牟取利益。

通过物理方式篡改固件

这个属于一个tampering威胁,实现方式可以是前面提到过的集中攻击模式,比如直接用编程器刷写固件到FLASH,或者通过硬件调试接口写入FLASH

硬件攻击案例

目前我们所掌握到的案例,很少直接是纯粹针对硬件的攻击,很多时候硬件攻击只是整个攻击向量的一个环节。比较经典的攻击向量比如: 由物理攻击固件分析网络批量化攻击。

固件安全

常见的固件分析工具

获取固件

固件获取方式一般可以有以下几种方式

静态分析固件

获取到固件后,要对固件进行分析,最重要的过程是提取固件内容。固件的打包没有统一的方式,首先应该先确认固件的打包方式后再利用对于工具提取信息。 一个非常有效的工具是binwalk,该工具集成了对多种压缩打包方式及文件系统的支持。很多情况下都可以一键提取固件。但是如果固件经过特殊处理,甚至加密后,就不那么有效了, 这种情况下分析者要根据实际情况再制定进一步分析策略。

模拟和动态调试

可以用qemu模拟单个二进制程序的运行,基本思路是chroot到解压后的根目录,然后执行目标二进制。也可以通过模拟执行整个固件包firmware-analysis-toolkit目前来看该工具只支持部分打包方式的固件,不过工具是开源的,分析者可以根据思路自己制定工具。

固件重打包

一种常见场景可能是这样,客户自行下载固件升级,固件包来源就无法得到保证。可能某些固件包被攻击者而已篡改过,并且植入了后门程序。那么本攻击模式就是符合这类场景。目前有工具firmware-mod-kit支持固件重打包,供研究者参考。

固件降级攻击

通过固件降级,可以引入已知的漏洞,再通过已知漏洞攻击目标设备。像窜货问题本质也是通过该方式进行的。

仿冒用户升级固件

设备应该限制固件升级途径,防止一些开发调试用的升级方式没被禁用就流入市场。首先测试人员应该了解设备升级固件的所有方式,比如网络升级有web,configTool,3800端口,物理方式可以通过u盘。

篡改固件升级

我们对固件有做几个安全设计,固件防篡改(对固件做hash签名),固件签名(每个发布的固件都被签过名,这样第三方如果没有正确的公私钥对,是无法升级到设备的)。针对这两个方案,测试人员应该深入分析方案缺陷,并尝试利用缺陷绕开相关安全设计。

固件敏感信息泄露

分析固件一个很重要的目标就是寻找敏感信息,或者可以说是敏感资产,不仅仅涉及密码,私钥等等数据,程序也是目标之一,攻击者可以通过逆向分析二进制程序了解关键流程,比如加解密过程,认证过程等等。

典型的敏感资产如下:

固件攻击案例

案例1:固件内置后门

由于厂商或开发人员的疏忽,或者是部分厂商或开发人员特定的目的,有些厂商会在智能音箱的固件中置后门。

图2-2智能音箱后门示例 本次测试过程中,发现部分厂商在智能音箱的固件中置后门,使得厂商以在用户不知情的情况下,远程地控制全网所有音箱,并执行任意系统命令,对用户隐私及设备安全埋下巨大的隐患。

案例2:代码缺陷

部分厂商对安全问题不够重视,从而导致设计和开发人员在软件实现上不够严谨,存在较多的缺陷和漏洞,攻击者可以利用这些缺陷和漏洞,实现对智能音箱的任意控制。

本次测试中发现某款智能音箱在代码实现上存在缺陷,使得攻击者可以通过命令注入漏洞开启telnet服务,完全控制智能音箱并实现对设备的录音等恶意操作。存在命令注入代码如下图所示:

图2-3特殊字符串提取 测试者获取playurl后,通过精心的命令构造和拼接,可以让智能音箱执行任意命令。

图2-4任意命令执行 测试成功后,系统开启了telnet服务,攻击者可以利用该服务实现对智能音箱的任意控制。

图2-5成功开启telent服务

案例3:硬编码秘钥

部分厂商会在产品面世初期做一些活动,如赠送会员,在有限期内使用付费服务。

若开发人员安全意识不足,则可能会将key硬编码至固件内部。以方便用于用户的使用,且不知这种情况下,若智能音箱存在安全风险。攻击者则可能通过入侵智能音箱的方式获取设备固件,在进行分析和逆向之后,使用内置的秘钥或口令在非正常授权的情况下消耗厂商资源,给厂商带来出乎意料的资产流失。

系统安全

本节提到的系统,可以是操作系统,也可抽象理解为是一个服务的基础设施,运行的平台。当我们在2.5节讲网络服务安全时,我们更多关注的是单个/多个服务本身,而对系统/平台不会过多关注。

常见的固件分析工具

仿冒用户进入系统

操作系统可能开启多个进入系统的入口,比如telnet,ssh等,或者一些服务入口,比如mysql,redis等。如果运维人员没有对认证做良好的配置,可能就存在未授权访问,或者认证因子暴破的漏洞。有时候进入系统可以拿到最高权限(root权限),有时候可能只能拿到低级别用户权限,此时就需要进一步利用以达到提权的目的。

篡改文件系统文件

对配置文件/程序进行篡改,以达到攻击目的。在嵌入式系统中,如果分区内容无修改必要,可以在挂载的时候选择只读挂载。另外操作系统应该负责做系统完整性校验,特别是程序文件,可以在二进制程序中添加签名内容,在执行时做签名校验。

系统攻击抵赖

操作系统在日志管理上应该做到完整性,首先哪些操作应该被记录到日志应该有详细说明。其次日志文件不应该被轻易删除或篡改。系统应该支持类似syslog的功能,以便在本机被攻击的时候,拿到最高权限后,日志文件仍然能保存完整。

系统敏感信息泄露

我们都知道linux账户管理两个非常重要的文件/etc/passwd 和 /etc/shadow,有些情况下系统会直接在passwd文件记录密码信息,而这样是存在安全风险的,攻击者可以使用低权限读取passwd文件,再配合如John the Ripper等工具进行密码暴力破解。

或者一些重要的私钥文件直接明文存储在文件系统中,也可能会造成信息泄露。

系统漏洞造成拒绝服务

CVE-2019-11477:Linux内核中TCP协议栈整数溢出漏洞 CVE-2019-11477/CVE-2019-11478/CVE-2019-11479最大分段大小(MSS)和TCP选择性确认(SACK)功能相关漏洞

上面两个是近期暴露出来的Linux内核协议栈漏洞,这些漏洞如果被有效利用,可以允许远程攻击者进行拒绝服务攻击。

利用存在漏洞的组件提权

Dirty Cow就是一个典型的Linux内核漏洞,攻击者可以利用该漏洞进行提权,从普通用户提升为root权限用户。又比如uClibc一些旧版本就存在安全漏洞,并且uClibc已经没有维护升级了,很明显如果公司没有投入人力维护这个库,出现安全漏洞后就直接发布。

可信环境绕过

IoT设备端是僵尸网络的一个重要组成部分(BotNet),这个僵尸设备要不就被利用进行DDoS攻击,要不就是植入挖矿/蠕虫病毒,对整个互联网生态以及客户都有较大影响。

我司对设备产品做了可信环境的安全加固。可信环境简而言之就是不可信的进程/内核模块不可再设备上运行。这样即使设备某些组件存在漏洞,让攻击者能获取设备权限,也无法植入木马/病毒进一步利用。

测试人员应该针对该功能进一步分析和利用,评估绕过可信环境的可行性和攻击难度。

开启非必需服务

可以说每个服务都是一个攻击面,开启的服务越多,引入的漏洞就越多,受攻击的可能性就越大。应该梳理服务列表,只开启必要的服务。

系统攻击案例

TODO

近端/无线通信攻击

本节描述的近端通信并非指NFC,而是泛指所有近端通信的通信技术。这些技术都是和无线电技术(电磁波)相关。

常见的近端通信协议及分析工具

Rogue Access Points / Evil Twins

攻击者仿冒一个假的AP接入点,被攻击者连接到仿冒的AP时,假AP可以作为一个中间人,窃取一些明文的机密信息,或者是对数据包进行篡改。

重放攻击

攻击者通过特地的无线嗅探工具如HackRF One,USRP等,对无线信号进行嗅探,再利用配套软件比如GNU Radio对嗅探的电磁波进行清洗,再进行重放,达到重放攻击的目的。

无线干扰攻击

通过电磁波发射设备对目标频段进行电磁波发射,产生干扰。我们知道一般而言Wi-Fi支持2.4G和5G两个频段,每个频段又分为多个信道,我们可以覆盖所有信道进行电磁波干扰,就可能造成数据包丢失等拒绝服务攻击。

Bluejacking / Bluesnarfing

Bluejacking是通过蓝牙协议在未授权情况下向目标设备发送信息 Bluesnarfing是通过蓝牙协议在未授权情况下从目标设备读取信息。比如通讯录,邮件,图片等等。

通信敏感信息泄露

正常双方通信过程,第三方可以通过捕获数据包再进一步解析可能可以获取到敏感信息 比如在公共咖啡厅,用户A连接到公共WiFi, 访问某个服务,这个服务需要认证,但是认证过程的账户密码是明文传输的。此时一个攻击者B,通过ARP攻击(参考工具ettercap)作为一个网关角色让所有数据包都经过B的主机,此时B只要在主机上开启抓包软件(参考攻击wireshark)即可抓取所有的数据包,过滤掉一些无用信息,即可获取到敏感信息。

Wi-Fi取消身份验证拒绝服务

以Wi-Fi的取消身份验证洪水攻击(De-authentication Flood Attack)为例,该攻击也通常被简称为Deauth攻击,是无线网络拒绝服务攻击的一种形式。它旨在通过欺骗从AP到客户端单播地址的取消身份验证帧来将客户端转为未关联/未认证的状态。下图是其攻击原理图:

图2-6 取消身份验证洪水攻击 通过这张图可以很直观地看出,攻击者向整个网络发送了伪造的取消身份验证报文,从而阻断了合法用户和AP之间的连接。当客户端试图与AP重新建立连接时攻击者还在继续向信道中发送取消身份验证帧,这将导致客户端和AP始终无法重连。

近端通信案例

案例1:门锁卡注册漏洞

市场上有一些智能门锁只能用配套的卡才可注册使用,经安全工作者研究发现,当把非配套的卡拿来注册时,会提示失败,但是当非配套的卡和配套卡叠放在一起注册时,可注册成功,并且非配套的卡也能正常开门。这样就绕过了只能配套的卡才可注册的限制。并且智能锁在刷卡开门时也没有对卡片做身份认证,不会像注册一样只有配套的卡片才能使用。

网络服务安全

设备支持或者提供的服务是一个相对独立的业务功能的集合,而协议是实现服务的一个部分。

常见的网络服务如下(设备作为服务端)

Web服务(HTTP)
RPC服务(private protocol)
P2P代理(pTCP)
Onvif服务(Onvif)
PSIA服务(PSIA)
Genetec服务(PSIA)
RTSP服务(rtsp)
SNMP代理(snmp)
Bonjour(mDns/DNS-SD)
SSH2服务(ssh)
GB28181服务(Sip)
Device Discovery(private protocol/Onvif)

常见的设备支持的服务如下(设备作为客户端)

NTP服务(ntp)
FTP服务(ftp)
SMTP服务(smtp)
UPnP服务(upnp)
PPPoE服务(pppoe)
DDNS服务(ddns)
DHCP服务(dhcp)
iSCSI服务(SCSI-3)
NAS服务(http)
TFTP服务(tftp)
GB28181服务(sip)
4G(4g)
Wi-Fi(802.1x)
syslog服务(syslog)

从STRIDE角度思考网络服务安全

STRIDE模型帮助我们对目标进行威胁建模,所有的服务都可以套用这套模型进行威胁分析。我们假设每个服务都是由这几个组件构成:外部实体,进程,数据流,数据存储,并且以Web服务为例说明各个组件之间的关系,如下图所示

图2-7 Web服务个组件关系图

表2-1 STRIDE-per-Element

  S T R I D E
外部实体        
进程
数据流      
数据存储   ?  

测试和设计人员要做的是针对每个网络服务,做组件梳理,再做STRIDE-per-Element检查。针对梳理出的威胁做个等级评估,按风险优先级从高到低按“迭代+增量”的方式处理。

从安全框架角度思考网络服务安全

美国有一篇专利是针对Web的安全框架,专利编号US7818788,作者为John D. Meier 该框架针对Web服务,整理了9个方面的安全要素,分别为:

也就是说Web服务可以套用上述的框架去检测是否可能存在安全问题,对于设计人员,应该关注潜在的安全问题,再针对性的设计安全方案去加固。测试人员应该发现根据安全问题去进一步分析利用。

可以看到安全框架和STRIDE有重叠的部分,比如Spoofing可以对于认证,Tempering可以对于输入与数据检测

表2-2 STRIDE和安全框架

STRIDE Security Frame
Spoofing 认证
Tampering 输入与数据检测
Repudiation 审计和日志
Information Disclosure 敏感数据,密码体系
Denial of Service  
Elevation of Privilege 授权

从威胁/安全框架到Checklist

无论威胁或者安全框架都是比较抽象的概念,如果说A组件存在Spoofing的威胁,或者说A组件的认证模块,那应该如何进一步执行呢?以Web的认证和输入检测为例,说明怎么从安全框架转换到Checklist。

根据OWASP Testing Guide v4,从Web角度,可以从以下方向验证Spoofing/认证

可以从以下方向验证Tampering/输入与数据检测

网络服务攻击案例

案例1:服务端口越权

因为业务需要,部分智能音箱外开放了服务端口。由于相关厂商和开发人员对服务端口可能存在安全风险认识不足,导致对端口不作权限控制或者安全控制等防护操作,使得攻击者可以通过越权使用开放端口,实现控制音箱播放恶意音频或者录音,甚至进行其他权限更高的操作。

图2-8未授权的开放端口 在本次测试中,发现某智能音箱开放了8080端口,攻击者通过向该8080端口发送特定的控制命令,即可实现对智能音箱完全控制。另外还发现某些智能音箱使用GoAhead Web Server作为web端管理,在开启CGI的情况下,可以远程代码执行。

案例2:DLNA服务越权

数字生活网络联盟DLNA由索尼、英特尔、微软等发起成立,旨在解决个人电脑、消费电器、移动设备和物联网设备在内的设备之间数字媒体和内容服务的无限制的共享。因此许多智能音箱厂商都在系统中使用DLNA服务,但由于缺乏对其安全性的控制,导致智能音箱存在较大的安全风险。

图2-9开放的DLNA服务 本次测试过程中,发现部分智能音箱开放了未授权的DLNA服务,局域网内的攻击者可以利用DLNA服务控制智能音箱播放恶意音频或者中断音箱正在播放的内容,攻击者甚至可以利用该安全隐患向用户播放反动音频或者恐怖音频,从而给社会和个人带来极大的负面影响。

设备端隐私信息

隐私信息采集

信息过度采集

智能音箱包含了硬件、固件、应用和内容等多个层面的要素,其产业链中存在很多厂家,包括智能音箱设备厂家、语音识别及语音合成平台厂家、远场音频处理厂家、NLP算法厂家、音频内容提供商、外围设备商等。 在智能音箱厂家与产业链厂家之间存在多个用户信息采集点,可能涉及到对用户使用的手机号、详细地理位置、WI-FI名称、WI-FI口令、设备MAC地址等隐私信息,有些厂商甚至借助智能音箱APP获取用户通信录、运动数据和已经安装的应用等信息,而这些信息对于产业链厂家来说不是业务所必须的。

隐私信息存储

隐私信息明文存储 TODO

隐私信息传输

敏感信息泄露

本次测试过程中,对部分智能音箱开展了7*24小时的流量监控与分析,通过分析发现,被测智能音箱的上行和下行的绝大部分流量,均为明文数据,未采取严格的安全传输措施。

图3-1 典型设备的监控流量 考虑到智能音箱均通过WI-FI连接到互联网,攻击者可以通过伪AP等手段,轻易地获取智能音箱采集和传输的各类数据,从而造成用户的敏感数据泄露,给用户的隐私安全带来极大的挑战。

隐私安全建设

明确隐私安全的责任主体

去年发布的《信息安全技术:个人信息安全规范》对个人信息隐私有了框架性的要求,但对具体场景下的隐私安全责任划分不够清晰,在具体实施过程中存在分歧。 为了明确隐私安全的责任主体问题,网络安全监管部门应从上下两个方面进行工作:向上应该尽快推动个人隐私立法,加大对个人隐私保护的力度;向下应依据《个人信息安全规范》尽快落实具体场景的实施指导建议,明确场景中各个角色的隐私责任比例。

落实隐私安全的实施策略

随着智能音箱行业的快速发展,每个智能音箱平台上的用户数量都较大,一旦发生个人隐私数据泄漏等安全事故,都将给智能音箱厂商和用户带来巨大的损失,因此,在个人信息安全保护相关法律法规尚不健全的条件下,厂商应该充分意识到隐私安全给自身商业价值带来的巨大挑战,充分参考国内外最佳实践,制定切实行的隐私安全策略,最小限度地采集用户信息,最大限度地保护用户隐私安全。

参考/引用

【1】CNCERT:智能音箱隐私与网络安全分析报告
【2】启明星辰ADLab:智能音箱网络安全与隐私研究报告
【3】CAPEC

Table of Contents