Skip to content

Latest commit

 

History

History
530 lines (307 loc) · 37.4 KB

File metadata and controls

530 lines (307 loc) · 37.4 KB

五、利用物联网移动应用

在本章中,我们将介绍以下配方:

  • 获取物联网移动应用
  • 反编译 Android 应用
  • 解密 iOS 应用
  • 使用 MobSF 进行静态分析
  • 用 idb 分析 iOS 数据存储
  • 分析 Android 数据存储
  • 执行动态分析测试

在消费者和一些商业物联网设备中,有一个附带的移动应用用于实现某个目的。例如,移动应用可以向车队管理基础设施中的服务器报告分析数据,或者可以授予该应用启动汽车发动机的委托控制权。在每种情况下,数据都可能存储在移动应用中,并可被操纵以执行意外操作。为了开始发现漏洞和反向工程移动应用,在第 3 章中讨论的类似方法分析和利用**固件也可以应用于移动空间。必须首先获得申请;之后,可以对应用进行静态分析、动态分析,也可以在适用的情况下重新打包。本章将帮助评估物联网移动应用,以利用现场发现的常见漏洞。

介绍

在移动应用安全测试中,有四个阶段的方法,可按以下分类:

  • 应用映射:应用映射涉及应用的逻辑和应用的业务功能。将应用映射视为收集有关下一阶段中要使用的应用的信息。
  • 客户端攻击:客户端攻击涉及存储在应用中的数据以及如何从客户端操纵该数据。
  • 网络攻击:网络攻击与网络层相关,如 SSL/TLS 或 XMPP 协议数据。
  • 服务器攻击:服务器攻击适用于因 API 测试而暴露的 API 漏洞和后端服务器错误配置。

如果通过白盒或黑盒透视图进行测试,此方法可能会有所不同。从白盒和黑盒测试的角度来看,相关的是移动应用安全验证标准MASVS。MASV 旨在建立设计、利用和测试 iOS 和 Android 移动应用所需的安全需求框架(https://www.owasp.oimg/f/fe/MASVS_v0.9.3.pdf )。此外,影响 Android 和 iOS 应用的常见漏洞的趋势和模式已被识别并转化为 MASV 附带的检查表,测试人员和利用人员在评估应用时可以遵循该检查表( https://www.owasp.oimg/1/1b/Mobile_App_Security_Checklist_0.9.3.xlsx 。该清单还包含指向 OWASP 移动测试指南的链接,该指南仍在进行中,但还处于成熟阶段。MASV 和检查表指出了许多潜在的漏洞和缓解要求。物联网领域内一些最常见的漏洞包括:

  • 硬编码敏感值
  • 详细日志记录
  • 会话管理弱点
  • 敏感数据的缓存
  • 不安全数据存储
  • 数据泄漏
  • API 通信

这些常见类型的漏洞可能由于应用的类型(本机或混合)而出现,但也可能是通过糟糕的编码实践引入的。在本章中,将在两个移动平台上演示列出的许多常见漏洞。应用这些方法和检查表不在本书的范围内,但是在攻击物联网移动应用时,最好将其用作参考。为简单起见,我们将采用静态分析移动应用的方法,然后在运行时动态分析移动应用。首先,我们需要目标应用二进制文件来启动 IoT 移动应用的测试过程。

在本章中,我们将更加强调静态和动态测试,但也有运行时分析测试,它包括对目标应用进行检测和中断指向。

获取物联网移动应用

评估物联网设备移动应用的第一步是获取并安装目标平台的应用。通常,如果物联网设备有安卓应用,也有 iOS 应用可用。要为 Android 安装应用,需要使用 Google Play Store,该应用还可以共享有关该应用的基本信息。对于 iOS 应用,苹果的应用商店用于将应用安装到 iDevice。但是,原始应用二进制文件不可用,无法通过 Play Store 或 App Store 获得。应用二进制文件或软件包称为 Android 软件包或 APK,iOS 的iOS 应用商店软件包归档IPA)。如果您碰巧从白盒的角度测试应用,那么这些二进制文件将提供给您,而无需探索获取应用二进制文件的方法。如果您出于研究目的从黑盒的角度进行测试,您可能想知道我们将如何获得应用二进制文件。

