前言

       在之前的文章谈到的安全测试所在的三个阶段,并大概分析了三个阶段对应技术的优劣势,但是IAST那块因为内容太多并没有铺开来说,今天将着重来谈谈这个在安全测试里举足轻重的一员。

一、简介

       IAST,全称是“Interactive application security testing”,翻译过来叫交互式应用安全测试,是一个能自动识别判断应用和API漏洞的一种工具,或者说一种技术。

1、产品上线前闭环漏洞

       传统的漏扫工具是在应用上线后,对http(s)请求进行扫描,在应用外部视角,发现漏洞。IAST与之不同,它是持续的,在应用内部,监控并发现漏洞,这意味着,可以在产品上线前在测试环境中使用,将漏洞扼杀在摇篮之中,极大程度降低了产品上线后的安全风险。

2、产品上线后检测攻击并阻止漏洞利用

       当然,也可以在上线后使用在生产环境使用,这时候就是IAST的进化版本,目前以腾讯OpenRasp为代表的RASP技术,它跟WAF一样,但又不完全一样。WAF是从网络流量的角度来阻止攻击,RASP是从应用内部持续的监控,发现并拦截攻击,不仅在精确度和扩展性上优于传统的Web防护方法,而且能提供在几分钟内将多个业务系统部署新的防护手段的所需架构。

二、什么是IAST

       IAST从某种角度来说,它并不能算一个扫描器,因为它并不会主动的去扫描你的应用或API。有过运维经验的小伙伴,可以把它跟zabbix进行类比,zabbix是通过设置一系列的规则和阈值,监控系统状态参数或者服务的某些返回值,一旦触发就同步告警;这里IAST的插桩模式也是类似,它是通过持续不断的在应用内部进行监控,只不过这里的规则和阈值是从漏洞的视角去进行预制的,侦测是否存在符合漏洞规则的情景,一旦符合预先设置的规则,就进行告警,所以,我感觉用监视器形容可能会更合适。

       常用有效的IAST技术是通过插桩来实现的,通过在代码运行的中间件上插入探针,通过探针来识别判断安全风险,直接从运行中的代码发现问题,以实现自动化识别和诊断在应用和API中的软件漏洞。

三、IAST探针如何工作

       因为部署在服务的中间件里面,IAST探针可以从中获取很多的信息,从某种角度来说,它可以说是SAST和DAST的结合体,包括但不限于代码、流量的分析,主要有以下几个方面:

  1. 代码—IAST能访问所有和应用一起部署的源代码和二进制代码,代码探头对应用中每一行代码做二进制的静态分析,包括库和框架;
  2. HTTP流量—IAST能够看到HTTP请求和响应,使用和DAST非常类似的技术,发现和这些流量相关的漏洞;
  3. 库和框架—IAST能看到部署的每一个库和框架,分析应用和API如何使用它们。不仅IAST能够根据已知漏洞(CVE)来评估库,也能识别部分或整体隐藏在库里面的未知漏洞。重要的是,因为IAST能精确知道库里面的哪一部分被应用真正调用,它能够过滤掉从未被调用的和库相关的漏洞;
  4. 应用程序状态—IAST能够检查程序执行时的应用状态。例如,IAST能看到调用安全方法时使用的参数来发现弱点,如传递“DES”参数给加密密码构造函数;
  5. 数据流—从开始进入应用的时候开始,IAST就追踪不信任的输入数据。这是识别最重要的漏洞种类—注入类漏洞的关键。这个技术,有时称之为“污点追踪”,跟踪真实数据在应用中的流动,非常精确;
  6. 控制流—IAST了解应用的控制流,能够识别出应用行为中漏洞的特征。例如如果一个应用要求在每个web服务中,采用service()方法检查访问控制,这个特征将很容易被IAST发现;
  7. 后端连接—IAST能够检查围绕着后端连接的所有细节,如数据库、操作系统调用、目录、队列、套接字、电子邮件和其他系统。IAST使用这个信息识别出架构缺陷和安全缺陷;
  8. 配置—IAST能访问应用、框架、应用服务器、和平台的配置,保证正确的安全配置。IAST甚至能查询应用组件的运行时配置,如XML解析器。注意某些平台,如.NET,重度依赖配置来实现安全;

四、总结

       相较于传统的SAST和DAST,IAST取其精华,精准度更高,获取信息更全面,在不影响现有的流程下,可以无感的整合到DevOps流程中,在功能测试的同时进行安全测试。总而言之,在我个人看来,能集成到整个软件生命周期中的IAST是非常值得加入应用安全测试技术名单,目前来说是最经济的安全漏洞检测技术。

闲谈安全测试之IAST_安全