iOS Pentesting
最后更新于
最后更新于
使用Trickest轻松构建和自动化工作流程,使用全球最先进的社区工具。 立即获取访问权限:
在此页面中,您可以找到关于iOS模拟器、模拟器和越狱的信息:
iOS Testing Environment在测试过程中会建议执行多个操作(连接到设备、读取/写入/上传/下载文件、使用一些工具...)。因此,如果您不知道如何执行这些操作中的任何一个,请开始阅读页面:
iOS Basic Testing Operations在以下步骤中,应该已经在设备上安装了应用程序,并且已经获得了应用程序的IPA文件。 阅读基本iOS测试操作页面以了解如何执行此操作。
建议使用工具MobSF对IPA文件执行自动静态分析。
识别二进制文件中存在的保护措施:
PIE(位置无关可执行文件):启用后,应用程序每次启动时都会加载到随机内存地址,使得难以预测其初始内存地址。
堆栈Canaries:为了验证堆栈的完整性,在调用函数之前在堆栈上放置一个“canary”值,并在函数结束时再次验证。
ARC(自动引用计数):防止常见的内存腐败缺陷
加密二进制文件:二进制文件应该是加密的
识别敏感/不安全函数
弱哈希算法
不安全的随机函数
不安全的‘Malloc’函数
不安全和易受攻击的函数
查看MobSF执行的动态分析。您需要浏览不同视图并与其交互,但它将挂接多个类并执行其他操作,并在完成后准备报告。
使用命令frida-ps -Uai
来确定已安装应用程序的捆绑标识符:
学习如何枚举应用程序的组件以及如何使用 objection 轻松hook方法和类:
iOS Hooking With ObjectionIPA 文件的结构本质上是一个压缩包。通过将其扩展名更改为 .zip
,可以对其进行解压以显示其内容。在这个结构中,Bundle代表一个完全打包好准备安装的应用程序。在其中,您会找到一个名为 <NAME>.app
的目录,其中封装了应用程序的资源。
Info.plist
:此文件保存应用程序的特定配置详细信息。
_CodeSignature/
:此目录包含一个包含签名的 plist 文件,确保捆绑包中所有文件的完整性。
Assets.car
:存储像图标这样的资源文件的压缩存档。
Frameworks/
:此文件夹包含应用程序的本机库,可能是 .dylib
或 .framework
文件的形式。
PlugIns/
:这可能包括应用程序的扩展,称为 .appex
文件,尽管它们并不总是存在。
Core Data
:用于保存应用程序的永久数据以供离线使用,缓存临时数据,并在单个设备上为应用程序添加撤消功能。为了在单个 iCloud 帐户中的多个设备之间同步数据,Core Data 会自动将您的模式镜像到 CloudKit 容器中。
PkgInfo
:PkgInfo
文件是指定应用程序或捆绑包的类型和创建者代码的另一种方式。
en.lproj, fr.proj, Base.lproj:是包含这些特定语言资源的语言包,以及在不支持某种语言的情况下的默认资源。
安全性:_CodeSignature/
目录通过数字签名验证所有捆绑文件的完整性,在应用程序的安全性方面起着关键作用。
资产管理:Assets.car
文件使用压缩来高效管理图形资产,这对于优化应用程序性能并减小其整体大小至关重要。
框架和插件:这些目录突显了 iOS 应用程序的模块化,允许开发人员包含可重用的代码库(Frameworks/
)并扩展应用功能(PlugIns/
)。
本地化:该结构支持多种语言,通过为特定语言包含资源来促进全球应用程序覆盖范围。
Info.plist
Info.plist 作为 iOS 应用程序的基石,以键-值对的形式封装关键配置数据。这个文件不仅对应用程序是必需的,对于打包在其中的应用程序扩展和框架也是必需的。它以 XML 或二进制格式结构化,并包含从应用程序权限到安全配置等关键信息。要详细探索可用键,可以参考Apple Developer Documentation。
对于希望以更易访问的格式处理此文件的人,可以通过 macOS 上的 plutil
(在版本 10.2 及更高版本中本地可用)或 Linux 上的 plistutil
轻松实现 XML 转换。转换的命令如下:
对于 macOS:
对于 Linux:
在Info.plist文件中可以泄露大量信息,其中一些显著条目包括应用程序权限字符串(UsageDescription
)、自定义URL schemes(CFBundleURLTypes
)以及App Transport Security的配置(NSAppTransportSecurity
)。这些条目以及其他条目,如导出/导入的自定义文档类型(UTExportedTypeDeclarations
/ UTImportedTypeDeclarations
),可以通过检查文件或使用简单的grep
命令轻松定位:
数据路径
在iOS环境中,目录专门用于系统应用和用户安装的应用。系统应用位于/Applications
目录下,而用户安装的应用则放置在/var/mobile/containers/Data/Application/
目录下。这些应用被分配一个称为128位UUID的唯一标识符,由于目录名称的随机性,手动定位应用文件夹的任务变得具有挑战性。
由于iOS中的应用必须进行沙箱化,每个应用还将在**$HOME/Library/Containers
目录下拥有一个以应用的CFBundleIdentifier
**命名的文件夹。
然而,这两个文件夹(数据和容器文件夹)都有一个名为**.com.apple.mobile_container_manager.metadata.plist
**的文件,该文件在键MCMetadataIdentifier
中链接了这两个文件。
为了便于发现用户安装的应用的安装目录,objection工具提供了一个有用的命令env
。这个命令会显示有关所讨论应用的详细目录信息。以下是如何使用这个命令的示例:<