多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

OWASP MASTG 实战指南:Android 应用随机数生成(PRNG)安全性测试

OWASP MASTG 实战指南:Android 应用随机数生成(PRNG)安全性测试 文档教程网络安全【免费下载链接】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 MASTGMobile Application Security Testing Guide中的随机数生成测试用例 MASTG-TEST-0016原 MSTG-CRYPTO-6对应 MASVS-CRYPTO-1系统讲解如何在 Android 应用中识别、定位和验证不安全的伪随机数生成器PRNG并给出静态分析、语义规则自动化扫描与动态分析的完整实战流程。读完本文你将能够独立完成随机数来源是否可预测、是否用于安全敏感场景的测试评估并掌握java.util.Random、Math.random()、显式种子SecureRandom及非随机时间源等典型脆弱模式的可复现检测方法。说明MASTG-TEST-0016 在仓库中已标记为status: deprecated被 V2 版本的新用例 MASTG-TEST-0204 与 MASTG-TEST-0205 覆盖但其核心测试思路——静态定位 语义规则 动态验证——与 V2 用例一脉相承本文以 V1 用例为骨架融合 V2 与仓库规则/demo 资源展开。一、测试目标与安全背景随机数在移动应用的安全机制中扮演关键角色会话标识session identifiers、密码重置令牌、加密密钥、初始化向量IV、nonce 以及一次性 PIN 码的生成都依赖不可预测的随机源。一旦随机数可被预测攻击者就能推算出后续生成的随机值进而伪造令牌、猜测 PIN 或削弱加密强度。MASTG-TEST-0016 的目标Objective非常明确识别应用中所有随机数生成器实例判定其是否使用了不可预测的安全随机源。该用例同时覆盖 MASVS V1 的 L1 与 L2 两个安全等级说明即使是最基础的移动应用安全基线也要求随机数生成满足密码学强度。判定原则如果一个 PRNG 未被明确标注为密码学安全例如java.util.Random它大概率只是统计意义上的 PRNG不得用于安全敏感场景只要攻击者知道生成器类型并能够猜测或观察到种子seed伪随机数生成器就可以产出可预测的数值序列一个 128 位的种子是产生足够随机数值的良好起点。二、静态分析定位不安全的随机数生成器静态分析是 MASTG-TEST-0016 的核心环节目标是从反编译代码中找出所有随机数生成器实例并逐一甄别其类型与使用方式2.1 识别典型的非密码学 PRNGjava.util.Random是一个线性同余生成器linear congruential generator对于每个给定的种子值它会产生完全相同的数值序列。这意味着序列是可预测的——只要攻击者知道生成器类型与种子就能复现整条序列。与之同源的还有Math.random()它本质上是对一个静态java.util.Random实例调用nextDouble()的结果因此具有完全相同的可预测性缺陷。MASTG-TEST-0204V2 继承用例对此的表述更为直接java.util.Random与Math.random()在同一种子下跨所有 Java 实现都会产生可复现的序列这使其完全不适合密码学或其他安全敏感上下文。2.2 审查 SecureRandom 的构造方式java.security.SecureRandom是 Android 推荐的密码学安全随机源但 MASTG-TEST-0016 特别强调找出所有未使用默认构造函数创建的SecureRandom实例显式指定种子值seed可能会削弱随机性应只使用SecureRandom的无参构造函数由系统指定种子来生成随机数。显式调用setSeed()或带种子构造的SecureRandom会以开发者可控的数据为种子若种子熵不足或可被猜测输出序列就会失去不可预测性。2.3 识别自定义随机生成器对于自研的伪随机算法若其结构非常脆弱例如简单的取模、位运算混洗攻击者可以通过统计学观察捕获模式。不过 MASTG-TEST-0016 也给出最可靠的做法反编译 APK 直接审阅算法实现这比黑盒观察更彻底。2.4 非随机时间源一个常被忽视的变种MASTG-TEST-0205 将测试范围扩展到非随机来源许多应用直接用当前时间充当随机值例如Date().getTime()或Calendar.MILLISECOND。这类值极易猜测且可复现攻击者只需知道大致时间戳同样构成密码学意义上的随机性缺陷。三、用语义规则Semgrep自动化扫描手工翻阅反编译代码效率有限仓库在 rules 目录下提供了可直接运行的 Semgrep 规则用于自动化定位上述脆弱模式这也是 MASTG-DEMO 系列演示的标准做法。3.1 规则一随机 API 熵不足rules/mastg-android-random-apis-insufficient-entropy.yml 针对java语言匹配两类典型模式pattern-either: - patterns: - pattern-inside: $M(...){ ... } - pattern-either: - pattern: Math.random(...) - pattern: (java.util.Random $X).$Y(...)该规则在方法体内查找Math.random(...)调用以及任何java.util.Random对象的方法调用$X为实例、$Y为方法命中即报WARNING消息为[MASVS-CRYPTO-1] The application makes use of random number generators with insufficient entropy.。3.2 规则二非随机来源rules/mastg-android-non-random-use.yml 则专门捕获被误用作随机源的时间类 APIpattern-either: - patterns: - pattern-inside: $M(...){ ... } - pattern-either: - pattern: new Date() - pattern: System.currentTimeMillis() - pattern: (Calendar $C).get(...)它匹配new Date()、System.currentTimeMillis()以及对Calendar实例的get(...)调用如Calendar.MILLISECOND命中即报[MASVS-CRYPTO-1] The application makes use of non-random sources.。3.3 实战运行与结果解读仓库中的演示用例 MASTG-DEMO-0008对应测试 MASTG-TEST-0205完整展示了运行流程对示例代码运行上述规则后规则会报告命中代码的具体行号测试人员可据行号回到原始代码做进一步调查与修复MASTG-DEMO-0007 则对应不安全随机 API 用法的同类演示。每个命中点都应进入下一节的验证环节判断其是否真正涉及安全敏感上下文。四、动态分析确认输入输出与随机质量静态扫描给出的只是疑似位置动态分析用于确认实际运行时的行为与随机质量。4.1 Hook 关键类与方法MASTG-TEST-0016 推荐使用动态插桩技术对应 MASTG-TECH-0033对前文提到的类与方法java.util.Random、SecureRandom、时间源 API 等进行 Hook观察它们实际传入与输出的值例如连续捕获多个Random.nextInt()的输出即可验证序列是否符合线性同余特征HookSecureRandom则可用于确认应用是否绕过默认构造、注入了弱种子。4.2 随机质量统计学检验如果你希望量化随机性好不好可以捕获一大批随机数导入 Burp 的 Sequencer 组件进行统计分析观察输出的熵分布与规律性。该方法适合在黑盒场景下快速给出随机质量的直觉判断但请注意对于可预测序列的最终定性仍以反编译后对算法本身的分析静态分析为准。五、结果判定与安全相关性验证扫描与动态观察结束后依据下述标准给出测试结论5.1 判定标准失败条件MASTG-TEST-0204若能在代码中找到使用不安全随机 API 生成随机数、且这些随机数用于安全相关上下文如生成密码、认证令牌、加密密钥、IV、nonce、会话标识或 PIN测试即失败MASTG-TEST-0205若能在代码中找到使用非随机来源时间戳等生成安全相关值如密码或令牌测试即失败。5.2 逐点复核Further Validation Required规则或静态分析报告的每个位置都需要人工复核对应 MASTG-TECH-0023 的代码审查方法确认该处的随机值流向何处——是否最终进入密钥、令牌、nonce、IV、会话标识、密码或 PIN 的生成链路若随机值仅用于非安全场景例如 UI 随机动画、AB 测试分组则不构成漏洞但应记录观察结果对所有安全相关的命中点回到源码确认生成器类型java.util.Random/Math.random()/ 显式种子SecureRandom/ 时间源 / 自定义算法并评估种子熵与可预测性。六、修复建议与平台注意事项修复方向与 MASTG-BEST-0001密码学最佳实践保持一致一律改用SecureRandom的无参构造函数让系统从可信熵源自动播种不要自行setSeed()**删除Math.random()、java.util.Random及new Date()/System.currentTimeMillis()/Calendar.get(...)这类非随机来源在安全敏感路径上的使用结合 Document/0x05e-Testing-Cryptography.md 中的平台变更背景自 Android 7.0API 24起Crypto安全提供者及其SHA1PRNG已被废弃并停止支持自 Android 8.1API 27起系统默认采用 ConscryptAndroidOpenSSL实现应停止显式指定安全提供者Android Keystore 场景除外直接依赖平台的默认SecureRandom实现以保证熵源经过系统级维护与补丁更新。七、相关资源索引类型路径用途测试用例V1tests/android/MASVS-CRYPTO/MASTG-TEST-0016.md本文主体用例随机数生成测试测试用例V2MASTG-TEST-0204不安全随机 API 用法继承用例测试用例V2MASTG-TEST-0205非随机来源用法继承用例语义规则rules/mastg-android-random-apis-insufficient-entropy.yml扫描不安全随机 API语义规则rules/mastg-android-non-random-use.yml扫描非随机时间源演示用例MASTG-DEMO-0008非随机来源检测实战演示演示用例MASTG-DEMO-0007不安全随机 API 检测实战演示技术章节Document/0x05e-Testing-Cryptography.mdAndroid 密码学测试总览与平台变更相关技巧MASTG-TECH-0013、MASTG-TECH-0014、MASTG-TECH-0023、MASTG-TECH-0033逆向、API 定位、代码审查、动态插桩赞分享文档教程网络安全【免费下载链接】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点击查看免费下载相关推荐Android 安全随机数生成SecureRandom 与弱 PRNG 检测实战OWASP MASTG MASVS-CRYPTO-1Android 安全随机数生成SecureRandom 与弱 PRNG 检测实战OWASP MASTG MASVS CRYPTO 1 导读 密码学安全性高文档教程网络安全Android 安全随机数生成最佳实践基于 MASTG-BEST-0001 的 SecureRandom 用法与不安全 PRNG 检测指南Android 安全随机数生成最佳实践基于 MASTG BEST 0001 的 SecureRandom 用法与不安全 PRNG 检测指南 本篇技术指南以 O文档教程网络安全OWASP MASTG 安卓测试指南非随机源使用检测MASTG-TEST-0205实战解析OWASP MASTG 安卓测试指南非随机源使用检测MASTG TEST 0205实战解析 导读 本文围绕 OWASP Mobile Applicatio文档教程网络安全上一篇Zotero Style 完整上手攻略把文献阅读进度、标签与关系图谱装进一个插件下一篇Zotero Style插件完整上手指南用可视化进度条、智能标签与关系图谱重构文献管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表