内容简介:在使用文件、IO流、数据库连接等资源时,应该在使用后及时关闭或释放,否则可能造成资源未释放问题,本文对其中的文件资源未释放的情况进行描述。文件的基本操作包括打开、读写、删除、关闭等,打开一个文件后,一般来说当一个程序退出时,所有打开的文件将会自动关闭。尽管如此,还是应该在不使用时及时手动关闭或释放文件描述符,因为会存在这样的一种情况:程序打开的文件数量超过同时可以打开的文件数量的上限(一个程序可以同时打开的文件数量是有限的,数量上限小于等于常量 FOPEN_MAX 的值)。此外,SEI CERT C Co
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-14621 | libtirpc 1.0.2-rc2 版本之前,存在一个无限循环漏洞,当端口通过轮询方式被使用时,文件描述符耗尽会导致服务器进入无限循环,消耗大量 CPU 时间并拒绝对其他服务端提供服务。 |
CVE-2018-9275 | Yubico 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缺陷代码
在上述示例代码中,在第26行使用fopen() 进行文件打开操作,但是在29行函数结束前,没有对打开的文件进行关闭,存在资源未释放问题。
使用360代码卫士对上述示例代码进行检测,可以检出“资源未释放:文件”缺陷,显示等级为中。如图1所示:
图1:资源未释放:文件的检测示例
3.2 修复代码
在上述修复代码中,Samate 给出的修复方式为:在第30行使用 fclose()进行手动文件关闭。
使用360代码卫士对修复后的代码进行检测,可以看到已不存在“资源未释放:文件”缺陷。如图2:
图2:修复后检测结果
4 、如何避免资源未释放:文件
要避免资源未释放:文件,需要注意以下几点:
(1)当文件资源不再使用的情况下,及时手动进行关闭。
(2)需要特别注意的是,在异常处理的分支中常常忽略对资源的关闭,应多加注意。
(3)使用源代码静态分析 工具 进行自动化的检测,可以辅助定位资源未释放问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【缺陷周话】第13期:二次释放
- 【缺陷周话】第11期:释放后使用(UAF)
- 【缺陷周话】第22期:错误的内存释放对象
- 【缺陷周话】第31期:错误的内存释放方法
- 漫画:如何证明sleep不释放锁,而wait释放锁?
- golang内存释放
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代
[英] 维克托•迈尔•舍恩伯格(Viktor Mayer-Schönberger) / 周涛 / 浙江人民出版社 / 2012-12 / 49.90元
《大数据时代》是国外大数据研究的先河之作,本书作者维克托•迈尔•舍恩伯格被誉为“大数据商业应用第一人”,拥有在哈佛大学、牛津大学、耶鲁大学和新加坡国立大学等多个互联网研究重镇任教的经历,早在2010年就在《经济学人》上发布了长达14页对大数据应用的前瞻性研究。 维克托•迈尔•舍恩伯格在书中前瞻性地指出,大数据带来的信息风暴正在变革我们的生活、工作和思维,大数据开启了一次重大的时代转型,并用三......一起来看看 《大数据时代》 这本书的介绍吧!