您当前的位置: 首页 > 无限物联

移动应用:进入物联网的后门?

2017-03-26 18:53:56

移动应用:进入物联网的后门?

  摘要

现在,每天都有大量新装备接入物联网,但是迫于市场的压力,这些装备的安全性和隐私性常常没有得到足够的重视。为了评估和改良这些装备的安全状态,研究人员需要对它们进行逆向工程。不幸的是,这可不是1个容易的任务,由于他们需要面对各种不同的智能对象,并且它们常常使用定制的硬件、固件、操作系统和协议,这意味着每次逆向工程都需要从头开始,这是相当费时费力的。

在本文中,我们将解决这个问题,并提出1个更容易的方法来逆向智能对象。我们的思路是,在许多情况下无需关注对象本身,而是关注相干的移动利用程序。我们详细介绍了该方法在3个智能对象上的利用,结果表明这类方法的效果非常棒。实验的装备包括:智能牙刷、智能手表和家用安全报警器。

引言

在牛津英语词典中,将物联网(IoT)定义为“互联网的进1步拓展,能让平常生活中的所有对象互联互通,允许它们发送和接收数据”。现在,物联网正在逐渐走入我们的生活。2014年,约有20亿个物联网装备,这已超过了笔记本电脑和台式电脑的数量(15亿),并且与智能手机的数量(18亿)相当。1些最多见的物联网对象包括:智能手表(请注意,截止2015年第4季度,智能手表的出货量就已超过了瑞士手表)、健身腕带(通经常使用于人类,但也可用于猫和狗的装备,如奥托宠物系统)、智能电视和智能眼镜。但这些只是其中的很少1部份,物联网装备实际上触及广泛的领域:

文娱领域,例如Archos公司的音乐智能比尼帽,Mattel公司的智能芭比娃娃Hello Barbie。

高科技领域,例如Recon Instruments公司的增强现实防雪面罩,Narrative公司的可穿着相机等。

时尚领域,例如Volvorii公司的物联网高跟鞋或服装。

农业领域,例如奶牛授精。

健康和安全领域,例如Netatmo June公司的皮肤暴露检测仪,Vigo公司的睡眠检测仪,Glow-Cap公司的药物提示帽。等等。

但是,这些装备的隐私和安全问题却非常让人耽忧。迫于市场压力,这些物联网装备通常会急不可耐的尽早面世,因此,通常都没有经过适当的安全审查,有时乃至缺少正确的安全设计。例如,HP研究发现,90%的IoT装备最少会搜集1条个人信息,70%的装备使用未加密的网络,10个UI中有6个装备容易遭到诸如XSS和弱凭证的要挟。根据这些现状,IDC预测到2016年12月,90%的IT网络将因IoT的安全漏洞而遭受要挟。在消费者方面,埃森哲咨询公司在28个不同国家对28,000个人进行了调查结果表明,47%的消费者对IoT存在隐私和安全耽忧。

为了评估智能对象的安全性和隐私性,研究人员需要密切分析它们的具体实现。但是,由于技术文档很少,所以第1步通常需要对相干装备进行逆向工程。逆向工程本来就不是1个轻松的任务,对物联网装备来讲,就更加困难了,由于(i)它们使用的组件越特殊,人们对它的了解就越少,和(ii)由于智能对象彼此差异很大。前者需要了解陌生领域的专业知识(例如,Riot,Contiki,Brillo等操作系统),而后者则意味着需要逆向智能对象,但是逆向1个智能对象的经验,在逆向其他对象的时候帮助不大。例如,智能手表的逆向工程与智能牙刷的逆向工程几近没有共同的地方。因此,在第1个任务期间取得的经验对第2个任务几近没有帮助。

这些正是本文要解决的问题。我在这里提出了1种简单的方法,并且我已屡次实践,证明该方法确切有效。这类方法能够使得逆向进程的前面几步更加简单,从而有助于研究人员更快地了解装备本身。另外,它还能提供许多有价值的信息,可使进1步的逆向工作更集中、更有针对性。

