IAST原理分析以及在SDL中的应用 – 作者:hackeryeah

一、我为什么要分析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扫描结果,识别不出来是漏洞。

image.png

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

image.png

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

AWVS扫描出来一大推误报

image.png

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

image.png

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

 

三、IAST原理分析

 IAST架构图:

image.png

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

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

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

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

 

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

image.png image.png

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

image.png

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

image.png

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

image.png

测试是否可以连接云控

image.png

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

image.png

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

image.png

接着先开始启动preprocessormonitor模块

image.png

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

image.png

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

image.png

断点进入到preprocessor模块

image.png

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

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

 

image.png

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

image.png

启动监控台 端口18664

image.png

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

image.png

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

image.png

开始加载扫描模块

image.png

image.png 扫描初始化所有扫描插件

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

 

image.png

image.png

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

 这是一个正常的xml请求

http://10.57.131.36:8080/vulns/007-xxe.jsp?data=<?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为空,因为是正常请求还未触发执行函数。

image.png

image.png


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

image.png

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

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

image.png

遍历payload发起请求

image.png

检查漏洞是否触发

image.png

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

四、IAST在SDL中的应用

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

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

来源:freebuf.com 2019-10-24 14:46:50 by: hackeryeah

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

请登录后发表评论