内存马是一种隐蔽的恶意后门技术,通过动态注入恶意代码到Java Web应用内存中,绕过传统安全防护,给企业带来严重安全威胁。有效防御需建立多层次防护体系,结合自动化工具与人工分析,及时检测和清除内存马。
本文总结了攻击者获取Webshell的途径和操作,查杀和分析排查Webshell,发现攻击者使用的工具和扫描结果,系统日志分析发现攻击者创建账号和登录日志,通过Apache日志排查确定攻击路径,提到了FRP的配置信息。
在websocket层面上查找和杀死内存马的思路是在WsServerContainer#addEndpoint方法中添加恶意的ServerEndpointConfig对象,通过WsFilter过滤器拦截请求并调用WsServerContainer#findMapping方法获取映射结果。关键位置是在创建WsServerContainer时添加WsFilter过滤器。
编写针对Executor型和Upgrade类型的内存马的查找和杀死的功能。Executor是Tomcat中的连接池,可以通过覆盖getExecutor方法注入恶意逻辑。检测executor对象是否存在具体的资源路径,并进行杀死操作。
讲解了Servlet / Listener / Filter型的查杀思路,实现了Listener的kill功能和对其他类型内存马的查杀功能。通过获取StardardContext对象和调用addApplicationEventListener方法实现Listener的注入。在检测到内存马时,从List中删除对应的Listener。通过获取四种容器中的Valve实例,筛选不存在源文件的实例,划分为可能为内存马。
本文介绍了如何从“防”的角度学习内存马的查杀,主要是通过已知的一些查杀工具学习别人的思路。介绍了Memshell-scanner项目的主要思路和检测Servlet/Filter/Listener型内存马的方法,并对每种类型的内存马进行了相应的注入流程和检测思路的分析。总结了通过获取所有的servlet/Listener/Filter的目标类来判断内存马的查杀原理。
完成下面两步后,将自动完成登录并继续当前操作。