在本文中,我们首先讨论这个主题的前期工作(第2节),然后解释我们使用的方法(第3节)。然后,通过3种不同智能对象举例说明我们的方法:智能牙刷(第4节)、智能手表(第5节)和(第6节)。最后,我们将对这类方法进行总结。

发展现状

虽然物联网已开始流行,但是,其安全研究仍处于初期阶段,相干的出版物也远少于其他领域,如操作系统安全。我们可以援用的文献有NEST恒温器、WeMo电源插座、健康输液泵中的漏洞、在Fitbit Flex dongles中注入任意代码、蓝牙扫描、婴儿监视器等等。1方面,这些研究为逆向物联网装备提供了有趣的线索,同时,也说明了不同的智能对象的差距是多么大,和研究人员为了了解它们而需要做的工作量有多么大。

参考文献[14]将这项任务比作CTF比赛,这看起来是非常适合的,由于每一个挑战是不同的而且非常耗时,并且在网络上也找不到立便可用的解决方案。

在学术界,1些研究人员提出了相干的方法或自动化方法来帮助逆向固件。文献[15]给出了物联网不同攻击面的详细清单。该清单有助于在安全审核/渗透测试时避免遗漏某些领域。但是,它对逆向工程本身没有提供帮助,只是旨在帮助我们涵盖安全相干的所有方面。对自动化框架和工具,它们是有发展潜力的,但目前仍处于初期阶段,因此现在还难以在实践中大展拳脚。

方法论

为了简化物联网装备的逆向工程,本文提出了以下方法:这类方法不是直接逆向智能对象本身,而是首先侧重于逆向与它们打交道的移动利用程序。

许多物联网装备都是通过相干的移动利用程序来进行控制、监督或与之交互的。例如,Meian公司的安全报警器就提供了相应的Android利用程序,帮助终究用户启动、停止装备,获得状态或设置警报区域。类似地,Beam牙刷也配备了与智能牙刷等通讯的iOS或Android利用程序。当有这样的移动利用程序可用时,那就为我们提供了很大的优势:

更简单。有许多工具可以用来逆向移动利用程序(例如apktool、baksmali、clutch和IDA Pro)。反病毒分析师常常使用这些工具来考察移动病毒,因此我们会有1个良好的支持社区。

安全性。物联网供应商开发这些移动利用程序(由于它们对终究用户很有吸引力)通常是处于营销的角度来斟酌的,所以不会将它们完全集成到其安全设计中(如果有的话)。因此,我们通常有机会访问这些移动利用程序未经混淆的源代码,更有甚者,我们还能在这些利用中找到危及智能对象本身的安全漏洞,具体参考第6节。

退可守。如果针对移动利用的分析不足以解决问题,则研究人员总是可以将逆向智能对象作为研究的第2步。在第1阶段搜集的信息极可能有助于在第2阶段进行更有针对性的逆向工程。

Beam牙刷

概述

智能牙刷的问世已有1段时间了,但直到2015年才引发了相干媒体的关注,由于当时Beam在1份围绕其联网装备的牙科保险计划中提到了它。每支Beam牙刷都纳入了牙科保险计划,并且每支牙刷有自己的特殊优惠(例如免费牙膏)和附属牙医。

与胰岛素泵或起搏器相比,牙刷可能还触及不到最敏感的健康数据。但是,1旦与保险单挂钩,就会引发多个问题,不管从安全教育角度还是从隐私角度斟酌,考察该牙刷的工作原理都是非常有趣的。

该牙刷除提供其商品规格:蓝牙LE 4.0(BLE)、声波机电、尺寸和色彩以外,没有提供其他技术信息。另外,也没有用户论坛,没有开发者社区,也没有学术出版物。不幸的是,这类情况对物联网装备来讲是非常常见的:我们必须从头开始,由于没有信息可供利用。

面对这类处境,1条路是拆卸牙刷的硬件:拆开它,拿到电子组件,探测测试点等。但是,这里我们决定重点探索该装备相干的iOS和Android移动利用。

逆向iOS利用程序

在逆向iOS利用程序的时候,它的架构对我们是很有帮助的。由于利用程序会使用名为BeamBrushData.sqlite的sqlite数据库,其中包括多个表,如BrushEvent、ClientDevice和ClientSession(请参见图1),所以,我们可以通过在函数名称中搜索关键字“primaryKey”来列出这些表。