怎么做。。。

在接下来的步骤中,我们将讨论获取 Android 和 iOS 应用的方法。

  1. Android 有很多第三方应用商店,可以用来下载 APK 文件。然而,当使用这些第三方应用商店时,需要考虑一些注意事项。有时,应用商店没有更新版本的应用,或者应用完全不正确。在安装 Play Store 版本之前,验证应用的哈希、版本和内容非常重要。一些第三方应用商店声称有一个你正在寻找的应用,但最终被伪装成需要不必要权限的间谍软件应用。从第三方应用商店下载 Android 应用最酷的部分是能够下载应用的旧版本及其历史发行说明。选择第三方应用商店,如https://apps.evozi.comhttps://apkpure.com/ ,搜索目标 Android 应用,下载 APK,如以下截图所示:

下一个屏幕截图显示从下载的斯巴鲁应用 https://app.evozi.com

  1. 对于 iOS 来说,从黑盒的角度获取 IPA 文件要困难得多。与 Android 相比,没有类似的第三方应用商店可供选择。这是因为 iOS 应用由苹果的 FairPlay DRM 加密。如果没有必要的工具,这有点困难。在随后的食谱中,将给出解密 iOS 应用的演练。如果您专注于 iOS 测试,请跳到解密 iOS 应用配方。

反编译 Android 应用

下载目标物联网应用和 APK 文件后,应用现在可以反编译以查看其内容。对于 Android 应用,这项任务可以在几分钟内完成。稍后,将更详细地介绍静态分析应用的自动化测试技术。反编译应用是对应用进行反向工程以操作其功能的第一步。应用也可以在修改后重新编译和打包,但这超出了我们的范围。

准备

要反编译 Android 应用,我们将使用 Enjarify 和 JD-GUI。Enjarify 将 Dalvik 字节码转换为 Java 字节码,用于使用 JD-GUI 进一步分析。JD-GUI 是用于查看 Java 代码的 Java 反编译器。这两种工具都包含在附带的虚拟机中:

Enjarify 确实需要 Python 3 作为依赖项。

怎么做。。。

  1. 首先,输入 Enjarify 文件夹路径并将 Enjarify 指向目标 APK。在本例中,APK 与 Enjarify 位于同一目录中:
$ bash enjarify.sh com.subaru.telematics.app.remote.apk 
Using python3 as Python interpreter
1000 classes processed
2000 classes processed
Output written to com.subaru.telematics.app.remote-enjarify.jar
2813 classes translated successfully, 0 classes had errors
  1. 打开 JD-GUI 并将其拖到创建的 JAR 文件 Enjarify 上:

  1. 现在可以阅读和理解 Java 类以进行进一步分析。例如,可以搜索使用rawQuery将数据保存到 SQLite 的实例,以识别 SQL 注入,如下面的屏幕截图所示。其他关键字,如*keys*execSQL*password*也是常用的搜索词:

  1. 这项技术已被用于定位硬编码的秘密,如嵌入在消费电子产品展CES)移动应用中的 iBeacons 值,用于清道夫狩猎大赛()http://www.ibeacon.com/the-beacons-at-ces-were-hacked/

  1. CES 的移动应用中发布了硬编码信标,每个人都可以玩,而无需在拉斯维加斯。很简单,对吧?拥有 Java 伪代码比 smali/baksmali 代码更容易阅读。如果使用模糊处理形式或应用使用 C/C++,情况可能并不总是如此,但这是特定于应用的。对如何获得应用功能的更多理解,可以通过运行时或动态分析进行测试和验证。

另见

解密 iOS 应用

由于 iOS 应用由苹果的 FairPlay DRM 加密,未加密版本无法通过第三方应用商店下载。要查看 iOS 应用的内容,必须首先对其进行解密和提取。虽然可以直接从 iTunes 下载加密的 IPA 文件,但使用 otool、lldb 和 dd 等工具手动解密应用是一个手动过程。谢天谢地,此过程已使用称为离合器 2 的工具实现了自动化。

