设计缺陷将导致亚马逊Echo变身成为监听设备

MWR的安全研究专家发现亚马逊Echo存在一个物理攻击漏洞,该漏洞将允许攻击者获得设备的root shell(设备底层为Linux操作系统),然后安装恶意软件,并且不会留下任何攻击痕迹。这种恶意软件不仅可以帮助攻击者获取到目标设备的永久远程访问权并窃取用户凭证,而且还可以悄悄将设备麦克风所记录下的音频流数据发送到攻击者所控制的远程服务器。

这个漏洞是由于以下两个硬件设计缺陷所导致的:

1.  暴露了设备的调试面板;
2.  硬件配置允许设备从外部SD卡引导启动;

接下来,我们会告诉大家如何对亚马逊Echo进行root,并将其变成一台“监听器”。

前人的工作

之前已经有安全人员通过在设备调试面板上插入外部SD卡来将设备引导启动进通用的Linux环境中了,关于具体的操作步骤、漏洞细节和SD卡引导镜像都可以在GitHub上找到。除此之外,研究人员还专门发布了相关的研究报告并介绍了root亚马逊Echo的可能性。

我们在这些研究的基础上进行了进一步的深入扩展,并将亚马逊Echo引导启动进入了真实的系统固件,安装持久化后门、获得了远程root shell的访问权,并最终实现了对设备麦克风的远程实时窃听。

Root设备

将亚马逊Echo底部的橡胶垫揭开之后,我们会看到18个调试面板,关于这些面板的具体作用请参考Clinton等人发表的文章。

通过与这些暴露在外的UART面板相连接,我们就可以查看到设备的启动信息,并获取到设备的配置详情。

但不幸的是,在设备的启动过程中我们既没有拿到shell,也没有得到登录提示,而且U-Boot启动过程也没办法中断。

亚马逊Echo的主MCU是一块由美国德州仪器制造的DM3725数字媒体处理器(配备了一个ARM Cortex-A CPU)。在设备的启动过程中,芯片的启动过程分为三步。首先,设备会通过一个bootrom来完成硬件的最小化配置。接下来,它会将第二个bootloader(X-loader)加载进MCU的内部RAM。这一步需要在第三个bootloader(U-Boot)加载进外部RAM之前完成。最后,U-Boot便会加载内核并向其传递控制信息。

根据亚马逊Echo的配置,它首先会尝试从连接至调试面板的SD卡(优先与内部eMMC单元)启动,这种启动顺序的设置主要取决于启动过程中MCU的硬件状态,而且只能通过修改硬件主板的配置来改变启动顺序。

因此,我们只需要向SD卡写入X-lodaer以及U-Boot,并进行正确的分区,我们就可以让设备从SD卡启动并进入U-Boot命令行界面。

由于设备的隐藏ROM是以SPI模式来与SD卡通信的,而且我们无法通过SD卡启动至设备的主操作系统,所以我们不需要连接上图中所有的SDMMC面板。

MMC与SPI的映射关系如下:

SDMMC D0 → MISO SDMMC D3 → !SS SDMMC CMD → MOSI SDMMC CLOCK → SCK

我们还需要给SDMCC POWER面板和SD卡外接一个+3V电源,然后连接其中一个GND面板。

下图就是我们的实验环境,其中亚马逊Echo连接到了一个外部SD卡电路板,并通过UART与笔记本电脑相连。

接下来,我们通过SD卡(写入了X-loader和U-Boot)启动设备之后,我们就可以中断设备的启动过程,并进入U-Boot命令行接口。这样一来,我们就有可能查看到文件系统内部内存中的内容了,而且我们甚至还可以重新修改内核参数。

现在我们需要确定内部eMMC的哪一个分区中包含主内核以及文件系统。内部eMMC有八个分区,分区标签如下:

1. xloader 2. recovery 3. boot 4. idme 5. diag 6. main-A 7. main-B 8. data

diag分区加载的是一个诊断环境,我们还没有对其进行完整的测试。

我们所要找的主文件系统以及内核会在main-A和main-B分区之间转换,每一次设备固件更新便会引发分区转换。为了找出我们的目标分区,我们可以利用U-Boot并使用下列命令对文件系统进行测试:

uboot> mmc dev 1 uboot> ext4ls mmc 1:6 uboot> ext4ls mmc 1:7

运行上面的命令之后,我们只能够看到其中一个分区的文件系统,如果我们想要查看这两个分区的文件系统,我们就要通过一次固件更新来完成分区转换。确定了分区之后,我们就可以修改U-Boot并让它从这个分区启动。除此之外,我们还要修改内核参数并以可写文件系统的形式加载这个分区,然后运行/bin/sh,而不是运行正常的启动脚本。

