洞态IAST Agent正式开源

阅读量    68170 | 评论 1

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

一、洞态IAST

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

1.洞态IAST的原理介绍

IAST的核心技术点有三个:

• 值传递算法

• 污点链路梳理

• Hook策略

其中,值传递算法用于污点的标记和污点传播动作的检测;污点链路梳理用于分析污点的完整流向;Hook策略用于定义代码流中需要检测是否有污点出现的位置(污点来源方法、污点传播方法、污点过滤方法、危险函数等)。

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

洞态IAST的创新点:

• 污点传播的自适应检测

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

污点传播的自适应检测

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

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

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

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

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

2. 洞态IAST快速体验

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

2.1 代码审计

本地有运行环境

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

本地无运行环境

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

2.2 企业DevSecOps

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

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

3.功能介绍

3.1 管理检测的应用系统

3.2 梳理存在的应用漏洞

3.3 梳理应用系统中使用的第三方组件及漏洞(开源组件/内部组件)

查看每个漏洞对应的安全版本

查看CVE漏洞描述及漏洞分析

3.4 污点传播数据池,快速搜索漏洞策略命中的漏洞情况

查看污点调用图及漏洞调用链

3.5 Hook规则自定义

内置规则400+

支持自定义规则快速检测,规则支持指定接口、抽象类,支持配置HOOK深度(仅hook当前类、仅hook子类、hook当前类及子类)

 

二、洞态IAST JavaAgent开源

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

1. Agent采集数据介绍

• Agent心跳数据

• 错误日志数据

• 方法池数据

• 第三方组件数据

Agent心跳数据

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

{ "type":"0x01", "detail":{ "agent":"win-hostname-ip-key", "language":"Java", "pid":"18721", "hostname":"hostname", "network":{ "name":"", "ip":"" }, "memory":{ "total":"1 GB", "use":"0.5 GB", "rate":"10%" }, "cpu":{ "total":"0.13 GB", "use":"0.03 GB", "rate":"3.21%" }, "disk":{ "total":"10 GB", "use":"0.5GB","rate":"5%" }, "req_count":100, "server_name":"tomcat", "server_version":"9.x", "server_path":"/opt/apache-tomcat", "server_hostname":"ecs-beijing-001", "server_ip":"10.12.10.13", "server_port":"80" } }

错误日志数据

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

{ "type":"0x51", "detail":{ "agent":"win-hostname-ip-key", "language":"Java", "app_name":"OWASP Benchmark", "server_path":"/opt/apache-tomcat", "log":"java.lang.Main()\njava.lang.Exec()" } }

方法池数据

• 框架类、JDK类,原样记录,针对用户自己开发的类,进行类名隐藏;

• 污点数据,统一使用污点唯一标识算法进行计算,不传输污点数据,只传输污点对应的标识

• 调用栈数据,调用栈数据依据第一条规则进行处理,但是,会保存相关调用顺序

{ "type":"0x22", "agent":"win-hostname-ip-key", "version":"1.1.3 RELEASE", "app_name":"OWASP Benchmark", "server_name":"tomcat", "server_path":"/opt/apache-tomcat", "taint_value":"20192031", "taint_position":"QueryString", "taint_param_name":"name", "http_url":"", "http_uri":"", "http_client_ip":"", "http_header":"", "method_pool":[ {"invokeId":1,"class":"java.","method_name":"getParameter","taint_in":"name", "taint_out":"20192031", "stack":[]}, {"invokeId":1,"class":"java.lang.Base64","method_name":"decode","taint_in":"20192031", "taint_out":"20192032", "stack":[]}, ] }

第三方组件数据

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

{ "type":"0x02", "detail":{ "agent":"win-hostname-ip-key", "language":"Java", "sca_path":"/opt/apache-tomcat/bin/tomcat.jar", "sca_name":"struts2-core", "sca_signature":"83f745d2ebeaaffea24b3a4d486d1b5517e7f574", "algorithm":"SHA-1" } }

2. Agent内置Hook方法的类型

• Http请求处理的入口方法

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

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

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

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

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

3. Agent内部的数据预处理

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

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

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

 

References

[1] 官方文档:

https://hxsecurity.github.io/DongTaiDoc/#/doc/tutorial/quickstart

 

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多