Dumpdecrypted 是另一种工具,可用于将解密的 iOS 应用转储到文件中,但本章不使用。可通过位于的存储库找到已解密的转储文件 https://github.com/stefanesser/dumpdecrypted

准备

对于这个配方,将使用 otool,它包含在 XCode 的命令行工具中。安装 XCode 命令行工具可以通过在 OS X 终端中执行以下命令来完成:

$ xcode-select -install

离合器 2 将用于解密应用。可通过位于的 GitHub 存储库下载离合器 2https://github.com/KJCracks/Clutch 或通过 Cydia 在越狱设备上添加安装 http://cydia.iphonecake.com 作为来源,搜索离合器 2.0,如以下屏幕截图所示:

怎么做。。。

  1. 要确定应用是否加密,必须将 IPA 重命名为 ZIP 文件,并且应用二进制文件必须位于重命名的提取文件夹内。例如,对应用二进制文件本身而不是 IPA 文件运行以下命令,以检查应用是否加密。如果cryptid的值为1,则表示应用已加密:
$ mv MySubaru.ipa MySubaru.zip
$unzip MySubaru.zip
$cd Payload/MySubaru.app/
$ otool -l MySubaru | grep -A 4 cryptid
 cryptid 1
 cryptid 1

现在已经确定应用是加密的。手动解密应用超出范围,但是可以利用Clutch2自动执行应用解密过程。在没有任何参数的情况下运行Clutch2时,列出所有已安装的应用:

# Clutch2 
Installed apps:
1:   SUBARU STARLINK <com.subaru-global.infotainment.gen2>

  1. 接下来,使用-d标志并选择数字,转储要解密的应用。在这种情况下,要解密和转储的应用是第一位的:
# Clutch2 -d 1
Now dumping com.subaru-global.infotainment.gen2

DEBUG | ClutchBundle.m:-[ClutchBundle prepareForDump] [Line 30] | preparing for dump
<Redacted>
DUMP | <ARMDumper: 0x14695030> armv7 <STARLINK> ASLR slide: 0x4f000
Finished dumping binary <STARLINK> armv7 with result: 1
DONE: /private/var/mobile/Documents/Dumped/com.subaru-global.infotainment.gen2-iOS6.1-(Clutch-2.0 RC4).ipa
DEBUG | FinalizeDumpOperation.m:__30-[FinalizeDumpOperation start]_block_invoke_2 [Line 60] | ending the thread bye bye
Finished dumping com.subaru-global.infotainment.gen2 in 35.2 seconds
  1. 应用现在已解密。使用scp将解密后的应用从 iDevice 转移到主机,如下所示:
# scp -v '/private/var/mobile/Documents/Dumped/com.subaru-global.infotainment.gen2-iOS6.1-(Clutch-2.0 RC4).ipa' Tester@<HostIPAddress>:~/ 
  1. 将解密的 IPA 文件重命名为 ZIP,类似于在上一练习中验证应用是否加密所采取的步骤:
$ mv com.subaru-global.infotainment.gen2-iOS6.1-\(Clutch-2.0\ RC4\).ipa com.subaru-global.infotainment.gen2-iOS6.1-\(Clutch-2.0\ RC4\).zip 
Unzip the folder and a new "Payload" directory will be created.  
$ unzip com.subaru-global.infotainment.gen2-iOS6.1-\(Clutch-2.0\ RC4\).zip 
  1. 更改到应用二进制文件所在的Payload/STARLINK.app目录:
$ cd Payload/STARLINK.app/ 
$ ls -lah STARLINK  
-rwxrwxrwx  1 Tester  staff    30M Jun  7 17:50 STARLINK 
  1. 应用二进制文件的内容可以使用诸如 Hopper 之类的工具进行分解,以便进一步分析。类信息也可以通过class-dump转储,并通过反汇编程序进行进一步分析。例如,现在可以通过 Hopper 检查如何在应用的saveCredentialsToKeychain类中存储凭据,如以下屏幕截图所示:

