☰
iOS 第三方库安全评估指南:依赖管理、漏洞扫描与供应链风险治理(OWASP MASTG)
2026/10/8 7:17:50 网站建设 项目流程
  • 文档
  • 教程
  • 网络安全

【免费下载链接】mastg

The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.

项目地址:https://gitcode.com/gh_mirrors/ow/mastg
点击查看免费下载

本文围绕 OWASP Mobile Application Security Testing Guide(MASTG)中 iOS 第三方库(Third-Party Libraries)知识条目 展开,系统梳理 iOS 应用引入第三方库的风险面、三大依赖管理工具(Swift Package Manager、Carthage、CocoaPods)的安全特性,并结合仓库中的测试用例、技术条目与可运行 Demo,给出从静态扫描、运行时核对到 SBOM 化供应链审计的完整实操方案。读完本文,你将能够定位依赖管理产物文件、用 dependency-check 与 Dependency-Track 识别带 CVE 的已知漏洞依赖,并制定漏洞出现后的处置与升级策略。

为什么第三方库会成为 iOS 应用的安全短板

iOS 应用普遍依赖第三方库来加速开发:开发者无需从零实现网络栈、JSON 解析、数据库封装等功能,就能快速解决业务问题。但引入第三方库的同时,也把三方面的风险带进了应用:

  1. 漏洞风险:库本身可能携带安全漏洞,使整个应用暴露在攻击之下。一个经典案例是AFNetworking2.5.1 版本包含的缺陷会禁用证书校验,导致使用该版本连接 API 的应用可被攻击者执行 Machine-in-the-Middle (MITM) 攻击——攻击者可以拦截、篡改应用与服务器之间的通信。
  2. 维护停滞风险:库可能长期无人维护、极少被使用,导致其中的漏洞无人报告、无人修复,劣质甚至危险的代码被悄悄打包进应用。
  3. 许可证合规风险:库的许可证可能要求应用作者向使用者提供源代码访问权限(如 LGPL 2.1),应用还可能被允许以修改源码的形式再分发,这会直接危及应用的知识产权(IP)。

需要特别指出的是,这类问题会在多个层级同时出现:如果应用使用 WebView 运行 JavaScript,风险同样作用于其中的 JS 库;对于 Cordova、React Native 等跨平台移动框架,其插件与库也适用相同的分析逻辑。

iOS 三大依赖管理工具的安全画像

OWASP MASTG 明确指出,iOS 生态中最广泛使用的包管理工具有三个,各自在实现语言、分发架构与依赖描述文件上存在差异:

工具支持语言实现语言架构依赖描述/锁定文件
Swift Package ManagerSwift、Objective-C、Objective-C++、C、C++Swift开源、随 Swift 语言分发、自 Xcode 11 起集成于 Xcode、去中心化Package.swift/Package.resolved
CarthageSwift、Objective-CSwift开源、去中心化Cartfile/Cartfile.resolved
CocoaPodsSwift、Objective-CRuby开源、基于集中式注册表(公有与私有包)Podfile/Podfile.lock

从供应链安全角度看,这三个文件类型是关键:锁定文件(resolved/lock)记录了项目实际解析出的依赖版本,是后续软件成分分析(SCA)扫描的输入源。开发者可能同时使用多个依赖管理器,因此审计时需要逐一收集并扫描对应的产物文件。

MASTG 同时将第三方库划分为两类,审计时应对其区别对待:

  • 不应打包进生产应用的库,例如测试用的OHHTTPStubs(网络请求桩工具);
  • 会打包进生产应用的库,例如Alamofire(Swift 网络库)。

静态分析:对依赖管理产物执行 SCA 漏洞扫描

针对三种依赖管理器,MASTG 提供了完整的 SCA 扫描流程(详见已被新测试接管的 MASTG-TEST-0085,其新版本为 MASTG-TEST-0273 与 MASTG-TEST-0275)。其核心思路是:依赖在编译期被打进 IPA 后,版本元数据往往会被剥离或改写,无法直接扫描成品包,因此必须扫描依赖管理器生成的产物文件(参见 MASTG-TECH-0133 与 MASTG-TOOL-0131)。

1. Swift Package Manager:扫描 Package.swift / Package.resolved

在项目根目录(Package.swift所在位置)构建以生成锁定文件,然后核对实际使用的版本:

swift build

检查Package.resolved中记录的版本,再借助 OWASP Dependency-Check 的实验性 SwiftPM Analyzer 识别依赖的 CPE(Common Platform Enumeration)命名与对应的 CVE 条目:

dependency-check --enableExperimental --out . --scan Package.swift

2. CocoaPods:扫描 Podfile.lock / *.podspec

在项目根目录(Podfile所在位置)先安装并生成依赖树:

