当前位置: 首页 > 专利查询>武汉大学专利>正文

一种基于LLVM的抵御内存泄露的系统及方法技术方案

技术编号:23852615 阅读:23 留言:0更新日期:2020-04-18 09:26
本发明专利技术提供一种基于LLVM的抵御内存泄漏的系统及方法,系统包括代码蜜罐装置和数据蜜罐装置,代码蜜罐装置用于抵御基于代码指针的内存泄露攻击,包括在LLVM源文件编译为IR层代码后,识别代码中的跨函数转移指令,插入条件判断指令,真实端指向该跳转指令,而后在创建跳转指令指向的函数或代码片段的副本,在条件判断虚假端创建指向该副本的蜜罐跳转指令,最后将该副本转移到受监控或不可执行的蜜罐区域;所述数据蜜罐装置,用于识别易造成代码位置泄露的指令,包括程序的返回地址指令、函数指针生成指令、虚函数指针生成指令和异常处理指针生成指令,插入对应的蜜罐函数或代码生成指令。本发明专利技术能够抵御基于代码和数据的指针泄漏的内存泄露攻击。

A system and method of resisting memory leak based on llvm

【技术实现步骤摘要】
一种基于LLVM的抵御内存泄露的系统及方法
本专利技术属于计算机软件安全领域,涉及一种基于LLVM的抵御内存泄露技术方案。
技术介绍
代码复用攻击的攻防为软件安全的重要研究方向之一。代码复用攻击通过重用已经存在程序中的代码,通过将控制流劫持到目标重用代码完成攻击。当前的随机化方法使得目标程序的熵值增大,攻击者无法直接根据离线分析得到的目标片段位置直接构造攻击。所以,攻击者采用内存泄漏得到随机化后真实的代码位置,从而修正片段的位置或直接搜索内存中的片段。一些经典的方法通过内存泄漏定位gadget辅助代码复用攻击。JIT-ROP通过内存信息泄露漏洞在栈中寻找部分程序返回地址等信息定位代码页。而后其通过读取代码页中的内容,根据其中的跨页的函数调用等控制流转移指令来定位新的代码页。最后使用这些代码页中的代码来构造代码复用攻击。BlindROP则通过利用一些服务线程崩溃时会自动重启的特点,绕过ASLR、DEP、canary等防护方案,能够更隐蔽的进行内存泄露。当今内存泄露辅助代码复用攻击的方案已经日趋完善,学者们对方案提出了诸多防御方法。XnR(Excute-no-Read)机制将程序存放在不可执行的代码段中,若在线的内存信息泄露访问到这些不可执行的位置,则会发生页访问错误而造成异常。Readactor++一文使用XnR机制将虚函数表存放入不可读的区域,并在虚函数表中插入了大量的虚假的虚函数指针作为蜜饵引诱攻击者。一旦攻击者执行了这些虚假的指针指向的位置,那么其则会落入陷阱中。Codearmor一文提出将代码片段错位存储,并将原位置替换为引诱gadget来吸引攻击者,攻击者对这些gadget的执行会触发警报被防御者捕获。这两种方法都能够在一定程度上缓解基于执行的内存泄露攻击,但大多因为开销大、部署不便等问题无法在实际工业化场景中使用。
技术实现思路
本专利技术针对现有防御技术存在的上述问题,提出一种基于LLVM的抵御内存泄露的系统和方法。其目的在于,通过代码和数据蜜罐诱使攻击者使用这些代码来完成攻击,达到主动防御内存泄露的效果。本专利技术采用的技术方案是一种基于LLVM的抵御内存泄漏的系统,包括代码蜜罐装置和数据蜜罐装置,所述代码蜜罐装置,用于抵御基于代码指针的内存泄露攻击,包括在LLVM源文件编译为IR层代码后,识别出跨函数的跳转指令,在指令前插入条件判断指令,真实端指向该跳转指令,而后再创建跳转指令指向的函数或代码片段的副本,在条件判断虚假端创建指向该副本的蜜罐跳转指令,最后将该副本转移到受监控或不可执行的蜜罐区域;所述数据蜜罐装置,用于识别易造成代码位置泄露的指令,包括程序的返回地址指令、函数指针生成指令、虚函数指针生成指令和异常处理指针生成指令,在这些指令前后插入对应的蜜罐函数或代码生成指令。而且,所述代码蜜罐装置包括以下模块,敏感点识别模块,用于在LLVM源文件编译为IR层代码后,识别跨函数的跳转指令,并记录指令;蜜罐条件判断模块,用于根据敏感点识别模块所得结果,在每个敏感点前插入条件判断语句,将判断语句的的真实端指向敏感点,虚假端将用来构造蜜罐陷阱;蜜罐陷阱模块,用于根据蜜罐条件判断模块所得结果,为敏感点指向的函数或代码片段创建副本,并将判断模块的虚假端存入指向该副本的代码指针;蜜罐存储模块,用于根据蜜罐陷阱模块所得结果,将所有副本函数或代码判断转移到受到监控的或不可执行的区域。而且,所述数据蜜罐装置包括以下模块,蜜罐返回地址模块,用于识别程序的函数调用指令,并将代码蜜罐装置生成的对应的蜜罐函数调用指令的目的地址在指令前压入栈中;蜜罐函数指针模块,用于识别程序生成函数指针指令,并将代码蜜罐装置生成的对应的蜜罐函数指针在该指令附近以同样方式生成;蜜罐虚函数指针模块,用于识别程序的虚函数表生成指令,并将代码蜜罐装置生成的对应的蜜罐虚函数指针在该指令附近以同样方式生成;蜜罐异常处理指针模块,用于识别程序的异常处理函数生成指令,并将代码蜜罐装置生成的对应的蜜罐异常处理函数在该指令附近以同样方式生成。本专利技术还提供一种基于LLVM的抵御内存泄漏的方法,包括代码蜜罐步骤和数据蜜罐步骤,所述代码蜜罐步骤,用于缓解内存泄漏中的代码指针泄露,包括在LLVM将源文件编译成IR层代码后,识别出跨函数的跳转指令,在指令前插入条件判断指令,真实端指向该跳转指令,而后再创建跳转指令指向的函数或代码片段的副本,在条件判断虚假端创建指向该副本的蜜罐跳转指令,最后将该副本转移到受监控或不可执行的蜜罐区域;所述数据蜜罐步骤,用于缓解内存泄漏中的数据指针泄露,包括在代码蜜罐步骤后,识别易造成代码位置泄露的指令,包括程序的返回地址指令、函数指针生成指令、虚函数指针生成指令和异常处理指针生成指令,在这些指令前后插入对应的蜜罐函数或代码生成指令。而且,所述代码蜜罐步骤包括以下子步骤,步骤1,将待保护的源代码作为LLVM的输入,编译为LLVM的IR层代码;步骤2,识别IR层代码,标记跨函数的跳转指令;步骤3,在跨函数跳转指令前插入条件判断指令,真实端指向跳转指令;步骤4,制作跳转指令的目标函数或代码片段副本,将判断指令虚假端插入指向该副本的跳转指令;步骤5,将副本存放入受监控或不可执行的蜜罐区域。而且,所述数据蜜罐步骤包括以下子步骤,步骤1,在代码蜜罐方法完成后,识别程序的返回地址指令、函数指针生成指令、虚函数指针生成指令、异常处理指针生成指令,并标记位置;步骤2,在受到标记的位置处,提取指令的目标代码或片段,寻找对应的蜜罐副本;步骤3,根据的标记的类别以相似方式创建指向蜜罐副本的指令,在标记位置前后插入。通过本专利技术所构思的以上技术方案,与现有技术相比,具有下列有益效果:1、使用LLVM开源编译器作为编译引擎,将源码作为输入,在IR层进行修改,不会造成代码识别不准确的问题;2、完全使用蜜罐思想,不需要接触系统级修改,兼容性更强;3、从数据和代码两方面进行蜜罐诱捕,诱捕概率更高。本专利技术能够有效的增加攻击者内存布局解析的难度,引诱攻击者使用蜜罐代码和数据,从而落入陷阱中。通过测试发现,本专利技术对软件的开销较低,能够抵御基于代码和数据的指针泄漏的内存泄露攻击。附图说明图1是本专利技术实施例中一种基于LLVM的代码蜜罐方法的装置原理图。图2是本专利技术实施例中一种基于LLVM的数据蜜罐方法的装置原理图。图3是本专利技术实施例中一种基于LLVM的抵御内存泄露的方法的应用流程图。具体实施方式为了便于本领域普通技术人员理解和实施本专利技术,下面结合附图以及实施例对本专利技术做进一步的详细描述。应当理解,此处所描述的实施示例仅用于说明和解释本专利技术,不用于限定本专利技术。本专利技术技术方案提出,通过基于LLVM的代码蜜罐方法、基于LLVM的数据蜜罐方法来缓解内存泄露攻击。通过在编译时进行代码和数据蜜罐插入的方式,抵御基于代码和本文档来自技高网
...

