深入探讨 MacOS 应用程序的渗透测试第二部分
字数 1904 2025-08-24 07:48:10

macOS应用程序渗透测试深度解析:文件与二进制分析

1. 代码签名分析

1.1 代码签名基础

  • 定义:代码签名是macOS的安全技术,用于验证应用程序来源和完整性
  • 要求
    • 必须使用Apple颁发的开发者ID证书签名
    • macOS 10.15+要求所有应用程序必须经过Apple公证才能在默认Gatekeeper设置下运行
  • 验证工具
    codesign -dvv "<path to application>"
    

1.2 签名验证要点

  • 无效签名情况
    • 使用不受信任/过期证书
    • 应用程序包中某些资源签名无效
  • TeamIdentifier绕过
    • 某些adhoc签名的二进制文件可利用"not set"的TeamIdentifier值伪装为Apple签名

2. 强化运行时(Hardened Runtime)

2.1 基本概念

  • 作用:防止代码注入、DLL劫持和进程内存空间篡改
  • 检查方法:通过SecCodeSignatureFlags查看保护级别

2.2 标志位解析

标志值 含义
0x0001 可能托管客户代码
0x0002 adhoc签名
0x0100 启动时设置HARD模式
0x0200 启动时设置KILL模式
0x0400 强制证书过期检查
0x0800 限制dyld加载
0x1000 强制执行代码签名
0x2000 需要库验证
0x10000 应用运行时强化策略
0x20000 链接器自动生成的签名

3. 授权(Entitlements)分析

3.1 授权检查方法

# 使用codesign
codesign -d --entitlements :- <path to binary file>

# 使用jtool2
jtool2 –ent ~/dummy.app/Contents/MacOS/dummy

3.2 关键授权及其风险

授权 风险
com.apple.security.cs.disable-library-validation 可加载任意插件/框架
com.apple.security.cs.allow-dyld-environment-variables 易受Dylib注入攻击
com.apple.security.get-task-allow 允许非沙盒进程附加
com.apple.security.cs.allow-unsigned-executable-memory 暴露内存不安全漏洞
com.apple.security.files.downloads.read-write 对Downloads文件夹读写权限
com.apple.security.device.camera 访问摄像头(触发TCC提示)

4. 静态分析技术

4.1 库依赖分析

otool -L <path to binary file>
  • 检查点:易受攻击或过时的第三方库

4.2 符号分析

nm <path to binary file>
  • 用途
    • 识别易受攻击函数
    • 判断开发语言(Objective-C/Swift等)

4.3 敏感信息搜索

关键文件位置

  • 配置文件(.plist, XML, JSON) - 应用程序包内
  • 日志文件 - ~/Library/Log
  • 缓存文件(SQLite数据库) - ~/Library/Caches

查看打开文件

  • 通过Activity Monitor → 选择应用 → "Open Files and Ports"选项卡

4.4 字符串提取

strings <path to binary file>

5. 逆向工程工具

  1. Ghidra
  2. Hopper Disassembler
  3. IDA Pro

功能

  • 反汇编
  • 反编译(生成C代码)
  • 查找逻辑漏洞和内存安全问题

6. 动态分析技术

6.1 常用工具

  1. Apple Instruments - 性能监控、内存泄漏检测、文件系统活动跟踪
  2. TaskExplorer - 运行任务信息(签名状态、动态库、打开文件)
  3. FileMonitor - 文件事件监控
  4. ProcessMonitor - 进程创建/终止监控
  5. Frida - 动态检测工具

6.2 Frida使用详解

安装

pip3 install frida-tools

示例脚本

Interceptor.attach(Module.findExportByName(null, "open"), {
    onEnter: function(args) {
        console.log("File path: " + Memory.readUtf8String(args[0]));
        console.log("Mode: " + args[1].toInt32());
    }
});

注入脚本

frida -l <script.js> -n "App Name"

7. 内存分析

7.1 基本流程

  1. 查找进程PID:

    ps aux | grep -i "app name"
    
  2. 使用lldb附加进程:

    lldb --attach-pid <PID>
    

7.2 分析要点

  • 查找敏感数据(密码、加密密钥等)
  • 检查内存中的临时存储信息
  • 识别内存泄露问题

