iOS Hacking 渗透iOS应用程序初学者指南[2022版]

iOS Hacking 渗透iOS应用程序初学者指南[2022版]

H3ll0 fr13nds!我的第一篇文章将是关于 iOS 黑客的,这是我目前正在研究的一个主题,所以这将是我在研究中发现的所有信息的一种收集。必须注意的是,我不会使用任何 MacOS 工具,因为用于此任务的计算机将是Linux主机,特别是基于 Debian 的发行版,在本例中为 Kali Linux。我还将使用“ checkra1n ”进行设备越狱,但还有其他替代方案,例如“unc0ver”或“Taurine”,因此只需选择最适合您的设备或您喜欢的那个即可。作为背景,我的设备是 iPhone 6s,截至 2022 年 3 月更新到最新的 14.x iOS 版本(iOS 14.8)。据我所知,目前还没有适用于 iOS 15 的完整越狱。

这篇文章纯粹是教育性的,仅用于道德黑客目的。如果您发现任何错误或认为我应该在这篇文章中改进某些内容,请告诉我!:)


iOS 设备越狱

所有移动设备都有制造商设置的限制,阻止最终用户安装某些组件或应用程序、访问低级资源、调整配置……越狱是一种提升权限以消除这些限制并能够在设备上执行任何所需操作的方法iOS 设备。它的 Android 等效项称为“Rooting”。

警告!Apple 警告用户,越狱他们的设备会导致他们使产品保修失效,因此请继续自担风险,并且不要在您的主要 Apple 设备上执行此操作。

为了从 Linux 主机执行设备越狱,我发现需要一组库才能正确检测到设备。请记住,根据您的 Linux 安装,可能不需要这些,但这些对我有用:

sudo apt install ifuse usbmuxd libimobiledevice libimobiledevice-utils libplist-utils ideviceinstaller python3-imobiledevice python3-plist python3-libplist (and/or libplist3)

Checkra1n

允许 iOS 设备越狱的程序之一是“checkra1n”。这种越狱方法需要主机和与之连接的 iOS 设备。在这种情况下,主机将是 Linux 主机,推荐的发行版是基于 Debian 的发行版。网站中列出了下载它的步骤,提供了使用 repo 或下载应用程序二进制文件的选项。我遵循了回购方法:

echo 'deb https://assets.checkra.in/debian /' | sudo tee /etc/apt/sources.list.d/checkra1n.list
sudo apt-key adv --fetch-keys https://assets.checkra.in/debian/archive.key
sudo apt-get update
sudo apt-get install checkra1n

下载后,请确保以管理员权限启动它,否则一旦进入恢复模式,它就不会检测到您的设备[不要像我一样花一整天时间想知道出了什么问题,最终发现我只是愚蠢的] .

启动 gui 版本:

sudo checkra1n --gui &

例如,如果您的设备版本不支持/未经测试,它会上传到最新的 14.x iOS 版本和我的一样,越狱仍然可以执行(目前在 iOS 15 中除外),因为这种方法利用了 BootROM 中的漏洞(“checkm8”),因此无法通过软件更新修补它,因此越狱很可能也可以工作。为了让 checkra1n 越狱不受支持/未经测试的版本,只需转到“选项”并选择“允许未经测试的 iOS/iPAD/tvOS 版本”。如果您的设备是 OS 14.0 及更高版本的 A11 设备,则需要删除密码并在选项中启用“跳过 A11 BPR 检查”。请记住,A7 设备目前无法在 Linux 版本上运行。有关特定设备和 iOS 版本兼容性的更多更新信息可以在Checkra1n 的官方网站中找到。

现在,只需按照 checkra1n 提供的步骤即可完成越狱。请记住,checkra1n 执行的是半绑定越狱,这意味着如果设备重新启动,设备将完全可用于正常的 iOS 操作和应用程序,但需要从计算机再次执行越狱过程以访问其根目录职能。一旦再次越狱,它将保留所有以前越狱的应用程序和配置。

注意:您的主机必须是 Linux 才能使此方法正常工作。如果您尝试在 Windows 主机中从 Linux 虚拟机执行越狱,一些设备连接错误可能会出现在越狱中并且相对难以纠正。如果您没有 Linux 主机,我的建议是使用 Kali Live-USB 执行越狱。


