资讯动态

MASTG 实践:iOS 应用弱哈希算法静态检测(MASTG-TEST-0211)完整指南

发布时间:2026/10/9 5:04:27 来源:尧图企业网站定制
文档教程网络安全【免费下载链接】mastgThe 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 GuideMASTG中的测试用例 MASTG-TEST-0211Broken Hashing Algorithms 为核心系统讲解如何在 iOS 应用中通过静态分析定位 MD5、SHA-1 等已损坏哈希算法的使用。你将掌握 iOS 两大密码学框架CommonCrypto 与 CryptoKit中哈希 API 的完整清单、基于 radare2 的二进制级检索方法、配套演示工程 MASTG-DEMO-0015 与 MASTG-DEMO-0016 的可复现操作以及如何在安全相关上下文中正确判定算法使用是否违规。测试概述本用例检测什么MASTG-TEST-0211 属于MASVS-CRYPTO类别对应 MASWE-0008弱哈希算法使用弱点。它的目标非常明确检测 iOS 应用中是否调用了已被业界判定为不安全broken的哈希算法。该测试的类型定义为[static, code, manual]意味着它属于静态分析static——无需运行应用直接分析二进制需要检查源代码/反汇编代码code最终结论依赖人工研判manual——因为算法是否违规取决于其使用的上下文。测试的核心思路是聚焦应用通过密码学框架和库执行哈希操作的 API。iOS 生态中与哈希相关的框架主要有两个CommonCryptoC 语言接口的系统级密码学库CryptoKitSwift 原生密码学框架。需要特别说明的是Apple 的Security 框架只支持非对称算法如签名、密钥交换不提供哈希原语因此不在本测试的范围内。目标 API 全景两大框架的哈希算法清单CommonCrypto从 MD2 到 SHA-512CommonCrypto 的头文件CommonDigest.h定义了以下哈希算法 API本测试关注其中全部可通过符号导入的入口算法 API摘要长度安全状态CC_MD2128 bit已损坏CC_MD4128 bit已损坏CC_MD5128 bit已损坏CC_SHA1160 bit已损坏CC_SHA224224 bit安全CC_SHA256256 bit安全CC_SHA384384 bit安全CC_SHA512512 bit安全在二进制中这些 API 以sym.imp.CC_MD5、sym.imp.CC_SHA1等导入符号的形式存在这正是静态检索的切入点。CryptoKitInsecure命名空间的刻意区分CryptoKit 在 API 设计上非常鲜明地表达了安全性立场安全算法直接以类型名暴露SHA256、SHA384、SHA512而 MD5 与 SHA-1 则被归入名为Insecure的专用命名空间以此提示开发者你正在使用不安全的算法CryptoKit API安全状态SHA256安全SHA384安全SHA512安全Insecure.MD5已损坏Insecure.SHA1已损坏在二进制符号层面这些调用会体现为sym.imp.CryptoKit.Insecure.MD5、sym.imp.CryptoKit.Insecure.SHA1等导入符号详见下文演示的检索输出。测试步骤一从应用包中提取二进制MASTG-TECH-0058要分析一个 iOS 应用第一步是拿到 IPA 并解包提取出可执行二进制。MASTG 为此提供了通用技术 MASTG-TECH-0058Exploring the App Package其核心流程如下。先用unzip解压 IPAunzip iGoat-Swift.ipa解压后会得到Payload目录内含 Application Bundle.app。例如$ ls -1 Payload/iGoat-Swift.app Info.plist _CodeSignature/ Frameworks/ iGoat-Swift与哈希检测相关的关键产物是主二进制文件与 bundle 同名去掉.app后缀例如Payload/MASTestApp.app/MASTestApp它包含应用的全部代码Swift/Objective-C 编译产物Frameworks/应用的动态库与 framework如Realm.framework、libswiftCore.dylib等其中可能内嵌第三方哈希实现Info.plist应用配置元数据bundle ID、版本号等Linux 下可用plistutil -i Info.plist -o Info_xml.plist转换为 XML 后检查。提取二进制是后续所有检索命令的前提检测对象是主二进制及其 framework 中的可执行代码而不只是源代码文件。测试步骤二在二进制中检索哈希 APIMASTG-TECH-0066MASTG-TECH-0211 指定使用 MASTG-TECH-0066Static Analysis on iOS 来查找相关 API。该技术以 radare2r2即 MASTG-TOOL-0073为主要工具以下是针对哈希算法的完整检索套路。列函数并过滤用afl列出二进制中所有函数并用~过滤器按名字筛选。查找 CommonCrypto 哈希函数afl~CC_查找 CryptoKit 不安全哈希函数afl~Insecure.在配套演示 MASTG-DEMO-0016 的输出 output.txt 中这条命令的结果如下可以看到 MD5/SHA-1 相关的 4 个导入符号被完整列出Uses of CryptoKit.Insecure functions: 0x100007274 1 12 sym.imp.CryptoKit.Insecure.SHA1Digest. 0x100007280 1 12 sym.imp.CryptoKit.Insecure.MD5. 0x10000728c 1 12 sym.imp.CryptoKit.Insecure.SHA1. 0x100007298 1 12 sym.imp.CryptoKit.Insecure.MD5Digest.追踪交叉引用仅仅看到导入符号还不够必须确定谁在调用它。用axt查找对目标地址的交叉引用例如对CryptoKit.Insecure.MD5axt 0x100007280 sym.func.10000469c 0x1000046d8 [CALL:--x] bl sym.imp.CryptoKit.Insecure.MD5.这表示sym.func.10000469c函数内部在0x1000046d8处通过blbranch-and-link指令调用了Insecure.MD5。同理可追踪CC_MD5、CC_SHA1的调用点。如果需要完整还原调用链可使用axg输出从被调函数反向回溯到调用者的调用图axg ..78ac反汇编调用点上下文锁定调用地址后用pd反汇编该区域的指令。例如查看 CommonCrypto 中CC_MD5调用点前后 5 条指令pd-- 5 0x1000048c4在 MASTG-DEMO-0015 的输出 中可以看到典型的 ARM64 调用序列——先构造参数add x0, sp, 0x18指向输出缓冲区、mov w1, 0清零再执行bl sym.imp.CC_MD5Use of MD5: 0x1000048b8 e01b00f9 str x0, [sp, 0x30] 0x1000048bc e0630091 add x0, sp, 0x18 0x1000048c0 01008052 mov w1, 0 ; CODE XREF from sym.func.100004728 0xf0(x) 0x1000048c4 390a0094 bl sym.imp.CC_MD5 0x1000048c8 e00316aa mov x0, x22 0x1000048cc e10314aa mov x1, x20 0x1000048d0 7d000094 bl sym.func.100004ac4对完整函数体可用pdf反编译查看其整体实现pdf function_address配套演示一键复现检测过程MASTG 仓库为 MASTG-TEST-0211 提供了两个可直接复现的演示工程分别覆盖两大框架MASTG-DEMO-0015CommonCrypto 场景MASTG-DEMO-0015 对应 CommonCrypto 场景。其 样例源码 MastgTest.swift 直观展示了问题代码长什么样——用CC_SHA1和CC_MD5直接对输入数据计算摘要import Foundation import CommonCrypto struct MastgTest { // Function to generate a SHA-1 hash static func generateSHA1Hash(data: Data) - String { var hash UInt8) data.withUnsafeBytes { _ CC_SHA1($0.baseAddress, CC_LONG(data.count), hash) } return hash.map { String(format: %02hhx, $0) }.joined() } // Function to generate an MD5 hash static func generateMD5Hash(data: Data) - String { var hash UInt8) data.withUnsafeBytes { _ CC_MD5($0.baseAddress, CC_LONG(data.count), hash) } return hash.map { String(format: %02hhx, $0) }.joined() } static func mastgTest(completion: escaping (String) - Void) { let input This is a sample text.data(using: .utf8)! let sha1Hash generateSHA1Hash(data: input) let md5Hash generateMD5Hash(data: input) // ... completion(value) } }作者提供的 radare2 脚本 cchash.r2 把整个检测流程脚本化?e为 r2 的打印命令?e Uses of CommonCrypto hash function: afl~CC_ ?e xrefs to CC_MD5: axt 0x1000071a8 ?e xrefs to CC_SHA1: axt 0x1000071b4 ?e Use of MD5: pd-- 5 0x1000048c4 ?e Use of SHA1: pd-- 5 0x10000456c配合 run.sh 即可对MASTestApp二进制一键执行完整分析r2 -q -i cchash.r2 -A MASTestApp命令参数说明-q静默模式不进入交互界面、-i cchash.r2加载并执行脚本、-A自动分析让afl等命令有分析结果可用。MASTG-DEMO-0016CryptoKit 场景MASTG-DEMO-0016 对应 CryptoKit 场景检索脚本 cryptokit_hash.r2 将过滤目标换成Insecure.前缀。其 输出 output.txt 显示Insecure.MD5的调用点位于sym.func.10000469c内的0x1000046d8Insecure.SHA1的调用点位于sym.func.1000041d8内的0x100004214并给出了对应的反汇编片段xrefs to CryptoKit.Insecure.MD5: sym.func.10000469c 0x1000046d8 [CALL:--x] bl sym.imp.CryptoKit.Insecure.MD5. xrefs to CryptoKit.Insecure.SHA1: sym.func.1000041d8 0x100004214 [CALL:--x] bl sym.imp.CryptoKit.Insecure.SHA1.观察期望的输出形态按照 MASTG-TEST-0211 的定义执行上述步骤后输出应当包含所有调用了相关密码学函数的函数的反汇编代码。具体而言二进制中哈希 API 导入符号的完整列表afl~CC_/afl~Insecure.的输出每个弱哈希 API 的交叉引用信息axt输出标明调用方函数与调用指令地址调用点所在区域的反汇编代码pd-- 5/pd输出用于人工研判上下文。评估如何判定测试失败MASTG-TEST-0211 的判定规则很直接如果在源码或二进制中发现弱哈希算法的使用测试即失败。典型的失败样本包括MD5CC_MD5、CryptoKit.Insecure.MD5SHA-1CC_SHA1、CryptoKit.Insecure.SHA1在两个演示工程中由于CC_MD5/CC_SHA1DEMO-0015和Insecure.MD5/Insecure.SHA1DEMO-0016均被检出测试结论均为失败。注意此列表是非穷尽的。MD2、MD4、SHA-224 等也属于弱哈希范畴其中 MD2/MD4 同属已损坏算法应根据官方权威机构的持续更新调整检测清单。进一步验证区分安全相关与非安全上下文MASTG-TECH-0076发现弱哈希调用并不等于漏洞成立。MASTG-TEST-0211 明确要求使用 MASTG-TECH-0076Reviewing Disassembled Objective-C and Swift Code 对每个报告点进行人工研判核心问题是该算法是否被用于保护敏感数据的安全相关场景。MASTG-TECH-0076 提供了一套系统化的手工分析套路适用于本用例的上下文判定理解应用工作原理——先弄清应用的目标以及错误输入时的行为通读二进制中的字符串——如错误提示、日志等帮助定位数据处理逻辑寻找名字相关的函数与类——例如包含Hash、Digest、Password字样的符号从入口点跟进——从application:didFinishLaunchingWithOptions:等生命周期入口沿调用链追踪确认哈希结果最终流向哪里。判定原则同一算法两种结论关键判例是NIST 的立场例如用 MD5 做密码哈希是被 NIST 明令禁止的但用 MD5 做不涉及安全性的校验和checksum通常可以接受。因此使用场景判定用 SHA-1/MD5 对密码、口令、令牌做单向哈希违规安全相关上下文用 MD5 校验下载文件完整性、检测传输错误一般可接受非安全用途用 SHA-1 生成数字签名、证书指纹违规安全相关上下文从源码结构看DEMO-0015/0016 的MastgTest.swift只是对固定样例文本计算并输出摘要属于教学演示性质真实评估时必须结合反汇编代码判断哈希结果是否参与了认证、授权、数据保护等安全链路。保持更新算法淘汰是动态过程弱哈希清单会随密码学进展不断变化。构建长期存储数据场景的应用时应持续跟踪权威机构的最新建议包括美国国家标准与技术研究院NIST的算法建议特别是其 2024 年发布的NIST IR 8547《Transition to Post-Quantum Cryptography Standards》后量子密码标准迁移指南其中对哈希算法在抗量子时代的长期安全性提出了前瞻性要求德国联邦信息安全办公室BSI等区域监管机构的技术指南。这意味着 MASTG-TEST-0211 的检测清单不应被当作一成不变的静态集合而应结合应用的数据留存周期与最新标准动态调整。结语MASTG-TEST-0211 是 MASTG 中针对 iOS 弱哈希算法的标准化检测用例其方法论可以概括为一条可复用的链路解包 IPA 提取二进制MASTG-TECH-0058→ 用 radare2 按符号过滤哈希 API 并追踪交叉引用MASTG-TECH-0066→ 反汇编调用点 → 结合人工分析判定安全上下文MASTG-TECH-0076。配合仓库内的 MASTG-DEMO-0015 与 MASTG-DEMO-0016 演示工程安全测试人员可以在几秒钟内复现完整的检测流程并将同样的方法论迁移到任何 Swift/Objective-C 应用的二进制审计中。赞分享文档教程网络安全【免费下载链接】mastgThe 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点击查看免费下载相关推荐使用 radare2 检测 iOS 应用中的 CommonCrypto 弱哈希算法MASTG-DEMO-0015 实战使用 radare2 检测 iOS 应用中的 CommonCrypto 弱哈希算法MASTG DEMO 0015 实战 本篇技术指南以 OWASP MASTG文档教程网络安全OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG-TEST-0210OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG TEST 0210 本文基于 OWASP Mobile Applic文档教程网络安全检测 Android 应用导出 FileProvider 的过度文件共享MASTG 静态测试 MASTG-TEST-0357 实战指南检测 Android 应用导出 FileProvider 的过度文件共享MASTG 静态测试 MASTG TEST 0357 实战指南 MASTG TEST文档教程网络安全上一篇英雄联盟国服换肤工具5分钟解锁全皮肤免费体验下一篇3分钟永久激活Windows与Office开源智能激活工具完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