通过对应用的类和方法的更多了解,可以通过动态或运行时分析操作和测试应用的功能。本章后面将介绍动态测试。

另见

使用 MobSF 进行静态分析

鉴于 Android 和 iOS 的应用二进制文件已经获得,我们可以使用自动化技术进行进一步的分析。移动安全框架MobSF)是一个伟大的开源 Python 工具,可以用于 Android 和 iOS。MobSF 可以为我们自动化几个特性和功能,特别是 Android 应用。此配方将演示 MobSF 在 Android 和 iOS 上的自动静态分析功能。静态分析通常需要访问源代码,然而,反编译 Android 和 iOS 应用可以为我们提供一种接近原始源代码的伪代码。

准备

MobSF 包含在附带的虚拟机中,版本为 0.9.5.2 beta。MobSF 不断更新,可通过下载 https://github.com/MobSF/Mobile-Security-Framework-MobSF 。确保已按照 MobSF 文档中列出的方式安装所有依赖项。

确保已获得目标 APK 和解密的 iOS IPA 应用。MobSF 不会自动解密 iOS 应用。将 IPA 文件重命名为 ZIP 时,MobSF 需要解密的 IPA 文件来分析应用,而不是应用负载中的解密二进制文件,因为 MobSF 会自动执行此步骤(MobSF 是开源的,可以修改为使用原始二进制文件而不是 IPA)。在 iOS 设备上使用-d标志时,离合器 2 可以转储 IPA 文件。

怎么做。。。

  1. 要启动 MobSF,请在终端中运行以下命令:
$ python manage.py runserver

  1. MobSF 的 web UI 应出现在您的浏览器中的地址127.0.0.1:8000,如以下屏幕截图所示:

安卓静态分析

  1. 首先,我们将分析一个 Android 应用。将目标 APK 拖动到 MobSF 的 web 界面,MobSF 将自动反编译并分析应用的内容。在这个界面中,核心 Android 组件(活动、服务、接收者和提供者)与应用的元数据一起列出。

MobSF 允许灵活地使用不同的 Java 反编译器和 Dex-to-JAR 转换器。查看MobSF/settings.py配置文件,了解如何修改这些设置。

  1. 向下滚动时,MobSF 会分析应用权限、Android API 使用情况、可浏览活动以及许多其他可能有用的静态分析功能。我们将要研究的领域,可能是最有用的,是代码分析小节。在这里,MobSF 慷慨地标记了糟糕的编码实践以及潜在的易受攻击的代码片段:

  1. 要使用和查找的最方便的部分之一是文件可能包含硬编码敏感信息,如用户名、密码、密钥等。以下是 MobSF 标记的 Java 类示例,其中可能包含应用中的硬编码数据:

  1. 在移动应用中,找到硬编码的 OAuthclient_secret值和云提供商 API 帐户凭据是很常见的。本章前面给出了一个与 CES 硬编码 iBeacons 类似的示例。选择一个标记的 Java 类时,将显示 Java 伪代码,其中显示硬编码值,如以下屏幕截图中的值:

2016 年,三星在其 SmartThings 移动应用中硬编码了client_secret,允许攻击者持有代币进入门锁。与此事件相关的其他详细信息可在以下文件中找到: https://web.eecs.umich.edu/~earlenimg/papers/smartthings_sp16.pdf

  1. 有了 MobSF,测试 Android 应用就轻而易举了。另一方面,iOS 应用并不像 Android 静态分析 MobSF 提供的那样简单。

静态分析

  1. MobSF 确实为 iOS 应用的静态分析提供了有用的功能。像安卓一样,解密后的 iOS IPA 可以拖到 MobSF 的 web 界面上。MobSF 然后将 IPA 重命名为 ZIP,提取内容,分析 plist 文件,检查应用请求的权限,并从应用中转储类信息,等等。以下屏幕截图显示了解密后的 iOS IPA 被拖到 MobSF 后的登录页。MobSF 提供了三个主要选项,包括查看Info.plist、字符串和类转储:

