什么是IAST
IAST是交互式应用程序安全测试(Interactive Application Security Testing),是一个在应用和API中自动化识别和诊断软件漏洞的技术。通过插桩技术(Instrumented)收集安全信息,持续地从内部运行的代码中发现其安全及逻辑问题,提供实时的报警展示。在整个软件开发生命周期中,可以在开发与测试阶段中使用IAST工具。
由于IAST 是一种应用程序运行时的漏洞检测技术,所以它具备了 DAST 中检测结果准确的特征;此外,IAST 采集到的数据在方法内部的流动后,通过污点跟踪算法来进行漏洞检测,用算法来进行漏洞检测,所以检测结果也具备了 SAST 中全面性的特征。
对比DAST优点是能发现更多潜在的漏洞,对比SAST优点是漏洞的准确率更高。
这里使用了洞态 IAST进行漏洞发现,洞态 IAST是一个完全开源的 IAST 项目,它使用应用程序运行时数据流进行分析从而识别可被利用的安全漏洞,再按风险优先级的提供已验证漏洞列表功能,协助开发人员实时的代码修复。
如何使用IAST
这里使用了一个tomcat部署的war包系统,首先根据洞态IAST里的帮助文档对tomcat进行插桩,在tomcat的catalina.sh中增加javaagent的配置。

之后启动tomcat,查看agent是否正常上线。

接着在应用内胡乱点击,对所有功能进行触发,可以看到触发功能后有多个漏洞已经检出,接下来就是需要对漏洞进行分析,验证是否是真实漏洞。

漏洞分析
这里挑选一个漏洞进行实际分析

首先研究一下污点流图,可以看到数据污点值是从222/333/和xxx.doc进来的,即这个是source点,通过一系列的污点传播后在FileUtil文件中执行,即该点为sink点。


再看一下请求信息,通过请求信息找一下代码入口,入口是在DocController.java的deleteDoc方法中

503行创建doc对象

529行调用deleteDoc,跟入deleteDoc函数


继续跟入deleteDoc_FSM函数
在4139行中调用deleteRealDoc进行文件删除,继续跟入

deleteRealDoc中直接对原始请求参数进行拼接,完成文件删除,触发漏洞

这里再安利一下污点流图的好处,通过展开污点来源方法,可以很清晰的看到数据的流转过程,这里能看到标红的就是我们一开始传入的污点数据,黑色是代码中的其他数据,即安全数据,通过字段的拼接最后在危险方法处执行。

通过数据流图也可以初步判断漏洞是否存在,假如通过修改传入的污点值可以在最后危险函数处进行漏洞触发,即可认为是存在漏洞的。
下班
最后看一下本次的收获,四个cnvd原创漏洞,血赚,下班!
