【缺陷周话】第30期:不安全的哈希算法

阅读量    102518 | 评论 3

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

1、不安全的哈希算法

哈希算法是使用哈希函数将任意长度的消息映射成为一个长度较短且长度固定的值,这个经过映射的值为哈希值。它是一种单向加密体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。而不安全的哈希算法则可以逆向推出明文。在密码学中,哈希算法主要用于消息摘要和签名来对整个消息的完整性进行校验,所以需要哈希算法无法推导输入的原始值,这是哈希算法安全性的基础。目前常用的哈希算法包括MD4、MD5、SHA等。本篇文章以JAVA语言源代码为例,分析不安全的哈希算法缺陷产生的原因以及修复方法。详细请参见:CWE ID 327: Use of a Broken or Risky Cryptographic Algorithm (http://cwe.mitre.org/data/definitions/327.html)。

 

2、 不安全的哈希算法的危害

使用不安全的哈希算法形成数字签名来校验数据源的身份会影响数据的完整性和机密性,导致校验方式失效。

从2018年1月至2019年4月,CVE中共有15条漏洞信息与其相关。部分漏洞如下:

CVE 漏洞概况
CVE-2019-1828 Cisco Small Business RV320(1.4.2.22之前的固件版本)和 RV325 双千兆 WAN VPN 路由器允许未经身份验证的远程攻击者在基于Web管理界面中的漏洞访问管理凭据。存在此漏洞,因为受影响的设备对用户凭据使用弱加密算法。攻击者可以通过中间人攻击和解密截获的凭据利用此漏洞以管理员权限访问受影响的设备。
CVE-2018-6619 Easy Hosting Control Panel(EHCP)v0.37.12.b通过利用无盐的弱哈希算法,使攻击者更容易破解数据库密码。
CVE-2018-15326 DBS3900 TDD LTE V100R003C00,V100R004C10 具有弱加密算法安全漏洞。DBS3900 TDD LTE支持使用不安全加密算法进行SSL / TLS协议协商。在通信中使用了不安全的加密算法,未经身份验证的远程攻击者可以利用此漏洞破解加密数据并导致信息泄露。

 

3、示例代码

示例源于Benchmark (https://www.owasp.org/index.php/Benchmark),源文件名:BenchmarkTest00046.java。

3.1缺陷代码

上述示例代码操作是将请求参数转换为哈希值的操作,在第45行获取请求参数 BenchmarkTest00046。在第53行获取一个MD5转换器,在第55行~70行将获取的请求参数值转换为字节数组,第71行将字节数组作为参数传入MD5转换器,第73行获得转换后的字节数组。由于MD5是已经公认已破解的哈希算法,使用该哈希算法来处理数据会损害数据的机密性,导致信息泄露。

使用360代码卫士对上述示例代码进行检测,可以检出“不安全的哈希算法”缺陷,显示等级为低。在代码行第53行报出缺陷,如图1所示:

图1:不安全的哈希算法的检测示例

3.2 修复代码

在上述修复代码中,第54行使用SHA-512算法取代MD5算法保证数据完整性和安全性。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“不安全的哈希算法”缺陷。如图2:

图2:修复后检测结果

 

4、  如何避免不安全的哈希算法

在安全性要求较高的系统中,应采用散列值>=224比特的SHA系列算法(如SHA-224、SHA-256、SHA-384和SHA-512)来保证敏感数据的完整性。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多