RASP 如何检测Java Agent 内存马

admin 2022年3月30日07:55:36评论6 views字数 1771阅读5分54秒阅读模式

前言

    Java技术栈漏洞目前业已是web安全领域的主流战场,随着IPS、RASP等防御系统的更新迭代,Java攻防交战阵地已经从磁盘升级到了内存里面。

内存马防检测

    随着攻防热度的升级,内存马注入现在已经发展成为一个常用的攻击技术。目前业界的内存马主要分为两大类:

Agent型
利用instrument机制,在不增加新类和新方法的情况下,对现有类的执行逻辑进行修改。JVM层注入,通用性强。非Agent型
通过新增一些Java web组件(如Servlet、Filter、Listener、Controller等)来实现拦截请求,从而注入木马代码,对目标容器环境有较强的依赖性,通用性较弱。

    由于内存马技术的火热,内存马的检测也如火如荼,针对内存马的检测,目前业界主要有两种方法:

基于反射的检测方法

    该方法是一种轻量级的检测方法,不需要注入Java进程,主要用于检测非Agent型的内存马,由于非Agent型的内存马会在Java层新增多个类和对象,并且会修改一些已有的数组,因此通过反射的方法即可检测,但是这种方法无法检测Agent型内存马。

基于instrument机制的检测方法

    该方法是一种通用的重量级检测方法,需要将检测逻辑通过attach API注入Java进程,理论上可以检测出所有类型的内存马。当然instrument不仅能用于内存马检测,java.lang.instrument是Java 1.5引入的一种可以通过修改字节码对Java程序进行监测的一种机制,这种机制广泛应用于各种Java性能检测框架、程序调试框架,如JProfiler、IntelliJ IDE等,当然近几年比较流行的RASP也是基于此类技术。

Instrument原理

    native层面分析。首先,我们先分析一下attach的工作流程,该流程主如下图:

RASP 如何检测Java Agent 内存马

1.检测工具作为Client,根据指定的PID,向目标JVM发起attach请求;2.JVM收到请求后,做一些校验,校验通过后,会打开一个IPC通道。3.接下来Client会封装一个名为AttachOperation的C++对象,发送给Server端;4.Server端会把Client发过来的AttachOperation对象放入一个队列;5.Server端另外一个线程会从队列中取出AttachOperation对象并解析,然后执行对应的操作,并把执行结果通过IPC通道返回Client。
6.如果收到的load 操作对象,将读取 agent.jar 文件

    native 层面代码执行完成,进入到 java层面(RASP可以大展身手的层面)。JVM会实例化一个InstrumentationImpl类,并反射调用agent中的premain/agentmain 方法。JVM 调用 loadAgent 加载磁盘上的agent jar。参数 path 是agent jar包路径。  最终调用了 native 方法 loadAgent0。

RASP 如何检测Java Agent 内存马

    agent 加载成功之后,反射调用 agentmain/premain 方法,agent 代码被执行。代码如下:

RASP 如何检测Java Agent 内存马

反射获取 premain.class 并获取premain/agentmain方法:

RASP 如何检测Java Agent 内存马

方法反射执行,agent初始化。

 RASP 如何检测Java Agent 内存马

      自此,我们搞清楚了 agent 的初始化链路,只需要在链路上增加检测点即可。这个检测点能够拿到jvm加载的agent参数信息。

       一般企业内部会有多个agent ,比如arthas、skysalking等,将这些常用的agent加入白名单即可。不在白名单的 agent 直接阻断。   

    检测点如下:

sun.instrument.InstrumentationImpl.loadClassAndStartAgent


编写 agent 检测插件

RASP 如何检测Java Agent 内存马

     插件编译打包之后,上传到管理端,配置下发到指定机器即可。尝试 attach 到JVM加载agent 被阻断,agent 加载失败。

RASP 如何检测Java Agent 内存马

官网:http://www.jrasp.com

github:https://github.com/jvm-rasp/jrasp-agent

加入技术交流群请添加微信:sear2022

原文始发于微信公众号(RASP安全技术):RASP 如何检测Java Agent 内存马

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月30日07:55:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   RASP 如何检测Java Agent 内存马https://cn-sec.com/archives/853635.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息