Hello 大家好,欢迎来到新一期IAST百科全书,现在我们已经知道了IAST一般有流量型、主动插桩型、被动插桩型三种,但是从技术原理上来说,可能只有被动插桩才能称为真正的IAST,为什么这么说呢?
流量式IAST
流量式IAST,它通过重放请求,发送payload来根据整个回显或者说通过dns log去验证是否存在漏洞,基本上是黑盒的逻辑,本质上还是属于黑盒扫描器,只是获取流量的时候有一些代理或者流量镜像的方式。
它扫描起来的时候延时是比较大的,会产生大量的脏数据。放在DevOps里面去用的时候,在我们现有的经验来看其实是比较难去落地。
主动插桩式IAST
主动插桩式IAST由发包器和agent两部分组成,发包器负责拿到流量并遍历替换流量的参数(输入点)为poc,并重放流量,agent的职责分为两部分:
应用启动时:负责对应用中的目标方法或者函数进行插桩,给目标方法加上一个代理层,
应用运行时:捕获进入应用的流量,在代理层捕获方法的参数。
在收到流量之后 ,主动插桩只会hook少量的敏感函数。在hook到之后,从外面的发包器发不同的payload过来,通过agent的处理去验证它能否触发一些危险函数来进行漏洞扫描。
主动插桩和流量式的IAST没有办法覆盖到一些新的漏洞场景,比如,这个包本来就有一些验证码,或者本来就有一些图形验证码,或者做了一些防重放的策略。
同样,主动插桩也需要花一些精力解决脏数据的问题。但是主动插桩和流量式的插桩技术实现起来难度相对会比较低。
被动插桩式IAST
被动插桩式IAST没有发包器,只有agent,职责也分为两部分。
应用启动时:负责对应用中的目标方法或者函数进行插桩,给目标方法加上一个代理层,
应用运行时:捕获进入应用的流量,在代理层进行污点分析。
它的检测原理是通过插桩agent拿到里面所有数据的污点数据,所有的函数,它的参数,通过hook的方式把整个代码的调用链串起来。
被动插桩式IAST会在内部找到存在有外部污染数据的输入,并且会执行一些危险方法的点,去查找是否存在有风险的调用链路,然后基于后续的判断规则去验证是否存在风险。
被动插桩最大的特色是完全没有任何流量的重放, 部署上去之后不需去关心如何处理脏数据,如何去和业务那边处理各种发包的问题。
国际主流厂商contrast是最早做IAST的厂商,只采用被动插桩模式;其他像新思、synk这样的厂商,IAST最主要最核心的能力也是通过被动插桩实现的。
流量型和主动插桩型IAST的出现,更多的原因可以说是国内早期IAST发展不成熟,临时采用黑盒的方法和逻辑实现的IAST能力,现在,IAST的被动插桩技术已经很成熟,是时候让IAST回归到它真正的技术路线了。
被动插桩式IAST在DevSecOps中拥有明显的优势,首先被动插桩式IAST可以在 SDLC 的早期阶段提供迅速返回的漏洞信息和修复建议;其次,被动插桩式IAST可以无缝集成到 CI/CD 和 DevOps 工作流里。
好谢谢你看到这里,今天的IAST百科全书就到这里,我们下期再见!
近期评论