freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【缺陷周话】第30期:不安全的哈希算法
2019-04-15 08:33:19

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

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

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

3、示例代码

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

3.1缺陷代码

30-3-1代码.png

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

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


30-3-1图.png

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


3.2 修复代码

30-3-2 代码.png

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

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

30-3-2 代码.png

图2:修复后检测结果

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

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





关联阅读

【缺陷周话】第 29 期:返回栈地址

【缺陷周话】第 28 期:被污染的内存分配

【缺陷周话】第 27 期:不安全的随机数

【缺陷周话】第 26期:被污染的格式化字符串

【缺陷周话】第 25期:硬编码密码

【缺陷周话】第 24期:在scanf 函数中没有对 %s 格式符进行宽度限制

【缺陷周话】第 23期:双重检查锁定

【缺陷周话】第 22期:错误的内存释放对象

【缺陷周话】第 21 期:数据库访问控制

【缺陷周话】第 20 期:无符号整数回绕

【缺陷周话】第19期:LDAP 注入

【缺陷周话】第18 期  XPath 注入

【缺陷周话】第17 期:有符号整数溢出

【缺陷周话】第 16 期 — 资源未释放:流

【缺陷周话】第 15 期 — 资源未释放:文件

【缺陷周话】第 14 期 :HTTP 响应截断

【缺陷周话】第 13期 :二次释放

【缺陷周话】第 12期 :存储型 XSS

【缺陷周话】第 11期 :释放后使用

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

【缺陷周话】第 9 期 :缓冲区下溢

【缺陷周话】第 8 期 :路径遍历

【缺陷周话】第 7 期 :缓冲区上溢

【缺陷周话】第 6 期 :命令注入

【缺陷周话】第5期 :越界访问

【缺陷周话】第4期 :XML 外部实体注入

【缺陷周话】第3期 :内存泄漏

【缺陷周话】第 2 期 :SQL 注入

【缺陷周话】第1期 :空指针解引用


扫一扫,获取更多安全干货

qrcode_for_gh_bba053bd7494_1280.jpg




# 代码审计 # 安全缺陷分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者