当前位置: 首页 > 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
http://www.xdnf.cn/news/446635.html

相关文章:

  • GraphPad Prism简介、安装与工作界面
  • 【软件测试】第二章·软件测试的基本概念
  • 二叉树前序与后序遍历迭代法详解:栈操作与顺序反转的巧妙结合
  • NVMe简介1
  • Android 中 图片加载库 Glide 简介
  • 【Java-EE进阶】SpringBoot针对某个IP限流问题
  • Protocol Buffers 全流程通俗讲解
  • vLLM - SamplingParams 参数
  • 【BUG】滴答定时器的时间片轮询与延时冲突
  • 力扣热题——找出 3 位偶数
  • 康谋分享 | 自动驾驶仿真进入“标准时代”:aiSim全面对接ASAM OpenX
  • C++类和对象--高阶
  • 猫眼浏览器:简约安全,极速浏览
  • 基于多目标进化算法的神经网络架构搜索及其高级可视化技术
  • Huffman树
  • 常用的Java工具库
  • 错误: 加载主类 org.springframework.boot.loader.launch.JarLauncher 时出现 LinkageError
  • 鸿蒙Next API17新特性学习之如何使用新增鼠标轴事件
  • 蚂蚁seo强引蜘蛛池,SEO优化的利器
  • 【Linux笔记】——进程信号的捕捉——从中断聊聊OS是怎么“活起来”的
  • Kotlin Compose 与传统 Android UI 开发对比
  • LabVIEW在电子电工教学中的应用
  • Python 之 selenium 打开浏览器指定端口进行接续操作
  • Nginx+Lua 实战避坑:从模块加载失败到版本冲突的深度剖析
  • 数字信号处理-大实验1.1
  • Vue3吸顶导航的实现
  • Jmeter变量传递介绍
  • JavaScript 中级进阶技巧之map函数
  • 哈希表的实现01
  • java每日精进 5.14【参数校验】