移动应用:进入物联网的后门?

  图1:Beam牙刷的移动利用程序所使用的SQL表。

每一个表的内容都是由mappings命名的函数进行描写的,例如Insured表的[Insured mappings]。

了解每一个表的字段对掌握哪些数据被存储和哪些数据可能泄漏给对手是非常有用的。例如,BTStarCardInfo表包括终究用户的积分的变化情况:name,beforeValue,afterValue,starCount,lastTotalStars,totalStars。积分是终究用户完成指定挑战(例如连续刷牙超过两分钟)时授与终端用户的虚拟点数。攻击者固然可以尝试修改这里的值来获得积分——固然,还可能存在其他相干的检查,例如在远程服务器上的检查事项等。

存储在这些表中的信息对广告工具包或广告软件来讲,多是非常有价值的。例如,Insured表保存被保险用户的称谓,名字,中间名,姓氏,性别和诞生日期,固然用户也多是家庭中的成年人(通常是父亲或母亲)。然后,User表为家庭的其他成员(例如儿童)提供相同的信息。因此,通过分析这些表中包括的数据,特务软件可以了解特定家庭的组成成员,然后给他们发送有针对性的广告等。

除数据库结构以外,通过反汇编iOS利用程序还能揭露它实现的类的结构。移动利用程序2进制文件的objc节提供了每一个类的方法和字段的完全概述。例如,图2示出了UserSummary类的字段——也称为属性(例如,beamScore,numberOfBrushDaysLeft)和方法(例如,beamScoreRoundedInteger)。另外,IDA Pro中的注释也特别有用,乃至为每一个字段的类型和方法都提供了签名。

移动应用:进入物联网的后门?

图2:IDA Pro显示了UserSummary类的方法和属性。属性的注释显示了该字段的具体类型。

从这里我们可以了解到:

牙刷提供了加速度计和陀螺仪。二者都在BTBrushData类中提供了1个3轴向量。牙刷就是通过它们来了解终究用户是不是正在刷牙,如果是的话,当前位于哪一个象限(口腔被分为4个区域,或象限:左上,右上,右下,左下)。

固件的空中下载服务。BTFirmwareUpdater类的内容表明,该固件提供了通过空中下载进行的更新服务。更新固件时,会将新固件的字节发送到牙刷,直到写入所有字节为止。

char *firmware;

unsigned int totalLength;

unsigned int written;

unsigned int toWrite;

unsigned int loopCount;

int state;

CBService *otaService;

CBCharacteristic *otaControlPoint, *otaDataPoint;

这些积分只是软件而已。特定终究用户的积分数量其实不存储在牙刷本身上,而是存储在移动电话上(并且可能在远程服务器数据库上)。事实上,类BTBrushData,BTBrushEvent,Device和ClientDevice中没有积分相干的字段。从这些类的内容可以看出,牙刷是由固件、硬件、序列号、闪光灯、电池电量、电动机(其速度是可控的)、3轴陀螺仪、3轴加速度计、自动关闭定时器和具有BLE功能的芯片构成的。

逆向Android利用程序

通过逆向该Android利用程序,我们可以取得更多的详细信息。例如,虽然我们知道牙刷导出了几种BLE服务和characteristic(参见图3),但是除标准的服务以外,大多数都是未知的。

移动应用:进入物联网的后门?

  图3:牙刷的BLE characteristic。

通过逆向Android利用程序,能够更轻松地找到每一个characteristic的意义。例如,图4中的代码给出了牙刷的电动机速度(其转换为刷子每分钟的行程)的UUID和象限蜂鸣(当终究用户在特定象限中的刷牙时间足够长时,牙刷就会振动)。我们在表1和2中分别列出了已知的BLE服务和characteristic。

移动应用:进入物联网的后门?

  图4:用于机电速度和象限蜂鸣的BLE characteristic。

UUID 描写

00001800-0000⑴000⑻000-00805f9b34fb 通用访问(标准)

c05fc343-c076⑷a97⑼5d3-f6d3e92a2799 固件 OTA 服务

