一种基于LLVM编译器的程序非控制数据攻击防护方法技术

技术编号:21432907 阅读:32 留言:0更新日期:2019-06-22 12:07
本发明专利技术提供一种基于LLVM编译器的程序非控制数据攻击防护方法,针对现今广泛应用的64位应用程序,将程序源代码编译成中间代码,通过对中间代码进行静态分析得到指向性分析结果,并且获得需要保护的非控制数据;同时,它在中间代码的基础上进行指令插桩,以保证程序的非控制数据不被恶意篡改。这种方法克服了原有静态分析方法的不足,提高了分析的精确程度,并且利用较低的空间和时间复杂度解决了攻击者对程序非控制数据恶意篡改所带来的安全威胁。

【技术实现步骤摘要】
一种基于LLVM编译器的程序非控制数据攻击防护方法
本专利技术属于软件安全领域,涉及对恶意攻击的防护,具体是一种基于LLVM编译器的程序非控制数据攻击防护方法,可用于保护程序的安全运行。
技术介绍
由于很多程序都是由不安全的语言编写而成的,比如C或C++语言,从而容易受到基于内存安全的攻击。例如,攻击者可以利用一个缓冲区溢出漏洞,覆盖内存中的某个函数返回地址或程序分支变量数据,从而改变程序的执行流程。为了应对攻击,近年来,业界研究人员提出了许多保护机制来抵御基于内存安全的攻击。然而,分析发现,大多数现存的保护机制都是针对程序的控制数据(比如,函数指针和函数返回地址)提供保护,从而使得程序能够抵御基于控制流篡改的攻击。例如,美国加州大学圣克鲁兹分校等研究机构提出的CFI(Control-FlowIntegrity)和西安电子科技大学等研究机构提出的Fine-CFI系统,通过对程序的控制数据提供保护,使其免受攻击者基于控制流篡改的攻击。但是,业界对程序非控制数据的保护却没有提出足够有效的防御技术,而攻击者同样可以通过篡改程序的非控制数据实施攻击。非控制数据,即non-controldat本文档来自技高网...

【技术保护点】
1.一种基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,包括如下步骤:(1)将程序源代码通过LLVM编译器编译成中间代码;(2)通过对中间代码进行指针分析,得到程序中数据对象的指针别名分析结果;(3)确定程序的内存空间布局,得到程序的data/bss段的空间地址范围;(4)遍历整个程序,通过对中间代码的分析,判断数据对象是否属于程序的data/bss段,并结合指针别名分析结果,得到每条指令能够写入的数据对象集合;(5)为每条store指令及其能够写入的数据对象集合分配标识符;(6)利用步骤(3)中得到的data/bss段的空间地址范围,创建标识符表,同时对程序中间代码进行插桩,将标...

【技术特征摘要】
1.一种基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,包括如下步骤:(1)将程序源代码通过LLVM编译器编译成中间代码;(2)通过对中间代码进行指针分析,得到程序中数据对象的指针别名分析结果;(3)确定程序的内存空间布局,得到程序的data/bss段的空间地址范围;(4)遍历整个程序,通过对中间代码的分析,判断数据对象是否属于程序的data/bss段,并结合指针别名分析结果,得到每条指令能够写入的数据对象集合;(5)为每条store指令及其能够写入的数据对象集合分配标识符;(6)利用步骤(3)中得到的data/bss段的空间地址范围,创建标识符表,同时对程序中间代码进行插桩,将标识符填入标识符表中,同时进行数据写入检查,若发生非控制数据篡改攻击,则抛出异常,否则,正常运行程序。2.根据权利要求1所述的基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,步骤(1)中,具体是通过指令Clang-emit-llvmfilename.c-S-ofilename.ll和Clang-emit-llvm-cfilename.c-ofilename.bc编译出程序的中间代码。3.根据权利要求1所述的基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,步骤(2)具体包括如下步骤:(2.1)实现指针分析算法;(2.2)将步骤(2.1)的指针分析算法放在LLVM源代码目录下,并书写与指针分析算法相关的CMakeLists和Makefile文件,CMakeLists和Makefile文件定义了编译过程中的规则;(2.3)修改LLVM源代码:将指针分析算法的文件目录写入LLVM源代码文件的CMakeLists文件中;(2.4)编译修改后的LLVM源代码,生成能够调用的指针分析动态链接库文件;(2.5)执行如下命令:llvmcompiledirectory/opt-loadpassdirectory/LLVMAndersenPA.so-andpafilename.bc-oprogram.out,获得程序中数据对象的指针别名分析结果。4.根据权利要求3所述的基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,步骤(2.1)中,改进Andersen指针分析算法,形成字段敏感的指针分析算法;具体过程为:(2.1.1)使用<o,f,sf>来表示一个指针指向目标的位置,其中,o表示所在数据对象的名字,f表示偏移量,sf表示指针指向目标的结束位置;(2.1.2)约束生成:在约束生成的过程中,遍历程序每一条指令,并按照Andersen算法提出的约束规则为其生成相应约束,将整个程序系统转化为一个约束集合,将整个程序表示为一个约束图;(2.1.3)约束求解:约束求解的输入为初始约束图,输出为求解之后的约束图,该过程分为两步:处理复杂约束和传递指向集;处理复杂约束的过程是向约束图中添加新边,导致新的指向集传递过程,指向集的更新导致工作集的更新,从而进入下一次的迭代过程;(2.1.4)指向性结果获得:约束求解后,得到一个完整的指向图,将指向图转化为指向分析的结果。5.根据权利要求1所述的基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,步骤(4)具体包括如下步骤:(4.1)修改/llvm/lib/Transforms/Hello/下的Hello.cpp文件,生成用于store指令分析的动态链接库文件,从而得到store指令分析结果;(4.2)编译LLVM源代码,并执行如下命令:llvmcompiledirectory/opt-loadpassdirectory/Hello.so-hellofilename.bc-oprogram2.out,得到每条store指令能够写入的数据对象集合;(4.3)结合指针别名分析结果,将指针别名分析结果与store指令分析结果进行合并,并将最后结果写入文件之中。6.根据权利要求5所述的基于LLVM编译器的程序非控制数据攻击防护方法,其特征在于,步骤(4.1)具体过程为:(4.1.1)标记每一条store指令,给每一条store指令分配一个标...

【专利技术属性】
技术研发人员:李金库张晓赞罗林波姚青松马建峰
申请(专利权)人:西安电子科技大学
类型:发明
国别省市:陕西,61

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

1