在校自研内存马查杀工具,非常好用

本文介绍了一种新的内存马查杀工具,能实现在无需重启服务器的情况下检测和清除Tomcat和Spring环境中的内存马,支持跨context应用,提高安全防护效率。
  • 工具介绍

随着攻防演练的愈演愈烈,对抗的技术也在不断提升,在攻防演练中攻击者常常为了不留痕迹以及进行权限维持会注入内存马,在内存马中又以tomcat类型和spring类型较多。有些系统又比较关键,可能由于业务需要无法进行重启操作。所以作为苦逼的蓝队,我编写了一个全新的内存马工具。该工具可以发现攻击者的攻击行为,并在不重启的情况下杀掉内存马,且可以跨context使用,不必再在tomcat的每个应用中上传一个查杀文件。

在研发该工具之初是借鉴了c0ny1师傅的java-memshell-scanner思路,使用jsp文件进行操作,将该工具上传至服务器可解析jsp的目录即可使用,访问文件名并根据图形化界面对内存马进行查杀。

Tomcat类型内存马查杀方法

Tomcat内存马类型的查杀方式c0ny1师傅其实已经讲的很清晰了,这里我就不重复造轮子了。但是值得一提的是,c0ny1师傅对listener的清理方式似乎不太正确,因为tomcat内部并没有相关方法可以注销listener,所以这部分需要我们自己反射tomcat在注册listener时用的列表,然后对指定listener进行删除操作。具体流程如下:
在此我们还是需要回忆一下listener的注册流程,这个流程比较简单,我们直接从listener的class类打断点,然后启动tomcat。
在调用链中看到standardcontext点进去八成没错。在这里插入图片描述

在listenerStart方法可以看到listener的注册过程,红圈圈出来的地方就是获取listener的过程。在这里插入图片描述

在下方的setApplicationEventListeners方法(重要)进行设置
在这里插入图片描述
在这里插入图片描述

这个setApplicationEventListeners非常的有趣,他将原先的applicationEventListenersList先全部清空,然后再把传入的listeners对象组成的数组传入。applicationEventListenersList是从web.xml中获取的,也就是代码中原本注册的,攻击者如果注入Listener内存马,该内存马也会被保存到applicationEventListenersList之中。这里就会导致一个问题,如果我们反射调用setApplicationEventListeners,他会先清空原先所有的listener,然后我们只需先反射获取standardcontext的applicationEventListenersList字段,然后将攻击者的内存马名字取出来,在数组中进行删除,再反射调用setApplicationEventListeners即可删除指定的listener,也就删除了内存马。

内存是一种无文件攻击技术,攻击者通过在内存中注入恶意代码来实现持久化控制,避免了将恶意代码写入磁盘文件,从而绕过传统的基于文件的检测机制。针对内存查杀,通常依赖于内存分析、行为检测以及特定工具的使用。 ### 内存查杀方法 1. **Java Agent 技术** Java Agent 是一种可以在 JVM 启动时或运行时动态修改类字节码的技术。通过编写自定义的 Java Agent,可以实现对内存中加载的类进行监控和分析,检测是否存在异常的类加载行为,从而发现内存的存在。例如,`copagent` 是一个基于 Java Agent 的内存检测与清除工具,能够对运行中的 Java 应用进行实时监控[^1]。 2. **Arthas 分析与排查** Arthas 是阿里巴巴开源的 Java 诊断工具,支持对运行中的 Java 应用进行线程、类加载、JVM 状态等多维度的分析。通过 Arthas 可以查看当前加载的类信息,识别出未在磁盘上存在的类,从而判断是否为内存。例如,使用 `sc` 命令查看所有已加载的类,若发现某个类在磁盘上不存在,则可能是内存。此外,还可以使用 `thread` 命令查看线程信息,识别异常线程[^4]。 3. **内存快照分析** 对运行中的进程进行内存快照(heap dump)分析,可以识别出异常的类或对象。通过 `jmap` 工具生成堆转储文件后,使用 `MAT`(Memory Analyzer Tool)等工具进行分析,查找可疑的类或对象。例如,某些内存会通过 `ClassLoader` 动态加载恶意类,这些类通常不会出现在正常的类路径中[^1]。 4. **行为监控与流量分析** 内存虽然不依赖磁盘文件,但仍会通过网络进行通信。通过流量监控工具(如 Wireshark、Suricata 等)可以检测异常的网络连接和通信模式。例如,某些内存可能会定期与 C2 服务器通信,发送心跳包或接收命令。结合 IDS/IPS 规则,可以识别这类行为[^2]。 5. **Web 容器日志与线程分析** 在 Tomcat 等 Web 容器中,可以通过日志分析和线程状态监控来识别内存。例如,某些内存会通过 Filter 或 Servlet 实现持久化,导致 Web 容器中出现异常的 Filter 或 Servlet 配置。通过检查 `web.xml` 配置文件或运行时加载的 Filter 信息,可以发现异常配置[^1]。 ### 内存查杀工具 1. **Tomcat Memshell Scanner** 该工具专为检测 Tomcat 中的内存而设计,支持对运行中的 Tomcat 实例进行扫描,识别异常的类加载行为和 Filter/Servelt 配置。该工具可以通过命令行运行,并输出详细的扫描结果,便于进一步分析[^1]。 2. **copagent** 这是一个基于 Java Agent 的内存检测与清除工具,支持对运行中的 Java 应用进行实时监控。通过加载自定义的 Agent,可以拦截类加载事件,识别异常类并进行清除操作。该工具开源且易于集成到现有系统中[^1]。 3. **Java-Memshell-Scanner** 由 c0ny1 开发的内存扫描工具,支持对 Java Web 应用中的 Filter、Servlet 等组件进行扫描,识别潜在的内存攻击。该工具可以通过命令行调用,并提供详细的扫描报告,便于安全人员进行后续分析。 4. **Arthas** 作为一款强大的 Java 诊断工具,Arthas 提供了多种命令用于分析运行中的 Java 应用。通过 `sc` 命令可以查看所有已加载的类,通过 `thread` 命令可以查看线程状态,识别异常线程。此外,Arthas 还支持动态修改类字节码,可用于清除内存。 5. **Sysdig Falco** 虽然不是专为内存设计,但 Falco 是一个强大的行为监控工具,支持对系统调用、网络连接、文件访问等行为进行实时监控。通过定义自定义规则,可以检测到内存相关的异常行为,如异常的网络连接、线程创建等[^2]。 ### 示例:使用 Arthas 查看已加载类 ```bash # 查看所有已加载的类 sc -d *.* ``` 该命令将列出所有已加载的类及其类加载器信息,便于识别异常类。 ### 示例:使用 jmap 生成堆转储文件 ```bash # 生成堆转储文件 jmap -dump:format=b,file=heap.bin <pid> ``` 生成的 `heap.bin` 文件可以使用 MAT 工具进行分析,查找可疑对象。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值