确保您在位于MobSF/settings.py的 MobSF 设置文件中调整您的class-dump-z路径,并查找CLASSDUMPZ_BINARY。在我的例子中,class-dump-z的路径是/opt/iOSOpenDev/bin/class-dump-z,但是使用常规的class-dump应该和/opt/iOSOpenDev/bin/class-dump一样有效。

  1. 您首先要查看的地方是Info.plist文件。Info.plist文件包含与应用相关的基本信息,如权限、IPC URL 方案以及 MobSF 在其界面中为我们提取的应用传输安全设置。以下屏幕截图显示了 MobSF 中的Info.plist文件:

  1. 接下来,选择字符串按钮,该按钮以二进制形式显示字符串,如以下屏幕截图所示:

  1. 请注意,有一个 ConsumerCret 作为字符串,它也是在 Android 应用中发现的。通常,如果一个版本的应用包含硬编码值,另一个版本也可能包含硬编码值。在我们查看了 MobSF 为我们提供的类信息之后,我们将在稍后验证这一点。单击查看类转储以列出应用的类详细信息。如果已正确设置类转储二进制设置,则应打开一个单独的选项卡并显示类,如以下屏幕截图所示:

  1. 利用可用的类详细信息,我们可以精确定位应用中要分析的功能。例如,我们可以搜索类内的密码字符串,以便在类似 Hopper 的反汇编程序中进行分析。下面的屏幕截图显示了正在使用的类addBasicAuthenticationHeaderWithUsername

  1. addBasicAuthenticationHeaderWithUsername可以在料斗中进一步分析,查看其伪代码如下。只需在字符串选项卡中搜索类addBasicAuthenticationHeaderWithUsername即可查看其内容:

在“字符串”选项卡中查看类的内容

  1. 因为我们在 Hopper 中,并且在前面的步骤中找到了 ConsumerCret,所以我们可以搜索这个字符串,以检查它是否也在 iOS 应用中硬编码。下面是一个屏幕截图,显示了与 Android 应用相同的硬编码值。其中一个硬编码的秘密值以 c4d5 结尾,在屏幕截图中突出显示:

硬编码秘密值

  1. 在应用中定位这些硬编码值时,测试的下一个常见步骤是通过动态分析验证它们的影响。本章后面将介绍动态分析测试。

还有更多。。。

在本节中,我们介绍了 Android 和 iOS 应用的静态分析。我们没有介绍运行时分析测试,这需要在应用执行期间挂钩应用类和函数。根据您愿意花费多少时间和精力测试一个移动应用,这可能并不总是在您的范围内。运行时分析对于验证客户端安全控制非常有用,例如绕过 pin 码锁定屏幕或强制登录。《OWASP 测试指南》提供了有关 Android 和 iOS 运行时分析技术的详细信息。有关更多信息,请访问以下链接:

用 idb 分析 iOS 数据存储

不幸的是,iOS 利用者往往忽视苹果提供的数据存储 API 控件。这会导致通过明文数据库(包括 realm DBs)、plist 文件(属性列表)、缓存、键盘和其他存储位置泄漏数据。有时,应用采用的混合框架鼓励这种行为以提高应用的性能,但没有列出安全影响。根据混合框架和自定义模块的不同,可能需要插件来清除缓存等位置,这会增加利用人员的复杂性。本节将帮助您分析物联网 iOS 应用的数据存储。

准备

对于这个配方,需要一个已经越狱的 iDevice,以及一个名为 idb 的免费工具。Idb 是一个在 OSX 上运行的免费工具,Ubuntu 用于简化常见的 iOS 应用安全评估任务。它目前安装在附带的虚拟机中,但也可以通过访问 idb 的网页手动安装 http://www.idbtool.com/ 。如果您使用gem来管理 Ruby,那么可以使用gem install idb安装 idb。

在撰写本文时,idb 不支持 iOS 10 应用。

要查看 SQLite 数据库条目,请通过下载并安装 SQLite 浏览器 http://sqlitebrowser.org 。SQLite 浏览器也包含在为本书提供的 VM 中。

