跳过内容

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 模式。了解这些细微差别有助于防止误报。

步骤

  1. 使用诸如 semgrep工具对应用二进制文件执行 Android 静态分析,或者使用像 Frida for Android这样的工具进行方法追踪(动态分析),并查找指定加密模式为不安全模式的加密函数。

观察

输出应包含应用中使用了有缺陷的加密模式的加密操作的位置列表。

评估

如果在应用中发现了任何有缺陷的模式,则测试用例失败。

缓解措施

演示

MASTG-DEMO-0023:在 Cipher 中使用 semgrep 检测有缺陷的加密模式