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