在 Linux 上对未越狱的 iOS 设备进行应用安全测试
如何在 Linux 计算机上,借助一台未越狱的 iPhone 对 iOS 应用文件进行安全检查。
概述
iOS 应用安全测试并不需要越狱的 iPhone 或 iPad。本文是一份持续更新的文档,列出了如何在未越狱的手机上评估移动应用的各个方面。
注意
本文假设您可以获取未加密的 IPA。
Apple 开发者账户
出于安全测试的目的,我们只需要一个免费的 Apple 开发者账户。如需注册,请参阅要求链接。
对于个人而言,我们只需要一个 Apple ID 并启用双重认证。
付费的 Apple 开发者账户提供面向应用开发者和应用分发的功能。
简单方法:使用 Cydia Impactor 安装
在 iOS 设备上安装 IPA 应用最简单的方法是使用 Cydia Impactor。 Cydia Impactor 是一款免费但不开源的工具。
首先,请确保重置 Apple 开发者账户的证书,确保您的 iOS 设备或 iPad 已被识别,然后选择安装软件包来安装您的应用。
虽然 Cydia 使用起来非常简单,但如果应用未处于调试模式,安装将会失败;或者由于 entitlement 未被正确修补,应用会在运行时失败。
完全掌控的方法:ideviceinstaller 与手动修补
此方法为手动操作,包括修补 IPA 的 entitlements,然后使用 ideviceinstaller 安装修补后的应用。
修补 IPA 以启用调试模式
您可能遇到的第一个问题是尝试安装未启用调试的应用。iOS 会提示签名无效。
要启用调试模式,首先从 IPA 中提取 entitlements:
可以使用 jtool 来完成:
unzip app.ipa
./jtool.ELF64 -arch arm64 --ent Payload/myOstorlabApp.app/myOstorlabApp > /tmp.ent.xml
生成的 entitlements 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
<key>com.apple.developer.team-identifier</key>
<string>4ZX4Z3MVHG</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
</array>
</dict>
</plist>
处于调试模式的应用,其 get-task-allow 键会被设置为 <true/>。如果不是,请修改 entitlements,并使用新创建的 entitlements 修补您的二进制文件。
为此,在 Linux 上请使用以下支持替换 entitlements 的 isign 分支版本。isign 仅支持 Python2:
from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")
如果出现 OpenSSL 错误,请尝试重新安装 pyOpenSLL:
sudo python2 -m pip install pyOpenSSL
如果出现错误,要查看 isign 的日志,请使用以下代码
import logging
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
isign 可能会在某个 construct 检查中失败,该检查本身是错误的,只需将其注释掉并重试即可。
使用 ideviceinstaller 安装
对于 ideviceinstaller,我们首先需要配置开发者证书,为此请使用以下仓库中的工具:
./genProvisioningProfileFree.sh <AppleID> <Password> <Device UUID>
您设备的 UUID 可以通过 lsusb 获取。
开发者账户配置完成后,检查您主目录中生成的 .isign/isign.mobileProvision 文件,查找 <TeamIdentifier> 的值,它应该类似于 4ZX4Z3MVHG。使用该值修改 entitlements 文件,将之前团队标识符的所有出现之处替换为您的团队值。
使用修改后的 entitlements 对应用签名:
from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")
最后,使用 ideviceinstaller 安装新生成的 IPA。
ideviceinstaller -i /tmp/new_ipa.ipa
其他操作
以下是评估过程中可执行的一些实用操作:
获取 Developer Disk Image
一些 imobiledevice 工具需要挂载 Developer Disk Image。要下载与您的操作系统版本匹配的磁盘映像,请参阅仓库。
要挂载磁盘映像,请使用 ideviceimagemounter:
ideviceimagemounter -t Developer DeveloperDiskImage.dmg DeveloperDiskImage.dmg.signature
检查磁盘是否已正确挂载:
ideviceimagemounter -l 2 ↵
ImageSignature[1]:
0: OIrMZfwD5TcdgVaizBMAaImjwDXsrldgRDbsiSWbtafuf1t0BSJR9tDycyYPG3E+wmUY8fmP0l0S3UkMkQpJksFOx2fn0h1lAuhAiP9bJBjZ6PvbetHE/A2XJNVu78obBZl9dAzgpIEHPSvu6HJM7mdZrdFjA7GG7QJOnCL4Vnc=
访问设备日志
要访问 iOS 设备日志,请在挂载 Developer Disk Image 后使用 idevicesyslog。
截图
要截图,请在挂载 Developer Disk Image 后使用 idevicescreenshot。
附加 LLDB 调试器
Linux 上的 LLDB 调试器不支持将 remote-ios 作为目标。
标签:
ios