当前位置: 首页 > news >正文

Java内存马的检测与发现

【网络安全】Java内存马的检测与发现

  • 一、Java内存马的现象
  • 二、检测思路
  • 三、重点关注类
  • 四、检测方法
    • 1. 检查方法(FindShell)
    • 2. 检查方法(sa-jdi)
    • 3. 检查方法(arthas-boot)
    • 4. 检查方法(cop.jar)
    • 5. 检查方法(memshell_scanner)

一、Java内存马的现象

webshell可以正常访问,并且从log日志中可以看到webshell的访问状态码为200,但是在对应的目录中却找不到文件,如果存在此类情况,可以判断服务器中了内存马
在这里插入图片描述

二、检测思路

根据Java内存马的特点,检测思路如下:

  • 注入jar包
  • dump已加载的class字节码
  • 反编译为java代码
  • 源码webshell检测

这样检测比较消耗性能,可以考虑缩小源码检测

三、重点关注类

在检测过程中需要重点关注的几个类和方法:

javax/servlet/http/HttpServlet#service
org/apache/catalina/core/ApplicationFilterChain#doFilter
org/springframework/web/servlet/DispatcherServlet#doService
org/apache/tomcat/websocket/server/WsFilter#doFilter

四、检测方法

1. 检查方法(FindShell)

排查工具:FindShell:https://github.com/geekmc/FindShell

安装&打包方法:

  1. 进入到FindShell目录,打包项目,执行mvn package
    • 如果没有mvn命令需要先install apache-maven
    • 如果报错提示sd-jdi.jar的问题,就需要修改pom⽂件中的sd-jdi.jar⽂件的路径,然后重新打包
  2. 打包成功后会在target⽬录下⽣成FindShell-1.0.jar⽂件

通过官方文档可以得知检测命令为java -jar FindShell.jar --pid [目标JVM的PID]

  1. 找到jvm进程,并记住pidjps -l
  2. 查找内存⻢并dumpclass⽂件(保存在当前路径下):java -jar FindShell-1.0.jar --pid xxx —debug

发现内存马提示如下图所示
c9.p
未发现内存马提示如下图所示:
在这里插入图片描述

针对dump出来的⽂件使⽤jd-gui进⾏class反编译,可以发现是冰蝎3.0

在这里插入图片描述
在这里插入图片描述

2. 检查方法(sa-jdi)

排查工具:sa-jdi.jar: 在jdk中的/lib/目录下、dumpclass.jar:https://github.com/hengyunabc/dumpclass

使用方法:
使用GUI的方法可以执行命令如下:

  1. 找到sa-jdi.jar⽂件位置:echo $JAVA_HOME/lib
  2. 出现图形化界面:sudo java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
    • or 不找位置直接执行:sudo java -classpath "$JAVA_HOME/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
    • or jhsdb hsdb

注:如果在attach进程的时候提示error,多半是权限问题,程序权限和木马权限保持⼀致即可
在这里插入图片描述
在这里插入图片描述
注入以后可以在菜单栏的tools中查看是否有关键类
在这里插入图片描述
如果发现存在关键class的话,可以使用dumpclass.jar或者sa-jdi文件进行dump(sa-jdi.jar可以点击下图的create进行创建)
在这里插入图片描述
如下图所示
左半部分图片上面为存在类,成功导出;
左半部分下面为不存在无法导出的结果
在这里插入图片描述
使用jd-gui进行反编译
在这里插入图片描述
在这里插入图片描述

3. 检查方法(arthas-boot)

检查工具:arthas-boot.jar:https://github.com/alibaba/arthas/releases

使用方法:

  1. java -jar arthas-boot.jar
    • 查看相关类名:sc xxxxx类名
    • 反编译类名:jad xxxxx类名
    • 下载指定类到本地:dump xxxxx类名

在这里插入图片描述
直接反编译选中的类

在这里插入图片描述

4. 检查方法(cop.jar)

检查工具:cop.jar:https://github.com/LandGrey/copagent/

使用方法:java -jar cop.jar -p xxx
在这里插入图片描述
执行后在本地存放扫描结果,并标注高、中、低危

在这里插入图片描述
同时也把可能有问题的代码转成java⼀并存放在本地

在这里插入图片描述
在这里插入图片描述

5. 检查方法(memshell_scanner)

检查工具:memshell_scanner.jsp:https://github.com/c0ny1/java-memshell-scanner

使用方法:把jsp文件放在存在内存马的web目录中,然后访问该文件即可

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b01a53f05dda4436b6c2258b39c9defb.png

参考链接:

  • 内存马查杀思路:https://my.oschina.net/9199771/blog/5529686
  • Arthas 简介:https://arthas.aliyun.com/doc/

其他内存马查杀工具:

  • https://github.com/huoji120/DuckMemoryScan
  • https://github.com/xyy-ws/NoAgent-memshell-scanner
  • https://github.com/threedr3am/ZhouY

相关文章:

  • 基于 GPUGEEK平台进行vLLM环境部署DeepSeek-R1-70B
  • 一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp
  • 容器安全-核心概述
  • 【论文阅读】UNIT: Backdoor Mitigation via Automated Neural Distribution Tightening
  • 内存安全设计方案
  • Python 常用模块(八):logging模块
  • 游戏引擎学习第279天:将实体存储移入世界区块
  • 时源芯微| KY键盘接口静电浪涌防护方案
  • 精益数据分析(59/126):移情阶段的深度博弈——如何避开客户访谈的认知陷阱
  • 力扣3337. 字符串转换后的长度 II随笔
  • 【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
  • 在 Rocky Linux 上手动安装 zsh
  • 嵌入式(c语言篇)Day9
  • STM32 片上资源之串口
  • 牛市买卖数字货币逻辑
  • 【​​HTTPS基础概念与原理​】TLS握手过程详解​​
  • 【0415】Postgres内核 释放指定 memory context 中所有内存 ④
  • Kubernetes控制平面组件:Kubelet详解(四):gRPC 与 CRI gRPC实现
  • Android清单文件
  • Nexus首次亮相迪拜 TOKEN2049:以“手机 + 钱包 + 公链 + RWA”生态系统引领未来区块链基建
  • 人民日报民生观:转人工客服,怎么这么难?
  • 国新办将就2025年4月份国民经济运行情况举行新闻发布会
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 最高降九成!特朗普签署降药价行政令落地存疑,多家跨国药企股价收涨
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 西藏日喀则市拉孜县发生5.5级地震,震源深度10千米