sudo gem install cocoapods pod install

随后用cocoapods-dependencies插件生成依赖与版本总览,作为检索各漏洞源的输入:

sudo gem install cocoapods-dependencies pod dependencies

最后用 Dependency-Check 的 CocoaPods Analyzer 扫描锁定文件或 podspec:

dependency-check --enableExperimental --out . --scan Podfile.lock

实操中还需注意三点:

  1. 若开发者用.podspec将全部依赖封装成自有支持库,该 podspec 可用实验性 CocoaPods podspec checker 检查;
  2. CocoaPods 与 Objective-C 组合的项目可配合 SourceClear 使用;
  3. 下载依赖必须使用 HTTPS——若 Podfile 采用 HTTP 链接,依赖下载过程可能被 MITM 劫持,攻击者可以替换(部分)库内容。

3. Carthage:扫描 Cartfile.resolved

在项目根目录(Cartfile所在位置)更新并构建依赖:

brew install carthage carthage update --platform iOS

然后核对Cartfile.resolved中实际使用的版本并检索已知漏洞。需要说明的是:截至 MASTG 撰写本章时,Carthage 尚无自动化的依赖分析支持(该功能已在 DependencyCheck 上被请求但未实现),属于已知的能力缺口。

统一扫描命令:一个工具覆盖三种管理器

MASTG-TECH-0133 给出了基于 Dependency-Check(MASTG-TOOL-0131)的统一实操方式。先向 NVD 申请 API Key 以获取最新 CVE 情报,然后按所用管理器执行(一次只能扫描一个文件):

# SwiftPM:扫描 Package.swift 或 Package.resolved dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Package.resolved # CocoaPods:扫描 Podfile.lock 或 *.podspec dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Podfile.lock # Carthage:扫描 Cartfile.resolved dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Cartfile.resolved

输出始终是 SARIF 格式,可用 VSCode(MASTG-TOOL-0133)的 SARIF Viewer 插件打开;已知漏洞会以 CVE 编号和描述的形式列出。MASTG 提示这些 Analyzer 仍属实验性:结果可能有参考价值,但需要额外测试以确认误报/漏报率在可接受范围内。

实战 Demo:扫描 swift-nio 的 Package.resolved

