首页 >> 网络安全 >>渗透测试 >> 入侵国际快递(iParcel)包裹存放盒
详细内容

入侵国际快递(iParcel)包裹存放盒

在2019年,McAfee Advanced Threat Research(ATR)披露了一个名为BoxLock的产品中的一个漏洞。此后的某个时间,英国公司iParcelBox的首席执行官与我们联系,并提出发送其一些产品进行测试。尽管这不是我们研究的典型MO,但我们赞扬该公司积极开展安全工作,因此,由于iParcelBox的团队很友好,可以将所有东西都交付给我们,因此我们决定看看。


iParcelBox是一个大型钢箱,包裹快递人员,邻居等可以访问,而无需进入家中就可以安全地取回或运送物品。iParcelBox上有一个按钮,当按下该按钮时,它将通知所有者有人要在其中放置对象。所有者将在其移动设备上收到“打开”请求推送通知,他们可以接受或拒绝。

1.jpg

iParcelBox(图片来源:iparcelbox.com)

侦察

我们注意到该设备的第一件事就是它的简单性。在攻击者的心态中,我们一直在关注各种各样的攻击媒介。该设备只有三个外部引导程序:远程云API,WIFI和一个物理按钮。

2.jpg

iParcelBox交付按钮(照片来源:iparcelbox.com)

在安装过程中,iParcelBox将为移动应用程序创建一个WIFI接入点,以与之连接并发送设置信息。每个iParcelBox都有一个唯一的随机生成的16个字符的WiFi密码,该密码使WPA2密钥无法使用。此外,仅当iParcelBox处于设置模式时,此访问点才可用。可以通过按住按钮将iParcelBox置于设置模式,但是它将通过通知警告所有者,并且仅在设置模式下保持几分钟,然后才能恢复正常操作。

3.jpg

iParcelBox随机WiFi接入点密码(16个字符)

由于我们在实验室中拥有iParcelBox的WiFi密码,因此我们连接到该设备以查看可以从Web服务器收集的内容。该设备仅在端口443上侦听,这意味着该应用程序与iParcelBox之间的流量很可能已加密,我们稍后对其进行了验证。这将我们引向Android应用程序,以尝试破译在设置过程中发送到iParcelBox的消息类型。

4.jpg

iParcelBox端口扫描

