CN112016099A - 二进制程序过程间静态污点分析方法及系统 - Google Patents

二进制程序过程间静态污点分析方法及系统 Download PDF

Info

Publication number
CN112016099A
CN112016099A CN202011151815.1A CN202011151815A CN112016099A CN 112016099 A CN112016099 A CN 112016099A CN 202011151815 A CN202011151815 A CN 202011151815A CN 112016099 A CN112016099 A CN 112016099A
Authority
CN
China
Prior art keywords
taint
analysis
program
static
binary
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
CN202011151815.1A
Other languages
English (en)
Other versions
CN112016099B (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.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202011151815.1A priority Critical patent/CN112016099B/zh
Publication of CN112016099A publication Critical patent/CN112016099A/zh
Application granted granted Critical
Publication of CN112016099B publication Critical patent/CN112016099B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明的二进制程序过程间静态污点分析方法及系统,包括:二进制控制结构分析模块、到达定值分析模块和污点传播分析模块,其中,二进制控制结构分析模块计算预设目标程序的控制结构视图;到达定值分析模块基于所述控制结构视图,运算出目标程序内各个程序点的到达定值状态;污点传播模块按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态。本发明依托于统一的上下文敏感、流敏感的过程间静态分析框架定制具体的分析算法;通过到达定值分析获取运行时各个机器位置对应的定值集合,提升间接跳转、指针别名的解析精度;在此基础上构建静态过程间污点分析引擎,由此提供针对二进制程序的静态全路径污点传播分析能力手段。

Description

二进制程序过程间静态污点分析方法及系统
技术领域
本发明属软件分析技术领域,特别涉及一种二进制程序过程间静态污点分析方法及系统。
背景技术
静态污点分析是当前安全研究人员发现、分析代码漏洞的一种重要手段。在不运行目标程序的情况下,该技术对目标程序内部所有静态可达路径进行安全分析,确认是否存在“外部输入可以对敏感程序位置产生影响”的程序路径,由此检测目标程序是否存在安全问题。该技术当前在对源码程序安全分析方面应用广泛。然而对于二进制程序,受制于指针别名解析不够完备等问题,当前相关研究大多隶属动态污点分析范畴,仅仅关注于单一执行路径中输入污点的传播过程,缺乏对目标程序全路径污点状态安全分析的能力。
具体的,污点分析(又称污点传播分析)的主要思想,在于为目标程序中从外部环境中(诸如文件系统、命令行、网络数据报文等)读取的输入数据引入对应的污点标签,随之在程序执行过程中进行污点传播。通过判断“外部输入对敏感程序位置是否能够产生影响”,确认目标程序是否存在安全问题。该技术当前已成为信息安全领域的一个研究热点。
依据是否运行目标程序,该技术可分为静态污点分析、动态污点分析两类。前者一般基于传统数据流分析技术,以流敏感的方式展开污点传播计算,最终求解出目标程序所有控制流图静态可达路径的污点传播信息。后者则仅关注于目标程序的某一给定的程序执行路径的污点传播状况,一般基于指令编译时插桩、动态二进制翻译等技术,在目标路径每条指令执行时刻进行动态挂钩,实时计算该指令对应的污点传播操作语义,在路径执行过程中同时进行污点传播。
当前,静态污点分析技术和动态污点分析技术在漏洞挖掘、软件脆弱性分析等方面都有着较为广泛的研究。前者一般用于对目标程序进行全路径污点状态分析,后者则大多用于对单一路径进行安全属性分析。但是在二进制程序安全分析方面,由于传统数据流分析方法在过程间程序分析时对调用上下文信息不够敏感、指针别名解析不够精确等问题,当前针对该型目标的分析方法更多以动态污点分析为主,普遍缺乏过程间静态污点分析的能力手段。
因此,目前迫切需要本领域技术人员解决的一个技术问题就是:如何能够创新的提出一种有效的二进制程序过程间静态污点分析方法,克服现有技术的缺陷,满足实际应用中的更多需求。
发明内容
本申请实施例的目的是提出一种二进制程序过程间静态污点分析方法及系统,将二进制程序提升为中间语言表现形式,随之以流敏感、上下文敏感的方式展开过程间静态污点分析,可以计算出目标程序内任意程序点处程序变量对应的污点状态,将该方法与静态漏洞检测工具相结合,可以有效提升漏洞检测的分析精度。
为解决上述技术问题,本申请实施例是这样实现的:
根据本申请实施例的第一方面,提出了一种二进制程序过程间静态污点分析系统,所述系统包括:二进制控制结构分析模块、到达定值分析模块和污点传播模块,其中,二进制控制结构分析模块计算预设目标程序的控制结构视图;到达定值分析模块基于所述控制结构视图,运算出目标程序内各个程序点的到达定值状态,所述定值状态指各程序点处的程序变量对应的预设取值集合;污点传播模块按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态,所述污点状态指目标程序内各个程序点处程序变量受外部输入影响情况。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述污点传播分析模块为隶属于“基于格的抽象解释理论”的静态分析技术提供了统一的静态抽象分析模块构建平台,所述到达定值分析模块和污点传播分析模块即依托于该框架构建,能够以过程间上下文敏感、流敏感的方式对目标程序进行分析。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述控制结构视图包括:预设目标程序内各个段的地址空间布局、各个函数的过程内控制流图及对应中间语言表现形式和过程调用图的控制结构信息。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述二进制控制结构分析模块应用反汇编、过程内控制流分析技术计算出目标程序各个函数的过程内控制流图;应用调用图分析计算出目标程序的调用图;应用中间语言提升技术计算出目标程序各个函数中每个基本块的中间语言表现形式,形成目标程序的静态控制结构视图。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述所述系统计算出的程序静态污点状态为二进制程序过程间静态污点分析系统提供“程序关键位置敏感操作数是否为外部输入可控”这一关键信息,由此可有效约减静态分析的误报情况,强化分析系统的漏洞检测能力。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述上下文敏感的过程间数据流分析框架包括面向过程间抽象解释的机器状态定义和上下文敏感、流敏感的过程间抽象解释算法。
基于本发明的二进制程序过程间静态污点分析系统的另一个实施例中,所述污点传播模块包括污点引入子模块、污点传播分析子模块和污点漏洞报警子模块,污点引入子模块对外部输入引入相关的API函数在目标程序内的调用位置进行静态挂钩,当分析引擎执行到这些调用位置时,依据目标缓冲区地址、长度参数确定对应的抽象机器位置,进而将相应的污点机器状态标记为“污染状态”。
基于本发明实施例的另一个方面,公开一种二进制程序过程间静态污点分析方法,包括:计算预设目标程序的控制结构视图;
基于所计算的控制结构视图,运算出目标程序内各个程序点的到达定值状态;所述定值状态指各程序点处的程序变量对应的预设取值集合;
按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态,所述污点状态指目标程序内各个程序点处程序变量受外部输入影响情况。
本申请提出的二进制程序过程间静态污点分析方法,针对给定二进制程序,计算出任意程序点处程序变量受外部输入影响的污点程序状态,该方法可以与静态漏洞检测等技术相结合,进一步筛选出会受到影响的可能存在漏洞的问题程序点,由此提升静态漏洞挖掘引擎的计算精度,本方案通过依托于统一的上下文敏感、流敏感的过程间静态分析框架定制具体的分析算法,通过到达定值分析获取运行时各个机器位置对应的定值集合,提升间接跳转、指针别名的解析精度,在此基础上构建静态过程间污点分析引擎,由此提供针对二进制程序的静态全路径污点传播分析能力手段。
附图说明
图1示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析系统的结构示意图;
图2示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析系统另一实施例的结构示意图;
图3示出了根据本申请的一些实施例提供的过程间抽象解释算法框架的示意图;
图4示出了根据本申请的一些实施例提供的污点格的示意图;
图5示出了根据本申请的一些实施例提供的基于angr平台的技术原型系统的示意图;
图6示出了根据本申请的实施例所述的目标程序的main函数反汇编视图示意图;
图7示出了根据本申请的一些实施例提供的启动分析引擎对程序进行分析的实验结果示意图;
图8示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析方法的流程示意图。
具体实施方式
以下结合附图对本发明的具体实施方式作出详细说明。
图1示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析系统的示意图,结合图1对二进制程序过程间静态污点分析系统进行详细介绍,所述系统包括:二进制控制结构分析模块101、到达定值分析模块102和污点传播模块103,其中,二进制控制结构分析模块计算预设目标程序的控制结构视图;到达定值分析模块基于所述控制结构视图,运算出目标程序内各个程序点的到达定值状态;污点传播模块按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态。
具体实现时,参见图2,示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析系统另一实施例的结构示意图。具体实现中,二进制控制结构分析模块旨在为目标程序计算出其对应的控制结构视图。本申请综合应用反汇编、过程内控制流分析、调用图分析、中间语言提升等技术,最终对预设目标程序,计算出其内各个段的地址空间布局、各个函数的过程内控制流图及对应中间语言表现形式、过程调用图等控制结构信息。后端的静态污点分析引擎随之基于这些控制结构展开过程间抽象解释计算过程。
上下文敏感的过程间抽象解释分析框架包括两部分:面向过程间抽象解释的机器状态定义和上下文敏感、流敏感的过程间抽象解释算法。其中后者作用于前者,计算用户定制的抽象分析语义。
目标程序运行过程中涉及到许多类型的机器位置,譬如临时寄存器、通用寄存器、内存全局数据段等。本申请将这些位置视为彼此之间“绝对隔离”的不同抽象区域,每个区域维护着对应地址范围内的抽象存储单元和抽象值之间的映射关系(抽象值域为格或半格)。在程序抽象分析的任意时刻所有抽象区域的映射关系集合即为该时刻程序的抽象分析状态。
对于程序抽象执行中的寄存器、内存等机器位置的状态读写操作,框架在分析时会依据对应的操作数地址,在当前抽象分析状态中定位到其所属的抽象区域内对应的存储单元,通过对该单元相关的抽象值进行操作完成相应的读写。
为适应过程间程序分析需求,本申请进行了与之前方法不同的特殊定制,具体如下:
1. 传统静态分析方法为每个函数单独维护一个栈空间。该策略并不适用于过程间参数传递的抽象计算场景。本申请则在分析过程中始终维持着唯一的一个全局栈状态。每个函数仅当被调用时,才会在该全局栈上分配对应的活动记录。
2. 对于堆空间,传统静态分析方法仅仅为每个涉及堆内存申请的程序点alloc_site定义唯一的抽象堆区域。该区域往往是“过程内流敏感的”,不适于过程间堆内存分析的计算场景。针对该问题,本申请综合alloc_site所处的过程调用上下文call_ctx,将该分析过程改为为< alloc_site, call_ctx > 二元组构造相应的抽象堆区域。由此保证了分析框架对于堆内存抽象计算的“过程间流敏感性”。
本申请提出的过程间流敏感的抽象解释算法框架旨在为隶属于“基于格的抽象解释理论”的静态分析技术(数据流分析、值集分析等)提供统一的过程间抽象分析算法。具体分析方法相关的环节在框架中以表1所示的接口形式体现。分析算法可以通过实现这些接口,依托于框架实现对目标二进制程序的过程间上下文敏感、流敏感的抽象计算。
表1 抽象解释框架中的预留接口
Figure DEST_PATH_IMAGE002
算法框架如图3所示过程间抽象解释算法框架。interproc_analysis为分析的入口过程。该过程接受前端控制流分析计算得到的目标程序控制结构视图为输入参数,在完成起始抽象分析状态的初始化后,随即由func_analysis针对给定函数展开分析。
func_analysis分析过程首先计算给定函数内部控制流图节点的拓扑排序序列,随即基于该序列以工作集的方式展开分析。对于序列中的单个节点node,分析工作包括:
1) 将node包含的机器指令提升成对应的中间语言表现形式;
2) 由node节点的所有前驱节点对应的出口程序状态,计算node节点的入口程序状态,如下所示:
Figure 865948DEST_PATH_IMAGE003
3) 对node节点应用具体分析相关的 node_analysis 过程进行抽象计算,得到结果状态out_state;
4) 如果node节点的出口边是一个过程调用类型的边,则根据过程调用图获取该调用点对应的所有可能被调用的目标函数,递归调用func_analysis对这些函数进行分析,并应用MERGE算子将这些函数的返回时程序状态合并成一个新的状态out_state;
5) 判断 out_state是否“蕴含在”之前计算的out_states[node]中。若为否,则标记算法未收敛。所有节点任务计算完成将重新开始下一轮迭代,直至状态完全收敛为止。
到达定值分析模块是编译系统后端经典的机器无关优化技术。该技术能够有效计算能够到达特定程序位置a并对a处变量v产生影响的定值集合。我们依托于上述过程间抽象解释框架,以标准的形式定义merge、node_analysis等关键接口,由此实现了过程间上下文敏感的到达定值分析。
在到达定值分析过程中,程序中变量的定值是具体数值。然而在内存访问时,分析引擎需要根据地址定值获取相应的抽象机器状态位置,进而完成抽象状态的读写。针对该问题,我们为每个抽象机器位置维护相应的地址映射范围。通过查找给定地址定值所隶属的地址范围,确认其对应的抽象状态存储。
实践中,依据图4所示的污点格定义污点值集TSet定义污点机器状态为Locations->TSet形式的映射关系(Locations为程序抽象机器位置的集合)。所有机器位置对应的污点状态在程序起始分析时默认为TSet的底格元素。
污点传播模块引擎包括三个部件:污点引入子模块、污点传播分析子模块和污点漏洞报警子模块。污点引入子模块对外部数据读取相关的API函数(譬如Linux平台下C语言运行时库中的read、recv等函数)在目标程序内的调用位置进行静态挂钩。当分析引擎执行到这些调用位置时,依据目标缓冲区地址、长度等参数确定对应的抽象机器位置,进而将相应的污点机器状态标记为“污染状态”。
污点传播分析模块依托于过程间抽象解释框架构建。特别地,以污点值集TSet蕴含的污点值偏序关系定义merge算子。对于表征中间语言抽象计算的node_analysis算子,污点传播分析模块会结合到达定值分析确定地址操作数出相应的定值集合,由此确定出该地址操作数对应的污点存储位置并进行相应的读写操作。
污点传播模块计算出每个程序点处各个变量对应的污点状态。污点漏洞报警模块将该信息和漏洞检测模块确认的可能存在漏洞的问题程序点及敏感操作数相结合,通过计算两者的交集,最终得到能够受到外部输入影响并且可能产生漏洞的程序位置并发出报警。
基于上面论述的技术方案,我们依托于二进制程序分析平台angr设计实现了如图4所示的技术原型系统。该系统首先依托于angr内置的控制流分析功能计算出目标程序控制结构视图、各个基本块对应的VEX中间语言表现形式,随之将这些信息传递给后端的静态漏洞挖掘引擎展开分析。
angr提供了基于程序块工作集、基于图节点遍历两型前向分析算法框架。前者主要用于控制流分析;之于后者,angr在此基础上构建了到达定值分析算法。然而该算法仅仅是过程内流敏感的,不适于对二进制程序全路径静态分析的场景。
本申请对angr内置的基于图节点遍历的前向分析算法框架进行改造,使其成为流敏感、上下文敏感的前向抽象解释算法框架。在此基础上构建到达定值分析和污点传播分析模块。由此形成的污点传播引擎最终将计算出各个程序点处程序变量对应的到达定值集合和污点状态集合。
实验实例1:为验证系统对二进制程序进行过程间静态污点分析的能力,我们将如下程序编译成二进制程序进行实验分析。可见该程序中main函数内的局部变量最终应该受到从标准输入读取的数据内容影响,而标准输入的引入是在main函数之前调用taint_func函数时,在taint_func函数内调用read函数产生。这是一个二进制程序的过程间污点传播分析问题。
#include <stdio.h>
void taint_func(char * buffer, int len) {
read(0, buffer, len);
}
int main(int argc, char * argv[]) {
int a = 0, b = 0;
char buffer[1024];
taint_func(buffer, 10);
a = *((int *)buffer);
b = *((int *)(buffer + 4));
return 0;
}
我们在64位Ubuntu-16.04操作系统上将该程序编译为32位i386架构下的ELF可执行程序test-p0。其main函数的反汇编视图如图6示出的目标程序的main函数反汇编视图示意图。
通过对反汇编视图的分析,可以发现0x804922d程序位置EAX寄存器的定值不受外部输入影响,而局部变量[ebp - 0x408]的定值会受到tainted_func函数调用中来源于标准输入的数据影响。启动分析引擎对该程序进行分析,同时指定0x804922d为监视位置,实验结果如图7所示。
可见,分析引擎计算出0x804922d程序点处,EAX寄存器的污点状态为untainted,main函数内的局部变量[ebp - 0x408]的污点状态为tainted。与预期的结果相符,证明了本申请静态污点传播的正确性。
实验实例2:为阐明污点分析系统对二进制软件漏洞静态检测过程的能力支持,本申请将如下程序编译成二进制可执行程序进行实验分析。可以看出LABEL2程序点处的func1函数函数调用会将从标准输入读取的字符串作为参数传递给printf函数,由此导致格式化字符串漏洞。
#include <stdio.h>
void taint_func(char * buffer, int len) {
read(0, buffer, len);
}
void func1(char * buffer) {
printf(buffer);
}
int main(int argc, char * argv[])
{
int a = 0, b = 0;
char buffer[1024];
taint_func(buffer, 10);
LABEL1: func1(“hello world !”);
LABEL2: func1(buffer);
return 0;
}
对于上述程序,传统的静态漏洞检测系统由于对buffer字符串的定值来源未知,将认为LABEL1和BABEL2两个程序点都是可能导致漏洞的程序点。由此产生误报。本申请提出的静态污点分析系统恰恰能够为分析引擎提供这一关键信息,由此实现分析误报的约减。
图8示出了根据本申请的一些实施例提供的二进制程序过程间静态污点分析方法的流程示意图,结合图8对示例实施例中的二进制程序过程间静态污点分析方法进行详细的说明。二进制程序过程间静态污点分析方法包括:
S1,计算预设目标程序的控制结构视图;
S2,基于所计算的控制结构视图,运算出目标程序内各个程序点的到达定值状态;
S3,按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态。
具体实现中,首先为预设目标程序计算其各个段内地址空间布局、各个函数的过程内控制流图及对应中间语言表现形式、过程调用图等控制结构信息,形成控制结构视图;基于所计算的控制结构视图,首先对过程调用图的根函数节点对应的过程内控制流图在中间语言表示层面上进行到达定值分析。对于其间的函数调用语句,迭代对其目标函数对应的过程内控制流图应用到达定值分析。由此计算出目标程序内各个程序点处各个变量对应的到达定值状态;基于计算的控制结构视图,对外部输入相关的read、recv函数的调用位置进行静态挂钩以实现污点变元的引入;随之基于所计算的到达定值状态进行污点传播分析,由此计算出目标程序内各个程序点处程序变量对应的污点状态。
对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。