设备正确越狱后,“checkra1n”应用程序应出现在设备上。如果您的设备尚未连接到 wifi,请连接它并从“checkra1n”应用程序下载“Cydia”。

Cydia Impactor

Cydia 是用于越狱设备的 AppStore,其中包含设备的高级应用程序。可以从 Cydia 下载大量有趣的应用程序。我要谈论的是迄今为止我需要的那些,请记住,如果其中一个不适合您,可能会有替代品。

OpenSSH

OpenSSH 将为越狱设备启用 SSH。所有 iOS 设备的默认密码都是“alpine”,因此建议的步骤是立即更改 SSH 密码。为了进一步安全,我建议的另一个步骤是禁用密码身份验证,仅允许 SSH 密钥身份验证。

u/4z0k 的这篇 reddit 帖子介绍了如何保护 iOS 设备的 SSH 连接(尽管我仍然需要尝试一下,所以还要寻找其他额外资源):保护和自定义您的 SSH 安装和端口!- Reddit

Filza

Filza 将允许您浏览设备中的所有文件。除其他外,这将允许我们导航到下载的 IPA 并将它们与列表中的下一个应用程序一起安装。

AppSync Unified

需要 AppSync Unified 才能正确安装下载的临时签名、假签名或未签名的 IPA。要通过 Cydia 下载它,请按照以下步骤操作:

  1. 转到“来源”选项卡>“编辑”>“添加”
  2. 添加最新的 AppSync 统一存储库:“https://cydia.akemi.ai”(截至 2022 年 3 月)
  3. 添加存储库后,它将显示为“Karen Repo”,并且该应用程序应显示在“搜索”选项卡中

实际示例:将未签名的应用程序下载到设备中并安装

  1. 使用 ‘scp’ 将文件复制到设备中所需的文件夹,例如:scp <file> root@<iDevice-IP>:/User/Downloads
  2. 打开 Filza 并导航到文件
  3. 单击 IPA 文件并选择“安装”

伟大的!现在您已将未签名的应用程序正确安装到设备上:)

Cycript

能够通过连接到应用程序并能够注入 JavaScript 代码来执行动态分析。它是通过 SSH 访问的。深入的信息可以在动态分析部分找到。

Frida

Frida 是另一个应用程序,它允许您通过连接到应用程序并能够注入 JavaScript 代码来执行动态分析。可以通过将设备连接到主机或通过 SSH 访问它。这是我目前个人最喜欢的,因为它在使用其扩展名时具有扩展功能:‘Objection’。深入的信息可以在动态分析部分找到。

要通过 Cydia 下载,请按照以下步骤操作:

  1. 转到“来源”选项卡>“编辑”>“添加”
  2. 添加最新的 Frida 存储库:“https://build.frida.re”(截至 2022 年 3 月)
  3. 添加存储库后,该应用程序应显示在“搜索”选项卡中

SSL Kill Switch 2

针对应用程序通信劫持的常见保护措施是证书固定。有很多方法可以绕过这个控制,我们将在动态分析部分看到其中的几种,但最简单的方法是下载并激活这个应用程序。

要下载它,请访问SSL Kill Switch 2 GitHub 页面,下载 .IPA 文件并从 Filza 安装它。

Liberty Lite

另一种针对应用程序黑客的常见保护措施是实施越狱控制。根据所使用控件的类型和质量,有许多不同的方法可以尝试绕过它们,最简单的方法之一是通过 Cydia 下载和激活此应用程序。其他绕过它的方法也可以在动态分析部分中找到。

要通过 Cydia 下载,请按照以下步骤操作:

  1. 转到“来源”选项卡>“编辑”>“添加”
  2. 添加最新的 Liberty Lite 存储库:“https://ryleyangus.com/repo/”(截至 2022 年 3 月)
  3. 添加存储库后,该应用程序应显示在“搜索”选项卡中

Darwin CC

该软件包将安装一系列有用的命令行工具,例如“otool”或“nm”。

该软件包将安装一系列有用的命令行工具,例如“top”、“whois”或“cURL”。如果由于依赖于“gdb”而与安装发生冲突,只需将“http://cydia.radare.org”添加到 repo 源并从那里安装“gdb”。


