前言
出发点是JavaAgent内存马的自动分析与查杀,实际上其他内存马都可以通过这种方式查杀
本文主要的难点主要是以下三个,我会在文中逐个解答
如何dump出JVM中真正的当前的字节码
如何解决由于LAMBDA表达式导致非法字节码无法分析的问题
如何对字节码进行分析以确定某个类是内存马
背景
对于Java内存马的攻防一直没有停止,是Java安全领域的重点
回顾Tomcat或Spring内存马:Filter和Controller等都需要注册新的组件
针对于需要注册新组件的内存马查杀起来比较容易:
例如c0ny1师傅的java-memshell-scanner项目,利用了TomcatAPI删除添加的组件。优点在于一个简单的JSP文件即可查看所有的组件信息,结合人工审查(类名和ClassLoader等信息)对内存马进行查杀,也可以对有风险的Class进行后反编译分析
或者LandGrey师傅基于AlibabaArthas编写的copagent项目,分析中所有的Class,根据危险注解和类名等信息可疑的组件,结合人工反编译后进行分析
但实战中,可能并不是以上这种注册新组件的内存马
例如师傅们常用的冰蝎内存马,是内存马。以下这段是冰蝎内存马一段代码,简单分析后可以发现冰蝎内存马是利用注入到javax.servlet.