针对Java内存马的查杀,提供一种简便而有效的方法

图片[1]-针对Java内存马的查杀,提供一种简便而有效的方法-山海云端论坛

JAVA内存马类型

  1. Servlet-API 内存马
  2. Listener 内存马
  3. Filter 内存马
  4. Servlet 内存马

特定框架分类

  • Spring/Struts2等框架
    • Interceptor
    • Controller

中间件分类

  • Tomcat 的 Pipeline & Valve
  • Grizzly 的 FilterChain & Filter

字节码增强型

  • Java Agent 内存马

内存马的原理

  1. 顺序:listener -> filter -> servlet

Servlet

Servlet 是运行在 Web 服务器或应用服务器上的程序,负责处理用户请求并生成相应的返回信息。

Servlet 程序运行流程:

  1. Servlet 初始化:init()
  2. 处理请求:service()
  3. Servlet 销毁:destroy()

Filter

Filter 用于拦截请求和响应,对其进行处理后再传递给下一个 Filter 或 Servlet。

Filter 主要方法:

  • init(FilterConfig filterConfig)
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  • destroy()

Listener

Listener 用于监听 Web 应用中对象的创建、销毁等动作,常用于统计在线人数、初始化信息等。

Filter 内存马例子

javaCopy code

package com.evalshell.Filter; import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter 创建"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("执行过滤过程"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("销毁!"); } }

内存马查杀方式

Tomcat 内存马查杀原理

  • 使用 Java Agent 技术遍历已加载到内存中的 class 文件。
  • 判断是否是内存马,如果是,则进行内存查杀。

排查方式

  1. 日志中查找可疑请求。
  2. 中间件的 error.log 中查找异常信息。
  3. 根据组件和框架排查漏洞。
  4. 针对 servlet 和 controller 类型,根据日志查找访问请求。
  5. 针对 filter 和 listener 类型,查找可能的 404 请求或大量带相同参数的请求。

查杀方式

  • 使用 VisualVM、Arthas、Copagent 等工具进行内存分析和查杀。
  • 使用 java-memshell-scanner 进行扫描和查杀。

注意:

  • 确保不误伤正常 Java 进程。
  • 使用合法的杀毒软件和安全工具进行扫描。
  • 对于不确定的可疑代码,寻求安全专家的帮助。
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容