在不重新启动 jvm 的情况下阻止 java 个代理
Block java agents without restarting jvm
我需要阻止 java 代理修改或读取 JVM。这样做的原因是我有一个安全的启动器系统,可以远程下载应用程序的敏感部分。不幸的是,有人使用某种 class 转储程序来下载安全的 classes。我做了一些搜索,发现 -XX:+DisableAttachMechanism
应该禁用它们连接。问题是我无法重新启动 jvm,或修改起始参数。如果有帮助的话,我确实可以访问 JNI(不过仍然需要 windows、mac 和 linux 兼容性)。
在运行时禁用 HotSpot 动态附加机制很容易 - 您只需删除附加套接字 /tmp/.java_pidPID
(其中 PID
是目标进程 ID)。如果没有这个文件,先通过运行 jcmd PID VM.version
.
激活attach机制
虽然这不太可能有助于倾销 类。
如果有人可以访问运行 JVM 的系统,他可能可以在 JVM 不知道的情况下访问进程的内存。例如,Serviceability Agent 能够读取 JVM 内存,而无需 JVM 的任何合作。有关详细信息,请参阅 this and 个问题。
使可服务性代理的使用变得困难,但它仍然不是万无一失的,只要用户有权访问 OS 级别的进程。
如果您真的想保护您的 JVM 进程,您必须使用 OS 安全功能来做到这一点,包括用户帐户、ACL、功能、cgroup 等。
我需要阻止 java 代理修改或读取 JVM。这样做的原因是我有一个安全的启动器系统,可以远程下载应用程序的敏感部分。不幸的是,有人使用某种 class 转储程序来下载安全的 classes。我做了一些搜索,发现 -XX:+DisableAttachMechanism
应该禁用它们连接。问题是我无法重新启动 jvm,或修改起始参数。如果有帮助的话,我确实可以访问 JNI(不过仍然需要 windows、mac 和 linux 兼容性)。
在运行时禁用 HotSpot 动态附加机制很容易 - 您只需删除附加套接字 /tmp/.java_pidPID
(其中 PID
是目标进程 ID)。如果没有这个文件,先通过运行 jcmd PID VM.version
.
虽然这不太可能有助于倾销 类。
如果有人可以访问运行 JVM 的系统,他可能可以在 JVM 不知道的情况下访问进程的内存。例如,Serviceability Agent 能够读取 JVM 内存,而无需 JVM 的任何合作。有关详细信息,请参阅 this and
如果您真的想保护您的 JVM 进程,您必须使用 OS 安全功能来做到这一点,包括用户帐户、ACL、功能、cgroup 等。