IAST技术创新实践 – 作者:京东安全

一、IAST概览及京东IAST架构

1、IAST概览

IAST本身是一个融合技术,包括白盒、黑盒和Agent技术。

图片[1]-IAST技术创新实践 – 作者:京东安全-安全小百科

白盒主要由源代码分析和字节码分析组成,涉及污点分析和符号执行等技术。

通过白盒可以得到两个重要的输出,第一个是输入参数和限制条件,第二个是不安全方法调用,不安全方法调用一般含有两个来源——一类是普遍存在的标准函数,比如说 SQL异常、组件调用、文件读取,网络访问等;另一类是和业务相关的场景化调用,比如说支付、查库存,订单交易等。

黑盒主要利用响应测试对外的API。常见的方式是各种POC或指纹扫描,FUZZ模糊测试技术和动态污点分析技术。

除此之外,IAST还依赖agent技术,其中,java主要有java agent和native agent,java agent可以在main之前进行类的注入,而native agent可以使用JVMTI,在JVM启动阶段操纵agent方法。

2、京东安全IAST架构

京东安全IAST的整体结构非常简洁,包括客户端、云端和用户界面。

图片[2]-IAST技术创新实践 – 作者:京东安全-安全小百科

在客户端,京东安全采用了容器的设计模式,以状态机管理生命周期。容器共有两种,一种是执行容器,一次运行完成后结束,主要用于探针加载和系统配置;一种是管理容器,以线程的形式运行,包括探针管理和系统管理,可以实现动态的注入、系统的监控启停等。 客户端的数据可以通过消息队列传到云端,京东安全在此设计了两个独立信道——数据信道和管理信道,这样在解耦的同时还增加了可靠性。

在云端,共分为三个部分——计算云端、管理云端和扫描器。管理云端主要配合用户界面达成测试任务;计算云端将agent的日志进行预处理,将测试任务和日志关联起来,进行运行时分析,同时生成新的扫描任务。其中,扫描任务分为两种,一种是单次POC测试可以检测,另一种需要结合运行时信息才能判断;最后,运行时检出的漏洞和扫描器检出的漏洞会经过一个策略模块再输出给用户,通过策略模块,安全研发和测试人员可以进行调整,从而降低误报。

二、京东IAST的关键技术

1、污点传播技术

提起IAST,通常会提到污点传播模型,对于java来说一般有两种实现方式:一种是将java基本数据结构,如String、集合等用注入技术进行重写,添加污点变量来进行追踪,部分功能可能会用到native agent去实现;另一种是维护一张元数据表,记录污点变量的转换和传播。这两者都会引入海量的数据,尤其在大体系下,测试是规模化的事件,从而给数据挖掘和分析带来了巨大的挑战。

图片[3]-IAST技术创新实践 – 作者:京东安全-安全小百科

而在java tomcat环境下,有一种简单的实现方式,即在扫描器或功能测试时,可以添加taint magic number,如参数中,payload,header中,因为tomcat使用线程池机制,对于一个请求会分配一个线程处理,这样以一个request请求为单位,就可以构建出一条运行时的污点传播路径,由于没有实现污点变量,不能判断消毒点,但如果结合栈信息和sink点的参数检测,就可能在绝大多数情况下弥补这个问题。

2、栈签名算法

栈签名算法的主要工作是将运行时信息标准化,这样就可以把运行时信息做分析和检出。

具体而言,一个请求可能会命中若干个hook,hook会构造出一个有序序列,形成一个矢量,当多个请求过来时,多个矢量会形成一个矩阵,然后将矩阵作为输入构建一个trie树,当发生树的分支时,就把它之前hook的序列记录下来,做成栈签名,形成一条规则。以左图为例,此处共生成了两条规则。

图片[4]-IAST技术创新实践 – 作者:京东安全-安全小百科

在实际使用中,一次测试分为两个阶段,第一个阶段是正常的输入,即通过QA跑功能测试,在这个阶段IAST会根据运行时信息生成一个规则集;第二个阶段,IAST通过扫描器构造一些POC、模糊测试的输入,对于新生成的规则和业务规则进行加黑处理。

右图是京东安全在一个小数据集的测试情况,这个数据集包括了正常输入、异常输入、报错型注入以及时间盲注,其中,报错型输入和异常输入都会产生异常,时间盲注和正常输入类似,但是运用栈签名算法,绝大多数的签名都可以正确的识别漏洞利用的路径。

3、组件分析技术

相对于白盒,IAST在组件分析方面具备一定的优势,因为 java本身会进行运行时的加载,所以在应用时可以得到更为丰富的信息,而白盒在做组件分析时,会出现一些难以解决的打包情况。

图片[5]-IAST技术创新实践 – 作者:京东安全-安全小百科

4、逻辑漏洞

京东安全在逻辑漏洞的理论基础共有两点(如有不同欢迎探讨):

1)单元测试和集成测试仍然是发现逻辑漏洞的最好阶段,是优于安全测试的途径。

因为在这阶段,研发和QA测试人员,更为理解代码逻辑和功能,所以更容易发现逻辑漏洞,

2)利用IAST可以在CD环节,通过模糊测试的方法发现逻辑漏洞。

图片[6]-IAST技术创新实践 – 作者:京东安全-安全小百科

在测试的抽象方面,对于web资产A和参数P,安全测试的过程记为f,IAST识别逻辑漏洞需要分为三个步骤:

第一步,在参数P中确定权限的因子(对于参数的集合里,如果对其中一个参数做模糊测试,会导致f的结果不同,则这个参数本身有权限的限制,简称权限因子,反之就是非权限因子,非权限因子都有逻辑漏洞的可能);

第二步,对于权限因子再次模糊测试,这次测试主要目的是确定该因子是否存在可重入限制,如不存在则降级为非权限因子;

第三步,对于资产树中某个节点A,如果未通过逻辑漏洞测试,则资产树此节点所在链路进行深度遍历,都有垂直越权的风险。

三、IAST研究建议

1、不要把IAST做成RASP或者waf。后两者是检测工具而非测试,IAST要做的是识别路径或者模式。

2、不要把IAST等同于黑盒。IAST本身是一个融合黑盒白盒优势的技术,它可以比黑盒做得更好。

3、不要过分依赖QA的功能测试,需要进行模糊测试。IAST存在代码覆盖率的问题,但QA测试实际并不能覆盖逻辑漏洞,所以需要通过模糊测试弥补在单元测试和集成测试里的缺失。

4、IAST可以把绝大多数漏洞留在线下。

来源:freebuf.com 2021-05-20 09:38:40 by: 京东安全

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论