防止 Java 代理在运行时附加
2022-09-03 16:12:02
按照 security.stackexchange 的建议在此处重新发布此内容
如何防止 Java 代理在运行时附加到正在运行的 Java 应用程序?
我能够通过扫描命令行参数来防止用户在启动时使用javaagent启动我的应用程序:
List<String> args = ManagementFactory.getRuntimeMXBean().getInputArguments();
for(String arg : args)
{
if(arg.contains("-javaagent"))
{
System.out.println("Detected Java Agent: " + arg);
logIncident(0x01);
Runtime.getRuntime().exit(0);
}
}
但是,这并不妨碍人们在运行时附加 visualvm 样式。
我听说您可以使用该标志来禁用此功能,但是当我尝试使用时,我得到了一个异常,告诉我无法在运行时修改此参数。-XX:+DisableAttachMechanism
jinfo -flag +DisableAttachMechanism <PID>
我考虑的另一种可能性是修改系统安全管理器以禁止所有附加权限(我相信这需要允许java代理附加),但我不确定从哪里开始。
真的非常感谢关于如何实现我已经提出的想法的任何指导,以及任何新想法的建议。
编辑:我创建了一个自定义安全管理器来拒绝所有附加权限,但它似乎不是在附加到的jar中触发的,而是在代理本身中触发的。现在我希望在运行时启用,但我似乎无法在OpenJDK源代码中找到对此的任何引用?DisableAttachMechanism