danieloz147/ios-profile-builder

GitHub: danieloz147/ios-profile-builder

一款基于浏览器的 Apple .mobileconfig 配置描述文件可视化构建与分析工具,专为安全攻防研究和 MDM 实验场景设计。

Stars: 1 | Forks: 0

ios-profile-builder

# ios-profile-builder 一个基于浏览器的工具,用于组装 Apple **`.mobileconfig`** 配置描述文件 —— 无需手动编写 XML。 专为安全攻防研究、MDM 实验室测试和描述文件原型设计而构建。完全离线运行。零遥测,零外部连接。 ## 功能说明 Apple 配置描述文件是 XML property list(属性列表),用于将设置、证书、Web Clip 和 MDM 注册推送到 iOS / iPadOS / macOS 设备。手动编写它们意味着要费力处理 UUID、plist schema 和 CMS 签名。此工具用一个浏览器表单取代了所有这些工作,能够一次性生成结构正确的 `.mobileconfig`。 ### 支持的 payload 类型 | Payload | 类型标识符 | |---|---| | Web Clip(主屏幕快捷方式) | `com.apple.webClip.managed` | | Wi-Fi | `com.apple.wifi.managed` | | VPN | `com.apple.vpn.managed` | | 受信任的根 CA(PEM 或 DER) | `com.apple.security.root` | | MDM 注册 | `com.apple.mdm` | | 自定义(原始 plist 片段) | any | 每个描述文件中每种类型最多可包含 10 个实例。空部分会被自动跳过。 ### 附加功能 - **描述文件元数据** —— DisplayName、Identifier、Organization、Description、ConsentText。 - **自动生成的 UUID** —— 每次构建时,每个 payload 和描述文件根节点都会获取新的 UUID4。 - **可选的 CMS 签名** —— 附加 `.p12` / `.pfx` 和密码;该工具使用 `openssl smime` 进行签名。签名状态会在 `X-Profile-Signing-Status` 响应头中返回。不签名也可以使用 —— 在大多数实验室/研究环境中,未签名的描述文件可以正常安装。 - **Payload 参考抽屉** —— 提供针对每种常见 payload 类型的 UI 内参考,包括风险、仅限受监管设备的限制以及攻击场景。 - **预定义模板** —— 仅包含 Web Clip、根 CA、完整 MDM 注册。 - **导入与分析** —— 上传任何现有的 `.mobileconfig` 以检查其内容:描述文件元数据、带有风险评级的每个 payload 的详细分解,以及自动检测危险的 payload 组合(完全中间人攻击、设备接管、钓鱼应用等)。 ## 环境要求 - Python 3.8+ - `pip install -r requirements.txt`(Flask + Werkzeug) - PATH 中包含 `openssl` 用于签名(可选) ## 安装与运行 ### Linux / macOS ``` git clone https://github.com/YOUR_USERNAME/ios-profile-builder cd ios-profile-builder python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt python3 app.py ``` 在浏览器中打开 **http://127.0.0.1:5000**。 ### Windows ``` git clone https://github.com/YOUR_USERNAME/ios-profile-builder cd ios-profile-builder python -m venv venv && venv\Scripts\activate pip install -r requirements.txt python app.py ``` Windows 版的 `openssl` 随 Git for Windows 一起提供,位于 `C:\Program Files\Git\usr\bin\openssl.exe`。 ## 命令行参数 ``` python3 app.py [--host HOST] [--port PORT] [--debug] ``` | 参数 | 默认值 | 描述 | |---|---|---| | `--host` | `127.0.0.1` | 绑定地址。供本地使用时请保持在 loopback。 | | `--port` | `5000` | TCP 端口。 | | `--debug` | off | Flask 调试模式(仅限开发环境)。 | ## 使用方法 1. 启动服务器并打开 `http://127.0.0.1:5000`。 2. 可选择从顶部栏中挑选一个模板。 3. 填写描述文件元数据以及您需要的任意 payload 部分。 4. 如果需要经过 CMS 签名的输出,请附加 `.p12` 文件及密码。 5. 点击 **Build & download** —— 浏览器将接收到 `.mobileconfig` 文件。 6. 在浏览器的“网络”选项卡中检查 `X-Profile-Signing-Status`,以确认状态是 `signed` 还是 `unsigned`。 ### 导入并分析现有描述文件 在模板栏中点击 **📂 Import**,并选择任意 `.mobileconfig` 文件。侧边抽屉将随以下内容打开: - 描述文件元数据(DisplayName、Identifier、Organization、Description) - 每个 payload 的详细分解:风险标签(CRITICAL / HIGH / MEDIUM / INFO)、类型标识符以及关键字段值 - **攻击组合检测** —— 自动标记危险的组合,例如完全中间人攻击(Root CA + Wi-Fi + VPN)、设备接管(MDM + Root CA + VPN)、钓鱼应用(WebClip + Root CA)等 关闭抽屉后,点击 **📊 Last Import**(首次导入后会出现在模板栏中)即可重新打开上次的分析结果,无需重新上传。 ### 通过 HTTPS 暴露(Cloudflare Quick Tunnel) iOS 要求通过 HTTPS 才能安装从远程主机提供的描述文件。供实验室使用: ``` # 安装一次 cloudflared:https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/ python3 app.py --host 0.0.0.0 & cloudflared tunnel --url http://localhost:5000 ``` 隧道会打印一个临时的 HTTPS URL,您可以将其分享给测试设备。 ## 安全设计 | 领域 | 实现方式 | |---|---| | 输入处理 | 所有表单字段均被视为不受信任的数据。值仅通过 `plistlib` 进行处理 —— 绝不执行或解释。 | | 自定义 plist | 在合并前进行解析和验证;格式错误的输入 → 返回 400 错误,而不会导致崩溃。 | | 文件上传上限 | 通过 Flask `MAX_CONTENT_LENGTH` 设置 8 MB 的硬性限制。 | | 签名错误 | `openssl` 的 stderr 仅在服务器端记录;响应头返回通用的状态字符串(无路径泄漏)。 | | 临时文件 | 在全新的 `tempfile.mkdtemp` 目录中创建,并在响应后立即通过 `shutil.rmtree` 删除。 | | 文件名清理 | 输出文件名在用于 `Content-Disposition` 之前,会通过 `os.path.basename` + 字母数字白名单进行剥离。 | | 安全标头 | 每个响应都带有 `X-Content-Type-Options`、`X-Frame-Options: DENY`、`Referrer-Policy` 和 `Content-Security-Policy`。 | ## 本工具不做的事情 - **在目标设备上没有任何持久化**行为,仅限于描述文件本身。它构建的是一个 `.mobileconfig`;安装它是标准的 Apple 用户同意流程。 - **没有 C2,没有回调,没有 beaconing。** 生成的描述文件仅包含您配置的 payload。 - **不生成证书。** 它只是封装您提供的根 CA;它不会自行签发。 - **不进行漏洞利用。** 它不会绕过 MDM 信任提示、用户同意屏幕或设备安全控制。 - **无身份验证,不支持多用户。** 绑定到 loopback。这是一个本地构建工具,而不是经过严格安全加固的 Web 服务。 ## 测试 ``` pip install pytest pytest -q ``` 包含 17 个测试,离线运行,无需网络访问。 ## 项目结构 ``` ios-profile-builder/ ├── app.py # Flask app + payload builders + signing ├── requirements.txt ├── README.md ├── templates/ │ └── index.html # single-page UI (vanilla JS, no bundler) ├── static/ # logo / branding (not tracked in git) └── tests/ └── test_app.py # pytest suite ``` ## 许可证 MIT
标签:CVE, MDM, 后端开发, 安全测试工具, 安全研究工具, 数字签名, 苹果配置文件, 足迹探测, 逆向工具, 配置生成器