介绍
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等管理功能的框架。
JMX是管理扩展,通过JMX我们可以监控管理我们的指定的java程序。但不是所有的java类都能被管理。只有按照特定格式编写的java类才能被jmx原理。这种特定格式机制我们称为Mbean。
而有一种特殊的mbean,Mlet是java系统自带的mbean。用户可以通过Mlet加载一个远程服务器上的MBean,并且JDK没有对远程的mbean做合法性检测。这样就存在了被攻击的隐患。
攻击方式
攻击者通过构造恶意的MBean,调用 getMBeansFromURL 从远程服务器获取 MBean,通过MLet标签提供恶意的MBean对象下载。
解决方案
1.server端创建JMX服务的时候,指定以下参数来阻止Mlet调用:
env.put(“jmx.remote.x.access.file”, jmxaccess);
env.put(“jmx.remote.x.mlet.allow.getMBeansFromURL”, “false”);
2.自定义安全管理器,过滤Mlet加载
3.利用jdk的endorsed机制,重写jdk的Mlet类,屏蔽响应危险方法,编译好的类放置到服务器的endorsed目录并通过JVM参数来指定,覆盖jdk实现。