IAST工具是如何工作的?主动和被动IAST有什么区别?
我们在做软件安全防护的实践过程中经常遇到一些问题:IAST技术是如何工作以实现安全防护的?主动和被动IAST有什么区别呢?今天我们就来进行答疑解惑。
首先我们来看下Gartner对IAST的定义:
交互式应用程序安全测试(IAST)使用结合了动态应用程序安全测试(DAST)和静态应用程序安全测试(SAST)技术的工具来提高应用程序安全测试的准确性。
IAST工具可提供类似DAST的漏洞利用和SAST的应用程序代码覆盖的能力,并且在某些情况下,允许在常规应用程序测试阶段进行安全自测。IAST工具可以独立运行,也可以作为更大的AST套件(通常是DAST) 的一部分运行。
具体来讲,IAST工具通过以下几种手段对软件进行安全检测。
获取被测信息进行实时分析
自动化安全测试的检测基础是获取被测应用程序的各种信息,基于对这些信息分析得到应用程序的安全弱点。在开发工程师、测试工程师或者自动化测试脚本进行功能测试的同时,实时分析软件安全弱点。
运用插桩技术
利用Java自身提供的Instrumentation API与JVM Tool Interface实现插桩技术,应用到产品的安全检测中。
运用污点分析技术
分析程序中由污点源引入的数据,是否能够不经过无害处理,而直接传播到污点汇聚点。
主动IAST VS 被动IAST
为解决传统DAST无法精确定位漏洞位置和传统SAST技术高误报率的问题,主动IAST需要两个主要组件:DAST组件和传感器附加到正在运行的应用程序。此外,主动IAST在脏数据处理方面表现出色,并且可以对应用测试结果进行全方位复现和验证,从而协助用户提高漏洞收敛效率。
在测试阶段,如果应用程序遭到攻击,主动IAST会扫描URL并向它们发送已知攻击有效载荷的列表。然后,传感器将监测基于传入攻击有效载荷的漏洞应用程序。与传统DAST相比,该方法更加高效,用户可以更快速监测漏洞,无需等待安全扫描完成。此外,该方法还可以提供应用程序安全性(AppSec)状态的快照。
被动IAST是一种需要与应用程序一起运行的探针。主动IAST需要攻击应用程序来识别漏洞,而被动IAST通过探针在运行时持续监视应用程序的所有流量,即可识别漏洞。最重要的区别在于,用户不再需要攻击应用程序来主动查找安全漏洞。
要确保应用程序的质量和效果,需要使用各种不同的测试方法,包括手动和自动化的测试,以及在生产环境中对应用程序进行测试。这样才能够对应用程序的各个方面进行全面测试。被动IAST将应用程序的所有使用操作都转变为一种“安全测试”,使其成为一种更安全更高效的测试解决方案,避免用户为安全测试而单独部署基础设施。
被动IAST的探针以静默方式持续监视指向应用程序的所有常规流量,在运行时查找漏洞。被动IAST方法的主要优点是其成本效益高,在应用程序中发现更多的安全问题,因为它可以检测未知的漏洞而不需要安全专家或附加工具。
Agent(探针)是被动IAST的关键技术,Agent(探针)需要结合不同编程语言进行开发,通过插桩技术,在程序运行时监视应用并分析代码。Management Server即为VulHunter管理平台,主要包括Server和Agent两大组件。
主动和被动IAST各有优势,但在大多数情况下,应该选择被动IAST,因为其在AppSec程序中最具拓展性和可管理性。
如何让两者两全其美?
我们进一步探索,可以将主动IAST与被动IAST相结合,以被动IAST为主,主动IAST用于辅助验证功能,进行测试,适用范围广,可定位到漏洞代码也无脏数据产生。在测试阶段对应用程序执行安全自检,实现两种测试结果的结合,有助于确保应用程序在发布之前的安全稳定。