CN105426755A - 一种基于哈希算法的库函数安全增强方法 - Google Patents

一种基于哈希算法的库函数安全增强方法 Download PDF

Info

Publication number
CN105426755A
CN105426755A CN201510830262.5A CN201510830262A CN105426755A CN 105426755 A CN105426755 A CN 105426755A CN 201510830262 A CN201510830262 A CN 201510830262A CN 105426755 A CN105426755 A CN 105426755A
Authority
CN
China
Prior art keywords
function
stack
information
stack information
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510830262.5A
Other languages
English (en)
Other versions
CN105426755B (zh
Inventor
姜军
漆锋滨
谢汶兵
何王全
王雅慧
石培森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Wuxi Jiangnan Computing Technology Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuxi Jiangnan Computing Technology Institute filed Critical Wuxi Jiangnan Computing Technology Institute
Priority to CN201510830262.5A priority Critical patent/CN105426755B/zh
Publication of CN105426755A publication Critical patent/CN105426755A/zh
Application granted granted Critical
Publication of CN105426755B publication Critical patent/CN105426755B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提供了一种基于哈希算法的库函数安全增强方法,包括:对同一函数的多次调用,将已经回溯的栈信息用链表保存起来,此后再次调用该函数时,以函数返回地址作为关键字检索链表以查找所述函数的栈信息,如果在链表中查找到所述函数的栈信息,则直接从链表取出对应的栈信息。如果在链表中没有查找到所述函数的栈信息,则针对所述函数利用指令特征码进行指令匹配,直到找到所述函数的栈信息为止,并将找到的所述函数的栈信息加入到链表中。

Description

一种基于哈希算法的库函数安全增强方法
技术领域
本发明涉及计算机技术领域,更具体地说,本发明涉及一种基于哈希算法的库函数安全增强方法。
背景技术
出于效率考虑,C/C++提供了很多如strcpy等字符串操作库函数。而C/C++在提供灵活的使用方式和高效目标码的同时,这些使用频度很高的库函数在实现时没有加入边界检查代码,缺乏相应的安全机制,存在着一些容易为攻击者利用的安全漏洞。针对不安全库函数的调用防范,目前提出的一种普遍做法是对不安全库函数进行增强,Libsafe即为一种最常用的方法。Libsafe利用动态库的预载机制,封装了若干已知的易受堆栈冲击方法攻击的库函数。安全库实现可分为三个阶段:拦截库函数调用;对库函数调用做安全性检查;漏洞处理。
对库函数调用做安全性检查为最关键的一步,直接决定对漏洞处理的方式。通过栈帧指针FP逐层回溯栈直到找到目标操作数被定义的函数栈信息,从而获取到该操作数的使用范围。然后比较源操作数和目标操作数的使用范围大小,进而判断该函数调用是否安全。若不安全,则报警并退出,否则用安全库函数调用替换该不安全函数。
Libsafe通过截获对库函数的调用,监控程序运行时堆栈指针的变化,使用安全的库函数替代有风险的库函数。然而其在对库函数调用做安全性监控时,是依赖栈帧指针回溯栈信息的,而栈帧指针FP并不是堆栈的必选内容,其受限于编译器中栈帧指针是否存在以及编译器是否优化掉了栈帧指针,在添加相关选项时,安全增强机制将被失效。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种基于哈希算法的库函数安全增强方法,其能够实现一种通用的库函数安全增强机制,该机制将改进现有的安全增强库检查机制中的回溯栈的方法,使得安全库的增强更加有通用性。
为了实现上述技术目的,根据本发明,提供了一种基于哈希算法的库函数安全增强方法,包括:对同一函数的多次调用,将已经回溯的栈信息用链表保存起来,此后再次调用该函数时,以函数返回地址作为关键字检索链表以查找所述函数的栈信息,如果在链表中查找到所述函数的栈信息,则直接从链表取出对应的栈信息。
优选地,如果在链表中没有查找到所述函数的栈信息,则针对所述函数利用指令特征码进行指令匹配,直到找到所述函数的栈信息为止,并将找到的所述函数的栈信息加入到链表中。
优选地,针对所述函数利用指令特征码进行指令匹配包括:利用函数返回地址内容得到函数代码段中对应指向的指令;从该指令开始逐条将函数指令特征码与候选集里的指令特征码进行匹配,以获知栈帧的栈顶位置以及栈上分配临时空间大小,计算得到父函数的栈顶信息;此后,通过父函数的栈中返回地址信息来获取到父函数中的对应代码段的指令信息;利用父函数中的对应代码段的指令信息逐条与候选集里的指令特征码进行匹配,直到找到定义局部变量所在的函数栈信息。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了进程中栈的结构示意图。
图2示意性地示出了根据本发明优选实施例的基于哈希算法的库函数安全增强方法的Libsafe库安全检测算法流程图。
图3示意性地示出了基于指令特征码回溯栈的示意图。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
本发明提出根据指令特征码的信息来回溯栈信息的。图1是进程在栈中的结构示意图。函数的栈信息自上而下依次存放,不同的函数栈信息是相互关联的,可以通过当前函数栈信息来追溯上一层函数栈信息。在每个栈初始化时包括了栈空间预留以及栈顶指针的初始化过程、对栈帧指针FP的赋值。栈空间预留以及栈顶指针的初始化代码是每个函数体必须的操作,且在每个函数栈初始化过程中,栈顶指针SP最开始时指向该函数的栈底;分析程序开头部分栈的初始化过程特点,可以看出如果获取一个调用函数的栈顶指针SP和为该栈分配的临时空间大小,就可以对应知道定义变量所在函数的栈的上下限以及其父函数的栈信息,从而可知道每个局部变量的最大操作范围。针对该指令特征码的共性,提取函数体标准开头的指令共同特征码作为候选集保存,实现基于指令特征码的栈回溯的方法。依次分析程序代码段的每条指令特征,在一定条件限制下,将其与候选集指令特征码匹配,来回溯每个栈的栈信息内容。
对同一函数的多次调用,可将已经回溯的栈信息用链表保存起来,此后再次调用该函数时,可直接从链表中取出栈信息,避免了不必要的匹配操作。考虑到函数返回地址的唯一性,在每次栈回溯的时候(即每次从链表中取出栈信息),以函数返回地址作为关键字检索链表以查找所述函数的栈信息,如果在链表中查找到所述函数的栈信息,则直接从链表取出对应的栈信息。如果在链表中没有查找到所述函数的栈信息,则针对所述函数利用指令特征码进行指令匹配,直到找到所述函数的栈信息为止,并将找到的所述函数的栈信息加入到链表中。
优选地,将所有关键字为同义词的结点链接到同一个单链表中。将散列表定义为由B(表长B=2b)个单链表头指针组成的指针数组,记为F[0,1,…,B-1],其中F个单元的初值均应为空。所有散列地址为i的结点,均插入到F[i]为头指针的单链表中。
改进后的安全增加库检测算法流程图可表示为如图2所示。其中,函数返回地址哈希散列,并随后判断栈信息是否在链表中。如果判定栈信息在链表中,则直接从链表中取出栈信息,并且判断是否为定义源操作数函数的栈;如果判定栈信息不在链表中,则指令特征码逐条匹配回溯栈,随后利用哈希方法保存栈信息到链表,随后同样判断是否为定义源操作数函数的栈。如果判定是定义源操作数函数的栈,则将缓存尺寸Buffsize设定为栈顶指针-源操作数地址,随后程序结束。如果判定不是定义源操作数函数的栈,则计算父函数的返回地址,并且判断父地址是否是_start返回地址,如果判定父地址是_start返回地址则将缓存尺寸Buffsize设定为0,随后程序结束。另一方面,如果判定父地址不是_start返回地址,则设定返回地址=父函数返回地址,然后回到“函数返回地址哈希散列”的步骤。
实例如图3所示,图3示意性地示出了基于指令特征码回溯栈的示意图。其中,从fun1开始,获取其返回地址ret,然后利用该返回地址内容可得到其代码段中对应指向的指令。从该指令开始逐条将其指令特征码与候选集里的指令特征码进行匹配。通过候选集的stlfp,fp_off(sp)指令可以知道栈中是否有栈帧指针FP存在,如果存在则可以直接用栈帧指针FP去回溯栈信息。否则,匹配候选集stlra,ra_off(sp)指令可以知道当前函数的返回地址;匹配ldisp,offset可以得到栈帧的栈顶位置以及栈上分配临时空间大小。进而通过sp=sp+offset(假设栈是向下增长的)获取到父函数fun2的栈顶信息。通过fun2栈中返回地址信息可获取到其对应代码段的指令信息,此部分继续指令逐条与候选集里的指令特征码进行匹配,直到找到定义局部变量所在的函数栈信息。
找到局部变量所在函数的栈信息后,就可以获得到局部变量所占空间的大小以及局部变量所在栈的上下限。进而可以比较源操作数与目的操作数(前文提到的局部变量)的大小关系,判断其是否是在安全操作区间内。
本发明采用了基于指令特征码来追溯函数栈信息,直接从程序的指令特征去分析栈信息内容,改进了现有基于栈帧指针追溯栈信息的不足。使得安全增强库有了更加通用的使用。而且,本发明提出了将哈希函数与指令特征码追溯栈信息相结合的方法,并用哈希方法进一步优化回溯栈的过程,兼顾了安全和效率问题。
本发明的改进的Libsafe安全库函数检查算法,是从栈最原始的设计出发,依次回溯栈中的信息。避免了对栈帧指针的依赖,故该方法对不同的编译器优化都有通用性。当在新的体系结构上移植时,用户或厂商只要根据该体系结构下修改候选集即可使用。且对函数调用时候的安全增强有了更加通用,并且对程序的性能几乎没有影响。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。

Claims (3)

1.一种基于哈希算法的库函数安全增强方法,其特征在于包括:对同一函数的多次调用,将已经回溯的栈信息用链表保存起来,此后再次调用该函数时,以函数返回地址作为关键字检索链表以查找所述函数的栈信息,如果在链表中查找到所述函数的栈信息,则直接从链表取出对应的栈信息。
2.根据权利要求1所述的基于哈希算法的库函数安全增强方法,其特征在于,如果在链表中没有查找到所述函数的栈信息,则针对所述函数利用指令特征码进行指令匹配,直到找到所述函数的栈信息为止,并将找到的所述函数的栈信息加入到链表中。
3.根据权利要求1或2所述的基于哈希算法的库函数安全增强方法,其特征在于,针对所述函数利用指令特征码进行指令匹配包括:
利用函数返回地址内容得到函数代码段中对应指向的指令;从该指令开始逐条将函数指令特征码与候选集里的指令特征码进行匹配,以获知栈帧的栈顶位置以及栈上分配临时空间大小,计算得到父函数的栈顶信息;此后,通过父函数的栈中返回地址信息来获取到父函数中的对应代码段的指令信息;利用父函数中的对应代码段的指令信息逐条与候选集里的指令特征码进行匹配,直到找到定义局部变量所在的函数栈信息。
CN201510830262.5A 2015-11-24 2015-11-24 一种基于哈希算法的库函数安全增强方法 Active CN105426755B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510830262.5A CN105426755B (zh) 2015-11-24 2015-11-24 一种基于哈希算法的库函数安全增强方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510830262.5A CN105426755B (zh) 2015-11-24 2015-11-24 一种基于哈希算法的库函数安全增强方法

Publications (2)

Publication Number Publication Date
CN105426755A true CN105426755A (zh) 2016-03-23
CN105426755B CN105426755B (zh) 2018-04-10

Family

ID=55504960

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510830262.5A Active CN105426755B (zh) 2015-11-24 2015-11-24 一种基于哈希算法的库函数安全增强方法

Country Status (1)

Country Link
CN (1) CN105426755B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107515769A (zh) * 2016-06-16 2017-12-26 中兴通讯股份有限公司 一种变量信息提取方法及装置
CN110362502A (zh) * 2019-06-26 2019-10-22 中国科学院信息工程研究所 链式哈希栈的影子缓存优化方法和装置
CN110445611A (zh) * 2019-09-19 2019-11-12 哈尔滨工业大学(深圳) 一种基于模算术哈希函数的保密增强方法及装置
CN111209042A (zh) * 2020-01-06 2020-05-29 北京字节跳动网络技术有限公司 一种建立函数栈的方法、装置、介质和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005234740A (ja) * 2004-02-18 2005-09-02 Nippon Telegr & Teleph Corp <Ntt> スタックスマッシング攻撃防御方法、スタックスマッシング攻撃防御装置及びスタックスマッシング攻撃防御プログラム
US20080148399A1 (en) * 2006-10-18 2008-06-19 Microsoft Corporation Protection against stack buffer overrun exploitation
CN101211309A (zh) * 2006-12-29 2008-07-02 中兴通讯股份有限公司 嵌入式系统中进程异常跟踪定位的方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
CN101788949A (zh) * 2010-03-10 2010-07-28 中兴通讯股份有限公司 一种实现嵌入式系统函数监控的方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005234740A (ja) * 2004-02-18 2005-09-02 Nippon Telegr & Teleph Corp <Ntt> スタックスマッシング攻撃防御方法、スタックスマッシング攻撃防御装置及びスタックスマッシング攻撃防御プログラム
US20080148399A1 (en) * 2006-10-18 2008-06-19 Microsoft Corporation Protection against stack buffer overrun exploitation
CN101211309A (zh) * 2006-12-29 2008-07-02 中兴通讯股份有限公司 嵌入式系统中进程异常跟踪定位的方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
CN101788949A (zh) * 2010-03-10 2010-07-28 中兴通讯股份有限公司 一种实现嵌入式系统函数监控的方法及装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107515769A (zh) * 2016-06-16 2017-12-26 中兴通讯股份有限公司 一种变量信息提取方法及装置
CN110362502A (zh) * 2019-06-26 2019-10-22 中国科学院信息工程研究所 链式哈希栈的影子缓存优化方法和装置
CN110445611A (zh) * 2019-09-19 2019-11-12 哈尔滨工业大学(深圳) 一种基于模算术哈希函数的保密增强方法及装置
CN111209042A (zh) * 2020-01-06 2020-05-29 北京字节跳动网络技术有限公司 一种建立函数栈的方法、装置、介质和电子设备

Also Published As

Publication number Publication date
CN105426755B (zh) 2018-04-10

Similar Documents

Publication Publication Date Title
US7987473B1 (en) Accelerated class check
CN105117289A (zh) 基于云测试平台的任务分配方法、装置及系统
CN105426755A (zh) 一种基于哈希算法的库函数安全增强方法
US9336125B2 (en) Systems and methods for hardware-assisted type checking
CN103530535A (zh) 一种Android平台应用程序保护的加脱壳方法
CN105279017A (zh) 基于云测试平台的任务分配方法、装置及系统
CN105183564A (zh) 基于云测试平台的设备调度方法、装置及系统
CN104346133B (zh) 压缩指令的方法及执行压缩指令的处理器
US7725692B2 (en) Compact representation of instruction execution path history
CN103108033A (zh) 文件上传方法及系统
US10983923B2 (en) Dynamic memory protection
CN105303114A (zh) 基于windows的系统服务函数调用方法及装置
CN109165712A (zh) 分布式分期号的生成方法、装置和计算机存储介质
US8756695B1 (en) Analysis of binary code
CN106484375B (zh) 一种指令块加载方法、软交换设备及系统
US20150055868A1 (en) Character data processing method, information processing method, and information processing apparatus
KR101308091B1 (ko) 요약 데이터를 이용하여 로그 데이터의 정렬 정보를 생성하기 위한 장치 및 방법
CN104008136A (zh) 一种文本查找的方法和装置
CN110674501B (zh) 恶意驱动检测方法、装置、设备及介质
US10185718B1 (en) Index compression and decompression
US8037482B1 (en) Accelerated class check
CN104298919B (zh) 一种识别pe文件是否是资源文件的方法及装置
CN110837510B (zh) 数据处理方法、装置、存储介质和处理器
KR102544801B1 (ko) 데이터 재사용 공격에 대한 방어 방법 및 시스템
KR102017135B1 (ko) 멀티코어 캐시를 이용한 해싱 처리 장치 및 그 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant