OWASP 类别: MASVS-CRYPTO:加密
概述
尽管加密广泛用于保护数据机密性和完整性,但当开发者无意中实施弱或过时的加密算法时,就会出现重大风险。此漏洞源于这些算法固有的弱点,攻击者可以利用这些弱点(拥有必要的计算能力或知识)。此类漏洞利用的后果可能非常严重,可能导致未经授权的访问、数据泄露和敏感信息的操纵。
影响
敏感数据可能会被暴露、修改或伪造。损坏或存在风险的加密算法可能会导致漏洞,并可能被滥用以解密敏感信息、篡改数据或冒充合法实体。利用此类漏洞的影响范围从数据泄露和经济损失到声誉损害和用户信任丧失。
风险:弱或损坏的加密哈希函数
使用弱或损坏的加密哈希函数(例如MD5
或SHA1
)会对数据的安全性和完整性构成重大风险。哈希函数旨在创建输入数据的唯一、固定长度的指纹(哈希值),这使得它们可用于各种目的,包括数据完整性验证、密码存储和数字签名。但是,当使用弱或已损坏的哈希函数时,可能会出现一些漏洞。
- 碰撞攻击:弱哈希函数容易受到碰撞攻击,攻击者可以在其中找到两个产生相同哈希值的不同的输入。这可以使他们替换合法数据而不会被检测到,从而危及数据完整性。
- 数据泄露:如果密码使用弱算法进行哈希处理,则系统成功遭到入侵可能会导致用户凭据泄露。然后,攻击者可以使用彩虹表或其他技术来破解密码,从而未经授权地访问帐户。
- 数字签名的抵赖:数字签名中使用的弱哈希函数可被利用来创建伪造的签名,从而难以确定文档或消息的真实性和完整性。
缓解措施
为了减轻这些风险,务必使用强大且经过充分验证的加密哈希函数,例如SHA-2
或SHA-3
,并在发现新的漏洞时及时更新。此外,采用安全措施,例如密码加盐以及使用特定于密码的哈希算法,例如bcrypt
或Argon2
,可以进一步增强数据保护。
风险:弱或已损坏的加密函数
使用弱或已损坏的加密函数(例如DES
或RC4
)会对敏感数据的机密性造成严重风险。加密旨在通过将信息转换为不可读的格式来保护信息,但如果加密算法存在缺陷,则这些保护措施可能会被绕过。
- 数据泄露:弱加密算法容易受到各种攻击,包括暴力攻击、已知明文攻击和密码分析技术。如果攻击成功,这些攻击可能会泄露加密数据,从而允许未经授权访问敏感信息,例如个人详细信息、财务记录或机密业务数据。
- 数据操纵和篡改:即使攻击者无法完全解密数据,如果加密算法较弱,他们仍然可能在未被检测的情况下操纵数据。这可能导致数据被未经授权修改,可能导致欺诈、虚假陈述或其他恶意活动。
缓解措施
使用强大的加密算法
为了减轻这些风险,务必使用强大且经过充分验证的加密算法,并遵循密钥管理和加密实施的最佳实践。定期更新加密算法并了解新兴威胁对于维护强大的数据安全也至关重要。
一些推荐使用的默认算法
使用加密库中的安全原语来减少常见缺陷
选择合适的加密算法至关重要,但为了真正最大限度地减少安全漏洞,请考虑使用提供简化 API 并强调安全默认配置的加密库。这种方法不仅增强了应用程序的安全性,而且还大大降低了由于编码错误而引入漏洞的可能性。例如,Tink 通过提供两个不同的选项简化了加密选择:AEAD
和混合
加密,使开发人员更容易做出明智的安全决策。
风险:弱或已损坏的加密签名函数
使用弱或已损坏的加密签名函数(例如RSA-PKCS#1 v1.5
或基于弱哈希函数的函数)会对数据的完整性和通信造成严重风险。数字签名旨在提供身份验证、不可否认性和数据完整性,确保消息或文档源自特定发送者并且未被篡改。但是,当底层签名算法存在缺陷时,这些保证可能会受到影响。
- 伪造签名:弱签名算法容易受到允许恶意行为者创建伪造签名的攻击。这意味着他们可以冒充合法实体,伪造文件或篡改消息而不被发现。
- 否认签名:如果签名算法被破坏,签名者可能会错误地声称他们没有签署文档,从而破坏不可否认性原则,并造成法律和后勤方面的挑战。
- 数据操纵和篡改:在使用签名保护数据完整性的情况下,弱算法可能会允许攻击者修改数据而不会使签名无效,从而导致未被检测到的篡改和关键信息的潜在泄露。
缓解措施
使用强大的加密签名算法
为了减轻这些风险,务必使用强大且经过充分验证的加密签名算法。
使用加密库中的安全原语来减少常见缺陷
选择正确的签名算法至关重要,但为了真正最大限度地减少安全漏洞,请考虑使用默认情况下提供强大安全保证的加密库。Tink 例如,通过在其简洁且全面的 API 中提供具有安全曲线的ECDSA
作为默认选项来简化签名选择。这种方法不仅增强了安全性,而且还通过消除对复杂配置或决策的需求来简化开发。
资源
- Tink 加密库
- Android 应用质量:加密
- 使用 Tink 进行数字签名
- 使用 Tink 进行混合加密
- 使用 Tink 进行认证加密
- 弱或已损坏的加密哈希和加密函数 Android 安全 lint
- CWE-327:使用已损坏或有风险的加密算法
- CWE-328:使用弱哈希
- CWE-780:在 RSA 算法中不使用 OAEP
- NIST 关于已批准哈希函数的页面
- 高级加密标准 (维基百科)
- 安全哈希算法 2 (维基百科)
- 安全哈希算法 3 (维基百科)
- RSA 密码系统 (维基百科)
- 椭圆曲线数字签名算法 (维基百科)
- 流密码 ChaCha (维基百科)
- 密码加盐 (维基百科)
- 混合密码系统 (维基百科)
- 认证加密