静态分析 101(Static Analysis 101)

应用程序的静态分析主要侧重于在执行之前评估可执行文件本身及其配置,以尝试发现错误配置或可能存在的漏洞功能。在 iOS 中,应用程序被编译为在设备上本地执行,因此,在高级 Objective-C 中进行反编译/逆向是不可能的。但是可以将其反转为机器级汇编代码,尽管需要进一步的汇编和反转技能才能开始理解代码。

初始应用二进制侦察

iOS 应用程序二进制文件

iOS 应用程序二进制文件应该有一些进一步的安全措施。应用程序二进制文件位于应用程序目录中,该目录通常位于“/private/var/containers/Bundle/Application/”中。

  • PIE (Position Independent Executable):启用后,应用程序每次启动时都会加载到随机内存地址中,这使得预测其初始内存地址变得更加困难。
otool -hv <app-binary> | grep PIE # It should include the PIE flag
  • 堆栈金丝雀:为了验证堆栈的完整性,在调用函数之前将“金丝雀”值放置在堆栈上,并在函数结束后再次验证。
otool -I -v <app-binary> | grep stack_chk # It should include the symbols: stack_chk_guard and stack_chk_fail
  • ARC(自动引用计数):防止常见的内存损坏缺陷
otool -I -v <app-binary> | grep objc_release # It should include the _objc_release symbol
  • Encrypted Binary : 二进制文件应该被加密
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # The cryptid should be 1

应用解密

要对应用程序执行逆向工程,我们需要访问未加密的二进制副本。如果二进制文件是加密的,有几种方法可以解密它,但我个人只使用过’ frida-ios-dump ‘。执行此操作的步骤以及另一种解密二进制文件的方法可以在此处找到:解密 iOS 应用程序:3 种方法。如果 Frida 是首选方法,请确保在设备上安装了 Frida。

获得解密后的ipa后,将其扩展名更改为“zip”并解压缩以分析其内部文件。

应用程序文件系统中的敏感信息

识别硬编码敏感信息的一个好方法是在应用程序文件系统的文件中查找通常敏感的值,例如 IP、电子邮件地址……这可以通过“字符串”和/或“grep”以及一点点轻松完成的正则表达式。

strings <filename>

grep -Eo '<regex-expression>' -r *

正则表达式示例:

IPv4: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} or ^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}$

Email Addresses: [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ or ^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}$

Visa Card Numbers: \b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b

IBAN: [a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}