怎么做。。。

  1. 从终端启动 idb,简单执行idb,出现用户界面:

  1. 接下来,选择连接到 USB/SSH 设备:

  1. 如果这是您第一次使用 idb,则需要在您的越狱设备上安装几个软件包,如果 idb 可以通过 USB 或 SSH 访问设备,idb 将自行安装这些软件包。以下屏幕截图中列出了这些软件包。

越狱 iDevices 的默认用户名和密码为 alpine。

  1. 如果安装了所有必需的软件包,请从应用选择菜单中选择一个应用。在这种情况下,选择 com.skybell.doorbell:

  1. 选择 SkyBell 应用后,我们现在可以关注应用内容以及应用存储数据的方式。有几个功能可用于自动化 iOS 应用评估任务,但是在本演示中,将分析存储。要分析应用的数据存储,请选择存储选项卡,选择 plists 选项卡,然后按刷新按钮:

  1. 出现了许多文件,但其中许多与我们的目的无关。最初要考虑的文件是应用包目录内的 OutT0X 文件以及应用在运行时创建的任何首选文件。本例中的首选项文件列为 com.skybell.doorbell.plist。我们希望在明文 plist 文件中查找有关公司本身或用户的任何个人或敏感数据。如果我们双击打开首选项文件,我们将看到 OAuthaccess_tokensrefresh_tokens存储在未受保护的存储中(CVE-2017-6082)。这些明文标记可以在下面的屏幕截图中看到。通常情况下,access_tokens会持续很长时间以改善用户体验,因此无需在每次打开应用时登录:

  1. 当会话令牌为明文时,数据可能无法安全地存储在多个区域中。查找存储在磁盘上的敏感数据的常见区域是应用启动时在应用的data目录中生成的任何类型的数据库或文件。Idb 有能力分析每个领域。我们将查看 Cache.db 选项卡,看看找到了什么。

导航到 Cache.dbs 选项卡,选择刷新按钮,然后双击打开 Cache.db 条目:

  1. 如以下屏幕截图所示,此 SQLite 数据库中有许多表:

  1. 这些表包含可以作为文本查看的 BLOB 数据。事实证明,该应用缓存所有请求和响应,包括个人详细信息和令牌数据(CVE-2017-6084):

通过 idb 的设置(例如,~/.idb/settings.yml)指定编辑器路径,可以使用自定义 SQLite 外部编辑器。

