freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

【缺陷周话】第15期----资源未释放:文件
2018-12-25 16:26:45

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

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


1、资源未释放:文件

在使用文件、IO流、数据库连接等资源时,应该在使用后及时关闭或释放,否则可能造成资源未释放问题,本文对其中的文件资源未释放的情况进行描述。文件的基本操作包括打开、读写、删除、关闭等,打开一个文件后,一般来说当一个程序退出时,所有打开的文件将会自动关闭。尽管如此,还是应该在不使用时及时手动关闭或释放文件描述符,因为会存在这样的一种情况:程序打开的文件数量超过同时可以打开的文件数量的上限(一个程序可以同时打开的文件数量是有限的,数量上限小于等于常量 FOPEN_MAX 的值)。此外,SEI CERT C Coding StandardFIO42-C. Close files when they are no longer needed 中的非顺应性示例中也描述了虽然 exit() 会关闭文件,但是当程序异常终止时,同时也失去了对文件是否关闭的判断,因此不推荐依赖于操作系统回收资源的方式。

本缺陷详情请参见 CWE-775: Missing Release ofFile Descriptor or Handle after Effective Lifetime。


2、 “资源未释放:文件” 的危害

由于文件描述符没有释放或丢失导致的漏洞并不多,但当资源未释放:文件缺陷被攻击者利用,仍旧可能会导致信息泄露、服务器资源耗尽而产生的拒绝服务等后果。

2018年1月至12月,CVE中共有5条漏洞信息与其相关。部分漏洞如下

CVE 概述
CVE-2018-14621libtirpc 1.0.2-rc2 版本之前,存在一个无限循环漏洞,当端口通过轮询方式被使用时,文件描述符耗尽会导致服务器进入无限循环,消耗大量 CPU 时间并拒绝对其他服务端提供服务。
CVE-2018-9275Yubico PAM模块(aka pam_yubico)的2.18-2.25 版本 util.c 文件中的 check_user_token,成功登陆后可以使认证映射文件描述符泄露,从而导致信息泄露(设备的SN号)和拒绝服务攻击(达到文件描述符的最大值)

3、示例代码

示例源于 Samate Juliet Test Suitefor C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE775_Missing_Release_of_File_Descriptor_or_Handle__fopen_no_close_01.c。

3.1缺陷代码

15-3-1代码.png

在上述示例代码中,在第26行使用fopen() 进行文件打开操作,但是在29行函数结束前,没有对打开的文件进行关闭,存在资源未释放问题。

使用360代码卫士对上述示例代码进行检测,可以检出“资源未释放:文件”缺陷,显示等级为中。如图1所示:

15-3-1图.png

图1:资源未释放:文件的检测示例


3.2 修复代码

15-3-2代码.png

在上述修复代码中,Samate 给出的修复方式为:在第30行使用 fclose()行手动文件关闭。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“资源未释放:文件”缺陷。如图2:


15-3-2图.png

图2:修复后检测结果

4 、如何避免资源未释放:文件

要避免资源未释放:文件,需要注意以下几点:

(1)当文件资源不再使用的情况下,及时手动进行关闭。

(2)需要特别注意的是,在异常处理的分支中常常忽略对资源的关闭,应多加注意。

(3)使用源代码静态分析工具进行自动化的检测,可以辅助定位资源未释放问题。


关联阅读

【缺陷周话】第 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 关注者