【技术保护点】
1.一种基于LLVM的抵御内存泄漏的系统,其特征在于:包括代码蜜罐装置和数据蜜罐装置,/n所述代码蜜罐装置,用于抵御基于代码指针的内存泄露攻击,包括在LLVM源文件编译为IR层代码后,识别出跨函数的跳转指令,在指令前插入条件判断指令,真实端指向该跳转指令,而后再创建跳转指令指向的函数或代码片段的副本,在条件判断虚假端创建指向该副本的蜜罐跳转指令,最后将该副本转移到受监控或不可执行的蜜罐区域;/n所述数据蜜罐装置,用于识别易造成代码位置泄露的指令,包括程序的返回地址指令、函数指针生成指令、虚函数指针生成指令和异常处理指针生成指令,在这些指令前后插入对应的蜜罐函数或代码生成指令。/n

【技术特征摘要】
1.一种基于LLVM的抵御内存泄漏的系统,其特征在于:包括代码蜜罐装置和数据蜜罐装置,
所述代码蜜罐装置,用于抵御基于代码指针的内存泄露攻击,包括在LLVM源文件编译为IR层代码后,识别出跨函数的跳转指令,在指令前插入条件判断指令,真实端指向该跳转指令,而后再创建跳转指令指向的函数或代码片段的副本,在条件判断虚假端创建指向该副本的蜜罐跳转指令,最后将该副本转移到受监控或不可执行的蜜罐区域;
所述数据蜜罐装置,用于识别易造成代码位置泄露的指令,包括程序的返回地址指令、函数指针生成指令、虚函数指针生成指令和异常处理指针生成指令,在这些指令前后插入对应的蜜罐函数或代码生成指令。


