java之防止 Java 代理在运行时附加
阿里
阅读:8
2024-08-05 10:48:10
评论:0
按照 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>
时我收到一个异常,告诉我无法在运行时修改此参数。
我考虑的另一种可能性是修改系统安全管理器以禁止所有 AttachPermission(我认为需要允许 java 代理附加),但我不确定从哪里开始。
非常感谢有关如何实现我已经提出的想法的任何指导,以及对任何新想法的建议。
编辑:
我创建了一个自定义安全管理器来拒绝所有 AttachPermissions,但是它似乎不是在附加到的 jar 中触发,而是在代理本身中触发。现在我希望启用
DisableAttachMechanism
在运行时,但我似乎无法在 OpenJDK 源代码中找到对此的任何引用?
请您参考如下方法:
如果返回 true,则退出:
private static boolean acceptsJavaAgentsAttachingToThisJvm() {
HotSpotDiagnosticMXBean vm = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
VMOption opt = vm.getVMOption("DisableAttachMechanism");
return "false".equals(opt.getValue()) || opt.isWriteable();
}
这应该防止偶然用例。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。