04234f8e⑺5b0⑷525⑼a32⑴93d9c899d30 Beam 服务

89bae1fa⑵b59⑷b06⑼19a⑻a775081771d 多是加速度计/陀螺仪芯片服务

表1:Beam牙刷的BLE服务。

UUID 描写

a8902afd⑷937⑷346-a4f1-b7e71616a383 布尔唆使器,唆使牙刷处于活动状态

267b09fd-fb8e⑷bb9⑻5ccade55975431b 机电状态

3530b2ca⑼4f8⑷a1d⑼6beaa76d808c131 当前时间

833da694⑸1c5⑷418-b4a9⑶482de840aa8 机电速度

19dc94fa⑺bb3⑷248⑼b2d⑴a0cc6437af5 自动关闭和象限蜂鸣唆使器(2位)

6dac0185-e4b7⑷afd-ac6b⑸15eb9603c4c 电池电量(2字节)

0971ed14-e929⑷9f9⑼25f⑻1f638952193 牙刷色彩(1 byte)

0227f1b0-ff5f⑷0e3-a246-b8140205bc49 加速度计数据(6字节)

ed1aa0cf-c85f⑷262-b501-b9ddf586a1db 陀螺仪(6字节)

cf0848aa-ccdb⑷1bf-b1e1⑶37651f65461 按钮状态

表2:我们对Beam牙刷最感兴趣的BLE characteristics

有了这些信息,我们即可以使用自己的实现代码来控制自动关闭和象限蜂鸣功能了。

我们可以控制的功能包括:

打开与牙刷的BLE连接。

将字节值写入相应的characteristic UUID中。最低有效位用来控制象限蜂鸣,第2位控制自动关闭。

断开牙刷的连接。

BLE命令可使用诸如建立在bluez(蓝牙栈实现)之上的gattlib [21]之类的库和简单的BLE USB dongle来发送。

利弊

通过对Beam牙刷的移动利用程序进行逆向,我们发现了以下有效信息。

存在陀螺仪和加速度计。这1点上,通过拆卸牙刷的硬件也能到达一样的效果,只不过做起来可能会有点难度,具体取决于芯片的封装方式。明显,逆向移动利用程序的优点是我们不需要拆开牙刷,并且也没有损坏它的风险。缺点是我们看不到组件的铭牌和型号,因此也没法了解其电器规格。

存在固件更新服务。对这1点来讲,很难通过其他方式(例如通过监听BLE流量)来取得。

积分并未存储在牙刷本身中。这1点很难通过硬件探测或BLE扫描找到。

实现代码的设计。明显,没有反汇编代码的话,是没有办法了解这1点的。我们唯1不知道的部份,就是硬件设计。

辨认BLE服务和characteristic。这1点也能够使用BLE扫描器利用程序(例如nRF主控制面板[22])来到达目的,但需要消耗更长的时间,由于必须通过尝试各种值,然后通过视察牙刷的行动差异来进行辨认。

智能手表

架构

我们对索尼的智能手表SmartWatch 2 SW2进行了相应的实验。

与Beam牙刷不同,这款智能手表提供了很多技术信息和开发人员信息,这主要得益于索尼鼓励开发人员为其编写新的利用程序。索尼为该产品提供了相应的API、文档、示例和教程。该智能手表含有STM32F439 SoC(包括ARM Cortex-M4和加密加速器)、光传感器、加速器,支持NFC和蓝牙3.0(注意不兼容低功耗蓝牙技术)和LiPo电池。它运行的是Micrium的μC/ OS-II实时操作系统。

知道了这1点,那末就能够请μC/ OS-II或ST微电子SoC专家继续对装备的相干部件进行深入调查。在本文中,我们假定研究人员没法接触这方面的专家,相反,我们将重点研究该智能手表的利用情况。要使用智能手表,必须最少安装两个Android利用程序:1个名为Smart Connect的利用程序和1个名为SmartWatch 2 SW2的利用程序。这里,我们将重点考察这两个利用程序。

要了解这些利用程序,必须首先掌握索尼的有关术语。对索尼而言,智能手表更1般的称呼为智能配件,由于还有其他类型的配件,如耳机等。1个智能手表的“利用程序”(我们稍后就会发现,实际上根本没有这样的东西)被称为智能扩大。

