一、洞态IAST

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

1.洞态IAST的原理介绍

IAST的核心技术点有三个:

  • 值传递算法

  • 污点链路梳理

  • Hook策略

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

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

洞态IAST的创新点

  • 污点传播的自适应检测
  • 污点传播数据云端离线存储及云端污点链路梳理算法
污点传播的自适应检测

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

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

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

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

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

image-20210331104225072

2. 洞态IAST快速体验

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

2.1 代码审计

本地有运行环境

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

本地无运行环境

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

2.2 企业DevSecOps

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

以上场景中的时候,都需要下载洞态IAST的Agent探针,然后部署使用,关于洞态IAST的使用,可查看官方文档[1]https://hxsecurity.github.io/DongTaiDoc/#/doc/tutorial/quickstart)

3.功能介绍
3.1 管理检测的应用系统

截屏2021-03-31 11.07.14

3.2 梳理存在的应用漏洞

image-20210331111423568

image-20210331111502842

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

image-20210331111557078

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

image-20210331111628054

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

image-20210331111726507

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

image-20210331111827083

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

image-20210331111909520

3.5 Hook规则自定义

内置规则400+

image-20210331112015906

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

image-20210331112043295

二、洞态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[反序列化相关的方法等](/Users/shengnanwu/Library/Application Support/typora-user-images)
  • 框架层XSS、SQL注入等相关的过滤方法
3. Agent内部的数据预处理

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

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

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

References

[1] 官方文档:

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