我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 96.75% 的成绩。 了解更多

安全

安全

在 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