大家好,自从我上次写博客以来已经有一段时间了。我的工作一直很忙,但现在我很高兴与大家分享我在 iOS 渗透测试方面的知识。该博客涵盖了从设置笔测试环境到使用静态和动态测试识别 iOS 应用程序中的漏洞的所有内容。我们将探索 iOS 笔测试中使用的各种工具和技术,以帮助您更好地了解如何保护您的应用程序。
请允许我介绍一下自己 Ashish Upsham,我是一名渗透测试员。在本博客中,我们将使用 iOS 设备和 Linux 系统来设置我们的渗透测试环境。您也可以使用 Macbook,但在本指南中,我们将使用 Linux 系统。
我们将重点关注 iOS 渗透测试,因此假设您对 iOS 平台及其生态系统有一些基本了解。如果您是 iOS 新手并想了解更多信息,请随时使用提供的链接来学习基础知识。
https://book.hacktricks.xyz/mobile-pentesting/ios-pentesting/ios-basics
https://book.hacktricks.xyz/mobile-pentesting/ios-pentesting/basic-ios-testing-operations
我们将使用各种工具和技术来测试 iOS 应用程序的安全性,因此对 iOS 平台和 Linux 系统有很好的了解非常重要。我们将涵盖您开始进行 iOS 笔测试所需了解的所有内容,所以让我们开始吧!
太棒了,既然我们已经建立了本博客中将要介绍的内容的基础知识,那么让我们继续设置渗透测试环境。
- ios版本低于14的iOS设备很容易越狱。
2. Linux 系统,具有以下工具:libmobiledevice、Frida、Objection、MOBSF、SSH、Burp Suite。
安装这些工具后,您将能够使用它们来分析 iOS 应用程序并识别潜在的漏洞。例如,您可以使用 libmobiledevice 与 iOS 设备进行通信,使用 Otool 来分析应用程序的二进制代码,并使用 Objection 来执行应用程序的运行时操作和探索。
1.iOS设备越狱。
我们将使用 checkra1n 工具来越狱 iOS 设备。这是因为 checkra1n 是一种可靠且广泛使用的 iOS 设备越狱工具。虽然还有其他方法可用于越狱,但建议使用 checkra1n。要使用 checkra1n,只需下载该工具并按照官方网站上提供的说明进行操作即可。请记住,越狱您的设备可能会使您的保修失效,并可能导致不稳定或安全问题。在继续之前仔细考虑风险非常重要。
- 将您的 iOS 设备连接到 Linux 系统。
- 打开终端并使用
sudo checkra1n
命令启动 checkra1n 工具。 - 单击checkra1n界面中的“开始”按钮。这将使您的设备进入恢复模式。
4. 按照屏幕上的说明将设备置于 DFU(设备固件更新)模式。
5. 越狱过程将开始,完成后您的设备将重新启动。
越狱后重新启动设备后,您应该会在主屏幕上看到 checkra1n 应用程序图标。该图标可能需要一些时间才会出现,因此请耐心等待。看到图标后,打开 checkra1n 应用程序并单击“Cydia > 安装 Cydia”,这将安装 Cydia 应用程序。
注意:Checkra1n 是一款越狱工具,最多兼容 iOS 14 版本。因此,要使用它,您需要安装 iOS 14 或更早版本的 iOS 设备。如果您的设备有更高版本的 iOS,您将无法使用 Chechra1n。您可以通过设备上的“设置”>“通用”>“关于”来检查您的 iOS 版本。
2. iOS设备安装工具
使用 checkra1n 越狱 iOS 设备后,下一步是安装其他工具和软件包以启用 iOS 渗透测试。您需要的关键工具之一是 Cydia,它是越狱 iOS 设备的包管理器。
现在将以下存储库添加到您的 Cydia。
1.https://cydia.akemi.ai/,Karen的仓库
2. https://build.frida.re,弗里达回购协议
要使用 Cydia 将存储库添加到您的 iOS 设备,请按照以下步骤操作:
- 启动Cydia ,进入
Manage
>>>Sources
。Edit
Add
- 输入您要添加的存储库的 URL,然后单击
Add Source
。 - 这会将存储库添加到您的设备并允许您从中安装软件包。
添加存储库后,您可以使用Search
Cydia 中的功能查找并安装 iOS 渗透测试所需的软件包。您需要的一些关键包包括HideJB
、Frida
和Appsync Unified
。您可以按名称搜索这些软件包并使用 Cydia 安装它们。
以下是从 Cydia 安装软件包的步骤:
- 打开 Cydia 并转到
Search
选项卡。 - 输入您要安装的软件包的名称(例如
HideJB
)并按Enter
进行搜索。 - 在搜索结果中找到该包,然后点击它以打开包页面。
- 点击
Install
开始安装过程。 - Cydia 将下载该软件包并将其安装到您的设备上。安装完成后,您可以根据需要使用该包。
除了这些软件包之外,您还需要手动安装 SSL Kill Switch 2 和 Otool。去做这个,
- 使用该
ssh
命令以用户身份连接到已越狱的 iOS 设备root
。
/tmp
2.使用命令导航到该文件夹cd
。
3. 要下载“SSL Kill Switch 2”,请使用wget
命令,wget https://github.com/nabla-c0d3/ssl-kill-switch2/releases/download/0.14/com.nablac0d3.sslkillswitch2_0.14.deb .
4. 使用安装包dpkg -i com.nablac0d3.sslkillswitch2_0.14.deb
5. 重新启动SpringBoardkillall -HUP SpringBoard
以完成安装。
6. 使用命令安装 Otool 后,apt install otool
完成这些步骤后,您应该能够在 iOS 设备的“设置”菜单中看到“隐藏 JB”和“SSL Kill Switch 2”。可以使用 shell 访问 Otool 实用程序,因此我们需要建立 ssh 连接iOS 设备才能使用它。这些工具对于 iOS 笔测试至关重要,因此请确保正确安装和配置它们。
设置 iOS 渗透测试环境并在越狱的 iOS 设备上安装必要的工具和软件包后,下一步是将 Burp 证书添加到您的设备。这将使您的设备信任 Burp 生成的 SSL/TLS 证书,这对于使用 Burp 拦截和分析 iOS 应用程序的网络流量至关重要。
要将 Burp 证书添加到您的 iOS 设备,请按照以下步骤操作:
- 打开 Burp 并转到
Proxy
>Options
>Proxy Listeners
选项卡。
3. 在您的 iOS 设备上,转到Settings
>Wi-Fi
并单击您连接到的 Wi-Fi 网络。
4. 选择Configure Proxy
,选择Manual
,然后输入笔记本电脑的 IP 地址和端口(例如192.168.0.1:8080
)。保存更改。
5. 打开 iOS 设备上的 Safari 浏览器并输入http://burp
。下载 Burp 证书并单击Allow
。
6. 在Settings
应用程序中,转到General
>> Profile
,PortSwigger CA
然后单击Install
。单击Done
完成安装。
7. 现在,在“设置”应用程序中,转至General
> About
>Certificate Trust Settigns
并通过切换旁边的开关来启用 PortSwigger CA 证书。
3. 在越狱的iOS设备上安装并获取IPA文件
安装 IPA 文件:现在环境已经设置完毕,我们首先需要的是一个要在这里测试的 iOS 应用程序,我将使用该死的易受攻击的 iOS 应用程序 DVIA-v2-swift.ipa。
- 将您的 iOS 设备连接到您的系统。
- 使用命令验证连接
idevicename
。 - 使用
ideviceinstaller -i DVIA-v2-swift.ipa
命令安装 IPA 文件。 - 如果安装成功,您应该能够在设备上访问该应用程序。
注意:有多种方法可以安装 IPA 文件或将其旁加载到 iOS 设备上,但使用ideviceinstaller -i
命令是一个可靠的选择。这是可能的,因为AppSync Unified是一项调整,允许用户在其 iOS 设备上自由安装临时签名、假签名、未签名或过期的 IPA 应用程序包,否则 iOS 会认为这些应用程序包无效。
获取已安装的 IPA 文件:大多数时候我们使用 Appstore 或 Testflight 安装应用程序。所以我们无法直接访问 IPA 文件。要获取 IPA 文件,我们可以通过 ssh 登录已越狱的 iOS 设备。
使用命令 findfind /var/ -name "*.app"
并检查我们的应用程序名称,然后转到 iOS 设备上的 tmp 文件夹,创建名为 Payload 的目录,mkdir Payload
使用 cp 命令将 .app 文件夹复制到 Payload 文件夹中,然后使用给定屏幕截图中所示的方式压缩有效负载文件夹zip -r Application_Name.ipa Payload/
,然后使用 scp 命令将文件下载到您的系统上。
利用 Frida-ios-dump 进行 IPA 提取:
将 frida-ios-dump 从 AloneMonkey 的存储库克隆到您的系统。
导航到 frida-ios-dump 目录:
cd frida-ios-dump
使用以下 Frida 命令识别目标应用程序:
frida-ps -Ua
启动iproxy建立连接:
iproxy 2222 22
通过运行以下命令来执行 IPA 提取脚本:
./dump.py [APPLICATION_NAME] -u root -P password
将 [APPLICATION_NAME] 替换为获取的目标应用程序的名称。
执行脚本后确保应用程序正在运行。
4. iOS应用程序的静态测试
IPA文件的结构:
- IPA文件实际上是zip包,因此您可以将文件扩展名更改为.zip并解压缩。准备安装的完全打包的应用程序称为捆绑包。
- 解压文件后,您应该会看到一个名为<NAME>.app的文件,它是一个包含其余资源的 zip 存档。
- Info.plist:该文件包含一些特定于应用程序的配置。
- _CodeSignature/:此目录包含一个 plist 文件,其中包含捆绑包中所有文件的签名。
- Assets.car:这是另一个 zip 存档,其中包含图标等资源。
- Frameworks/:此目录包含应用程序的本机库,如 .dylib 或 .framework 文件。
- PlugIns/:此目录可能包含应用程序扩展名作为 .appex 文件(并非在所有情况下都存在)。
- 核心数据:用于存储永久数据以供离线使用、缓存临时数据以及向单个设备上的应用程序添加撤消功能。为了在单个 iCloud 帐户中跨多个设备同步数据,Core Data 会自动将架构镜像到 CloudKit 容器。
- PkgInfo:此文件是指定应用程序或捆绑包的类型和创建者代码的另一种方法。
- en.lproj、fr.proj、Base.lproj:这些是包含特定语言资源的语言包,以及不支持语言时的默认资源。
- 使用移动安全框架 (MobSF) 执行静态分析的步骤:
- 运行 MobSF Web 界面。
- 将IPA文件(iOS应用程序包文件)拖放到界面中并运行静态分析。
- 静态分析完成后,检查结果是否存在任何错误配置或漏洞,例如:
。不安全的 URL 方案
。权限不安全和 ATS 配置错误
。不安全的二元期权
。存在硬编码的敏感信息,例如 Firebase 数据库或电子邮件地址
。其他可能包含安全问题或漏洞的有趣文件。
2. 在开始手动静态分析之前,我们需要获取应用程序在越狱的iOS设备上的路径。为此,我们可以使用 find 命令,只需按照以下步骤操作:
- 只需 ssh 进入您的 ios 设备并输入此命令
find /var/ -name "*.plist" | grep "DVIA"
在 iOS 上,系统应用程序可以在该目录中找到/Applications
,而用户安装的应用程序可以在/private/var/containers/
.然而,找到正确的文件夹可能具有挑战性,因为每个应用程序都会为其目录名称分配一个随机的 128 位 UUID(通用唯一标识符)。
如您所见,应用程序有两个主要位置:
- 捆绑包目录 (/var/containers/Bundle/Application/)。
- 数据目录 (/var/mobile/Containers/Data/Application/)。
3. 完成后,通过 ssh 连接到越狱的 ios 设备,我们将使用otool手动检查二进制文件。
二进制文件中存在保护标识:
- PIE(位置无关可执行文件):启用后,应用程序每次启动时都会加载到随机内存地址中,这使得预测其初始内存地址变得更加困难。
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
- 加密的二进制文件:二进制文件应该被加密
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT #The cryptid should be 1
敏感/不安全功能的识别
- 弱哈希算法
otool -I -v <app-binary> | grep -w "_CC_MD5"
otool -I -v <app-binary> | grep -w "_CC_SHA1"
- 不安全的随机函数
otool -I -v <app-binary> | grep -w "_random"
otool -I -v <app-binary> | grep -w "_srand"
otool -I -v <app-binary> | grep -w "_rand"
- 不安全的“Malloc”函数
otool -I -v <app-binary> | grep -w "_malloc"
- 不安全且易受攻击的功能
otool -I -v <app-binary> | grep -w "_gets"
otool -I -v <app-binary> | grep -w "_memcpy"
otool -I -v <app-binary> | grep -w "_strncpy"
otool -I -v <app-binary> | grep -w "_strlen"
otool -I -v <app-binary> | grep -w "_vsnprintf"
otool -I -v <app-binary> | grep -w "_sscanf"
otool -I -v <app-binary> | grep -w "_strtok"
otool -I -v <app-binary> | grep -w "_alloca"
otool -I -v <app-binary> | grep -w "_sprintf"
otool -I -v <app-binary> | grep -w "_printf"
otool -I -v <app-binary> | grep -w "_vsprintf"
为了保证准确性,我们还使用MobSF工具进行了分析,并得到了类似的结果。然而,我们需要确认结果中不存在误报。
4. Info.plist 文件中要检查的内容。
获取Info.plist文件有多种方式:
- 解压缩 IPA 文件,然后复制Info.plist文件。
- 在 Linux 计算机上,使用该命令
plistutil -i Info.plist -o Infoxml.plist
将 Info.plist 文件转换为 XML 格式。
同样,您可以使用“objection”工具挂钩到应用程序,然后使用命令ios plist cat Info.plist
查看 Info.plist 文件的内容。然后,您可以将内容复制到新文件中以进行进一步分析。
- 在Info.plist文件中检查的常见内容:
捆绑包标识符、捆绑包版本、支持的设备类型、所需的权限、URL 方案、NSAppTransportSecurity。
5. iOS应用程序的动态测试
要首先开始动态测试,我们必须使用 Objection 来挂钩应用程序。
对于挂钩技术,只需按照以下步骤操作:
- 将越狱的 iOS 设备连接到笔记本电脑。
- 使用该命令
frida-ps -Uai
获取当前安装在所连接的 USB 设备上的所有应用程序的列表。
- 在列表中查找 DVIA 应用程序并记下其名称。
- 使用命令
objection -g "DVIA-v2" explore
explore 连接到应用程序。 - 使用该
env
命令查看应用程序的环境变量,包括其路径。
- 检查应用程序在文件系统中保存的敏感信息。
- 验证各个位置是否存在敏感信息,包括 plist 文件、Firebase 数据库、钥匙串、设备日志、应用屏幕截图和 cookie。
- Plist 文件中的敏感数据 – 使用框架 Objection 查找 plist 文件中的敏感数据,方法是键入,然后导航到“数据目录”,然后导航到“文档”文件夹,最后使用如下所示的
env
命令。ios plist userInfo.plist
UserDefaults 中的敏感数据 – 类似地再次输入ls
then Library
,然后使用命令,如下所示。cdPreferencesls ios plist can com.highaltitidehacks.DVIAswiftv2.plist
钥匙串中的敏感数据 – 用户登录后,开发人员可以将其用户名和密码存储到钥匙串中,以便使用钥匙串访问应用程序。我们可以使用为我们提供十六进制值的命令转储钥匙串,ios keychain dump_raw
然后我们必须使用十六进制到 ascii 转换器对其进行解码。
数据库中的敏感数据 – 开发人员可以在客户端数据库中保存敏感数据,例如用户名和密码。在客户端找到 Sqlite 数据库并使用该命令,sqlite connect DatabaseName.sqlites
然后使用.tables
该命令枚举列名,然后select * from 'ColumName'
查看列中的数据。
Cookie 中的敏感数据 – 有时数据可以保存在 Cookie 中。我们可以使用命令来访问它ios cookies get --json .
- 设备日志中的敏感数据 – 确保始终检查任何应用程序的日志,为此我们使用
idevice_id
命令查找 iOS 设备的 id,然后使用该命令idevicesyslog -u idevice_id | grep "application name"
我们还可以存储我们只需使用 > 运算符的日志idevicesyslog -u idevice_id | grep "application name" > logs.txt
。
不幸的是,当我单击“注册”按钮时,DVIA-v2 应用程序总是崩溃,因此我们无法看到日志中的数据。
- 应用程序屏幕截图中的敏感数据 – 每当您按下主页按钮时,iOS 都会拍摄当前屏幕的快照,以便能够以更流畅的方式过渡到应用程序。但是,如果当前屏幕中存在敏感数据,它将保存在映像中(在重新启动后仍然存在)。您还可以双击主屏幕访问这些快照以在应用程序之间切换。在应用程序中找到屏幕截图文件夹并使用命令下载文件
file download filename
。
2. 密码学被破解
- 将敏感数据保存在本地存储中并使用代码中的硬编码或可预测密钥对其进行加密并不是一种安全的做法。攻击者可以轻松逆转这一点,从而允许他们访问机密信息。此外,开发人员应避免使用已弃用的算法进行授权检查、数据存储或数据传输。其中包括 RC4、MD4、MD5 和 SHA1 等算法,这些算法不再被认为是安全的,可能会使数据容易受到攻击。使用当前的安全算法和最佳实践来保护敏感数据非常重要。
- 主要检查是使用反对来监视加密库,以便我们可以找到使用哪种算法来加密数据。我们可以使用 Objection 命令
ios monitor crypt
。
3.使用Keychain进行本地认证
- iOS keychain API 可用于实现本地身份验证。在此过程中,应用程序会在钥匙串中存储一个秘密身份验证令牌或另一条用于识别用户的秘密数据。为了对远程服务进行身份验证,用户必须使用其密码或指纹解锁钥匙串以获取秘密数据。
- 有时我们可以使用反对命令轻松绕过本地身份验证检查
ios ui biometrics_bypass
。
4. 越狱检测绕过– 我们将使用 3 种方法绕过越狱检测。
- 使用调整 – 为此,我们将使用 HideJB 调整。打开 iOS 设备上的“设置”应用程序 > 找到 HideJB 首选项 > 点击“选择应用程序” > 切换要隐藏其越狱状态的应用程序名称旁边的按钮,如屏幕截图所示。确保关闭启动 HideJB 后运行的应用程序可以绕过检测。
使用反对 –ios jailbreak disable
在反对控制台中运行命令 > 尝试访问您希望绕过越狱检测的应用程序 > 如果成功,越狱检测将被绕过,您将能够访问该应用程序
- 了解应用程序越狱检测逻辑 –
了解应用程序的越狱检测逻辑:
- 使用命令
ios hooking search jail
查找越狱检测类。 - 使用命令
ios hooking list class_methods ClassName
列出类中的方法,这里我们的类名是“JailbreakDetection” - 使用命令
ios hooking watch method "+[ClassName MethodName]" --dump-args --dump-backtrace --dump-return
观察方法。仅--dump-return
足以确定它返回的值。这里我们的类名为“JailbreakDetection”,方法名为“isJailbroken”。
如果该方法返回0x1,则意味着它返回布尔值1,表明设备已越狱。 - 现在我们必须创建自定义脚本来绕过此逻辑,使用命令
ios hooking generate simple ClassName
编写自定义脚本来更改此方法的返回值。 - 复制上一步生成的脚本。打开文本编辑器并粘贴脚本。将变量值从“var”修改为“const”,然后
在“onLeave”函数中输入“retval.replace(0)”以返回值 0。使用“JBbypass.js”扩展名保存脚本和我们的脚本第 4 个屏幕截图应如下所示。 - 使用Frida命令
frida -l JBbypass.js -n "DVIA-v2" -U
执行脚本并绕过越狱检测。
- 同样,我们可以在另一个名为“DVIA_v2.JailbreakDetectionViewController”的类中绕过越狱检测,该类包含5个返回不同值的方法。然而,这个类是用Swift实现的,所以我们不能直接使用Objection或Frida来hook它。 iOS 中的越狱检测逻辑与 Android 中的 root 检测类似。在 iOS 中,越狱检测会检查设备上是否存在特定的二进制文件。如果存在这些文件,则表明设备已越狱。我们可以找到在线脚本,并且可以使用 frida 绕过。
5. SSL Pinning 绕过– 我们将使用 2 种方法绕过 SSL Pinning。确保代理已启用并正在运行,如环境设置步骤中所示。
- 使用调整 – 为此,我们将使用 SSL Kill Swtich 2 调整。打开设备上的“设置”应用程序。 > 找到 SSL Kill Switch 2 首选项。 > 切换“禁用证书验证”旁边的按钮 > 使用 Burp Suite 捕获请求。确保在启动 SSL Kill Switch 2 后关闭正在运行的应用程序以绕过 SSL Pinning。
使用反对- 只需使用反对命令ios sslpinning disable
,您就能够捕获应用程序流量。
工具清单:
- Linux — libmobiledevice、Frida、Objection、MOBSF、SSH、Burp Suite、Checkra1n。
- iOS — Cydia Manager、Hide JB、Frida、Appsync Unified、Otool、SSL Kill Switch 2、OpenSSH
概括
简而言之,我们执行了以下步骤:
- 我们使用 checkra1n 对 iOS 设备进行越狱。
- 我们在越狱设备上安装了所需的工具。
- 我们配置了 burp 证书颁发机构以与 iOS 配合使用并设置代理。
- 我们学习了如何使用 ideviceinstaller 和 Appsync Unified 安装没有代码签名的 IPA 文件。
- 我们开始使用 MobSF、Objection 和 Otool 对应用程序进行静态测试。
- 我们开始使用 Objection 对应用程序进行动态测试,并检查文件系统中的敏感数据、损坏的加密技术、本地身份验证,然后使用 Objection 和 Frida 绕过越狱检测和 SSL pinning。
暂无评论内容