发明名称 |
一种基于污点不变集的污点分析方法 |
摘要 |
一种基于污点不变集的污点分析方法,包括如下步骤,步骤1:通过污点分析方法,获得原始污点数据original_set;步骤2:获得污点不变集invariable_set;步骤3:获得最终污点数据taint_set,最终污点数据taint_set=原始污点数据original_set-污点不变集invariable_set。步骤4:制定污点数据结构;步骤5:跟踪污点传播,提出了一种轻量级的污点传播跟踪方法。步骤6:跟踪污点指针,为了实现对污点指针的跟踪,当间接寻址的地址或者寄存器是污点数据时,目的操作数也被标记为污点。步骤7:制定漏洞检测规则,直接对内存函数进行插桩,在内存函数被调用前,检测函数参数是否被污点标记,如果是,则检测到了内存函数漏洞。 |
申请公布号 |
CN103995782B |
申请公布日期 |
2016.06.22 |
申请号 |
CN201410269574.9 |
申请日期 |
2014.06.17 |
申请人 |
电子科技大学 |
发明人 |
牛伟纳;张小松;赖特;陈瑞东;王东;陈厅;冀风宇;李杰 |
分类号 |
G06F11/36(2006.01)I |
主分类号 |
G06F11/36(2006.01)I |
代理机构 |
成都华风专利事务所(普通合伙) 51223 |
代理人 |
徐丰 |
主权项 |
一种基于污点不变集的污点分析方法,其特征在于包括如下步骤:步骤1:通过污点分析方法,获得原始污点数据original_set;步骤2:获得污点不变集invariable_set;步骤2.1:执行输入是input的程序p,得到程序p的所有变量及其值的集合var_set;步骤2.2:初始化循环次数为0;步骤2.3:当循环次数小于threshold时,进入步骤2.4;否则进入步骤3;步骤2.4:改变输入获得新的输入new_input;步骤2.5:执行输入是new_input的程序p,得到程序p的所有变量及其值的集合res_set;步骤2.6:比较集合var_set与集合res_set不同的项,产生集合diff_set;步骤2.7:从集合var_set中过滤掉集合diff_set,即保留在不同输入情况下变量没有变化的变量及其值的集合,进入步骤2.3;步骤3:获得最终污点数据taint_set,最终污点数据taint_set = 原始污点数据original_set-污点不变集invariable_set;步骤4:制定污点数据结构;步骤5:跟踪污点传播;步骤6:跟踪污点指针,为了实现对污点指针的跟踪,当间接寻址的地址或者寄存器是污点数据时,目的操作数也被标记为污点;步骤7:制定漏洞检测规则,直接对内存函数进行插桩,在内存函数被调用前,检测函数参数是否被污点标记,如果是,则检测到了内存函数漏洞;步骤5使用了一种轻量级的污点传播跟踪方法,具体包括如下步骤:步骤1:初始化存有内存地址和宽度信息、寄存器、指令操作码、指令类型的临时数据结构;步骤2:查找临时数据结构中所有被读取的寄存器和内存地址;步骤3:查询污点数据结构中所有被读取的寄存器和内存地址;步骤4:判断所有被读取的寄存器和内存地址中存储的数据是否是污点数据,如果不是污点数据则进入步骤5,否则进入步骤6;步骤5:删除那些记录在临时数据结构里被修改的寄存器和内存地址的污点信息;步骤6:标记记录在临时数据结构里的那些被修改的寄存器和内存地址为污点。 |
地址 |
611731 四川省成都市高新区(西区)西源大道2006号 |