Claims (8)

1.一种二进制程序过程间静态污点分析系统,其特征在于,所述系统包括:二进制控制结构分析模块、到达定值分析模块和污点传播模块,其中,二进制控制结构分析模块计算预设目标程序的控制结构视图;到达定值分析模块基于所述控制结构视图,运算出目标程序内各个程序点的到达定值状态,所述定值状态指各程序点处的程序变量对应的预设取值集合;污点传播模块按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态,所述污点状态指目标程序内各个程序点处程序变量受外部输入影响情况。
2.根据权利要求1所述的二进制程序过程间静态污点分析系统,其特征在于,污点传播分析模块为隶属于“基于格的抽象解释理论”的静态分析技术提供了统一的静态抽象分析模块构建平台,所述到达定值分析模块和污点传播分析模块以过程间上下文敏感、流敏感的方式对目标程序进行分析。
3.根据权利要求2所述的二进制程序过程间静态污点分析系统,其特征在于,所述控制结构视图包括:预设目标程序内各个段的地址空间布局、各个函数的过程内控制流图及对应中间语言表现形式和过程调用图的控制结构信息。
4.根据权利要求3所述的二进制程序过程间静态污点分析系统,其特征在于,所述二进制控制结构分析模块应用反汇编、过程内控制流分析计算出目标程序各个函数的过程内控制流图;应用调用图分析计算出目标程序的调用图;应用中间语言提升方法计算出目标程序各个函数中每个基本块的中间语言表现形式,形成目标程序的静态控制结构视图。
5.根据权利要求1所述的二进制程序过程间静态污点分析系统,其特征在于,所述程序静态污点状态为二进制程序过程间静态污点分析系统提供“程序关键位置敏感操作数是否为外部输入可控”关键信息,有效约减静态分析误报情况,强化分析系统的漏洞检测能力。
6.根据权利要求2所述的二进制程序过程间静态污点分析系统,其特征在于,所述以过程间上下文敏感、流敏感的方式对目标程序进行分析包括:面向过程间抽象解释的机器状态定义和上下文敏感、流敏感的过程间抽象解释算法,其中,面向过程间抽象解释的机器状态定义为抽象分析数据结构定义,上下文敏感、流敏感的过程间抽象解释算法为抽象分析算法描述,数据流分析和值集分析算法对目标二进制程序的过程间上下文敏感、流敏感进行抽象计算。
7.根据权利要求1所述的二进制程序过程间静态污点分析系统,其特征在于,所述污点传播模块包括污点引入子模块、污点传播分析子模块和污点漏洞报警子模块;
所述污点引入子模块对外部输入引入相关的API函数在目标程序内的调用位置进行静态挂钩,当分析引擎执行到这些调用位置时,依据目标缓冲区地址、长度参数确定对应的抽象机器位置,将相应的污点机器状态标记为“污染状态”;
污点传播分析子模块依托于过程间抽象解释框架定制污点传播规则,计算出预设目标程序每个程序点处各个变量对应的污点状态;
污点漏洞报警子模块将污点状态信息和漏洞检测模块确认的可能存在漏洞的问题程序点及敏感操作数相结合,通过计算两者的交集,最终得到能够受到外部输入影响并且可能产生漏洞的程序位置并发出报警。
8.一种采用如权利要求1-7之一所述系统的二进制程序过程间静态污点分析方法,其特征在于,所述方法包括:
计算预设目标程序的控制结构视图;
基于所计算的控制结构视图,运算出目标程序内各个程序点的到达定值状态;所述定值状态指各程序点处的程序变量对应的预设取值集合;
按照所运算出的到达定值状态,计算出目标程序内各个程序点的污点状态,所述污点状态指目标程序内各个程序点处程序变量受外部输入影响情况。
CN202011151815.1A 2020-10-26 2020-10-26 二进制程序过程间静态污点分析方法及系统 Active CN112016099B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011151815.1A CN112016099B (zh) 2020-10-26 2020-10-26 二进制程序过程间静态污点分析方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011151815.1A CN112016099B (zh) 2020-10-26 2020-10-26 二进制程序过程间静态污点分析方法及系统

