火线安全正式开源洞态IAST Agent测试工具

首页 / 业界 / 资讯 /  正文
作者:火线安全
来源:火线安全
发布于:2021-04-09

随着信息技术的发展,软件定义一切,万物均可互联,一切均可编程正在成为近两年的热议话题,可以看到,生活中的一切都正在被信息技术重塑。然而技术在促进社会发展的同时,也为人们的生活带来了严峻的安全威胁。
 

网络攻击、软件漏洞、隐私泄露事件日益频发的今天,如何让信息时代更有安全感,让互联网变得更加安全成为了所有技术人员正在面临的共性话题,也是所有技术从业者亟待解决的难题。
 

而随着网络安全威胁的日益复杂化,传统基于边界和基于规则的安全防护手段已经不再能够满足企业与技术开发人员对安全的基本需求,安全能力需要左移和前置,广大开发人员需要自己掌握检测漏洞和识别风险的能力。
 

正值火线安全平台上线一周年之际,火线安全正式将旗下的洞态IAST测试工具开源,希望通过开源免费的形式,能够让更多开发人员参与进来,帮助开发人员对自身进行安全测试,火线安全愿与开发人员一同发现漏洞、修复漏洞,让互联网世界变得更加安全。
 

以下内容为火线安全平台整理的自身对于IAST交互式应用安全测试技术的一些理解,以及洞态IAST交互式安全测试工具相关使用指南,如有不明之处,欢迎圈内小伙伴们一起探讨。
 

一、洞态IAST介绍

洞态IAST是一款被动式的交互式安全测试工具,具有漏洞检出率高、误报率低、无脏数据、支持数据包加密/一次性签名/验证码等不支持重放的场景下的漏洞检测、支持微服务/API网关/分布式应用等应用架构下的漏洞检测、支持对移动APP的后端服务器进行漏洞检测等优点。此外,洞态IAST支持在不发送数据包的前提下对历史数据中未出现漏洞的API进行的重复检测,最大可能的检测出漏洞。
 

1.1 洞态IAST的原理介绍

IAST的核心技术点有三个:

· 值传递算法:用于污点的标记和污点传播动作的检测;

· 污点链路梳理:用于分析污点的完整流向;

· Hook策略:用于定义代码流中需要检测是否有污点出现的位置(污点来源方法、污点传播方法、污点过滤方法、危险函数等);

污点传播的原理:当应用程序从外部输入(HTTP请求、RPC请求、文件、消息队列等等)获取数据时,这些数据被标记为初始污点,数据在应用程序的各个方法/对象之间传递、通信时,出现了污点的流动,在污点流动过程中,污点数据的复制、变化等操作构成了污点的传播;当污点传播至危险函数,导致危险函数触发危险动作时,出现了漏洞。
 

1.2 洞态IAST的创新点:

· 污点传播的自适应检测

· 污点传播数据云端离线存储及云端污点链路梳理算法
 

污点传播的自适应检测

Java语言中,数据分为基本类型和引用类型,所有的引用类型都继承自Object对象,存在hashcode方法用来标记实例化对象;洞态IAST根据对象的hashcode来对污点数据进行标记及污点传播过程的判断,同时,针对集合、字符串等特殊数据类型进行拆分匹配与特殊匹配,确保值传递算法的准确性。

洞态IAST支持预定义策略的污点传播检测与识别、支持未知方法的污点传播自适应检测,关于值传递算法的核心代码和核心思想,可通过开源版本的JavaAgent自行研究学习。
 

污点传播数据云端离线存储及云端污点链路梳理算法

污点传播数据云端存储,实现了任意时间重新对历史污点传播过程进行回朔分析,当0 Day爆发或出现新的漏洞策略时,可直接对历史数据进行分析,检测是否存在相关漏洞;

同时,基于"污点传播自适应"算法,可梳理出污点在应用程序中传播时存在的所有污点链路,最终,形成一幅完整的污点调用图(如下图),根据污点调用图,可通过指定自定义的漏洞策略,快速搜索是否存在相关的漏洞。

