现在我们已经知道了IAST发现漏洞后,可以像白盒一样精准定位到漏洞代码行,但是背后实现的原理不太一样。
从漏洞成因上来看,大多数漏洞都是出于某个参数点可控,导致外部用户可以控制这个参数,传入非法或者恶意的参数值,最后造成了漏洞。
基于这个漏洞原理,IAST主要的原理就是基于污点跟踪算法来判断漏洞,那这个污点跟踪算法到底是怎么一回事呢?
我们可以把数据流抽象为sources、sanitizers、sinks三元组。
·sources
代表污点输入源,和零信任的概念类似,通常我们认为,任何从外部输入的数据都是不受信任的污点数据,都有可能对系统造成危害。
·sinks
代表污点汇聚点,通常是指将会产生安全问题的敏感操作。
·sanitizers
是指对污点数据的无害处理。
污点跟踪就是去跟踪那些输入到系统中的污点数据(sources),在代码中流转、传播的过程中没有经过足够的清洗、校验、过滤等无害化操作(sanitizers),就直接进行会产生安全风险的敏感操作(sinks)的数据流。
在IAST中,首先Agent通过插桩拿到所有传进来的参数。然后,根据参数的流向等信息,还原污点调用链,并判断参数传进来时,是否用户可控,传播的过程中是否有过滤方法来修改原始参数的值。
如果没有做过滤,并且外部也可以随意控制参数的值,例如SQL注入,最终走到了JDBC上执行,那么就可以确定,当前是存在SQL注入漏洞的。
这里只是拿SQL注入做个例子,其他类似漏洞也是一样的检测原理,也正是这个原理,让IAST在SQL注入这种类型的检测上面准确率极高。