SuperAPI AI 工具集

audit-xcode-security-settings

安全与审计

查看项目

更新于 10-15 10:33

技能介绍

用途

该技能用于评估 Xcode 项目的安全态势,并逐步启用面向安全的构建设置与授权(entitlements),范围从广泛适用的编译器警告,到 Enhanced Security 强化功能。它面向需要审计和加固 Xcode 项目安全配置的开发者。

主要能力

  • 审计项目的 Xcode 安全构建设置与授权,涵盖编译器警告、Enhanced Security 授权、指针认证(pointer authentication)、受检指针算术(checked pointer arithmetic)、库的通用二进制(universal binaries for libraries)等。
  • 逐步启用安全构建设置与授权。
  • 生成可编辑的计划文件(位于项目根目录)供用户审阅,用户选择 Run 后才应用已批准的变更。
  • 维护持久的决策文档 xcode-security-settings.md。
  • 附带参考文档,包括安全设置参考、构建设置读取方法、Enhanced Security、指针认证、通用二进制、安全编译器警告、C++ 加固、类型化分配器、栈零初始化、只读平台内存、运行时限制、硬件内存标记、受检指针算术、附加设置、采用策略、决策文档等。
  • 附带一个辅助脚本 scripts/filter_build_settings.py,用于将 GetTargetBuildSettings JSON 过滤为 security-settings-reference.md 中跟踪的宏。

使用方式

该技能通过 Xcode 专用工具操作项目,工具名称可能带有 MCP 服务器前缀(如 mcp__<server>__XcodeGlob),需在可用工具注册表中查找前缀后使用。

工具偏好:

  • XcodeGlob 用于文件发现,禁止对项目内文件使用 find。
  • XcodeGrep 用于内容搜索,禁止对项目内文件使用 grep/rg。
  • XcodeRead 用于读取文件内容,禁止对项目内注册文件使用 cat/Read。
  • XcodeLS 用于目录列表,禁止对项目内路径使用 ls。
  • XcodeUpdate 用于就地编辑项目注册的文本文件(xcconfig 文件、源文件),禁止对项目内注册文件使用 Edit。不要用 XcodeUpdate / Edit / plutil 添加或更新 .entitlements 键,应使用 AddEntitlement。
  • AddEntitlement 用于添加或更新目标的授权,传入 targetName、entitlementKey、entitlementValueType(bool / string / int / stringArray / dictionary)和值。它只能添加或更新,不能删除键。
  • XcodeListTargets 用于枚举目标,不要手动解析 project.pbxproj。

所有 Xcode* 工具接受 Xcode 工作区相对路径。授权文件的权威路径是目标 CODE_SIGN_ENTITLEMENTS 构建设置的求值结果,需通过 GetTargetBuildSettings 获取,不要手动推导路径或使用 **/*.entitlements 通配。

工作流程分为多个阶段:

  1. Briefing(简报):告知用户技能内容、将执行的操作及大致时间投入,检查源代码控制,并通过 AskUserQuestion 暂停等待用户选择。
  2. Discovery(发现):读取系统提示中的 Environment 块,跟踪进度。
  3. Analyze Project and Settings(分析项目与设置):定位现有决策文档、检测语言、构建审计表。
  4. Plan & Approve(计划与批准):生成计划文件,用户选择 Run/Cancel。
  5. 应用设置。
  6. 询问有意禁用的设置。
  7. 报告并更新决策文档,最后提示移除计划文件。

适用场景

  • 需要评估 Xcode 项目安全配置的开发者。
  • 需要逐步启用安全构建设置和授权的项目。
  • 需要审计编译器警告、Enhanced Security、指针认证等安全功能的场景。

限制

  • 该技能会修改构建设置和授权,建议在继续前设置源代码控制(如 Git),否则回滚需要手动撤销。
  • 计划阶段和执行阶段各占大致一半时间,通常总共约 15-30 分钟,取决于构建目标数量和用户审阅批准计划的时间。
  • 在用户选择 Run 之前不会修改任何内容。
  • 部分操作(如询问有意禁用的设置、是否保留计划文件)会暂停等待用户输入。
  • 工具名称可能因环境而异,需在可用工具注册表中查找前缀。
  • .xcodeproj 和 .xcworkspace 不作为 Xcode 工作区内的文件索引,XcodeGlob "**/*.xcodeproj" 正确返回 0 个匹配。
  • 对于真正位于 .xcodeproj / .xcworkspace 包内的文件(如 WorkspaceSettings.xcsettings),XcodeRead 可能失败,需转换为文件系统绝对路径后使用 Read / Edit。
  • 授权文件路径需通过 CODE_SIGN_ENTITLEMENTS 获取,手动推导或通配可能返回 File does not exist。
  • 仅当 Xcode 工具无法完成操作时(如 git 操作)才回退到 Bash。

暂未提供

该技能的收费、价格、平台支持范围、具体效果等事实在资料中暂未提供。