攻防渗透 | WebsocketAndTimer内存马的查杀分析和代码实现
字数 878 2025-08-10 17:51:46

WebsocketAndTimer内存马查杀分析与实现

前言

本文深入分析Websocket和Timer内存马的工作原理、检测方法和清除技术,基于对Tomcat内部机制的深入理解,提供完整的技术实现方案。

Websocket内存马原理分析

Websocket端点注册机制

Websocket内存马的核心在于动态注册恶意端点,关键注册点在WsServerContainer#addEndpoint方法:

  1. 构建恶意的ServerEndpointConfig对象
  2. 获取path路径并将endpointClass封装成ExactPathMatch对象
  3. 将映射关系存入configExactMatchMap属性

Websocket请求处理流程

  1. WsFilter过滤器拦截所有请求
  2. doFilter方法中调用WsServerContainer#findMapping
  3. 根据path从configExactMatchMap获取映射
  4. 若无映射则调用chain.doFilter继续过滤器链

检测方法

Websocket内存马检测

public static void getWebsocketMaps() {
    // 获取configExactMatchMap属性
    Map<String, ExactPathMatch> configExactMatchMap = ...;
    
    // 遍历映射表
    for(Map.Entry<String, ExactPathMatch> entry : configExactMatchMap.entrySet()) {
        ExactPathMatch match = entry.getValue();
        ServerEndpointConfig config = match.getConfig();
        
        // 关键检测点
        String path = config.getPath();
        Class<?> endpointClass = config.getEndpointClass();
        
        // 检测恶意端点逻辑...
    }
}

检测要点:

  1. 检查所有注册的Websocket端点
  2. 分析endpointClass是否为可疑类
  3. 验证path是否与正常业务匹配

Timer内存马检测

public static void checkTimerTasks() {
    // 获取Timer线程组
    ThreadGroup tg = Thread.currentThread().getThreadGroup();
    
    // 遍历所有线程
    Thread[] threads = new Thread[tg.activeCount()];
    tg.enumerate(threads);
    
    for(Thread thread : threads) {
        if(thread.getName().contains("Timer")) {
            // 获取Timer任务队列
            Field queueField = Timer.class.getDeclaredField("queue");
            queueField.setAccessible(true);
            
            // 分析任务内容...
        }
    }
}

清除技术

Websocket内存马清除

  1. configExactMatchMap移除恶意映射
  2. 卸载相关类加载器
  3. 清理WsFilter中的引用
public static void removeWebsocketMalware(String maliciousPath) {
    // 获取configExactMatchMap
    Map<String, ExactPathMatch> configExactMatchMap = ...;
    
    // 移除恶意路径
    configExactMatchMap.remove(maliciousPath);
    
    // 清理类加载
    ClassLoader maliciousLoader = ...;
    unloadClassLoader(maliciousLoader);
}

Timer内存马清除

  1. 取消Timer任务
  2. 停止Timer线程
  3. 清理任务队列
public static void cleanTimerMalware(Timer maliciousTimer) {
    // 取消所有任务
    maliciousTimer.cancel();
    
    // 中断Timer线程
    for(TimerTask task : getTasksFromTimer(maliciousTimer)) {
        task.cancel();
    }
}

防御措施

  1. 运行时监控:监控Websocket端点动态注册
  2. 类加载控制:限制动态类加载能力
  3. 反射防护:保护关键字段不被篡改
  4. Timer审计:监控定时任务创建
  5. 内存扫描:定期扫描可疑内存对象

实现案例

Websocket内存马注入

public void injectWebsocketMemShell() throws Exception {
    // 获取WsServerContainer实例
    WsServerContainer container = getWsServerContainer();
    
    // 构建恶意端点配置
    ServerEndpointConfig config = ServerEndpointConfig.Builder.create(
        MaliciousEndpoint.class, "/malicious-path").build();
    
    // 注册恶意端点
    Method addEndpoint = WsServerContainer.class.getDeclaredMethod(
        "addEndpoint", ServerEndpointConfig.class);
    addEndpoint.setAccessible(true);
    addEndpoint.invoke(container, config);
}

Timer内存马注入

public void injectTimerMemShell() {
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            // 恶意逻辑...
        }
    }, 0, 60000); // 每分钟执行一次
}

总结

Websocket和Timer内存马利用容器内部机制实现持久化,检测和清除需要深入理解底层实现。防御应从多层面构建防护体系,结合静态规则和动态分析,才能有效应对这类高级威胁。

WebsocketAndTimer内存马查杀分析与实现 前言 本文深入分析Websocket和Timer内存马的工作原理、检测方法和清除技术,基于对Tomcat内部机制的深入理解,提供完整的技术实现方案。 Websocket内存马原理分析 Websocket端点注册机制 Websocket内存马的核心在于动态注册恶意端点,关键注册点在 WsServerContainer#addEndpoint 方法: 构建恶意的 ServerEndpointConfig 对象 获取path路径并将endpointClass封装成 ExactPathMatch 对象 将映射关系存入 configExactMatchMap 属性 Websocket请求处理流程 WsFilter 过滤器拦截所有请求 doFilter 方法中调用 WsServerContainer#findMapping 根据path从 configExactMatchMap 获取映射 若无映射则调用 chain.doFilter 继续过滤器链 检测方法 Websocket内存马检测 检测要点: 检查所有注册的Websocket端点 分析endpointClass是否为可疑类 验证path是否与正常业务匹配 Timer内存马检测 清除技术 Websocket内存马清除 从 configExactMatchMap 移除恶意映射 卸载相关类加载器 清理WsFilter中的引用 Timer内存马清除 取消Timer任务 停止Timer线程 清理任务队列 防御措施 运行时监控 :监控Websocket端点动态注册 类加载控制 :限制动态类加载能力 反射防护 :保护关键字段不被篡改 Timer审计 :监控定时任务创建 内存扫描 :定期扫描可疑内存对象 实现案例 Websocket内存马注入 Timer内存马注入 总结 Websocket和Timer内存马利用容器内部机制实现持久化,检测和清除需要深入理解底层实现。防御应从多层面构建防护体系,结合静态规则和动态分析,才能有效应对这类高级威胁。