8. 安全防护建议

  1. 代码签名

    • 确保使用有效开发者ID证书
    • 所有资源正确签名
  2. 运行时保护

    • 启用Hardened Runtime
    • 谨慎使用运行时异常
  3. 授权管理

    • 遵循最小权限原则
    • 移除不必要的授权
  4. 依赖管理

    • 定期更新第三方库
    • 移除未使用的依赖
  5. 敏感信息保护

    • 避免硬编码敏感数据
    • 安全处理日志和缓存
macOS应用程序渗透测试深度解析:文件与二进制分析 1. 代码签名分析 1.1 代码签名基础 定义 :代码签名是macOS的安全技术,用于验证应用程序来源和完整性 要求 : 必须使用Apple颁发的开发者ID证书签名 macOS 10.15+要求所有应用程序必须经过Apple公证才能在默认Gatekeeper设置下运行 验证工具 : 1.2 签名验证要点 无效签名情况 : 使用不受信任/过期证书 应用程序包中某些资源签名无效 TeamIdentifier绕过 : 某些adhoc签名的二进制文件可利用"not set"的TeamIdentifier值伪装为Apple签名 2. 强化运行时(Hardened Runtime) 2.1 基本概念 作用 :防止代码注入、DLL劫持和进程内存空间篡改 检查方法 :通过 SecCodeSignatureFlags 查看保护级别 2.2 标志位解析 | 标志值 | 含义 | |--------|------| | 0x0001 | 可能托管客户代码 | | 0x0002 | adhoc签名 | | 0x0100 | 启动时设置HARD模式 | | 0x0200 | 启动时设置KILL模式 | | 0x0400 | 强制证书过期检查 | | 0x0800 | 限制dyld加载 | | 0x1000 | 强制执行代码签名 | | 0x2000 | 需要库验证 | | 0x10000 | 应用运行时强化策略 | | 0x20000 | 链接器自动生成的签名 | 3. 授权(Entitlements)分析 3.1 授权检查方法 3.2 关键授权及其风险 | 授权 | 风险 | |------|------| | com.apple.security.cs.disable-library-validation | 可加载任意插件/框架 | | com.apple.security.cs.allow-dyld-environment-variables | 易受Dylib注入攻击 | | com.apple.security.get-task-allow | 允许非沙盒进程附加 | | com.apple.security.cs.allow-unsigned-executable-memory | 暴露内存不安全漏洞 | | com.apple.security.files.downloads.read-write | 对Downloads文件夹读写权限 | | com.apple.security.device.camera | 访问摄像头(触发TCC提示) | 4. 静态分析技术 4.1 库依赖分析 检查点 :易受攻击或过时的第三方库 4.2 符号分析 用途 : 识别易受攻击函数 判断开发语言(Objective-C/Swift等) 4.3 敏感信息搜索 关键文件位置 : 配置文件(.plist, XML, JSON) - 应用程序包内 日志文件 - ~/Library/Log 缓存文件(SQLite数据库) - ~/Library/Caches 查看打开文件 : 通过Activity Monitor → 选择应用 → "Open Files and Ports"选项卡 4.4 字符串提取 5. 逆向工程工具 Ghidra Hopper Disassembler IDA Pro 功能 : 反汇编 反编译(生成C代码) 查找逻辑漏洞和内存安全问题 6. 动态分析技术 6.1 常用工具 Apple Instruments - 性能监控、内存泄漏检测、文件系统活动跟踪 TaskExplorer - 运行任务信息(签名状态、动态库、打开文件) FileMonitor - 文件事件监控 ProcessMonitor - 进程创建/终止监控 Frida - 动态检测工具 6.2 Frida使用详解 安装 : 示例脚本 : 注入脚本 : 7. 内存分析 7.1 基本流程 查找进程PID: 使用lldb附加进程: 7.2 分析要点 查找敏感数据(密码、加密密钥等) 检查内存中的临时存储信息 识别内存泄露问题 8. 安全防护建议 代码签名 : 确保使用有效开发者ID证书 所有资源正确签名 运行时保护 : 启用Hardened Runtime 谨慎使用运行时异常 授权管理 : 遵循最小权限原则 移除不必要的授权 依赖管理 : 定期更新第三方库 移除未使用的依赖 敏感信息保护 : 避免硬编码敏感数据 安全处理日志和缓存