[发明专利]一种基于哈希算法的库函数安全增强方法在审
申请号: | 201510830262.5 | 申请日: | 2015-11-24 |
公开(公告)号: | CN105426755A | 公开(公告)日: | 2016-03-23 |
发明(设计)人: | 姜军;漆锋滨;谢汶兵;何王全;王雅慧;石培森 | 申请(专利权)人: | 无锡江南计算技术研究所 |
主分类号: | G06F21/54 | 分类号: | G06F21/54 |
代理公司: | 北京众合诚成知识产权代理有限公司 11246 | 代理人: | 龚燮英 |
地址: | 214083 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 算法 库函数 安全 增强 方法 | ||
技术领域
本发明涉及计算机技术领域,更具体地说,本发明涉及一种基于哈希算法的库函数安全增强方法。
背景技术
出于效率考虑,C/C++提供了很多如strcpy等字符串操作库函数。而C/C++在提供灵活的使用方式和高效目标码的同时,这些使用频度很高的库函数在实现时没有加入边界检查代码,缺乏相应的安全机制,存在着一些容易为攻击者利用的安全漏洞。针对不安全库函数的调用防范,目前提出的一种普遍做法是对不安全库函数进行增强,Libsafe即为一种最常用的方法。Libsafe利用动态库的预载机制,封装了若干已知的易受堆栈冲击方法攻击的库函数。安全库实现可分为三个阶段:拦截库函数调用;对库函数调用做安全性检查;漏洞处理。
对库函数调用做安全性检查为最关键的一步,直接决定对漏洞处理的方式。通过栈帧指针FP逐层回溯栈直到找到目标操作数被定义的函数栈信息,从而获取到该操作数的使用范围。然后比较源操作数和目标操作数的使用范围大小,进而判断该函数调用是否安全。若不安全,则报警并退出,否则用安全库函数调用替换该不安全函数。
Libsafe通过截获对库函数的调用,监控程序运行时堆栈指针的变化,使用安全的库函数替代有风险的库函数。然而其在对库函数调用做安全性监控时,是依赖栈帧指针回溯栈信息的,而栈帧指针FP并不是堆栈的必选内容,其受限于编译器中栈帧指针是否存在以及编译器是否优化掉了栈帧指针,在添加相关选项时,安全增强机制将被失效。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种基于哈希算法的库函数安全增强方法,其能够实现一种通用的库函数安全增强机制,该机制将改进现有的安全增强库检查机制中的回溯栈的方法,使得安全库的增强更加有通用性。
为了实现上述技术目的,根据本发明,提供了一种基于哈希算法的库函数安全增强方法,包括:对同一函数的多次调用,将已经回溯的栈信息用链表保存起来,此后再次调用该函数时,以函数返回地址作为关键字检索链表以查找所述函数的栈信息,如果在链表中查找到所述函数的栈信息,则直接从链表取出对应的栈信息。
优选地,如果在链表中没有查找到所述函数的栈信息,则针对所述函数利用指令特征码进行指令匹配,直到找到所述函数的栈信息为止,并将找到的所述函数的栈信息加入到链表中。
优选地,针对所述函数利用指令特征码进行指令匹配包括:利用函数返回地址内容得到函数代码段中对应指向的指令;从该指令开始逐条将函数指令特征码与候选集里的指令特征码进行匹配,以获知栈帧的栈顶位置以及栈上分配临时空间大小,计算得到父函数的栈顶信息;此后,通过父函数的栈中返回地址信息来获取到父函数中的对应代码段的指令信息;利用父函数中的对应代码段的指令信息逐条与候选集里的指令特征码进行匹配,直到找到定义局部变量所在的函数栈信息。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了进程中栈的结构示意图。
图2示意性地示出了根据本发明优选实施例的基于哈希算法的库函数安全增强方法的Libsafe库安全检测算法流程图。
图3示意性地示出了基于指令特征码回溯栈的示意图。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510830262.5/2.html,转载请声明来源钻瓜专利网。