Publications (2)

Publication Number Publication Date
CN112016099A true CN112016099A (zh) 2020-12-01
CN112016099B CN112016099B (zh) 2021-04-02

Family

ID=73527866

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011151815.1A Active CN112016099B (zh) 2020-10-26 2020-10-26 二进制程序过程间静态污点分析方法及系统

Country Status (1)

Country Link
CN (1) CN112016099B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112528240A (zh) * 2020-12-02 2021-03-19 上海交通大学 面向密码代码的自动化程序敏感数据保护方法
CN113497809A (zh) * 2021-09-07 2021-10-12 中国人民解放军国防科技大学 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN114546561A (zh) * 2022-02-22 2022-05-27 湖南泛联新安信息科技有限公司 一种程序静态分析结果中最佳修复点的展示方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170177868A1 (en) * 2015-12-17 2017-06-22 International Business Machines Corporation Detecting malicious code based on conditional branch asymmetry

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170177868A1 (en) * 2015-12-17 2017-06-22 International Business Machines Corporation Detecting malicious code based on conditional branch asymmetry

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
孟宪凯: "面向航天应用软件的源代码级软加固技术研究", 《中国优秀硕士学位论文•全文数据库》 *
董龙明等: "基于局部堆内存抽象表示的堆操作程序内存泄露检测", 《计算机研究与发展》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112528240A (zh) * 2020-12-02 2021-03-19 上海交通大学 面向密码代码的自动化程序敏感数据保护方法
CN113497809A (zh) * 2021-09-07 2021-10-12 中国人民解放军国防科技大学 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN113497809B (zh) * 2021-09-07 2021-11-26 中国人民解放军国防科技大学 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN114546561A (zh) * 2022-02-22 2022-05-27 湖南泛联新安信息科技有限公司 一种程序静态分析结果中最佳修复点的展示方法
CN114546561B (zh) * 2022-02-22 2024-05-24 湖南泛联新安信息科技有限公司 一种程序静态分析结果中最佳修复点的展示方法

