跳过内容

MASTG-TEST-0085:检查第三方库中的弱点

已弃用测试

此测试已**弃用**,不应再使用。**原因**:MASTG V2 中提供新版本

请查看以下涵盖此 v1 测试的 MASTG v2 测试

概述

静态分析

检测第三方库的漏洞

为了确保应用程序使用的库没有携带漏洞,最好检查 CocoaPods 或 Carthage 安装的依赖项。

Swift Package Manager

如果使用Swift Package Manager管理第三方依赖项,可以采取以下步骤来分析第三方库的漏洞

首先,在项目根目录中,找到 Package.swift 文件,然后键入

swift build

接下来,检查文件 Package.resolved 以获取实际使用的版本,并检查给定的库是否存在已知漏洞。

您可以利用OWASP Dependency-Check的实验性Swift Package Manager Analyzer来识别所有依赖项的通用平台枚举 (CPE)命名方案以及任何相应的通用漏洞和暴露 (CVE)条目。扫描应用程序的 Package.swift 文件并生成已知漏洞库的报告,使用以下命令

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

CocoaPods

如果使用CocoaPods管理第三方依赖项,可以采取以下步骤来分析第三方库的漏洞。

首先,在项目根目录中,找到 Podfile 文件,然后执行以下命令

sudo gem install cocoapods
pod install

接下来,现在已经构建了依赖关系树,您可以通过运行以下命令来创建依赖关系及其版本的概述

sudo gem install cocoapods-dependencies
pod dependencies

上述步骤的结果现在可以用作搜索不同漏洞信息源以查找已知漏洞的输入。

注意

  1. 如果开发人员使用 .podspec 文件将其所有依赖项打包到自己的支持库中,则可以使用实验性的 CocoaPods podspec 检查器来检查此 .podspec 文件。
  2. 如果项目结合使用 CocoaPods 和 Objective-C,则可以使用 SourceClear。
  3. 使用基于 HTTP 的链接而不是 HTTPS 的 CocoaPods 可能会导致在依赖项下载期间发生中间人 (MITM) 攻击,从而允许攻击者用其他内容替换库的(部分)内容。因此,请始终使用 HTTPS。

您可以利用OWASP Dependency-Check的实验性CocoaPods Analyzer来识别所有依赖项的通用平台枚举 (CPE)命名方案以及任何相应的通用漏洞和暴露 (CVE)条目。扫描应用程序的 *.podspec 和/或 Podfile.lock 文件并生成已知漏洞库的报告,使用以下命令

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

Carthage

如果使用Carthage作为第三方依赖项,可以采取以下步骤来分析第三方库的漏洞。

首先,在项目根目录中,找到 Cartfile 文件,然后键入

brew install carthage
carthage update --platform iOS

接下来,检查 Cartfile.resolved 以获取实际使用的版本,并检查给定的库是否存在已知漏洞。

请注意,在撰写本章时,作者不知道有任何针对基于 Carthage 的依赖项分析的自动化支持。至少,OWASP DependencyCheck 工具已经请求了此功能,但尚未实现(请参阅GitHub issue)。

发现的库漏洞

当发现某个库包含漏洞时,应遵循以下推理

  • 该库是否与应用程序打包在一起?然后检查该库是否有已修复漏洞的版本。如果没有,请检查该漏洞是否实际影响应用程序。如果是这种情况,或者将来可能出现这种情况,那么请寻找提供类似功能但没有漏洞的替代方案。
  • 该库是否未与应用程序打包在一起?查看是否有已修复漏洞的版本。如果不是这种情况,请检查漏洞对构建过程的影响。该漏洞是否会妨碍构建或削弱构建管道的安全性?然后尝试寻找已修复漏洞的替代方案。

如果框架以链接库的形式手动添加

  1. 打开 xcodeproj 文件并检查项目属性。
  2. 转到 Build Phases 选项卡,并检查 Link Binary With Libraries 中的条目中是否有任何库。有关如何使用 MobSF获取类似信息,请参见前面的章节。

对于复制粘贴的源代码:在头文件中(如果使用 Objective-C),否则在 Swift 文件中搜索已知库的已知方法名称。

接下来,请注意,对于混合应用程序,您需要使用RetireJS检查 JavaScript 依赖项。同样,对于 Xamarin,您需要检查 C# 依赖项。

最后,如果应用程序是高风险应用程序,您最终将手动审查该库。在这种情况下,对于本机代码有特定的要求,这些要求与 MASVS 为整个应用程序建立的要求相似。除此之外,最好审查是否应用了所有软件工程的最佳实践。

动态分析

本节的动态分析包括两个部分:实际的许可证验证以及检查缺少源代码时涉及的库。

需要验证是否遵守了许可证的版权。这通常意味着应用程序应具有一个 aboutEULA 部分,其中注明了第三方库的许可证要求的版权声明。

列出应用库

执行应用程序分析时,重要的是还要分析应用程序依赖项(通常以库或所谓的 iOS 框架的形式存在),并确保它们不包含任何漏洞。即使您没有源代码,您仍然可以使用诸如 objection MobSFotool -L 命令之类的工具来识别一些应用程序依赖项。建议使用 Objection,因为它提供了最准确的结果并且易于使用。它包含一个用于处理 iOS Bundles 的模块,该模块提供两个命令:list_bundleslist_frameworks

list_bundles 命令列出应用程序的所有与框架无关的 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 命令列出代表框架的应用程序的所有 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
...