首页 > 系统相关 >【Web攻防】为什么说内存马正在改变Web安全格局?8年技术进化史

【Web攻防】为什么说内存马正在改变Web安全格局?8年技术进化史

时间:2025-01-12 09:47:15浏览次数:1  
标签:Web 攻防 进化史 文件 示例 技术 内存 Java

前言

在当今Web安全领域,内存马已成为绕过传统防御体系的重要技术。
传统Webshell在面对以下防御时往往难以有效存活:

  • 文件监控、防篡改、EDR等终端安全
  • Webshell特征检测和流量监控
  • 防火墙阻断反连及反向代理隐藏真实IP

在这样的背景下,无文件攻击、内存Webshell等基于内存的攻击手段逐渐成为攻击者的首选。本文将深入探讨JavaWeb内存马技术。

内存马技术的演进历程

一、萌芽阶段 (2014-2016)

2014年,“园长”在其个人博客首次提出了Java Timer后门的概念。

这个阶段的特点是:

1、发现某些Java代码即使删除JSP文件后仍能继续执行
2、技术还停留在概念验证阶段
3、实现方式相对简单,主要依赖Java Timer机制

// 早期Java Timer后门示例
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        // 恶意代码逻辑
    }
}, 0L, 1000L);

二、初步发展阶段 (2017-2019)

2017年是内存马技术发展的重要转折点:

n1nty发表《Tomcat源代码调试笔记-看不见的Shell》
首次系统性提出了基于Tomcat的内存马实现方案
引入了Filter型和Servlet型两种实现思路

// 早期Filter型内存马示例
FilterDef filterDef = new FilterDef();
filterDef.setFilterName("shellFilter");
filterDef.setFilterClass(shellFilter.class.getName());
context.addFilterDef(filterDef);

三、快速发展期 (2020-2022)

这一阶段内存马技术呈现爆发式发展:

1、工具支持

冰蝎3.0 Beta7率先实现Java Agent型内存马
哥斯拉等工具相继推出内存马功能
各类漏洞利用工具集成内存马注入能力

2、技术创新

Spring框架型内存马的出现
WebSocket协议的利用
无文件注入技术的突破

// Spring拦截器型内存马示例
public class ShellInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 恶意代码逻辑
        return true;
    }
}

3、攻防对抗

各大安全厂商开始研究内存马检测技术
内存马免杀技术不断进化
出现了更多的注入和持久化方案

四、成熟阶段 (2023至今)

当前内存马技术已经相当成熟:

1、技术特点

实现方式多样化
与现代Web框架深度融合
注重实战可用性
更加注重隐蔽性

2、发展趋势

向更底层的技术方向发展
与容器技术结合
探索新的协议和通信方式

// 现代化内存马示例:结合WebSocket
@ServerEndpoint("/ws")
public class WebSocketShell {
    @OnMessage
    public void onMessage(String message, Session session) {
        // 高级通信和控制逻辑
    }
}

3、技术创新点

多协议支持(HTTP/HTTPS/WebSocket/gRPC等)
分布式架构适配
云原生环境支持
新型框架的利用方式

内存马与无文件木马的关系

在讨论内存马技术时,经常会有人问:内存马是否就等同于无文件木马?这个问题需要我们从多个维度来理解。

1、 部署特征

内存马确实具有"无文件"的特点,它直接加载到Java应用的内存空间中,不需要在磁盘上持久化存在WebShell文件。但这不意味着所有内存马的部署过程都是完全无文件的:

// 示例:动态注册Servlet型内存马
ServletContext context = request.getSession().getServletContext();
Servlet servlet = new CustomServlet();  // 直接在内存中创建Servlet实例
ServletRegistration.Dynamic registration = context.addServlet("shellName", servlet);
registration.addMapping("/shell");

2、 运行特征

从运行状态来看,内存马确实体现出典型的"无文件"特征:

完全驻留在内存中运行
服务器重启后会失效
难以被传统的文件扫描工具发现
需要专门的内存扫描技术来检测

3、注入方式分类

根据注入方式,我们可以将内存马分为以下几类:
完全无文件型

通过反序列化漏洞直接注入
利用框架特性动态注册

// 示例:利用Spring框架注册Controller
@RequestMapping("/shell")
public class DynamicController {
    // 恶意代码逻辑
}

临时文件型

Agent型内存马可能需要临时文件辅助注入
注入完成后临时文件会被删除

// 示例:Agent注入过程
VirtualMachine vm = VirtualMachine.attach(pid);
vm.loadAgent(agentPath);  // 需要临时的agent jar文件
// 注入完成后删除临时文件

依赖文件型

通过已存在的WebShell文件进行二次注入
常见于使用冰蝎、哥斯拉等工具的场景

4、 实战考虑

在实际使用中,选择何种注入方式需要考虑:

  • 目标环境的防护措施
  • 是否存在文件监控
  • 是否需要持久化
  • 注入的稳定性要求

因此,我们可以说内存马是一种特殊的Web后门技术,它的最终运行形态是无文件的,但其部署过程可能是有文件或无文件的。这种技术特性使其在对抗文件监控、防病毒软件等传统防御手段时具有独特优势。

