IAST的工作原理揭秘
IAST是在应用程序运行的过程中,监控和收集信息,并且根据这些信息来判断应用是否存在漏洞和风险。IAST获取这些信息有很多种模式,一般来说有代理模式、流量镜像模式,插桩模式等,其中插桩模式是最重要、最常见的检测模式。
插桩技术
插桩就是在应用程序运行时/的代码里插入一个额外的agent,这个agent可以通过HTTP/HTTPS协议与应用程序进行通信,从而监视应用程序的执行路径、数据流和输入输出。
插桩技术有主动插桩和被动插桩,他们之间有一些区别。
主动插桩
主动插桩模式在关键函数hook到流量后,会添加payload进行扫描,这个过程类似黑盒的功能,就是主动对目标应用进行扫描,应用服务器的IAST agent不会追踪整个污点数据流,只会收集存在危险方法调用的请求流量,然后发送少量的验证数据包给IAST的管理端,也就是server,server会向应用服务器发送构造好的重放流量来验证风险是否存在。这种采集和重放流量的方式比被动式黑盒是显著减少了的,但是只要是存在流量重放,就一定会存在脏数据。
被动插桩
被动插桩基于值匹配算法和污点跟踪算法进行漏洞检测,不会主动发送payload,不用采集和重放流量,对来自客户端的请求响应/进行污点传播数据流监控,根据是否经过无害化处理来判断是否存在漏洞。只需要开启了业务测试,就会自动触发安全测试, 通过测试流量就可以实时地进行漏洞检测,不会影响同时运行的其他测试活动,在这个过程中不会产生脏数据,并且可以解决比如微服务这样的新场景、新架构的检测问题。
完成插桩后,IAST就可以在应用程序的运行过程中监视和分析应用程序的行为了,包括请求和响应的数据、代码执行路径、输入验证、访问控制、认证、授权等。检测到漏洞之后,IAST就会自动生成相应的报告,可以提供有关漏洞的详细信息,包括漏洞的类型、具体位置、严重程度等,一些IAST比如洞态,还可以提供漏洞修复建议,帮助开发团队更好地进行修复。
IAST是十分适合集成到应用程序的开发流程中的,比如可以作为CI/CD的一部分,纳入DevSecOps流程,这有助于将安全性纳入到应用程序的开发生命周期(SDLC)中,提高应用程序的安全性。
IAST和SAST、DAST
有什么区别?
IAST全称交互式应用安全测试,Interactive Application Security Testing,它与白盒SAST(静态应用程序安全测试)和黑盒DAST(动态应用程序安全测试)是三种不同类型的应用程序安全测试方法,它们在安全测试的方式、时机、适用场景等方面存在一些区别。
SAST与DAST
传统上最常用的应用安全测试工具是白盒SAST和黑盒DAST,SAST是在应用程序的源代码或二进制代码级别进行静态代码分析,检测源代码中的安全漏洞,但是可能会产生较高的误报率,需要通过规则优化或人工验证的方式消除误报。
DAST是在应用程序外部模拟黑客攻击,并检测应用程序运行时的漏洞,具有较高的真实性,但是会产生脏数据,并且无法访问源代码,存在一定的漏报。
如今随着DevSecOps等敏捷开发模式的迅速发展,应用程序的开发过程更短了、迭代速度更快了,应用程序安全测试的速度与效率也必须跟上开发速度的进步。
IAST通过插桩,可以存在于应用程序的内部,在应用程序运行时就可以自动触发安全测试,监视应用程序的行为、检测潜在的安全漏洞并且能够提供实时的结果反馈,不论应用程序是自动还是手动启动的,都可以触发。
IAST可以访问到部分的源代码,又是在应用的运行中进行漏洞检测,所以它可以精确定位到代码行,实现较低的误报率和较高的检出率。任何的插桩行为都可能对应用程序的性能和资源消耗产生一定影响,使用IAST时需要同步监视和检测,或者加入熔断机制以保障业务正常运行。
IAST是最契合当今DevSecOps模式的应用安全测试工具,并且通过与SAST或DAST的结合与联动,可以实现更强大的功能与更大的价值。
下期话题:常见的IAST工具有哪些?
往期推荐