Base64: (?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$

URLs: (?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()]+|\(([^\s()]+|(\([^\s()]+\)))*\))+(?:\(([^\s()]+|(\([^\s()]+\)))*\)|[^\s`!()\[\]{};:'".,?«»“”‘’]))

此外,可以在文件系统中找到具有潜在敏感信息的文件,特别是那些具有以下扩展名的文件:plist、sql、xml、localstorage、db……这些可以通过简单的“查找”命令轻松找到:

find . -iname "*<extension>"

列表文件

iOS 将应用配置数据存储在“plist”文件中。这些文件可以是二进制或 XML 格式,但我们需要它是 XML 格式以便我们能够轻松读取它,因此如果“plist”文件是二进制格式,请复制该文件并运行plutil -convert xml1 <duplicated-file>.plist. 现在,可以在“plist”文件中分析错误配置:

  • 识别 URL 处理程序:如果应用程序使用自定义 URL,服务器可能无法正确解析其内容,从而导致进一步的攻击。
  • 识别 API 密钥或硬编码凭证
  • 识别内部路径:开发人员可能留下了一些内部路径,可以提供有关其计算机的信息
  • 识别错误配置的应用程序传输安全设置:如果应用程序允许在应用程序中加载任意 URL(应用程序传输安全设置设置为 YES),它可能会导致应用程序中的恶意行为。

文件系统校验和

iOS 应用程序应验证文件系统内容的更改。尝试更改您可能找到的文件中的一些值,例如,“sqlite”数据库文件:

sqlite3 <file>.sqlite
> (perform the needed SQL recon)
> update <table> set <field>='<value>' WHERE <condition>

保存文件并重新启动应用程序,如果正确显示新设置的值,则应用程序不会验证文件系统的校验和。

进一步的分析

  • 检查日志 (ASL) 消息:Apple 系统日志 (ASL) 的内容可以由任何应用程序检索而无需任何进一步的权限,因此日志中不能有任何关于应用程序或其用户的敏感信息。
idevice_id --list # To find the device ID 
idevicesyslog -u <id> (| grep <app>) # To get the device logs
  • 密码存储:以下是处理应用程序密码的从最差到最佳方法的快速指南。
    • 将密码作为明文保存在“NSUserDefaults”对象或任何其他文件存储中
    • 在钥匙串中存储明文密码
    • 将加密密码存储在钥匙串中
    • 使用密码进行初始身份验证,然后颁发特定于设备的密钥,而不是保存密码
    • 使用限制可访问性的短期身份验证令牌,因此无需存储密码
      iOS Keychain 提供了一种安全的方式来存储敏感数据,这些数据使用以下类结构进行保护:
    • kSecAttrAccessibleWhenUnlocked:文件以加密方式存储,在设备启动或锁定时无法读取。
    • kSecAttrAccessibleAfterFirstUnlock:在下次重新启动之前,该文件仍然可以访问。推荐用于后台应用程序访问的项目。
    • kSecAttrAccessibleAlways:即使设备被锁定,也可以随时读取数据。在任何情况下都不建议这样做。
    • kSecAttrAccesibleWhenPasscodeSetThisDeviceOnly:只有在设备解锁时才能访问数据。

逆向工程

逆向工程本身就是一个完整的世界。我没有太多经验,所以我只会介绍我知道的一些事情,因此我建议你自己做更多的研究。由于应用程序的编译方式,逆向工程 iOS 应用程序是一项复杂且耗时的任务,这使得它们更安全地抵御应用程序克隆等攻击。

首先,建议确定应用程序是用 Swift 还是用 Objective-C 编写的。用 Swift 编写的应用程序将具有以下两个二进制文件:

nm <app> | grep '_OBJC_CLASS_$__' 
otool -L <app> | grep libswift   # Don't think that because it says OBJC it's an Objective-C binary, it's not

如果这些查询没有提供任何结果,则应用程序是用 Objective-C 编写的。

对代码进行逆向工程的目的是在不执行应用程序的情况下了解应用程序的行为。我主要使用的工具是Ghidra,因为它是一个可用于 Linux 的免费逆向工程工具,如果您是逆向工程的新手,它相对容易理解。要导入文件,我选择“批处理”选项和 ipa 文件。从现在开始,我将尝试找到硬编码的凭据,或者尝试了解这些功能的工作原理,或者尝试找到例如越狱检测功能,以尝试了解如何避免检测……

敏感/不安全函数的识别

  • 弱散列算法
# On the iOS device
otool -Iv <app> | grep -w "_CC_MD5"
otool -Iv <app> | grep -w "_CC_SHA1"

# On linux
grep -iER "_CC_MD5"
grep -iER "_CC_SHA1"
  • 不安全的随机函数
# On the iOS device
otool -Iv <app> | grep -w "_random"
otool -Iv <app> | grep -w "_srand"
otool -Iv <app> | grep -w "_rand"

# On linux
grep -iER "_random"
grep -iER "_srand"
grep -iER "_rand"
  • 不安全的“Malloc”功能
# On the iOS device
otool -Iv <app> | grep -w "_malloc"

# On linux
grep -iER "_malloc"
  • 不安全和易受攻击的功能
# On the iOS device
otool -Iv <app> | grep -w "_gets"
otool -Iv <app> | grep -w "_memcpy"
otool -Iv <app> | grep -w "_strncpy"
otool -Iv <app> | grep -w "_strlen"
otool -Iv <app> | grep -w "_vsnprintf"
otool -Iv <app> | grep -w "_sscanf"
otool -Iv <app> | grep -w "_strtok"
otool -Iv <app> | grep -w "_alloca"
otool -Iv <app> | grep -w "_sprintf"
otool -Iv <app> | grep -w "_printf"
otool -Iv <app> | grep -w "_vsprintf"

# On linux
grep -R "_gets"
grep -iER "_memcpy"
grep -iER "_strncpy"
grep -iER "_strlen"
grep -iER "_vsnprintf"
grep -iER "_sscanf"
grep -iER "_strtok"
grep -iER "_alloca"
grep -iER "_sprintf"
grep -iER "_printf"
grep -iER "_vsprintf"

动态分析101(Dynamic Analysis 101)

静态分析很重要,但它有点复杂,在我看来,它需要比普通的初学者渗透测试员更多的编码和逆向经验。在静态分析中,应用程序可能会被混淆或难以理解,并且可能需要一些服务器交互或加载动态代码,所以这就是动态分析派上用场的时候。动态分析包括监控应用程序在执行时的行为(实时)。这包括检查本地存储和与平台的交互,甚至在运行时修改应用程序的行为,例如强制应用程序使用 HTTP 而不是 HTTPS 或禁用越狱检测。

由于无法反编译应用程序,因此无法操作源代码并重新编译它,但可以通过访问 Obj-C 的反射运行时属性来操作应用程序。这将允许我们在运行时访问内部变量和对象,以便能够动态更改应用程序的行为。

Objective-C 快速入门

Objective-C 曾经是用于 iOS 开发的主要语言,尽管与 Obj-C 相比,由于其简单性和改进,现在 Swift 变得越来越流行。我个人还没有深入了解 Swift 的世界,所以在这篇文章中,我将专注于 Obj-C,但是一旦我了解更多关于 Swift 应用程序的动态分析的信息,我可能会更新它。

Obj-C的主要概念

  • Object:可以将数据组(变量)和功能以对数据采取行动的方法的形式组合的主要元素。
  • Class:中心特性,它是一个实例化的对象,包含变量和方法。
  • Method:从对象类(又名函数)调用的代码部分。
  • Message:用于指示方法执行操作。
  • Singleton:单例类是一个特殊的类,其中只存在一个类的实例。通常用于在运行进程中多个类之间共享数据。
  • Delegate : 两个独立对象用于通信和交互的对象接口。

有关更多信息,请查看教程点中的此 Objective-C 快速指南:Objective-C 教程 – 快速指南

Cycript

Cycript 是一个运行时操作工具,它使用 JavaScript 语法来访问 iOS 应用程序中的 Obj-C 对象数据。它使用 Cydia 库 Cydia Substrate,它允许编写附加到正在运行的程序的程序,并能够操纵其在内存中的行为,因此,一旦应用程序终止,这些更改将丢失。如果应用程序是用 Swift 编写的,Cycript 通常只能修改标有 ‘@objc’ 标头的方法。

Cycript 将使用 SSH 会话从 iOS 设备启动。要启动 Cycript,需要识别应用程序的名称或 PID ps aux | grep <App-Name>:. 然后,启动附加到该进程的 Cycript cycript -p <PID or App Name>:.

类枚举

Cycript 有几个函数可以枚举所有类。这些方法提供了大量输出,因此建议将输出转储到文件并从那里解析。

class-dump

ObjectiveC.classes
[ObjectiveC.classes allKeys]

#To write it into a file
var classes = [[ObjectiveC.classes allKeys] componentsJoinedByString:@"\n"]
[classes writeToFile:"<output-path>/classesoutput.txt" atomically:NO encoding:4 error:NULL]

探索应用程序

  • UIApp.keyWindow:当前打开的窗口界面
  • UIApp.keyWindow.rootViewController:提供对当前窗口的访问
  • printMethods(<object>): 探索对象

方法篡改示例

<object>.prototype.<function> = function() { return <true/false/...>; } 

Frida /Objection

Frida 是一个动态代码检测和逆向工程工具包,允许将代码片段甚至完整的库注入应用程序。

为了在主机中安装 Frida 和 Objection:pip3 install frida-tools和/或pip3 install objection如初始推荐安装部分所述,Frida 还需要从 Cydia 安装到 iOS 设备中。默认情况下,Frida 和 Objection 都将通过 USB 连接到 iOS 设备,但可以将其配置为通过网络连接进行连接。

Frida Server 将从 iOS 设备运行并将代码注入应用程序。

frida-ls-devices   # To list all available connections to frida-servers 
frida-ps -U   # To list of all running processes on the target device (USB connected)

frida -U <process-name>   # To attach to a process
frida -U -l <script>.js -n <process-name> --no-pause   # To inject a script into a process and attach to it

frida-ps -Uai   # To list of all installed applications on the target device (USB connected)

frida-discover -U <process-name>   # To discover internal functions
frida-trace -m "<function>" -U -f <process-name>   # To trace function calls

frida-kill -U <PID>   # To kill a process

Objection 是一个建立在 Frida 之上的工具包,扩展了 Frida 的功能并促进了一些操作,例如绕过 SSL 证书修复或越狱检测。

objection -g <app-name> explore   # To attach to an app process - Objection restarts the app and injects into its process

[usb] # env   # To locate all directories related to the app
[usb] # pwd print / ls / !cat <file>   # To print the current directory path, to list the current directory and to execute the cat command into the iOS device's system
[usb] # ios plist cat <info-plist>.plist   # To print the contents of the Info.plist file

注意:如果出现 Objection 或 Frida 无法访问 Frida Server 的错误,请打开与设备的 SSH 会话并运行:` frida-server & `,将 Frida Server 作为后台任务打开。

iOS Hacking 渗透iOS应用程序初学者指南[2022版]

探索应用程序

[usb] # ios hooking list classes   # To list all classes in the app
[usb] # ios hooking search classes <keyword>   # To search all classes containing a certain keyword
[usb] # ios hooking list class_methods <class>   # To list all methods of a class
[usb] # ios hooking watch class/method <class/method> (--dump-args --dump-return --dump-backtrace)   # To get a notification whenever the method is triggered by the application

[usb] # memory dump all <output-file>   # To dump all app memory into a file

[usb] # import <frida-script>.js   # It will import a Frida script

篡改应用程序

[usb] # ios hooking set return_value <method> <true/false>   # To set the return value of a method to a certain Boolean value

# If an 'invalid query' error appears, try to input the method following the recommended format, for instance: "*[<class> <method>]"

禁用证书固定

在设备上禁用证书固定的另一种方法是使用异议:

[usb] # ios sslpinning disable --quiet   # The quiet option is because this hook can generate a lot of noise

绕过越狱检测

[usb] # ios jailbreak disable   # To bypass jailbreak detection
[usb] # ios jailbreak simulate   # To simulate a jailbroken environment

二进制信息

应用程序二进制信息也可以从 Objection 中检查,并根据iOS 应用程序二进制部分中提到的值进行检查:

[usb] # ios info binary   # It will show the app binary info

密钥串转储

可以从 Objection 中分析设备 Keychain 的内容以查找敏感信息。

[usb] # ios keychain dump   # It will dump the contents of the keychain

cookies

还应检查应用程序 cookie 以确保其设置了正确的标志(’Secure’、’HTTPOnly’、’Path’ 指向正确的路径……):

[usb] # ios cookies get   # It will dump the application cookies

进一步的应用程序文件系统分析

截图

检查应用程序是否允许屏幕截图。这可能是一个常见功能,但它可能导致敏感数据泄露。

粘贴板

如果应用程序能够将值保存到共享剪贴板,则它很容易受到“侧通道数据泄漏”的影响,因为剪贴板中的信息可以通过其他应用程序访问。可以通过不同的方式进行检查:通过Objection,手动查看系统中Pasteboard的内容……应用程序应该实现自己的私有剪贴板。

来自Objection:

[usb] # ios pasteboard monitor   # It will notify you whenever a new value is set to the pasteboard 

手动:

  • 查看共享剪贴板“/private/var/mobile/Library/Caches/com.apple.Pasteboard/”(或“com.apple.UIKit.pboard”)的内容,看看它是否随着从应用程序复制的值而变化

快照

应用程序快照是应用程序在发送到后台时执行的“屏幕截图”,例如,在查看设备中打开的应用程序时会使用它们。与屏幕截图一样,这些可能包含可能导致敏感数据泄露的敏感信息。这些快照可以在:'< app-directory >/Library/SplashBoard/Snapshots/’中找到。

键盘缓存

iOS 会保留用户键入的任何内容以提供自动更正或文本完成等功能,因此这会将潜在的敏感信息以明文形式记录在系统中。敏感字段必须标记为安全,因此它们不会被缓存 (UITextAutocorrectionType)。可以在以下位置找到缓存的文本:’/var/mobile/Library/Keyboard/dynamic-text.dat’。

分析应用程序通信

为了分析应用程序与其服务器之间的通信,可以配置代理来观察和篡改这些通信。推荐的代理是 Burp Suite,它是一个由 PortSwigger 执行 Web 应用程序安全测试的集成平台。

要将 Burp 配置为设备的代理,请执行以下步骤:

  1. 在您的计算机上打开“Burp Suite”> 在“代理”选项卡中 > 转到“选项”选项卡
  2. 在 ‘Proxy Listeners’ > Edit the current active proxy listener 并在 ‘Bind to Address’ 中选择 ‘All Interfaces’ (这里也可以选择所需的代理端口,我将保留默认的:8080)
  3. 在您的 iOS 设备中,转到“设置”>“Wi-Fi”> 选择当前连接
  4. 在“HTTP 代理”部分 >“配置代理”>“手动”> 输入计算机的 IP、Burp 的代理端口(在本例中为 8080)并将身份验证选项保留为关闭
  5. 为了让设备信任 Burp 以浏览 HTTPS 网站,请从以下位置下载 Burp 的 CA 证书:“http://burp”(或“http://<computer-IP>:8080”)并安装它:转到“设置’>’常规’>’配置文件’>选择’PortSwigger CA’并按照说明进行操作
  6. 现在您应该通过 Burp Suite 看到设备的通信

证书固定

移动应用程序应使用证书固定来验证特定的服务器证书,并且在尝试访问应用程序服务器时不接受任何其他证书。这是通过生成自签名或私人签名的证书并在将证书颁发给服务器时验证某些参数来实现的。证书固定可防止在设备上添加新的 CA 信任来拦截 TLS 事务,例如 Burp,但它可以在越狱设备上绕过。

证书固定的问题之一是,当证书过期时,需要在应用程序和服务器之间进行一些协调才能更新它,通常会有多个证书有效的重叠时间段。另一个问题是 CA 文件的本地存储:最糟糕的存储方法是在应用程序的沙箱“文档”目录中,更好的方法是将其作为应用程序资源添加到可执行文件旁边,甚至更好的方法是将其作为“NSString”对象集成到应用程序中,这是攻击者最难操纵它的方式。

如果要分析的应用程序没有证书固定,则会自动通过代理查看其通信。如果按照前面的代理配置步骤后,应用程序与其服务器之间的通信无法被拦截,则可能是应用程序对其通信实施了证书固定。

绕过它的方法之一是通过设备的“设置”应用程序激活先前安装的“SSL Kill Switch 2”应用程序。它在低级别操纵证书处理例程,覆盖任何应用程序委托方法,包括证书固定例程。另一种方法是通过在“异议”中选择选项“ios sslpinning disable”来自动覆盖与证书固定相关的方法。

TcpDump

在某些情况下,并非客户端和服务器之间的所有通信都将通过端口 80 和 443,因此分析设备中的所有流量以识别替代通信通道会很有趣。‘tcpdump’是一个有趣的工具,可以捕获所有进出设备的流量,它可以通过 Cydia 轻松安装。

可以在下面找到一些基本的“tcpdump”用例(可以组合):

tcpdump -w <output-file, p.e output.pcap>   # To dump all captured traffic into a file to be able to further analyze it with tools such as Wireshark or Tshark
tcpdump host <ip>   # To only capture traffic to and from a certain host
tcpdump src/dst <ip>   # To only capture traffic whose source/destination is the specified host
tcpdump port <port>    # To only capture traffic based on a certain port
tcpdump <service, p.e. tcp, udp>    # To only capture traffic based on a certain service
tcpdump greater <N>   # To only capture traffic whose size is bigger than N

有关“tcpdump”工具的更多信息可以很容易地在 Internet 上的资源中找到,例如:TCPDump 备忘单使用 TCPDump 进行数字取证在 Linux 命令行中使用 tcpdump 的介绍。(特别感谢 @Miguel_Arroyo76 建议将此工具添加到帖子中)

流量分析

从这一点开始,通信分析与普通 Web 应用程序中的分析相同,但请记住移动电话环境中可能存在的限制。

我希望本指南对您介绍 iOS 应用程序道德黑客有帮助,同样,如果您发现任何错误或可以改进的部分,欢迎提供任何反馈。

@martabyte

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注