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

Posted 代码卫士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缺陷周话第 30 期:不安全的哈希算法相关的知识,希望对你有一定的参考价值。

 聚焦源代码安全,网罗国内外最新资讯!


*声明:《缺陷周话》栏目系列文章由360代码卫士团队原创出品。未经许可,禁止转载。

代码审计是使用静态分析发现源代码中安全缺陷的方法,辅助开发或测试人员在软件上线前较为全面地了解安全问题,防患于未然,因此一直以来都是学术界和产业界研究的热点,并已成为安全开发生命周期 SDL 和 DevSecOps 等保障体系的重要技术手段。

360代码卫士团队基于自主研发的国内首款源代码安全检测商用工具,以及十余年漏洞技术研究的积累,推出“缺陷周话”系列栏目。每周针对 CWEOWASP 等标准中的一类缺陷,结合实例和工具使用进行详细介绍,旨在为广大开发和安全人员提供代码审计的基础性标准化教程。

缺陷周话 • 第30期

不安全的哈希算法



1、不安全的哈希算法

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

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

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

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

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

从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、示例代码

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

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


3.1缺陷代码

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

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

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

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

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


3.2 修复代码

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

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

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

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

图2:修复后检测结果


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

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

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






关联阅读







*360代码卫士团队原创出品。未经许可,禁止转载。转载请注明 “转自360代码卫士www.codesafe.cn”。



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

360代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。




以上是关于缺陷周话第 30 期:不安全的哈希算法的主要内容,如果未能解决你的问题,请参考以下文章

缺陷周话第 10 期 :反射型 XSS

包租婆第53期:速懂哈希算法

安全哈希算法SHA-1已完全不可靠,请尽量避免使用!

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

HashMap原理:哈希函数的设计

一致性哈希算法PHP测试片段