Also Published As

Publication number Publication date
CN112016099B (zh) 2021-04-02

Similar Documents

Publication Publication Date Title
CN112016099B (zh) 二进制程序过程间静态污点分析方法及系统
Lattner et al. Making context-sensitive points-to analysis with heap cloning practical for the real world
US9274923B2 (en) System and method for stack crawl testing and caching
US7392514B2 (en) Data flow chasing
US7571427B2 (en) Methods for comparing versions of a program
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US7356813B2 (en) System and method for optimizing a program
US20110145799A1 (en) Path-sensitive dataflow analysis including path refinement
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
JP2003196106A (ja) プログラム変換方法、コンピュータ装置及びプログラム
US8762974B1 (en) Context-sensitive compiler directives
Barua et al. OMPSan: static verification of OpenMP’s data mapping constructs
CN112416313B (zh) 支持大整数数据类型和运算符的编译方法
Madhavan et al. Purity analysis: An abstract interpretation formulation
Liu et al. Towards understanding bugs in python interpreters
Brandner et al. Criticality: static profiling for real-time programs
US8572594B2 (en) Invasion analysis to identify open types
Yu et al. State consistency checking for non-reentrant function based on taint assisted symbol execution
Benz et al. Scenario-aware program specialization for timing predictability
Miao et al. Expression Isolation of Compiler-Induced Numerical Inconsistencies in Heterogeneous Code
Puhan et al. Program crash analysis based on taint analysis
CN117555811B (zh) 基于静态符号执行的嵌入式软件分析方法、装置及存储介质
CN113238973B (zh) 定位操作系统性能瓶颈的方法、计算设备以及存储介质
Borodin et al. Static analyzer for Go

Legal Events

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