技术优势与局限

优势:

  • 绕过文件监控
  • 适用于反向代理环境
  • 可用于框架型应用
  • 难以被传统手段检测

局限:

  • 服务重启后失效
  • 部分实现方式已有检测手段

攻防对抗

防御技术:

  • 基于Java Agent的内存马检测
  • 关键类扫描
  • MBean风险识别

绕过技术:

  • 阻止JVM进程通信
  • 禁止其他Agent加载
  • Bootstrap ClassLoader加载

结语

随着网络安全形势的不断发展,传统的Web攻防技术正在经历前所未有的变革。本文将带您深入探讨Java内存马技术的发展历程、实现原理与攻防对抗,助力安全从业者更好地应对新型安全挑战。

原创 VlangCN HW安全之路

标签:Web,攻防,进化史,文件,示例,技术,内存,Java
From: https://www.cnblogs.com/o-O-oO/p/18666628

相关文章

  • 请讲讲WebSocket如何维持连接?
    WebSocket通过以下几种主要方式来维持连接:心跳机制:WebSocket使用心跳机制来定期发送心跳消息,这些消息可以是空的数据帧或是特定的控制帧,用于确认连接的活跃状态。客户端和服务器通过交换这些心跳消息来确认连接是否仍然有效,这有助于及时发现连接的异常并进行处理。断线......
  • webSocket 握手的原理是什么?
    WebSocket握手的原理主要涉及到客户端和服务器之间通过HTTP请求和响应来建立WebSocket连接的过程。以下是详细的握手原理:客户端发起握手请求:客户端(通常是Web浏览器)首先发起一个HTTP请求,该请求包含了一些特定的头信息,表明客户端希望建立一个WebSocket连接。这些头信息中关键......
  • 请讲讲WebSocket如何判断在线离线?
    WebSocket判断用户在线或离线状态主要依赖于几种机制,以下是从前端开发的角度对这些机制的详细解释:心跳包机制:WebSocket是一种持久连接,一旦建立连接,它就会保持开启状态。为了检测连接的活跃性,可以通过定期发送心跳包(通常是小的数据包)来确认连接是否仍然有效。心跳包可以由客......
  • WebSocket如何解决断线问题?
    WebSocket解决断线问题可以从多个方面入手,以下是一些主要的解决方法:增加心跳检测:WebSocket协议本身并没有提供心跳机制,但可以在WebSocket连接中增加心跳检测机制。定期向服务器发送心跳包,以确保连接的稳定性。这种做法可以有效检测和处理因网络不稳定或超时导致的断线问题。......
  • websocket有哪些特点?
    WebSocket在前端开发中具有以下特点:全双工通信:WebSocket允许客户端和服务器之间进行实时的双向数据传输。这意味着客户端和服务器可以随时向对方发送数据,而不需要等待对方的响应,从而实现了真正的双向通信。低延迟:与传统的HTTP协议相比,WebSocket具有更低的延迟。因为WebSocke......
  • 请讲讲websocket的心跳机制
    WebSocket的心跳机制在前端开发中扮演着维持长连接和检测连接状态的重要角色。以下是关于WebSocket心跳机制的详细解释:一、心跳机制的基本概念WebSocket心跳机制是一种保活机制,用于维持客户端与服务器之间的长连接。它通过定时发送空数据包(即心跳包)来保持连接的活跃状态,防止因长......
  • 请讲讲websocket心跳机制原理
    WebSocket心跳机制原理在前端开发中至关重要,它主要用于维持长连接并防止因长时间不通讯而导致的自动断开。以下是WebSocket心跳机制原理的详细解释:心跳包的作用:心跳包是指在一定时间间隔内,WebSocket发送的空数据包。它的主要作用是维持长连接,防止连接因长时间没有数据交换而......
  • 请讲讲websocket心跳机制作用
    WebSocket心跳机制在前端开发中的作用主要体现在以下几个方面:保持连接活跃:WebSocket心跳机制通过定期发送小型数据包(通常不包含有效数据),即心跳包,来检测对方(客户端或服务器)是否仍然在线,并维持连接活跃状态。这种机制有助于防止因长时间无数据传输而导致的连接自动断开,从而确保We......
  • 请讲讲WebSocket有哪些缺点和不足
    WebSocket在前端开发中的缺点和不足可以归纳为以下几点:兼容性问题:虽然现代浏览器都支持WebSocket,但在一些旧的浏览器或特定环境(如某些企业网络)中可能不支持。这可能导致在部分用户群体中无法正常使用基于WebSocket的功能。安全性风险:WebSocket允许客户端和服务器之间进行实......
  • 请讲讲WebSocket重连机制
    WebSocket重连机制在前端开发中是一个重要的概念,它确保了客户端与服务器之间的持续通信。以下是关于WebSocket重连机制的详细解释:一、WebSocket重连的概念WebSocket重连是指在WebSocket连接断开后,客户端自动尝试重新建立连接的过程。这有助于保持客户端与服务器之间的实时通信,即......