在启用自动备份设置的情况下,将受害者的手机插入 iTunes 时,攻击者可能会窃取这些数据。攻击者需要插入测试设备并将其恢复到受害者的备份。另一种技术包括使用诸如 iFunbox 之类的工具,该工具允许访问非越狱设备的文件系统(http://www.i-funbox.com/ 。此时,攻击者可以将应用的Cache.db、plists 和 SQLite 数据库传输到外部,以获得对会话令牌和其他个人帐户信息的访问。在这种情况下,攻击者可以通过视频门铃查看视频源,并通过调整运动设置或将视频源共享给外部帐户来更改其配置。

有了这些知识,就可以在不代理连接的情况下查看会话管理控件和 API 数据。会话到期和随机化测试可根据上述移动应用安全检查表进行分析。可以修改plist文件或Cache.db文件中的数据并上传回设备,以观察应用与这些文件的信任关系。

还有更多。。。

可以分析本节未涉及的其他数据存储位置。诸如密钥链、本地存储、领域数据库、日志、BinaryCookie 和更多存储位置等项目没有讨论。查看 OWASP 的移动安全测试指南,了解有关测试 iOS 应用中数据存储缺陷的技术的更多详细信息:https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06d-Testing-Data-Storage.md

另见

分析 Android 数据存储

有几种方法可以在运行时测试 Android 数据存储。免费的,以及商业的 Android 测试发行版可以帮助自动查看和修改常见的数据存储文件位置。在手动方法中,我们希望在应用运行时分析以下常见存储位置:

  • /data/data/<package_name>/
  • /data/data/<package_name>/databases
  • /data/data/<package_name>/shared_prefs
  • /data/data<package_name>/files/<dbfilename>.realm
  • /data/data/<package name>/app_webview/
    • 曲奇饼
    • 本地存储
    • 网络数据
  • /sdcard/Android/data/<package_name>

使用 Android,应用的文件结构不会改变,这使得手动分析更容易。此配方将帮助您分析物联网 Android 应用的数据存储。

准备

此配方需要以下项目:

怎么做。。。

  1. 确保使用以下命令连接测试 Android 设备或模拟器:
# adb devices
List of devices attached 
0a84ca7c device

  1. 连接到测试 Android 设备的控制台,并使用以下 ADB 命令切换到 root 用户:
# adb shell
shell@flo:/ $ su
root@flo:/ #
  1. 按如下所示更改目标应用的目录:
# cd data/data/com.skybell.app/
# ls -al
    drwxrwx--x u0_a92   u0_a92            2017-06-23 14:59 app_7122720ab47b4f6c8ad99ba61f521dd2515d6767-01b7-49e5-8273-c8d11b0f331d
    drwxrwx--x u0_a92   u0_a92            2017-01-30 18:46 cache
    drwxrwx--x u0_a92   u0_a92            2017-01-17 16:41 files
    lrwxrwxrwx install  install           2017-06-23 14:58 lib -> /data/app/com.skybell.app-1/lib/arm
    drwxrwx--x u0_a92   u0_a92            2017-01-17 16:41 no_backup
    drwxrwx--x u0_a92   u0_a92            2017-06-23 15:31 shared_prefs

  1. 首先,浏览到shared_prefs目录,列出每个文件,并查看可用的首选项文件,如以下屏幕截图所示:

似乎有特殊的编码;应用运行的字符串可能与登录凭据有关,但它确实显示了帐户的用户名。

  1. 接下来,我们将检查com.skybell.app.networking.oauth.oauth_shared_preferences_key.xml文件,如下面的屏幕截图所示:

  1. 我们的帐户 OAuth 令牌似乎以明文形式存储,与我们在 iOS 应用中看到的类似。有一个可用的files目录,其中可能有可以查看的领域数据库文件。切换到files目录并列出文件,如下图所示:

  1. 应用似乎利用了一个领域数据库。注意领域数据库所在的目录,并使用以下adb命令将文件拉至主机:
adb pull data/data/com.skybell.app/files/default.realm /path/to/store/realdb

在撰写本文时,只能使用 App Store 中提供的真实浏览器在 OS X 计算机上查看领域数据库。Android 和 iOS 有一些非官方的真实浏览器需要从源代码构建。有关领域数据库的更多详细信息,请访问http://news.realm.io/news/realm-browser-tutorial/

  1. 双击default.realm文件,将在 Real Browser 中打开 Realm 数据库,如下图所示:

DeviceRecord 模型说明门铃的名称和状态(无论是否在线),而 DeviceRecordActivity 模型列出事件、事件的时间戳和事件的缩略图。这是一种数据泄漏,可以通过将安卓设备备份到计算机并像 iPhone 一样进行恢复,或者通过 ADB(如果启用)以同样的方式提取数据来利用。不幸的是,此应用没有在AndroidManifest.xml中标记[android:allowBackup=false],这本可以缓解此特定问题,但在这种情况下,存储使客户面临风险或涉及隐私问题的数据仍然是不好的做法。

另见

执行动态分析测试

在这个阶段,我们已经静态地分析和评估了示例物联网移动应用中数据的存储方式。我们还没有查看应用和服务器之间发送的 API 流量。在运行时查看和篡改应用通信称为动态分析。动态分析测试侧重于在应用执行期间对其进行评估。动态分析是在移动平台层以及移动应用的后端服务和 API 上进行的,在这些应用中可以分析请求和响应。在此配方中,我们将为 iOS 设置一个动态分析测试环境,并引导您完成一些测试用例。

准备

对于此配方,将使用 Burp 套件和/或 OWASP ZAP 来观察应用通信。执行此配方还需要访问 iDevice 和 Android 设备。iDevice 和 Android 设备不必被越狱或扎根,这是查看应用通信的好部分。虽然这些步骤适用于这两种移动平台,但本配方中的示例仅适用于 iOS。

怎么做。。。

  1. 与配置 web 应用测试环境一样,ZAP 和 Burp 套件的 CA 证书需要安装在越狱设备上,以代理HTTPS请求。这可以通过调整移动设备的 Wi-Fi 代理设置以指向 Burp Suite 侦听器的 IP 和端口来实现,如以下屏幕截图所示:

下面的屏幕截图显示了如何为 iOS 设备配置代理设置,以指向您的 Burp 代理侦听器。在这种情况下,我的 Burp 代理正在侦听 IP 地址192.168.2.183和端口8080

  1. 接下来,导航到 Burp 的 IP,并使用/cert作为 URL 路径的端口,将 Burp CA 证书添加到设备中。在这种情况下,Burp 的地址为http://192.168.2.183:8080/cert,如下图所示:

  1. 一旦执行,iOS 将询问您是否要为 Burp 的 CA 证书安装配置文件,如下图所示。选择安装,HTTPS流量现在可以通过 Burp 套件进行分析。

下面的屏幕截图显示了通过我们的 Burp suite 代理从我们的移动设备发出的HTTPS请求。

通过 Burp 套件代理的 HTTPS 请求

  1. Android 设备也可以采取类似的步骤。我们将演示如何设置 ZAP 的 CA 证书。首先,通过导航到工具|选项|动态 SSL 证书导出 ZAP 的证书。将证书保存在方便的位置,以便传输到 Android 设备:

  1. ZAPCert需要下载到 Android 设备上。有几种方法可以帮助满足此要求。使用 Python 的SimpleHTTPServer是一种快速方便的文件传输技巧。如果您使用的是基于 Nix 的操作系统,请从证书所在的目录运行以下命令:
$ python -m SimpleHTTPServer 1111
  1. Python Web 服务器现在将在端口1111上运行。在 Android 设备上,打开浏览器并导航到侦听 Web 服务器。在本例中,地址为http://192.168.2.186:1111,如下图所示:

  1. 将证书下载到 Android 设备。在 Android 设备上,导航至设置|安全|从存储安装,下载文件夹应出现,如以下屏幕截图所示:

  1. 选择 ZAP 的证书并命名证书,如以下屏幕截图所示:

  1. 导航到无线设置并将代理设置修改为 ZAP 代理侦听器:

  1. 导航到目标物联网移动应用并观察HTTPS请求和响应填充 ZAP 的历史记录选项卡:

  1. Android 和 iDevice 都设置为代理应用请求和响应。通过这种访问,可以对注入缺陷的参数进行模糊化(如果测试已获得授权),并且可以测试应用的业务逻辑缺陷。例如,在从我们的目标门铃观看视频时代理请求和响应,我们注意到一个access_token作为 URL 参数发送到指向视频 MP4 的GET请求中(CVE-2017-6085)。将此GET请求复制到我们的剪贴板,并将其粘贴到浏览器中,即可在无需用户名或密码的情况下下载 MP4 视频,如下图所示:

不带用户名或密码的 MP4 视频下载

  1. 然后将请求复制到我们的剪贴板:

  1. 将复制的 URL 粘贴到浏览器,并观察视频门铃事件自动下载到本地计算机:

在浏览器中请求复制的 URL 后,浏览器应自动询问将下载的视频保存到本地计算机的何处:

该视频现在以.mp4的形式下载,并可在以下屏幕截图中查看:

  1. 请记住,我们没有输入任何用户名或密码来下载和观看此视频。这表明门铃制造商对用户存在访问控制问题,也可能表明产品中存在其他漏洞。对于视频门铃来说,从安全和隐私角度来看,在没有凭据的情况下访问视频源是一种风险。仅在这个发现中就可以识别出几个漏洞,其中包括将会话令牌作为GET请求发送、缺少令牌过期以及访问控制不足。攻击者可以通过社会工程或 MITM 技术获得必要的access_token。作为此发现的后续,可以使用外部用户帐户执行其他访问控制测试用例。

另见