2.根据权利要求1所述基于LLVM的抵御内存泄漏的系统,其特征在于:所述代码蜜罐装置包括以下模块,
敏感点识别模块,用于在LLVM源文件编译为IR层代码后,识别跨函数的跳转指令,并记录指令;
蜜罐条件判断模块,用于根据敏感点识别模块所得结果,在每个敏感点前插入条件判断语句,将判断语句的的真实端指向敏感点,虚假端将用来构造蜜罐陷阱;
蜜罐陷阱模块,用于根据蜜罐条件判断模块所得结果,为敏感点指向的函数或代码片段创建副本,并将判断模块的虚假端存入指向该副本的代码指针;
蜜罐存储模块,用于根据蜜罐陷阱模块所得结果,将所有副本函数或代码判断转移到受到监控的或不可执行的区域。


3.根据权利要求1所述基于LLVM的抵御内存泄漏的系统,其特征在于:所述数据蜜罐装置包括以下模块,
蜜罐返回地址模块,用于识别程序的函数调用指令,并将代码蜜罐装置生成的对应的蜜罐函数调用指令的目的地址在指令前压入栈中;
蜜罐函数指针模块,用于识别程序生成函数指针指令,并将代码蜜罐装置生成的对应的蜜罐函数指针在该指令附近以同样方式生成;
蜜罐虚函数指针模块,用于识别程序的虚函数表生成指令,并将代码蜜罐装置生成的对应的蜜罐虚函数指针在该指令附近以同样方式生成;...

【专利技术属性】
技术研发人员:傅建明金睿
申请(专利权)人:武汉大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1