二、洞态IAST适用场景

洞态IAST可用于代码审计的过程中自动检测漏洞、也可用于企业DevSecOps阶段自动检测漏洞,接下来将分别介绍不同场景下如何使用。
 

2.1 代码审计

本地有运行环境

在代码运行前,配置javaagent并启动要审计的应用程序,然后正常审计代码,做相应的漏洞利用尝试,在此过程中,触发洞态IAST的漏洞检测,实现一边审计代码,一边检测漏洞。(真实案例:Apache某开源项目一处无回显SSRF)

本地无运行环境

下载待审计应用系统的代码人工审计,然后在在线靶场中启动相关的应用环境并安装自己的洞态IAST Agent,通过在线环境进行漏洞利用尝试,同时触发洞态IAST的漏洞检测。
 

2.2 企业DevSecOps

企业中为了快速检测,可直接在测试环境中部署洞态IAST,实现开发阶段/QA测试阶段同步检测漏洞。

以上场景中的时候,都需要下载洞态IAST的Agent探针,然后部署使用,关于洞态IAST的使用,可查看官方文档[1]
 

三、洞态IAST JavaAgent开源

"火线平台"一周年,Java语言的Agent将正式开源,JavaAgent用于监控污点、采集数据发送至洞态IAST云端,污点链路梳理、漏洞检测等功能由云端检测引擎完成。【开源协议:GPLv3】
 

3.1 Agent采集数据介绍

· Agent心跳数据:包括网络、内存、CPU、磁盘等信息,用于判断应用的负载,自动启停

· 错误日志数据:记录服务器地址和日志信息,日志中关于用户的数据进行打码处理,可关闭

· 方法池数据:框架类、JDK类,原样记录;针对用户自己开发的类,进行类名隐藏;污点数据,统一使用污点唯一标识算法进行计算,不传输污点数据,只传输污点对应的标识;调用栈数据,调用栈数据依据第一条规则进行处理,但是,会保存相关调用顺序

· 第三方组件数据:记录第三方组件的哈希值、路径和名称,用于梳理第三方组件及分析第三方组件对应的漏洞
 

3.2 Agent内置Hook方法的类型

· Http请求处理的入口方法

· Request对象获取外部参数的相关方法

· Response对象设置返回数据的相关方法

· 污点传播相关的方法:字符串操作(字符串拼接、字符串截取、字符串反转等)、Java集合类型的操作、Java IO操作(文件IO/网络IO)、加解密方法(Base64加解密、AES/DES加解密、RSA加解密等)等

· 触发漏洞相关的方法:SMTP操作方法、发送HTTP请求相关方法、XML解码相关方法、执行系统命令的相关方法、执行LDAP查询相关的方法、执行XPATH查询相关的方法、文件操作相关的方法、JSON反序列化相关的方法等

· 框架层XSS、SQL注入等相关的过滤方法
 

3.3 Agent内部的数据预处理

根据污点的唯一标识,将污点的传播过程完整的标注出来,形成污点方法池,然后将污点标识记污点方法抽象后,发送至IAST云端,进行后续漏洞分析

其中,唯一标识由数字组成,不包含任务数据,也无法利用标识逆向解析出对应的数据;方法池中的方法会进行一定程度的抽象,保证可正常还原漏洞,同时隐藏客户相关的命名
 

结语

作为全球首个白帽子开发者平台,火线安全平台致力于与国内顶级的白帽子们一起开发产品,并通过产品为企业客户提供安全可信的众测、渗透测试、红蓝对抗等高级安全服务。欢迎更多白帽子加入火线安全,与我们一同“穿越火线”,用技术穿越过往的分歧,用共识更紧密的连接人与人。


Agent仓库地址:https://github.com/HXSecurity/DongTai-agent-java

 

[1] 官方文档: https://hxsecurity.github.io/DongTaiDoc/#/doc/tutorial/quickstart