洞态IAST疑问

在学习动态污点分析的过程中,对实现了动态污点分析的过程很感兴趣,在国外开源的Phosphor: Dynamic Taint Tracking for the JVM中,他们的实现是对指令进行分析,实现过于复杂,分析起来太慢了。这时候国内开源的洞态IAST做的结构上很清晰,也是基于Jvm-Sandbox做的,所以相当来说比较利于分析。

这个洞态IAST的源码,我看了几遍,整个污点分析的架子搭好了,但是我有几点疑问(才疏学浅,想请教大佬们)。

  1. 针对基本数据类型是怎么传播的? 在IastTaintPool类中,Object类型,Map类型,和String数组类型,基本类型的包装类,但是如果是基本类型,例如:int,long,boolean等,是不是传播就失效了,因为无法计算hashcode,所以没法判断是否是污点?

  2. 在Source点处理,是通过在原始逻辑后插桩,在SourceImpl里solveSource方法中,满足方法返回值不是boolean类型,方法名为getAttribute,返回值不为空,则将返回值加入到污点值。这里的疑问是:为什么返回值是污点呀?按照污点分析原理上说应该是把方法参数是污点,应该把参数加入到污点池。方法的返回值有可能不是Taint的。

  3. 在PropagatorImpl类中的solvePropagator(),匹配O P R & I 的作用是什么?为什么要这样设计?为什么调用栈的深度是11,这样不会造成调用栈信息丢失吗?(我用asm插桩在sink点获取调用栈,发现前面才是一写比较关键的信息,应该是用户代码的调用,后面的是框架做的调用,这个信息记录有用吗?)

image.png

  1. 想请问一下IastHookRuleModel里通过model.xml文件里的参数是什么意思?

image.png

  1. IastHookRuleModel这个类中,从配置文件读取的Source点并没有用到,在实例化的时候并没有给变量赋值(因为根本就没有IastSourceModel),这样的话为什么还要在配置文件里搞source呢?一开始我还不太明白,为什么有source配置文件,还要在插桩文件中写一些服务器,框架的入口?这是不是因为model.xml里的source点根本不起作用?

image.png

  1. 还有一个问题GraphBuilder类中生成的污点图,怎么看出来是一个图的(这个我没有理解作者的想法)?通过invokeID嘛?里面的sourceHash和targetHash是什么意思?sourceHash是当前方法调用者的hashcode?targetHash是方法传出值的Hashcode?

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享