使用dex2jar,我们能够反汇编APK文件并查看应用程序中的代码。我们很快注意到iParcelBox正在使用MQTT(MQ遥测传输)在iParcelBox和云之间来回传递消息。MQTT是一种发布/订阅消息协议,设备可以在其中订阅“主题”并接收消息。一个简单的描述可以在这里找到:(https://youtu.be/EIxdz-2rhLs)

5.jpg

Dex2Jar命令

典型的下一步是获取设备的固件,因此我们开始浏览反汇编的APK代码以查找有趣的URL。虽然我们没有找到任何直接的固件链接,但是我们能够找到一些有用的信息。

6.jpg

从APK中提取的反汇编代码

上面的代码显示了一些有趣的地方,包括字符串“ config.iparcelbox.com”以及带有“ app”和“ TBpwkjoU68M”的行。我们认为这可能是在安装过程中传递给iParcelBox的应用程序用户的凭据。但是,我们稍后再讲。该URL在Internet上无法解析,但是当连接到iParcelBox访问点并执行Dig查询时,我们能够看到它解析为iParcelBox。

7.jpg

config.iparcelbox.com的DNS查找

Android应用程序或设备上的网络服务器上没有任何内容显示给我们,因此我们决定更深入地研究。可以收集有关目标的信息的最常见方法之一是浏览用户表单,查看是否还有其他尝试调整和修改设备的方法。家庭自动化论坛通常会使用IOT设备,其中有许多API使用示例以及与此类设备进行交互的用户脚本。我们想看看iParcelBox是否有类似的东西。除了一些营销内容外,我们最初对iParcelBox的搜索是空的,但是当搜索更改为iParcelBox API时,我们注意到了一些有趣的帖子。

8.jpg

Google搜索“ iparcelbox api”

我们可以看到,即使在首页上,也存在一些错误报告和“ Mongoose-OS”的两个用户论坛。在进入Mongoose-OS论坛之后,我们可以清楚地看到一个用户是iParcelBox开发团队的一部分。这使我们了解到该设备正在ESP32开发板上运行Mongoose-OS ,这很重要,因为可以用许多其他类型的代码来刷新ESP32设备。我们开始跟踪用户的帖子,并能够在整个构建过程中发现有关设备和开发决策的大量信息。最重要的是,这是许多其他分析技术的捷径。


如前所述,当务之急是通过直接从设备中拉固件或从供应商站点下载固件来尝试访问设备的固件。拉固件比较麻烦,因为您必须经常将导线焊接到闪存芯片上,或者将芯片全部拆除才能与闪存接口。在开始尝试从ESP32提取固件之前,我们注意到论坛中的另一则帖子提到该设备上的闪存已加密。

9.jpg

描述闪存加密的帖子

有了这些知识,我们跳过了连接ESP32的焊线,甚至没有尝试手动拉固件,因为事实证明,从固件中拿走任何东西都是困难的。这也使我们深入了解了配置过程以及如何设置每个设备。有了这些知识,我们开始寻找如何下载OTA更新。


经过一段时间的搜索,我们能够找到包含iParcelBox引导过程的大型日志文件的文件上传。在日志中搜索,我们发现了一些高度敏感的数据。

10.jpg

引导日志中的管理员凭据和gh-token

在上面的代码段中,您可以看到已传递了管理员凭据以及GitHub令牌。不用说,这不是一个好习惯,我们将在以后查看是否可以使用。但是在此日志中,我们还找到了固件URL。

11.jpg

引导日志中的固件URL

但是,URL需要用户名和密码。

12.jpg

Firmware.iparcelbox.com .htaccess

我们在此论坛帖子中找到了“ .htaccess”设置,以防止意外访问固件下载。

13.jpg

.htaccess帖子

先前找到的管理员密码未通过身份验证,因此我们希望从设备中注销日志,以查看这些日志是否为旧凭据以及是否可以将新凭据打印到UART。

14.jpg

iParcelBox的内部(TX和RX以红色突出显示)

ESP32的RX和TX引脚已映射到USB-C连接,但是如果您查看电路,则没有FTDI(未来技术设备国际公司的芯片)来进行处理,因此这只是原始串行。我们决定只焊接到通孔(垂直互连访问)以红色突出显示,但仍未传输任何数据。


然后,我们开始再次搜索那些对论坛过于有用的帖子,并迅速找到原因。

15.jpg

禁用UART

这至少证明不是我们设置不正确,而是只是通过UART禁用了日志记录。


方法1 – RPC

通过我们的侦查工作,我们几乎决定了一个事实,即从物理角度来看我们不会轻易进入iParcelBox,因此决定切换网络方法。我们知道,在安装过程中,iParcelBox会创建一个无线AP,并且我们可以连接到它。借助在论坛上的知识,我们决定重新访问iParcelBox上的Web服务器。我们首先发送一些“ MOS”(Mongoose-OS)控制命令来查看卡住了什么。


可以在此处找到Mongoose-OS的安装说明。为了直接移植,我们没有在Docker中直接安装到操作系统上。

16.jpg

用于创建mos的Docker文件

参考论坛提供了一些有关如何使用mos命令的示例。

17.jpg

Docker mos命令

第一条命令返回了一个有希望的消息,我们只需要提供凭据即可。还记得我们之前找到启动日志的时间吗?是的,管理员凭据已在线发布,并且它们确实有效!


至此,我们对iParcelBox拥有完全有效的root访问权限,包括对所有文件,JavaScript代码以及更重要的是AWS证书和私钥的访问。


从设备中提取文件后,我们注意到iParcelBox的开发人员实现了访问控制列表(ACL)。对于物联网设备,这并不常见,但这是一个好习惯。

18.jpg

显示用户权限的ACL

我们先前在反汇编的Android APK中使用用户名“ app”找到的凭据是RPC凭据,但仅运行Sys.GetInfo,Wifi.Scan,Wifi.PortalSave和Sys.Reboot的权限有限。这些凭据没有什么有趣的,因此对于此方法的其余部分,我们将坚持使用“管理员”凭据。


现在我们有了凭据,证书和私钥,我们想尝试转到其他设备。在设置过程中,我们注意到MAC地址被标记为“ TopicID”。

19.jpg

将链接MAC地址发布到TopicID

正如我们之前所确定的,iParcelBox使用MQTT代理设备,云和移动应用程序之间的通信。我们很想知道是否存在任何身份验证障碍,或者您所需要的只是设备的MAC地址以远程启动命令。


由于我们本质上具有root访问权限,因此启用日志记录是下一步的合理选择,因此我们可以看到设备上正在发生的情况。从Mongoose-OS论坛的一篇帖子中,我们看到您可以通过更改iParcelBox上的配置来启用到本地设备的UDP日志记录。

20.jpg

如何启用UDP日志发布

我们调配了iParcelBox,然后按住按钮直到进入设置模式(可使用AP的位置),从而重新启用RPC调用。然后,将“ udp_log_addr”设置为我们的本地计算机。

21.jpg

重新启用iParcelBox上的日志记录

现在,我们有了日志和更多信息。我们想测试是否可以访问MQTT代理并修改其他iParcelBoxes。在日志中,我们能够验证MQTT代理是否已在AWS IOT上设置并且正在使用我们之前提取的证书和密钥。我们找到了一些连接到AWS MQTT代理的Python示例(https://github.com/aws/aws-iot-device-sdk-python),但它假定它知道完整的主题路径(例如,topic_id / command / unlock) 。

22.jpg

UDP日志文件

通过分析从UDP提取的日志,我们能够找到“影子/更新” MQTT主题的格式。但是,当尝试使用Python脚本订阅它时,它似乎已连接到MQTT代理,但是我们永远无法获得任何要发送或接收的消息。我们最好的猜测是,每个主题最多只能订阅一个,否则我们的代码就被破坏了。


我们一直在寻找另一种控制设备的方法。这使我们回到了Mongoose-OS论坛(在这里看到模式了吗?)。我们发现这篇文章解释了设备可以通过MQTT运行RPC命令。

23.jpg

通过MQTT进行RPC

对于攻击者而言,这比仅MQTT访问更好,因为它可以完全访问设备,包括证书,密钥,用户配置文件,WIFI密码等。此时,我们也可以使用RPC编写自定义代码或自定义固件。我们在此处(https://github.com/mongoose-os-libs/rpc-mqtt)找到了对此的官方Mongoose-OS支持,他们甚至还提供了AWS IOT的示例。


将其插入“ mos”命令后,我们能够在从中获取密钥的设备以及我们知道其MAC地址的任何其他设备上运行所有管理RPC命令。

24.jpg

在多个ATR实验室设备上运行RPC命令

通过查看发送给我们的两个iParcelBox,MAC地址只是略有不同,强烈建议它们可能是增量生成的。

  • 30AEA4C59D30

  • 30AEA4C59D6C

从理论上讲,随着MAC地址的增加,我们可以编写一个简单的脚本来遍历每个iParcelBoxes的MAC地址,找到连接到互联网的任何iParcelBox,并以我们想要的任何方式对其进行控制或修改。但是,最常见的攻击可能是针对性更强的攻击,攻击者希望窃取包裹甚至受害者的家庭WiFi凭据。攻击者可以使用“ airodump-ng”之类的工具进行简单的网络扫描,以找到目标iParcelbox的MAC地址。然后,在攻击者知道目标MAC地址之后,他们可以使用管理员凭据在MQTT上发起“ mos”命令,并执行针对GPIO(通用输入输出)引脚的“ GPIO.Toggle”命令,以控制锁定iParcelBox上的机制。切换按钮会反转状态,因此,如果iParcelBox被锁定,则GPIO切换按钮将为盒子解锁。如果攻击者有其他动机,他们还可以启动配置转储,以访问iParcelBox连接到的WiFi凭据。

25.jpg

扫描iParcelBoxes并使用RPC控制它们

方法2 – AWS错误配置

26.jpg

在撰写此博客时,我们要仔细检查SSL固定是否正确完成。在侦察过程中看到此帖子后,我们认为它是固定证书。我们使用Frida设置了一个带有证书取消固定器的Android。安装取消固定程序后,我们能够解密应用程序和AWS服务器之间的流量,但是无法解密从应用程序到iParcelBox的数据。如果您想了解如何在Android设备上取消固定证书,请遵循此技术。


接下来,我们重新运行没有Frida SSL Unpinner的iParcelBox应用程序,该应用程序返回相同的AWS服务器事务,这意味着未启用固定。我们浏览了一些捕获内容,发现了一些有趣的请求。

27.jpg

Cognito凭证SSL网络捕获

捕获中的“凭证”立即激起了我们的兴趣。它们由称为“ Cognito”的服务返回,该服务是一项AWS服务,允许应用程序和用户在短时间内访问AWS生态系统内的资源,并且对私有资源的访问受限。

28.jpg

AWS Cognito示例(照片来源:Amazon.com)

当应用程序想要访问AWS服务时,它可以要求特定任务的临时凭证。如果权限配置正确,则Cognito服务发出的凭据将允许应用程序或用户完成一项任务,并拒绝将凭据用于其他服务。


要使用这些凭证,我们需要AWS-CLI接口。值得庆幸的是,Amazon甚至拥有适用于AWS-CLI的Docker映像,这使我们的工作变得更加轻松。我们只是将从Cognito服务返回的凭据保存在“〜/ .aws”文件夹中。然后,我们检查了这些凭据的作用。

29.jpg

AWS-CLI窗命令

从Android应用程序捕获的凭据被赋予“ AppAuth_Role”。为了找出“ AppAuth_Role”可以访问的内容,我们使用凭证运行了一个云服务枚举。脚本可以在此处找到(https://github.com/NotSoSecure/cloud-service-enum),由NotSoSecure团队提供。AWS脚本未发现任何重大安全漏洞,并显示凭据已正确保护。但是,在查看接下来的几个网络捕获时,我们注意到这些凭据已用于访问DynamoDB数据库。

30.jpg检查用户是否订阅了高级服务

31.jpg

获取所有者的设备

阅读了一些DynamoDB文档之后,我们便可以进行数据库查询了。

32.jpg

DynamoDB查询


因为数据库的“主键”是“设备ID”,我们知道它只是iParcelBox的MAC地址,所以我们可以修改此查询并获取任何其他设备的数据库条目。尽管出于道德原因没有对此进行测试,但是我们怀疑我们可以使用此信息来访问MQTT服务。我们也没有尝试写入数据库,因为这是一个实时生产数据库,我们也不想破坏任何数据。


我们调查了试图触发更多数据库交互的Android应用程序,以查看发送了哪些其他查询,但仅限于以下内容:

  • 帐户-显示高级订阅信息

  • 所有者–显示每个iParcelBox的设备和来宾

  • 用户–用于保存每个iParcelBox的所有者(仅在设置过程中)

由于我们对数据库施加了自我限制,因此这些表都没有对我们有任何帮助。从那时起,我们开始查看Android应用程序的反汇编代码以获取更多线索。由于我们现在知道表名,因此我们搜索“ ClientID”,从而打开了Java文件“ DBConstants.class”。

33.jpg

常量文件从APK

尽管我们从未在网络流量中看到它们,但此常量文件为我们提供的信息是还有更多的数据库表和字段。“ TABLE_DEVICES_PASSWORD”从“ iParcelBox_devices”表中引起了我们的注意。


我们也在此表上测试了“ AppAuth_Role”凭据,该凭据已被接受。

34.jpg

从iParcelBox_devices表中请求信息

我们能够从MAC地址获取设备密码和序列号。回顾博客开头的“ iParcelBox设置信息”图像,以及它提到如何确保此信息安全的方式。之所以应确保此信息安全是因为,即使您知道MAC地址,序列号和密码(即使没有QR码),也可以通过“手动添加”按钮成为iParcelBox的所有者。

35.jpg

设置过程中的“手动添加”选项

利用这些信息,攻击者可以注册新的iParcelBox帐户,登录到应用程序,捕获Cognito凭据,开始“设置”过程,单击“手动添加”,然后输入从数据库返回的所有必需信息以获得完全控制权在任何iParcelBox上。由于“ AppAuth_Role”可以读取任何数据库条目,因此只需知道MAC地址即可完成所有操作。

36.jpg

设置iParcelBox所需的信息


结束语:

该项目从很早就从经典的硬件/ IOT设备研究项目转向了OSINT研究主题。事实证明,即使是在线数据卫生方面的简单错误,也可能向攻击者暴露关键细节,从而使攻击者能够缩小攻击媒介的范围或暴露诸如凭据之类的敏感信息。


由于这是iParcelBox的赞助项目,因此我们立即向公司报告了此情况。他们迅速更改了每个iParcelBox的管理员密码,并要求Mongoose-OS的开发人员进行更改,其中一台设备的AWS证书和私钥无法控制任何其他设备。该漏洞是在我们的供应商披露后的12小时内修补的,这使iParcelBox成为我们见过的修补程序的最高响应时间。我们已经测试了补丁程序,无法再控制其他设备,也无法使用旧的管理员密码在设置模式下访问设备。


iParcelBox还修复了Android应用程序无法正确固定证书的问题,并删除了对DynamoDB的所有直接调用。我们仍然能够使用Frida SSL取消固定程序解密一些流量,但是应用程序将冻结,我们认为这是由于MQTT代理不接受自定义证书。DynamoDB查询现在包装在API调用中,该API调用还会检查客户ID。这样可以防止某人使用其提取的Cognito凭据从其自身以外的任何设备获取信息。在API调用中包装数据库查询也是一种有效的安全解决方案,因为可以在提交数据库之前对所有数据进行解析,验证和清除。


我们希望为iParcelBox团队提供支持,因为他们在整个产品开发过程中都专注于安全性。从设备和论坛帖子中可以很容易看出,开发人员一直在努力使该设备从一开始就安全可靠,并且做得很好。默认情况下,所有非必需功能(如UART和蓝牙)均已关闭,并且使用SSL和闪存加密已清楚地表明了对数据保护的重视。攻击者可以从设备利用的攻击面并不多,可以很高兴地看到IOT设备朝着这个方向发展。

.
更多

1589982338979126.png


ots网络社区

www.ots-sec.cn

猜你喜欢
更多
联系方式
更多

投稿邮箱:1481840992@qq.com

交流群2群:622534175

ots网络社区3群:1078548359

关注我们
更多
技术支持: 建站ABC | 管理登录