要创建新的智能扩大程序,开发人员需要对使用了索尼的智能扩大API的代码进行编译,从而得到1个Android利用程序(即1个.apk程序,研究人员可使用标准工具,如apktool,baksmali等对它们进行逆向)——但需要注意的是,只有将我们前面提到的两个利用程序都安装以后,该利用程序才能正常运行。

因此,为了安装智能扩大程序,终究用户需要安装开发人员的apk,即Android利用程序。该利用程序由两个强迫性利用程序之1的Smart Connect自动找到,并添加到相应的智能配件中。这样,新的智能扩大图标就会出现在智能手表上。

需要注意的是,我们没有在智能手表本身上直接安装软件。事实上,根本就没有智能手表利用程序的概念。实际上,智能扩大的所有工作都是在智能手机上完成的。智能手表基本上只是充当1个远程显示器。智能扩大生成的各种事件和消息都是由两个强迫性利用程序中的第2个,即SmartWatch 2 SW2生成的。这个利用程序实际上就是索尼所谓的主机利用程序,即专门用来跟给定智能附件(就本例而言,就是SW2)通讯的Android利用程序。我们在表3和图5中对相干的术语进行了详细的解释,需要注意的是,其中1些很容易引发误解。

移动应用:进入物联网的后门?

  图5:索尼SmartWatch 2 SW2的架构。

名称 说明

主机利用程序专门用于跟特定智能配件通讯的Android利用程序的通用术语。

智能配件 智能手表、智能耳机等的通用术语

Smart Connect这是必须安装在智能手机上才能使用智能手表的两个强迫性Android利用程序之1。这是1个官方的索尼利用程序。它管理哪一个扩大使用哪一个配件。它的软件包名称是com.sonyericsson.extras.liveware。

智能扩大 这是1个Android利用程序,它在手机上运行,但可从智能手表远程访问/控制。索尼提供了几个扩大(Twitter feed,Facebook feed,Chrono),并鼓励开发人员创建自己的扩大。

Smart Watch 2 SW 2这是SW2的两个强迫性Android利用程序中的另外一个。实际上,它是SW2配件的主机利用程序。这是1个官方的索尼利用程序,该软件包名为com.sonymobile.smartconnect.smartwatch2。

表3:索尼的智能手表术语。

推论

知道了智能手表的架构以后,可以得到以下推论:对智能手表上的任何扩大,实际上都可以通过逆向其Android利用程序的代码来进行安全分析。

我们假定,需要考察发送SMS消息的扩大。智能手表本身没有甚么可逆向的,相反,我们需要做的是反汇编相干的Android利用程序,这样,就可以找到像smsManager.sendTextMessage(mPhoneNumber,null,message,…)这样的代码。如果智能手表歹意软件的确存在并在传播的话,防病毒供应商只需要为相应的Android利用程序写签名便可,这些事情正是他们所善于的。

另外,我们还可以对官方SmartWatch 2 SW2主机利用程序也进行逆向工程。逆向结果表明,与远程智能手表的通讯是通过“Costanza”消息来进行处理的。这些消息由类型(消息类型),消息标识符和打包的缓冲区字节组成。打包或解包是通过名为“protocol”(libprotocol.so)的本机库进行处理的。1旦打包终了,这些消息就能够通过蓝牙进行发送了——这里是通过Android API来打开蓝牙套接字的。Costanza消息的类型有多种,例如:

电池电量唆使(id = 18),电量水平以百分比情势表示。

恢复出厂设置的要求和响应(id = 20或21)。

'Force crash'(id = 666)。源代码表明,这里有1个隐藏的调试界面,其中含有“Force crash on watch”按钮。这将创建以下消息:

public RequestForceCrash(int

newMessageId) {

super(newMessageId);

this.type = 666;

this.mMagic = 0xC057A72A;

}

注意类型666和魔法值,可能与前面讲过的'costanza'消息相匹配。

Fota要求(id = 6)。这可能意味着空中下载更新固件。

传感器数据(要求或响应)(id = 127或128)。

