关于spring内存马查杀工具的思路

admin 2025-12-22 04:34:15 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了Spring内存马查杀工具的实现思路,指出现有工具如阿尔萨斯、cop和MemShell_KIller.jar在检测和卸载内存马方面的局限性。作者尝试使用agent技术注入到项目中,但发现无法获取Spring内部的ApplicationContext。文章详细分析了Spring中三种HandlerMapping的存储和卸载方式,并指出冰蝎马采用了后两种方式注入绕过,而有些工具只进行了注解方式的查杀。作者认为最好的操作是在项目内部写查杀类,但也指出这种方法存在安全风险。 综合评分: 86 文章分类: WEB安全,漏洞分析,安全工具,应用安全,安全开发


)

·其实距离实现就缺了Spring内部一个特殊的Bean,这个Bean需要提供一个静态方法,返回ApplicationContext。缺了一个小内。纠结了一星期,发现一开始就是错的,累够呛。所以个人感觉最好的操作还是在项目内部写。

·查杀类也是看了memshellscanner的思路,自己下去找了底层类里的方法,觉得动态查杀可行,于是就写了。但是毕竟是区别于项目的类,会不会影响其他代码,是否需要每个人按需求改,感觉不太完美。需要一开始就放到项目中,而且容易被人访问,不太安全。如果加拦截器拦截,有可能会导致无法查杀,报错等问题。而且没有增强字节码,无法获取无磁盘文件的类(很多内存马卸载也是这样)。只当作演示下个人的寻找思路吧。

一、思路

·Spring中有三种HandlerMapping可以存储URL到处理器的映射:

    BeanNameUrlHandlerMapping – 基于Bean名称的映射

    SimpleUrlHandlerMapping – 基于URL模式的映射

    RequestMappingHandlerMapping – 基于注解的映射

·spring的上下文类中没有直接操作的方法,注册和卸载方法在映射管理类中

RequestMappingHandlerMapping继承RequestMappingInfoHandlerMapping继承AbstractHandlerMethodMapping...

·所以我们就要找到具体的卸载方式,而查找方法就是获取上下文之后,把映射遍历出来(具体类文件位置看最下面那行路径)

二、三种存储的区别

·BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping继承自 AbstractUrlHandlerMapping,简单的 Map操作即可进行卸载

·RequestMappingHandlerMapping通过MappingRegistry注册的,在AbstractHandlerMethodMapping类即可看见new一个对象,是类对象,不是直接的映射map,需要专有方法卸载。

·继承太多,也不容易看,可以利用AI梳理一下结构。

三、冰蝎马的注入方式

·冰蝎马采用的就是后两种进行的注入绕过,有些工具只进行了注解方式的查杀。(只怪它用了老版本MVC的东西)


查看原文:《关于spring内存马查杀工具的思路》

评论:0   参与:  3