ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 radare2 检测 iOS 应用中的 CommonCrypto 弱哈希算法:MASTG-DEMO-0015 实战

使用 radare2 检测 iOS 应用中的 CommonCrypto 弱哈希算法:MASTG-DEMO-0015 实战 文档教程网络安全【免费下载链接】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 MASTG 仓库中的演示用例 MASTG-DEMO-0015 为核心完整演示如何对 iOS 应用二进制实施静态逆向分析利用 radare2 定位CommonCrypto框架中被认为不安全broken的哈希算法调用MD5、SHA-1。你将掌握 IPA 解包定位主二进制、编写并执行 radare2 分析脚本、解读 xref 与反汇编输出、以及结合上下文正确评估算法使用是否违规的完整方法论可直接复用于 MASTG-TEST-0211 对应的真实渗透测试场景。背景为什么要检测损坏的哈希算法哈希算法在移动应用中的用途极为广泛口令存储、消息摘要、完整性校验、签名构造等。其中部分历史悠久的算法MD5、SHA-1已被证明存在碰撞攻击等密码学弱点被 NIST、BSI 等权威机构明确不建议用于安全目的。OWASP MASTG 通过测试用例 MASTG-TEST-0211Broken Hashing Algorithms映射到 MASWE-0008对齐 MASVS-CRYPTO-1来验证该弱点该用例也取代了旧版 MASTG-TEST-0061原 MSTG-CRYPTO-2/MSTG-CRYPTO-3状态为 deprecated。MASTG-TEST-0211 明确划定了 iOS 平台上需要关注的哈希 API 范围CommonCryptoCommonDigest.h定义CC_MD2、CC_MD4、CC_MD5、CC_SHA1、CC_SHA224、CC_SHA256、CC_SHA384、CC_SHA512。其中前四个为应重点排查的弱算法CryptoKit提供三个密码学安全的哈希算法SHA256、SHA384、SHA512以及专门放在Insecure类中的Insecure.MD5、Insecure.SHA1Security 框架仅支持非对称算法不在本测试范围内。MASTG-DEMO-0015 聚焦第一条路径——CommonCrypto而仓库中与之配套的 MASTG-DEMO-0016 则覆盖 CryptoKit 的InsecureAPI两者共同构成该测试用例的完整演示矩阵。样本代码MASTestApp 中的 MD5 与 SHA-1 调用演示使用的被测样本位于 MASTG-DEMO-0015/MastgTest.swift编译产物为同目录下的MASTestApp二进制。样本刻意包含两处不安全调用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)! // Generate SHA-1 hash let sha1Hash generateSHA1Hash(data: input) // Generate MD5 hash let md5Hash generateMD5Hash(data: input) let value Original: \(String(data: input, encoding: .utf8)!) SHA-1 Hash: \(sha1Hash) MD5 Hash: \(md5Hash) completion(value) } }从源码可见其技术要点通过import CommonCrypto直接调用 C 语言 API输出缓冲区长度由CC_SHA1_DIGEST_LENGTH/CC_MD5_DIGEST_LENGTH常量决定分别为 20 与 16 字节输入数据经withUnsafeBytes暴露原始缓冲区指针配合CC_LONG类型转换长度后传给CC_SHA1/CC_MD5哈希结果以十六进制小写字符串%02hhx形式返回。需要强调的是iOS 应用二进制只能被反汇编而不能像 Android 那样直接反编译回高级语言因此下述静态分析完全依赖汇编层面的人工判读——这也是 radare2 脚本化分析在此场景下价值突出的原因。操作步骤从 IPA 到反汇编证据链第 1 步解包 IPA 并定位主二进制参照技术指南 MASTG-TECH-0058Exploring the App Package 的流程解压应用包unzip MASTestApp.ipa解包后在Payload/MASTestApp.app/目录下找到主二进制文件MASTestApp其名称与 bundle 名一致、不带.app后缀。该二进制即为本次分析的唯一目标./Payload/MASTestApp.app/MASTestApp主二进制中包含了所有被静态链接进应用的代码包括import CommonCrypto产生的对系统加密库的调用这正是我们随后使用 radare2 分析的对象。如需了解 bundle 内其他组成Info.plist、Frameworks/、_CodeSignature/等的解析方法可继续阅读 MASTG-TECH-0058。第 2 步使用 radare2 加载二进制并执行分析脚本radare2MASTG-TOOL-0073是一个完整的二进制逆向分析框架。演示提供了一条一键式运行命令见 MASTG-DEMO-0015/run.shr2 -q -i cchash.r2 -A MASTestApp参数说明参数含义-qquiet 模式抑制交互式提示适合脚本化批处理-i cchash.r2以批处理方式执行cchash.r2脚本中的 r2 命令序列-A自动分析auto-analysis执行完整的函数/引用分析为后续符号与交叉引用查询建立索引MASTestApp待分析的目标二进制路径第 3 步逐行解读分析脚本 cchash.r2分析脚本 MASTG-DEMO-0015/cchash.r2 内容如下?e;?e ?e Uses of CommonCrypto hash function: afl~CC_ ?e ?e xrefs to CC_MD5: axt 0x1000071a8 ?e xrefs to CC_SHA1: axt 0x1000071b4 ?e ?e Use of MD5: pd-- 5 0x1000048c4 ?e ?e Use of SHA1: pd-- 5 0x10000456c每条命令的作用?e ...向输出打印一行自定义文本用于给分析结果添加可读标签afl~CC_列出全部函数afl analyze function list并用~grep 过滤只保留名字中包含CC_的行。该步骤用于枚举二进制中与 CommonCrypto 相关的导入符号imports从而一次性确定应用调用了哪些哈希算法axt 0x1000071a8/axt 0x1000071b4查询指定地址即CC_MD5/CC_SHA1导入符号所在地址的所有交叉引用axt analyze xrefs定位这些函数被调用的确切代码位置pd-- 5 0x1000048c4/pd-- 5 0x10000456c在交叉引用定位到的调用点处反汇编pd print disassembly-- 5表示以该地址为基准向前、向后各输出 5 条指令展示调用发生现场周围的汇编上下文。第 4 步解读反汇编输出脚本执行后的完整输出保存在 MASTG-DEMO-0015/output.txt 中共包含三个层面的证据1CommonCrypto 导入符号清单证明二进制中存在这些 API 的调用入口Uses of CommonCrypto hash function: 0x1000071a8 1 12 sym.imp.CC_MD5 0x1000071b4 1 12 sym.imp.CC_SHA1afl~CC_的输出显示二进制导入了sym.imp.CC_MD5与sym.imp.CC_SHA1两个系统符号即CC_MD5、CC_SHA1的 stub 导入意味着应用代码中确实引用了这两个函数。2交叉引用xrefs定位到唯一调用点xrefs to CC_MD5: (nofunc) 0x1000048c4 [CALL:--x] bl sym.imp.CC_MD5 xrefs to CC_SHA1: (nofunc) 0x10000456c [CALL:--x] bl sym.imp.CC_SHA1axt结果显示CC_MD5只在0x1000048c4处被调用一次、CC_SHA1只在0x10000456c处被调用一次注意bl是 ARM64 的带链接分支指令即函数调用。xref 数量为 1 与样本源码中的两处调用一一对应这也反向印证了样本函数generateMD5Hash与generateSHA1Hash各只调用一次目标 API。3调用点上下文反汇编展示调用前的参数准备与调用后的处理流程以 MD5 为例Use of MD5: 0x1000048b0 ffe301f8 stur xzr, [sp, 0x1e] 0x1000048b4 ff0f00f9 str xzr, [sp, 0x18] 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 ; CODE XREF from sym.func.100004728 0x184(x)在0x1000048c4的bl sym.imp.CC_MD5之前汇编依次完成清零栈上缓冲区stur xzr/str xzr初始化hash数组、将输入数据指针放入x0、将长度常量0放入w1——这正是CC_MD5(data, len, hash)的调用约定前两个参数寄存器为x0/w1。调用后mov x0, x22等指令则对应 Swift 侧对返回结果进一步处理十六进制格式化等。SHA-1 调用点0x10000456c处的反汇编呈现完全对称的结构。从源码结构看0x1000048c4与0x10000456c分别位于函数sym.func.100004728与sym.func.1000043cc内部见CODE XREF注释它们就是generateMD5Hash/generateSHA1Hash编译后的对应函数可通过pd进一步回溯完整函数体确认。评估测试失败判定与上下文分析演示结论为测试失败test fails由于在代码中同时发现了 MD5 与 SHA-1 两种弱哈希算法的调用按 MASTG-TEST-0211 的判定标准该样本命中使用了损坏的哈希算法这一弱点MASWE-0008。但 MASTG-TEST-0211 与演示文档都反复强调一个关键原则评估必须结合上下文。具体来说若 MD5 / SHA-1 被用于密码学安全目的如口令哈希、消息认证、签名构造则违规NIST 明确禁止此类用途若被用于非安全目的如普通完整性校验、checksum、去重指纹、非机密数据标识则可能可以接受在无法仅凭静态证据断定用途时应使用 MASTG-TECH-0076 等动态分析手段进一步分析被调用点周边的数据流与调用链判断哈希结果被用于何处。回到本样本MastgTest.swift中哈希结果仅被拼接进输出字符串展示未参与任何安全机制。若该模式是应用内唯一用途可初步认定为非安全场景但测试文档要求每个上报位置都要进一步验证因此正规报告流程是静态定位 → 上下文复核 → 最终判定。此外MASTG-TEST-0211 还给出了一条时效性提示弱算法清单并非穷尽列表建议持续跟踪 NIST如 2024 年发布的 NIST IR 8547《Transition to Post-Quantum Cryptography Standards》、BSI 等机构的最新建议尤其是需要长期保存的数据场景。扩展与 CryptoKit 变体及旧版测试的关联仓库在同一测试用例下提供了另一路演示 MASTG-DEMO-0016CryptoKit 版本其样本改用CryptoKit.Insecure.MD5/Insecure.SHA1r2 脚本cryptokit_hash.r2同样通过afl、axt、pd三步定位调用点。对比两条路径可发现无论应用走 C 语言风格的 CommonCrypto 还是 Swift 风格的 CryptoKitradare2 的符号枚举 → 交叉引用 → 上下文反汇编方法论完全一致只需调整过滤关键字CC_vsInsecure。从演进角度看MASTG-DEMO-0015 与 MASTG-DEMO-0016 共同替代了已废弃的旧版测试 MASTG-TEST-0061MSTG-CRYPTO-2/MSTG-CRYPTO-3后者被拆分为 MASTG-TEST-0209、MASTG-TEST-0210、MASTG-TEST-0211 三个更细粒度的新用例其中 0211 专门负责哈希算法部分。可复用的检查清单将上述流程固化为一份可移植到任意 iOS 目标的操作清单unzip App.ipa解包定位Payload/App.app/App主二进制参考 MASTG-TECH-0058用 radare2 打开并自动分析r2 -q -i script.r2 -A binary枚举弱算法导入符号afl~CC_MD5|CC_SHA1|CC_MD4|CC_MD2或afl~Insecure对每个命中符号查询交叉引用axt imp_address得到全部调用点对每个调用点反汇编上下文pd-- N call_address确认参数准备与结果流向结合源码/动态分析MASTG-TECH-0076判断算法用途是否涉及密码学安全依据 MASTG-TEST-0211 判定安全用途命中即失败纯校验用途需说明并复核。本文全部脚本、样本与输出均可在仓库 MASTG-DEMO-0015 目录 中直接查看与复跑测试依据见 MASTG-TEST-0211。赞分享文档教程网络安全【免费下载链接】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 应用中的硬编码 ECDSA 私钥CryptoKit P-256 静态分析实战MASTG-DEMO-0014使用 radare2 检测 iOS 应用中的硬编码 ECDSA 私钥CryptoKit P 256 静态分析实战MASTG DEMO 0014 本文以 O文档教程网络安全Docker 部署 AzerothCore-WoTLK 服务器一次搭对、随时可查的完整指南Docker 部署 AzerothCore WoTLK 服务器一次搭对、随时可查的完整指南 AzerothCore WoTLK 是开源的魔兽世界服务端Doc文档教程网络安全MASTG-DEMO-0041 深度解析用 radare2 定位 iOS 生物识别认证的 LAContext.evaluatePolicy 弱点MASTG DEMO 0041 深度解析用 radare2 定位 iOS 生物识别认证的 LAContext.evaluatePolicy 弱点 导读 本文基文档教程网络安全上一篇推荐开源项目Scour - SVG优化利器下一篇Playwright Test Runner截图与视频录制如何自动捕获测试失败证据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表