IAST原理分析以及在SDL中的应用

一、我为什么要分析IAST

最近在实施SDL项目想改进下自动化扫描的方式提高扫描的准确性,鉴于已经有相对成型的IAST产品于是就想分析下IAST的原理。互联网上对RASP分析文章比较多,但是对于IAST的原理分析实在很少。之前采用的是代理模式进行黑盒扫描,比如常用的AWVS,相信大家都有体会黑盒误报率非常高,在实施SDL过程中就需要投入大量人力去验证漏洞。IAST的好处就是能实现扫描漏洞0误报。要分析IAST就少不了要分析RASP原理,鉴于RASP的原理分析已经有很多文章了,为了文章的连贯性我会在另外一篇文章中再简单介绍下。

二、IAST扫描效果

这里测试2个正常的url,通过IAST和AWVS进行扫描。其他的扫描大家可以自行测试。

http://10.57.131.36:8080/vulns/005-file-write.jsp?filename=123.txt&filedata=some-report-data

AWVS扫描结果,识别不出来是漏洞。

IAST识别出来是任意写文件漏洞

http://10.57.131.36:8080/vulns/004-command-1.jsp?cmd=”openraspcmd

AWVS扫描出来一大推误报

IAST识别出来是命令执行漏洞

这里简单介绍下扫描区别为什么这么大,因为黑盒主要是通过构造payload请求分析请求response来判断是否为漏洞,比如对于盲注的命令执行漏洞,由于正常请求和带payload的请求响应的结果差不多,所以黑盒也就无法判断是否为漏洞了。那么IAST是如何判断的呢?接着往下看。

三、IAST原理分析

IAST架构图:

扫描模块包括三个模块:预处理模块(Preprocessor)、扫描模块(Scanner)、监控模块(Monitor)

预处理模块即图中HTTPServer部分,用于接收agent插件的http请求,处理、存储、分发http请求信息

扫描模块用于运行扫描插件,执行漏洞扫描逻辑

监控模块用于定期获取其他模块的运行时信息,调整参数,提供控制台的HTTP服务等

rasp上需要安装iast插件,iast扫描器要配合iast插件使用。

正如所有的程序都一样有个入口点。iast的入口点是run 然后调用start函数。我们从入口开始一步步往下走。

启动的时候会去读配置文件

然后会判断初始化一些信息,比如python大于3.7,数据库表初始化。

测试是否可以连接云控

通过pid判断iast的进程是否开启

这里可以看到即将启动了Preprocessor、Monitor以及n多个扫描模块。

接着先开始启动preprocessor和monitor模块

所有模块启动都依赖基础模块

BaseModule基础类,所有module继承自此类

断点进入到preprocessor模块

tornado是一个可以处理http请求的框架

开启httpserver服务用于接收agent插件的http请求,处理、存储、分发http请求信息

加载监控模块,用于监控预处理模块、各个扫描模块、监控模块

启动监控台端口18664

这个就是IAST扫描的监控后台

循环检测各个模块是否存活,如果有模块没存活就结束掉结束其他所有模块。

开始加载扫描模块

扫描初始化所有扫描插件

通过动态加载模块遍历加载所有扫描插件plugin_module =__import__(plugin_import_path,fromlist=[plugin_name])

加载完各个模块后,就等着接收扫描请求了。发起正常请求, httpserver获取到rasp agent发过来的原始请求。

这是一个正常的xml请求

<a href="http://10.57.131.36:8080/vulns/007-xxe.jsp?data=">http://10.57.131.36:8080/vulns/007-xxe.jsp?data=</a><?xml version="1.0"encoding="UTF-8"?> <note> <to>Tovde</to><from>Jani</from> <heading>Reminder</heading><body>Don't forget me this weekend!</body> </note>

这里接收的来自rasp传给iast的原始请求,这里hook_info为空,因为是正常请求还未触发执行函数。

通过日志分析也是一样的。几处标红的地方。1、用户发送正常请求到raspagent所在的服务器,2、rasp的底层http将流量hook下来发送给iast3、iast加入恶意payload发送到rasp4、rasp上的iast插件将hook信息返回给iast,iast判断是否存在漏洞

遍历http请求中所有的参数,header、body、 get 里面的参数,加上payload。

这里与黑盒还有个区别就是不用太多的payload,只要一个payload,能判断返回的信息有hook_info即可判断是否有漏洞。

遍历payload发起请求

检查漏洞是否触发

对比hook信息的hook_type是否为xxe以及entity是否是IAST发出去的payload既可以判断是否存在漏洞。

四、IAST在SDL中的应用

SDL大致有这么几个阶段,需求评审、开发、测试、发布、上线。每个阶段对应的重要的安全活动有,威胁建模、代码扫描、自动化安全测试、CICD发布拦截、上线依赖漏洞识别和威胁情报收集。

根据我实施SDL的经验来看,需求评审阶段最重要的是出具安全需求文档,生成的这个安全需求文档是纯粹的指导性意义,没有任何可以自动检查的手段,容易流于表面。开发阶段采用代码扫描即是SAST,SAST最大的问题就是误报和漏报同样突出。一个系统,有5个漏洞,SAST扫描一下可能报告100个漏洞,其中2个是真的漏洞98个是误报,还需要投入大量人力来排查。测试阶段通常采用自动化扫描,正如文章开始介绍的IAST与黑盒扫描的区别,黑盒扫描误报率太高也无需要花费大量人力去验证漏洞,通过部署IAST产品,QA完成本职工作的质量测试时,IAST系统自动完成一份安全报告,而且还能保证安全测试的准确性从而大量减少人力成本,我觉得IAST在SDL中是个大大的加分项。至于上线之后就是些日常扫描与监控,各家玩法都差不多。

*本文作者:hackeryeah,转载请注明来自FreeBuf.COM

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章