> 文章列表 > 干货分享 | 一文了解交互式应用程序安全测试(IAST)技术

干货分享 | 一文了解交互式应用程序安全测试(IAST)技术

干货分享 | 一文了解交互式应用程序安全测试(IAST)技术

软件开发过程中,安全检测极为重要。带有漏洞的软件一旦被恶意利用,将造成数据泄露、业务瘫痪,为企业带来不可估量的损失。这就要求企业在系统开发初期发现系统安全问题,快速定位应用漏洞并修复,从源头减少开发过程中的系统漏洞数量。为了解决这些问题,IAST技术应运而生,并逐渐受到行业关注。

 什么是IAST

IAST即交互式应用安全测试(Interactive Application Security Testing),是2012 年 Gartner 公司提出的一种新的应用程序安全测试方案。通过代理和在服务端部署的agent程序,收集、监控Web应用程序运行时的请求数据、函数执行,并与扫描器端进行实时交互,高效、准确地识别安全漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST分为主动式(Active)和被动式(Passive)两种,接下来我们将对这两种IAST技术进行对比。

主动式(Active) IAST

主动式IAST由发包器和agent两部分组成。发包器负责拿到流量并遍历替换流量的参数(输入点)为poc,并重放流量。agent的职责分为两部分,应用启动时,负责对应用中的目标方法或者函数(执行漏洞的方法或函数)进行插桩,给目标方法加上一个代理层。应用运行时,捕获进入应用的流量,在代理层捕获方法参数。

  1. agent对应用进行插桩,把应用中的目标方法和函数添加到代理层;

  2. 用户发起请求;

  3. 代理收集流量并发送给发包器,发包器对流量里的参数进行改造,并发送POC流量到被测应用服务端;

  4. agent收到流量且在代理层捕获到方法参数;

  5. 在确认是来自发包器的流量后,agent将流量特征和方法上下文信息发送给发包器,发包器根据方法名、方法参数等信息判断POC是否能顺利打入目标方法来决定是否存在漏洞。

被动式(Passive) IAST

被动式IAST只有一个agent部分,职责也分为两部分。应用启动时,负责对应用中的目标方法或者函数进行插桩,给目标方法加上一个代理层。应用运行时,捕获进入应用的流量,在代理层进行污点分析。

  1. agent根据预先设计好的目标方法列表进行插桩,目标方法列表会把方法分为三类:source、propagate和sink,source:应用获取外界输入数据的方法,例如:request.getRequestParameter(string);propagate:应用内用于处理数据的方法,例如:String.substring(int,int);sink:执行漏洞的方法或函数,例如:Runtime.exec(string);

  2. 用户正常使用该应用,或者进行业务测试,或者进行自动化脚本测试;

  3. agent捕获进入系统的流量,进行污点跟踪和分析;

  4. agent在sink点的代理层判断是否有外界的输入流向该sink点,如果有则认为该方法的参数可以被外界控制,存在漏洞。

被动式还是主动式?

主动式IAST优点主要是准确率高,但是存在以下缺陷:

  • 依赖于重放流量,当前应用大多存在验证码、数据包加密、防重放等安全措施,服务间存在大量RPC调用,难以重放流量

  • 可能会产生大量的脏数据,影响功能测试结果

  • 与开发语言强关联

被动式IAST基于污点分析检测漏洞,无需发包,部署简单。只需要给应用添加agent,即可进行测试,测试过程中不产生脏数据,不依赖重放流量,适用范围广,可定位到漏洞代码。也无脏数据产生,避免了主动式IAST的缺点。

基于以上特点,当前主流的IAST产品多采用被动式IAST,而主动式IAST多用于辅助验证功能

IAST核心能力

实时漏洞检测

IAST在完成应用功能测试的同时即可完成安全漏洞检测,且不会受软件复杂度的影响,适用于各种复杂度的软件产品。

准确性高

相较于SAST,IAST是基于请求、代码、数据流、控制流及运行时上下文信息综合分析安全漏洞;而与DAST相比,DAST则很难定位到与漏洞相关的代码行,IAST可以提供详细信息,例如带有漏洞的代码位置,完整的数据流和堆栈信息,以帮助安全和开发团队进行安全漏洞修复。

覆盖面广

IAST覆盖的深度和广度取决于功能测试的深度和广度,只要正常功能测试能覆盖的流量都能被扫到。

可拓展性强

IAST在测试过程中不产生脏数据,且能无缝融合DevSecOps,可以很好的与SDLC、SCA等工具集成,具有很高的拓展性。IAST能够使用多个规则,持续分析应用的整个组成,而传统的扫描按既定规则运行,无法动态加载新规则,无法扩展更多应用。

IAST局限性

语言局限

不同的语言、不同的框架会影响到漏洞的测试情况。

性能局限

性能要求10%,但相比 RASP,我们可以不把分析和处理都放进探针端完成,因为这点会对性能产生极大的影响。

环境局限

不同的部署环境有不同情况发生,测试环境和实际生产环境会有差异。

部署成本的局限

在复杂的部署环境下,如果加上探针会对产品产生负面影响,负面影响会让其他职能部门认为IAST产品有问题,甚至对安全工作产生不信任。

开源网安灰盒安全测试平台

开源网安灰盒安全测试平台(VulHunter)是国内首款基于IAST技术自主研发的灰盒安全检测产品,通过使用插桩技术和流量代理,在研发测试阶段对运行时的应用及API进行漏洞实时检测。VulHunter支持对软件漏洞进行全生命周期管理,实施多维度应用安全管控具有“高覆盖、低误报、实时检测”等优点,可与DevSecOps流程无缝融合。