滑动唆使(id = 116)。

版本要求和响应(id = 4和5)。

振动要求(id = 129),其中包括振动的延续时间等。

这些消息的用法和标识符将很难通过其他方式找到(特别是在正常情况下不出现的Force Crash消息)。一样,这也证明了通过考察移动利用来分析物联网硬件是多么的有价值。

安全报警器

Meian公司是1家家用安全报警器的制造商。该公司的1些报警器可通过SMS进行远程控制:您可以远程启动/停止报警器、获得其当前状态、启用/禁用某些监控区域等。固然,这些命令必须符合特定的格式,同时,还必须提供正确的密码。为了控制报警器,终究用户必须依照特定格式把相应的命令写入SMS,并将其发送到报警器。当报警器接收SMS后,会对传入的消息进行处理,并回复履行结果。由于Meian对SMS消息的格式的要求非常严格,所以Meian专门实现了1个Android利用程序来自动格式化短信。在配置期间,终究用户需要提供报警器的具体配置:报警器的电话号码、管理密码、输入密码时可接受的延迟、紧急电话号码(如果检测到入侵,则拨打该号码)。然后,该利用程序就会提供用于启动/停止/获得警报的状态(等等)的各种按钮(参见图6),这给用户的操作带来了极大的便利。

移动应用:进入物联网的后门?

  图6:用于远程控制家用安全报警器的Android利用程序的主屏幕。

一样的,这里我们还是通过分析装备的移动利用程序来考察该装备的安全问题。这里存在两个安全问题:

短信未删除。发送的短信会继续保存在智能手机上,除非手动删除。因此,如果攻击者能够读取它的话,就可以得到报警器的密码。注意,不管终究用户是不是使用该利用程序(手动写入SMS),都会出现此问题。

报警器配置的弱保护。该利用程序使用了1个弱加密算法来保护配置数据(电话号码、密码、紧急电话号码和延迟。请注意,配置数据是非常敏感的,由于任何人都可以用它来控制报警器。攻击者可以轻松逆向该加密算法,从而解密所有的设置(参见图7中的概念证明)。该漏洞在2015年就报告给Meian [23]公司了,但是1直没有回应。在Play商店中的这个利用程序仍未修复该漏洞,截至目前已被下载了1,000到5,000次。

移动应用:进入物联网的后门?

  图7:解密安全报警器的所有主要机密设置的概念证明。

这个家用安全报警器的安全状态总结在表4中。遗憾的是,它的相干移动利用实际上给该装备的安全性带来了很大的麻烦,这也正是其他物联网装备正面临的问题之1。

情形:攻击者可以取得报警器的密码或电话号码… 从发件箱的命令SMS中…? 1旦SMS消息被删除…?

手动SMS是不是

使用Meian的Android利用程序是是

表4:使用Android利用程序前后报警器的安全状态比较

结束语

物联网装备的安全分析具有很大的挑战性,主要是由于它们的多样性所致使的,有时研究人员根本就不知道如何开始或从哪里开始。本文表明,在这类情况下,我们无妨从相干的移动利用程序开始下手,由于它们通常会与物联网装备进行通讯,这是1个不错的出发点。另外,这些移动利用在物联网装备中是非常常见的。

在本文中,我们通过相干移动利用程序分析了3种不同的装备:智能牙刷,智能手表和家用安全报警器。在所有3个案例中下,我们所用的策略都能够快速揭露其安全设计、协议详细信息和相干漏洞。固然,这些信息也能够通过其他方式发现,例如蓝牙扫描和模糊测试,但这样会需要消耗更多的时间,由于我们不能不猜想多种可能,而移动利用程序逆向工程则能够直接给出结果。

事实上,物联网和移动利用程序的结合会带来多个问题。为此,供应商应当想法完善装备的安全设计和实现,和提高相干的移动利用的安全性。注意,对代码进行模糊处理的快速修复方案将很难见效,而应当下大力气改进安全设计和实现。另外,防病毒行业需要为IoT歹意软件做好准备,不管来自装备本身还是来自移动利用程序。这多是安全行业的下1个主战场。

TAG:
推荐阅读
图文聚焦