ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

防御视角看Msmap:从内存马生成器源码反推检测、清除与路径伪装技巧

防御视角看Msmap:从内存马生成器源码反推检测、清除与路径伪装技巧 防御视角看Msmap从内存马生成器源码反推检测、清除与路径伪装技巧【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmapMsmap 是一款开源的 Java 内存 WebShell 生成器Memory WebShell Generator可一键生成注入 Tomcat、Spring、WebLogic 等容器的内存马。本文将从防御视角剖析 Msmap 源码帮你掌握内存马检测、内存马清除方法并识破攻击者的路径伪装套路——知己知彼才能真正守住 JVM 应用。 先搞懂内存马为什么让传统查杀失效什么是内存马Memory WebShell传统 WebShell 是落在磁盘上的.jsp文件文件扫描器一扫一个准。而内存马通过动态字节码在运行时寄生进容器的请求处理链Valve、Servlet、拦截器等磁盘上不落任何恶意文件因此文件完整性监测FIM、WebShell 查杀工具全部失明攻击者即使删光文件后门依然在线唯一的住所是 JVM 进程的堆内存Msmap 的生成原理一条命令拼出内存马Msmap 的核心入口是 generator.py它的思路非常工程化——把内存马拆成 4 个可自由组合的模块模块作用源码位置注入点模型Model决定挂到容器哪个组件上gist/java/container/解码器DecoderBase64 / XOR / RC4 / AES128gist/java/decoder/xor.py回调桩StubCMD、蚁剑、冰蝎、哥斯拉等gist/java/stub/上下文Context适配不同 JDK / 容器的反射工具gist/java/common/util.py生成流程拼接模板 → 自动编译可配置于 config/environment.py→ Base64 输出再交给反序列化等 RCE 载荷加载进目标 JVM。下图是生成内存马并用管理端连接成功的完整演示 源码里的注入点地图内存马都藏在哪读源码最大的收获是得到一张内存马藏身位置清单——攻击者挂在哪防御者就要扫哪注入点原理源码Tomcat Valve反射调用Pipeline.addValve把动态代理 Valve 塞进请求管道valve.pyTomcat ServletcreateWrapper注册一个动态代理 Servlet并映射到*.xml等自定义路径servlet.pyTomcat WsFilter注册 WebSocket 端点端点路径伪装成/{password}wsfilter.pySpring Interceptor向adaptedInterceptors列表插入代理拦截器interceptor.pySpring Handler挂钩 Spring WebFlux 的ServerWebExchange表单处理链handler.pyJDK JavaX (Agent)通过 Java Agent 替换HttpServlet类加载javax.py源码中有 3 个共性特征正是检测的突破口全靠动态代理 静态代码块自注册——如static { new TomcatValve(); }类一旦被加载就完成寄生注入点对象是Proxy动态代理实例密码是硬编码的静态字符串private static String password ...会出现在类的常量池里触发参数名 密码本身——请求只要携带密码加密载荷的表单参数内存马就会被激活。冰蝎管理端连接由 Msmap 生成的 Tomcat Valve 内存马的效果如下️ 内存马检测技巧从攻击代码反推防御点1️⃣ 反射枚举容器组件找出不正常的代理Msmap 自己都在注入前检查列表里是否已有Proxy实例来防重复注入见 interceptor.py 第 42-46 行。防御者完全可以反用这一招遍历StandardContext的Pipeline 中的 Valve、WrapperServlet、Filter、Listener对每个对象调用Proxy.isProxyClass(clazz)凡是动态代理类$Proxy0等都重点审查其InvocationHandler正常业务很少会往请求管道里塞匿名代理组件命中即高危。2️⃣ 内存与常量池特征扫描用jmap/arthas等工具 dump 堆搜索TomcatValve、SpringInterceptor、SpringHandler等 Msmap 类名特征更通用的做法扫描堆中的String常量匹配已泄露的密码串如 CobaltStrike/冰蝎默认口令密码硬编码在字节码里是搬不走的指纹结合 RASP 钩住Proxy.newProxyInstance与对Pipeline.addValve、Wrapper.setServletClass的反射调用注入瞬间即可告警。3️⃣ 流量与路径特征伪装得再好也有破绽哥斯拉管理端连接 Spring 内存马的截图里可以看到其触发方式——全部依赖请求参数 自定义路径Servlet 内存马路径伪装成*.xml可在 servlet.py 第 6 行看到pattern *.xml检测时对比实际注册的 Servlet 映射与业务配置清单多余的.xml映射很可疑WsFilter 内存马WebSocket 端点路径为/{password}若 WAF/网关未见过陌生 WS 端点直接标记加密流量Msmap 支持 AES128/RC4/XOR 加密载荷如 aes_128_ecb_pkcs7_padding_md5.js明文 DLP 失效但固定参数名、心跳包频率仍可被 RASP 或流量行为分析捕获。 内存马清除最快的一刀是重启 JVM好消息是内存马只活在内存里。按成本从低到高重启应用进程——内存马随 JVM 消失是最快、最彻底的清除方式这也是攻击者最怕的动作别因为怕中断业务而长期不重启反射摘除定位到恶意的 Valve/Wrapper/Interceptor 后从Pipeline、Context.children、adaptedInterceptors中移除该代理对象可做到不重启清除阻断复活路径内存马清除后必须堵死注入入口打补丁、封死反序列化/表达式注入等 RCE 漏洞否则攻击者一条 RCE 又能重新种马。️ 路径伪装攻防小结攻击伪装手法防御反制Servlet 映射伪装成*.xml正常业务路径比对注册映射清单审计非业务路径的写响应WS 端点伪装成/{password}白名单管理 WebSocket 端点AES/RC4 加密载荷绕过内容检测RASP 监控反射注册行为 流量行为分析内存驻留、磁盘无痕定期重启 堆内存特征扫描 总结Msmap 用模块化设计证明了一件事内存马的植入是高度工程化、可批量化的。防御侧同样可以工程化应对——记住三件事扫动态代理、盯容器注册表、勤重启。把 gist/java/container/ 里的每个注入点都变成你的检测清单内存马的隐身衣就穿不住了。【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmap创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表