得到了root shell之后,我们就可以绕过所有的认证机制了。

但是现在设备每隔几分钟就会重启一次,为了防止设备自动重启,我们需要设置一个监控进程,并定期重置设备的重启计时器。

运行下列命令启动监控进程(watchdog):

现在测试环境总算是稳定了,但是主要的服务都还没有启动,设备的功能也没有完全释放。不过我们已经得到了整个文件系统的完整读写权限,而且还可以随意修改配置。

在我们的PoC中,我们在data分区(可写分区)中安装了一个反向shell脚本。使用下列命令加载这个分区:

分区加载完成之后,我们就可以通过这个反向shell脚本来实现设备的持久化感染了。

我们还需要在设备启动之后触发这个反向shell脚本,我们只需要在其中一个初始化脚本的结尾添加下列代码即可。我们选择的是/etc/init.d/varlocal.sh,因为它是最后几个运行的初始化脚本之一,而且它还可以加载data分区。

安装好反向shell脚本之后,我们就可以移除外部SD卡和UART连接线,然后重启Echo并进入正常状态了。在设备重启的过程中,初始化脚本会运行我们的反向shell。如果我们远程监听设备的1377端口,我们就可以通过root shell与远程设备进行连接了:

你有在听吗?

接下来,我们就可以使用亚马逊自己开发的“shmbuf_tool”应用程序来获取音频缓冲区中的音频多媒体数据了。我们自己创建了一个能够持续不断地向fifo管道写入原始音频数据(通过麦克风窃听)的脚本,并通过TCP/IP将音频流传送到远程服务器。在远程服务器端接收到原始音频数据之后,我们可以将其保存为一个wav文件或直接通过扬声器进行播放。

需要注意的是,这项攻击技术并不会影响亚马逊Echo原本的正常功能。

脚本代码startStream.sh如下:

下列命令可以将音频流数据保存到远程服务端:

或者使用下列命令通过扬声器播放窃听数据:

漏洞修复

2015和2016版的亚马逊Echo均存在这个漏洞,但是2017版已经修复了这个问题。

下图为存在漏洞的2016版亚马逊Echo,型号编码23-002518-01:

下图为修复后的2017版亚马逊Echo,型号编码23-002518-02:

参考资料

1. https://github.com/echohacking/wiki/wiki/Echo 2. https://vanderpot.com/Clinton_Cook_Paper.pdf 3.https://www.theverge.com/circuitbreaker/2016/12/14/13955878/wynn-las-vegas-amazon-echo-hotel-room-privacy

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SEO

SEOer必学网站分析神器(二)

昨晚发布“SEOer必学网站分析神器(全新解析一)”后,突然发现,里面少讲了一点内容,在这里给大家补上。 移动适配:除了上次讲的一些内容外,还是可以加快移动端...

3376
来自专栏Golang语言社区

系统架构-基础篇-(高性能基础建设说明与选型条件)

本文牵扯的面积可能会比较泛,或者说比较大,在这个层面很多人也有自己的见解,所以我这也仅仅是抛砖引玉,结合前面讲述的一些基础技术,从思想中阐述更为深入的架构思想基...

3375
来自专栏ImportSource

微服务应具备的12个属性

该文翻译自Pivotal公司的 Matt Stine大牛的书籍《Migrating to Cloud Native Application Architectu...

2789
来自专栏JAVA高级架构

浅谈 MySQL 集群高可用架构

新年快乐 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库...

37415
来自专栏程序员互动联盟

编程高手为啥都喜欢耍脚本?

脚本编程几乎在每一个平台上都存在,这是因为利用脚本常常会简化、加快很多批量处理的工作,它能实现很多传统编程语言的功能,但是对编写者却不需要关心什么编译器、解释器...

3365
来自专栏前端架构

web统计原理及实现方法汇总总结—网站统计中的数据收集

在php、jsp、asp后端总揽一切的时代,网站统计基本是后台的事情——其实web开发,也没有前端这个职位,网站设计(现在的UI)不仅要前途还要用dreamwa...

3192
来自专栏云计算认知升级

小程序·云开发 项目开发经验分享

近期,小程序开放了新的能力——「小程序·云开发」,帮助开发者快速构建微信小程序的后端服务。我作为一名微信小程序的开发者,也在第一时间尝试了小程序云开发,并将我自...

3.7K14
来自专栏后端技术探索

纯干货--秒杀系统架构分析与实战

(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货

2734
来自专栏小樱的经验随笔

Python爬虫笔记(一):爬虫基本入门

最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫。这是这个项目的第一篇文章,这次就...

3776
来自专栏成猿之路

[神器]告别百度云下载文件时的蜗牛速度

2485

扫码关注云+社区