1、J D o o p:下 一 代 针 对 J a v a W e b 应 用 的 静 态 分 析 框 架陈浩浩&陈光义 京东安全数据流类型漏洞可以总结为两方面的问题1.数据流向问题:不可信的数据流向了某些危险的函数中2.数据过滤问题:过滤不可信数据时出现了遗漏1.引擎目标注入类型漏洞可以总结为两方面的问题1.数据流向问题:不可信的数据流向了某些危险的函数中2.数据过滤问题:过滤不可信数据时出现了遗漏1.引擎目标1.引擎目标Runtime.exec(.)命令执行?javav.sql.Statement.execute(.)SQL注入?2.引擎架构2.引擎架构IR为jimple格式example:2
2、.引擎架构1.a=new A();2.b=a;3.c=b;AssignbacbNewao1facts例子:2.引擎架构1.a=new A();2.b=a;3.c=b;AssignbacbNewao1facts例子:分析规则的例子:VarPointsTo(p,o):-New(p,o).VarPointsTo(to,o):-Assign(to,from),VarPointsTo(from,o).2.引擎架构AssignbacbNewao1facts例子:分析规则的例子:VarPointsTo(p,o):-New(p,o).VarPointsTo(to,o):-Assign(to,from),Var
3、PointsTo(from,o).VarPointsToao1bo1co12.引擎架构Why?1.Datalog规则与指针分析规则天然契合,高度一致,可读性强2.将分析规则与求解过程进行解构,专注于规则的编写3.有效利用souffle的高性能求解能力4.利用Doop原有的反射处理规则.3.1 P/T Analysis算法P/T Analysis核心:为source生成污点对象,把污点对象视为普通堆对象,通过指针分析进行传播.指针分析:污点分析:Neville Grech and Yannis Smaragdakis,“P/Taint:Unified Points-to and Taint An
4、alysis”.OOPSLA 2017.3.1 P/T Analysis算法P/T Analysis核心:为source生成污点对象,把污点对象视为普通堆对象,通过指针分析进行传播.优点:1.对指针分析框架进行少量更改即可实现P/T Analysis2.一次分析即可同时完成指针分析与污点分析,效率更高3.污点分析可天然地复用指针分析规则3.2 taint transfer污点字符串相加的例子:3.2 taint transfer污点字符串相加的例子:3.2 taint transfer污点字符串相加的例子:3.2 taint transfer污点字符串相加的例子:Param To Base:若
5、str指向污点对象,则buffer指向StringBuffer类型的污点对象Base To Ret:若base指向污点对象则res指向String类型的污点对象3.3 taint transfer的局限性复杂字符串操作的例子:taint tansfer生成的污点对象是一个空壳arr指向char类型的污点对象但是arr*没有指向任何对象,导致污点断流3.3 taint transfer的局限性taint transfer可能会生产各种类型的污点对象3.4 access path问题问题的本质:创建污点对象时如何处理对象内部的字段?1.不处理内部字段漏报X2.内部所有字段都指向污点对象误报X3.部
6、分字段指向污点对象规则过于复杂X3.4 access path问题思路:只生成String相关类型的污点对象,并为其字段/索引添加指向关系大部分情况下:-source()只会生成String类型的污点对象-sink()只会接受String或者String相关泛型的污点对象3.4 access path问题思路:只生成String相关类型的污点对象,并为其字段/索引添加指向关系char类型的对象char类型的污点对象数组索引指针arr*3.4 access path问题ListedList.arrlist.add(str)list.get(0)LinkedList只是传播污点对象的桥梁自身不会作