C语言内存分配函数被污染的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C 语言的内存分配函数包括 malloc()
、 kmalloc
、 smalloc()
、 xmalloc()
、realloc()
、 calloc()
、 GlobalAlloc()
、 HeapAlloc()
等等,以 malloc()
为例, malloc()
函数的原型为:extern void*malloc (unsignedintnum_bytes);malloc()
函数分配了 num_bytes
字节的内存,并返回了指向这块内存的指针。当内存分配长度的整数来自于可能被污染的不可信源时,如果没有对外部输入的数据进行有效判断,会导致超大的内存分配。其中可能被污染的不可信源包括:命令行参数、配置文件、网络通讯、数据库、环境变量、注册表值以及其他来自应用程序以外的输入等。直接将被污染的数据免费云主机域名作为内存分配函数长度参数,如传入了一个极大的整数值,程序就会相应的分配一块极大的内存,从而导致系统极大的内存开销,甚至导致拒绝服务攻击。
CVE中也有一些与之相关的漏洞信息,从2018年1月至2019年3月,CVE中就有4条相关漏洞信息。漏洞信息如下:本节所用示例参考CWE-789: Uncontrolled Memory Allocation (http://cwe.mitre.org/data/definitions/789.html) 提供的代码示例,并对示例中的GetUntrustedInt()
函数进行了定义。在上述示例代码中,在第9行使用 malloc()
函数进行长度为 totBytes
字节的内存分配,通过跟踪路径可以看出, totBytes
在第6行通过 size*sizeof(char);
计算结果进行赋值,而 size
的值是第7行使用 scanf()
函数获取的用户键盘输入,为被污染的数据源,从而导致内存分配长度 totBytes
被污染,存在“被污染的内存分配”问题。使用360代码卫士对上述示例代码进行检测,可以检出“被污染的内存分配”缺陷,显示等级为高。如图1所示:
图1:被污染的内存分配的检测示例在上述修复代码中,虽然 totBytes
的来源为被污染的数据,但在第10行对 totBytes
的长度进行了有效限制,从而避免了被污染的内存分配。使用360代码卫士对修复后的代码进行检测,可以看到已不存在“被污染的内存分配”缺陷。如图2:
图2:修复后检测结果(1)避免使用被污染的数据直接作为内存分配函数的长度参数,如无法避免,则应对被污染的数据进行有效限制。
(2)使用源代码静态分析工具,可以有效发现这类问题。看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注云编程开发博客行业资讯频道,感谢您对云编程开发博客的支持。
百度霸屏技术市面上曾经风靡一时。同行业来说,做好这一门技术,有吃,有拿,有赚:1、提高你品牌的知名度。让你在行业内倍儿有面子2、倍增流量、倍增成交率3、体现产品价值那么什么是霸屏,效果是这样的源码及制作方式方免费云主机域名法,可以联系,如果详细说,就要截很多图…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。