java-memshell检测
前提
在攻防演练中,之前主流的是使用webshell,像冰蝎、哥斯拉、蚁剑等自带的shell等,但随着安全产品如ids、ips、cwpp等对shell的研究大多都可以识别出来,无文件攻击手法的出现绕过了这种检测手法并逐渐受攻击队青睐,同时随着冰蝎、哥斯拉等工具支持一键注入内存马的简易是内存马攻击变得更加简单。主要内存马类型可以分为
动态注册servlet、fliter、listeren型(使用servlet-api具体实现)
动态注册controller、interceptor(拦截器型)型(spring框架类、tomcat的valve类型)
java agent技术(字节码增强型)
关于内存马的具体内容可以阅读下面的一些文章
检测memshell
对于如何检测memshell在不使用安全产品的基础上可以使用以下几种工具
1 arthas
jsp 编译过后的类名末尾都会带上 jsp 后缀使用sc *_jsp*
sc *_jsp$*
常用客户端连接工具的 webshell ,会
wsMemShell 产生的类
servlet、listeren、filter三种类型内存马产生的类
查看对应类的内容可以使用jad命令
jad --source-only org.apache.jsp.shell6_jsp$U
jad编译wsmemshell注入的类
jad --source-only org.apache.jsp.wscmd_jsp$cmdEndpoint
jad --source-only org.apache.jsp.listern_jsp$ListenerDemo
通过对于内存马的处置方式是重启服务,其他还有kill 恶意类、清除恶意代码; arthas 提供了redefine 、retransform 机制,可以通过arthas对 jvm 中的类进行替换。
2 copagent
直接执行copagent,等待一会会把结果输出并存储到/root/.copagent/result.txt
输出内容会列出类,并按照高危、低危、正常进行显示,信息中还保存反编译的java文件,可以查看对应类的java源码进行进一步人工判断或在线webshell分析等webshell查杀工具
wsmemshell注入cop没检测出来,识别出来的类等级是正常
动态注册servlet、listener、filter类识别出来高危。(java-memshell-scanner项目注册的类也被识别出高危)
allLoadedClasses.txt 按照加载顺序展示出 jvm 加载的所有类,可以根据加载时间,定位某时间后加载的所有类。
3 java-memshell-scanner
参考