在移动渗透测试中,第三方模块或库通常被视为超出测试范围,但根据评估的具体要求和测试团队与客户之间的协议,这一决定可能有所不同。这些第三方模块或库以针对特定编程语言和平台的文件格式打包。例如,在Java中,库通常以.jar文件形式分发,封装了编译后的字节码以及资源和元数据。类似地,Android库采用.aar扩展名,捆绑了Android特定的资源和依赖项,以便无缝集成到Android项目中。基于Windows的系统依赖.dll文件,而基于Unix的系统偏好.so文件,两者都作为在运行时动态链接到应用程序的动态链接库。macOS和iOS生态系统使用.dylib文件或.framework目录,其中包含编译后的代码、资源和元数据。在本博客中,我们将概述测试移动SDK的简明方法论。遵循此方法论,安全渗透测试人员能够发现移动SDK中的漏洞和弱点,帮助开发者加固其应用以抵御潜在威胁。
移动SDK安全测试的前置条件
- 获取移动SDK文件(例如.jar、.aar、.so、.dll文件)。
- 获取已集成SDK的演示应用程序。
- 确保拥有测试账户和配置SDK所需的API密钥。
- 移动SDK集成文档。
- 源代码(如需要)
测试涉及大量对SDK及其用例的理解,以基于其功能构建各种测试案例。下面我们将看到移动SDK测试在不同阶段是如何进行的,并解释各阶段发现的示例和漏洞。
与典型的移动应用程序渗透测试类似,移动SDK测试也包含以下阶段:
- 静态分析
- 动态分析
- SDK的不安全集成
- SDK的默认安全
静态分析
这涉及反编译库文件,逆向工程代码以可能提取源代码,然后审查代码库中的漏洞。此步骤可能利用各种自动化和半自动化工具,如MobSF、JadX、APKtool、Ghidra、DNSpy等,以可能获得库/包的源代码。一旦包被反编译,就会像移动应用渗透测试中的静态分析一样分析以发现漏洞。在此步骤中发现的常见漏洞如下:
- 硬编码密钥
- 不安全的深度链接
- 不安全的WebView
- 不安全的应用程序组件(如导出的Activity、Content Provider等)
- 客户端SQL注入
- 过度权限
- 不安全的存储
- 敏感数据的不安全日志记录
- 以及更多
(所有这些单独主题可能在单独的博客文章中涵盖。)
动态分析
这涉及流量拦截和检查API或网络流量中的漏洞。在运行时分析应用程序,以可能利用在静态分析中识别出的错误配置。敏感数据的暴露、权限管理以及应用程序与其他已安装应用程序的交互。
- 测试Web服务和REST API的OWASP漏洞
- 根检测
- SSL/证书固定绕过
- 运行时分析
- 绕过静态和运行时保护
- 测试对各种防御措施的弹性
- 测试加密技术
(所有这些单独主题可能在单独的博客文章中涵盖。)
SDK的不安全集成
这涉及仔细检查SDK开发者提供的文档,以理解推荐的实现实践。通过仔细审查SDK文档,安全分析师可以识别可能导致不安全集成的潜在陷阱或错误配置。一旦识别出这些不安全的集成方法,可以采取措施更新文档,向开发者提供清晰的警告和关于如何安全实现SDK的指导。
让我们考虑一个涉及初始化名为“CryptoLibrary”的假设加密库的不同场景,该库为Android应用程序中的敏感数据存储提供加密和解密功能。
不安全示例:
|
|
在这个不安全的示例中,在初始化期间调用setEncryptionKey方法为加密库设置加密密钥。然而,使用的密钥(insecure_key)是直接硬编码在代码中的,这构成了重大的安全风险。
安全版本:
|
|
在安全示例中,加密密钥不是硬编码在代码中的。相反,它在初始化期间从安全存储机制(如Android Keystore)中检索。
SDK的默认安全
在此步骤中,分析SDK的默认初始化以发现任何漏洞。SDK通常带有默认配置,这些配置可能不优先考虑安全性或可能无意中引入漏洞。默认初始化分析还涉及审查SDK文档,以了解默认设置如何影响安全性。基于默认初始化分析的结果,可以向开发者提出关于如何安全地将SDK集成到其应用程序中的建议。识别出的漏洞示例如下:
- 默认加密设置:确保SDK的默认初始化使用强加密算法。
- 默认启用调试模式
- 默认使用不安全通道
- SDK默认请求过于宽泛的权限,这些权限并非SDK所需
- 文档未突出显示默认设置的潜在安全影响
结论
总之,移动SDK渗透测试是确保移动应用程序安全的关键方面。通过全面评估SDK集成的静态和动态方面,安全专业人员可以识别可能被恶意行为者利用的漏洞和弱点。