MASTG-TEST-0232: 损坏的对称加密模式
概述¶
要测试 Android 应用中有缺陷的加密模式的使用,我们需要关注加密框架和库中用于配置和应用加密模式的方法。
在 Android 开发中,Java Cryptography Architecture (JCA) 中的 Cipher
类是主要的 API,允许您指定加密操作的加密模式。Cipher.getInstance
定义了转换字符串,其中包括加密算法、操作模式和填充方案。一般格式是 "Algorithm/Mode/Padding"
。例如
Cipher.getInstance("AES/ECB/PKCS5Padding")
在此测试中,我们将重点关注对称加密模式,例如 ECB(电子密码本)。
ECB(在 NIST SP 800-38A 中定义)通常不建议使用 参见 NIST 在 2023 年发布的公告,因为它固有的安全弱点。虽然没有明确禁止,但在大多数情况下其使用受到限制,并不建议使用。ECB 是一种分组密码模式,它以确定性的方式运行,将明文分成块并分别加密,这会泄露密文中的模式。这使其容易受到已知明文攻击和选择明文攻击等攻击。
例如,以下转换都被 认为存在漏洞
"AES"
(默认使用 AES/ECB 模式,默认)"AES/ECB/NoPadding"
"AES/ECB/PKCS5Padding"
"AES/ECB/ISO10126Padding"
您可以在 NIST SP 800-38A - 分组密码操作模式建议:方法和技术中了解有关 ECB 和其他模式的更多信息。另请查看 修改 NIST SP 800-38A 的决定,分组密码操作模式建议:方法和技术 以及 NIST IR 8459 NIST SP 800-38 系列中分组密码操作模式报告,以获取最新信息。
超出范围:像 RSA 这样的非对称加密模式超出了此测试的范围,因为它们不使用像 ECB 这样的块模式。
在像 "RSA/ECB/OAEPPadding"
或 "RSA/ECB/PKCS1Padding"
这样的转换字符串中,在此上下文中包含 ECB
具有误导性。与对称密码不同,RSA 不以像 ECB 这样的块模式运行。ECB
命名在 某些加密 API 中只是一个占位符,并不意味着 RSA 使用 ECB 模式。了解这些细微差别有助于防止误报。
步骤¶
- 使用诸如 semgrep工具对应用二进制文件执行 Android 静态分析,或者使用像 Frida for Android这样的工具进行方法追踪(动态分析),并查找指定加密模式为不安全模式的加密函数。
观察¶
输出应包含应用中使用了有缺陷的加密模式的加密操作的位置列表。
评估¶
如果在应用中发现了任何有缺陷的模式,则测试用例失败。