仓库中的 MASTG-DEMO-0052 给出了端到端的演示:其 Package.resolved 锁定了一个依赖swift-nio版本 2.33.0(远程源为https://github.com/apple/swift-nio.git),执行 run.sh 中如下命令进行扫描:

dependency-check --enableExperimental -f SARIF --nvdApiKey $NVD_API_KEY -s Package.resolved

生成的 output.txt(SARIF,dependency-check 10.0.4)中至少报告了两条针对pkg:swift/swift-nio@2.33.0的 CVE:

  • CVE-2020-9861(高危,CVSS v3 7.5):Swift for Linux 在处理深层嵌套的恶意 JSON 输入时存在未受控递归导致的栈溢出;
  • CVE-2022-1642(高危):swift-corelibs-foundation的JSONDecoder在 Codable 类型校验与最终类型转换阶段使用了不同的类型擦除方法,构造的浮点数字面量可触发确定性崩溃(拒绝服务)。

Demo 的结论是:swift-nio至少携带两个已知漏洞(CVE-2022-3918 与 CVE-2022-1642 见 Demo 文档,output.txt 中另有 CVE-2020-9861),应升级到最新版本。评审 SARIF 报告时需逐个核对,因为可能存在误报。

无源码场景:运行时核对应用内库清单

当没有源码、只能拿到已安装应用时,仍可借助工具识别依赖(通常表现为第三方库或 iOS Frameworks 形式)。推荐使用 Objection(MASTG-TOOL-0035),也可使用 MASTG-TOOL-0038 或otool -L命令;Objection 因其结果准确且易于使用而被推荐,它内置了 iOS Bundles 模块,提供list_bundles与list_frameworks两个命令。

list_bundles列出应用所有与 Frameworks 无关的 bundle,输出包含可执行文件名、Bundle ID、库版本与路径:

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_bundles Executable Bundle Version Path ------------ ----------------------------------------- --------- ------------------------------------------- DVIA-v2 com.highaltitudehacks.DVIAswiftv2.develop 2 ...-1F0C-4DB1-8C39-04ACBFFEE7C8/DVIA-v2.app CoreGlyphs com.apple.CoreGlyphs 1 ...m/Library/CoreServices/CoreGlyphs.bundle

list_frameworks则列出应用中代表 Frameworks 的 bundle:

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_frameworks Executable Bundle Version Path -------------- ----------------------------------------- --------- ------------------------------------------- Bolts org.cocoapods.Bolts 1.9.0 ...8/DVIA-v2.app/Frameworks/Bolts.framework RealmSwift org.cocoapods.RealmSwift 4.1.1 ...A-v2.app/Frameworks/RealmSwift.framework ...ystem/Library/Frameworks/IOKit.framework ...

此外还有两类手动核验路径:

  • 手工链接的框架:打开.xcodeproj项目属性,进入Build Phases标签页,检查Link Binary With Libraries中的条目;
  • 复制粘贴的源码:若库以源码形式混入工程,可搜索头文件(Objective-C 场景)或 Swift 文件中的已知方法名来识别。

对于混合应用(Hybrid App),还需用 RetireJS 核对 JavaScript 依赖;对于跨平台框架应用,则需核对其插件与库依赖。

面向供应链的 SBOM 路线:Dependency-Track 持续监控

除了单次扫描,MASTG 还提供了基于软件物料清单(SBOM)的持续性供应链审计方案,对应新测试 MASTG-TEST-0275(MASWE-0044)。

首先用 cdxgen(MASTG-TOOL-0134) 在 Xcode 项目根目录生成 CycloneDX 格式的 SBOM(当前仅支持 SwiftPM,Carthage 与 CocoaPods 暂不支持;MASTG-TECH-0132):

cdxgen -o sbom.json

将 SBOM 做 Base64 编码后,通过 REST API 上传到 Dependency-Track(MASTG-TOOL-0132)(组件分析平台,可识别并降低软件供应链风险):

cat sbom.json | base64 curl -X "PUT" "http://localhost:8081/api/v1/bom" \ -H 'Content-Type: application/json' \ -H 'X-API-Key: <YOUR API KEY>' \ -d $'{ "project": "<YOUR PROJECT ID>", "bom": "<BASE64-ENCODED SBOM>" }'

若生成的 JSON 过大,可参考 Dependency-Track 的 CI/CD 上传替代方案。上传后打开前端(默认http://localhost:8080),在对应项目中核对是否存在带已知漏洞的依赖。注意:MASTG-TOOL-0134 对 SwiftPM 生成的 SBOM不包含传递依赖,审计时需要评估这一限制的影响。

发现漏洞依赖后的处置决策树

当确认某个库存在漏洞时,MASTG 建议按以下逻辑决策(详见 MASTG-TEST-0085):

  • 库被打包进应用:先看是否存在已修复该漏洞的版本;若没有,评估该漏洞是否实际影响应用;若已影响或未来可能影响,则寻找功能相似且无漏洞的替代库。
  • 库未被打包进应用(如构建期工具):同样先找已修复版本;若无,评估漏洞对构建流程的影响——它是否会阻碍构建或削弱构建管线的安全性——再考虑寻找修复了漏洞的替代品。
  • 高风险应用:最终需对库进行人工审查。原生代码部分应满足与 MASVS 对应用整体一致的要求,同时核验其是否遵循软件工程最佳实践。

动态验证与许可证合规

动态分析包含两部分:许可证合规核验与缺失源码时的库清单核验。前者需要确认应用是否遵守各第三方库许可证的版权要求——通常表现为应用内应存在About或EULA章节,按许可证要求注明版权声明。后者即在无源码时通过 Objection 等工具列出应用实际加载的库与框架(见上文运行时清单方法),据此判断是否包含不应出现或未声明许可的组件。

延伸:隐私清单中的第三方组件

供应链风险并不止于 CVE。iOS 应用内的第三方框架也会通过PrivacyInfo.xcprivacy隐私清单声明数据收集行为,MASTG 提供了检索这些清单的 MASTG-TECH-0136:在解包后的应用目录中执行find . -name "PrivacyInfo.xcprivacy",即可发现主应用、.bundle、PlugIns、Extensions 与Frameworks/下各第三方框架的隐私清单,据此核实第三方库的隐私实践是否符合应用的合规承诺。

小结

iOS 第三方库审计是一个从资产盘点到持续监控的闭环:先用Package.resolved/Podfile.lock/Cartfile.resolved等锁定文件定位依赖版本,再用 dependency-check(MASTG-TOOL-0131)做 SCA 单次扫描(MASTG-TECH-0133、MASTG-TEST-0273),或用 cdxgen + Dependency-Track 建立 SBOM 化持续监控(MASTG-TECH-0132、MASTG-TEST-0275);无源码时借助 Objection 的list_bundles/list_frameworks完成运行时核对。对照 MASTG-DEMO-0052 的完整示例,你可以将这套流程直接复用到自己的 iOS 项目,并在发现 CVE 后按照处置决策树完成升级、替换或人工审查,最终把第三方库风险控制在应用可接受的范围内。

  • 文档
  • 教程
  • 网络安全

【免费下载链接】mastg

The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.

项目地址:https://gitcode.com/gh_mirrors/ow/mastg
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询