如何检查javaagent是否被注入JVM或禁用javage的附加? 由于安全原因,我试图阻止我的应用程序在运行时被修改。
我知道如何防止在启动时加载javaagent,但我无法找到阻止VirtualMachine API动态附加的方法。
有人有想法吗?
答案 0 :(得分:2)
在HotSpot上,您可以设置-XX:+DisableAttachMechanism
,在J9上,您可以通过-Dcom.ibm.tools.attach.enable=no
禁用附件,但无法为任何VM禁用附件。您可以做的是自己使用premain(String, Instrumentation
方法检测任何类,以便不传递检测接口的实际实例或null
。但是我不会推荐它,这会破坏附加API的一般合同。
然而,这些都不会增加安全性。附件要求具有访问JVM进程权限的另一个进程在同一台计算机上运行。如果是这种情况并且此其他进程是攻击者,则检测API是您应该担心的最后一个问题。此外,如果您维护一个库,那么您的图书馆用户已经可以完全访问您的代码,并且可以在运行代码之前对其进行修改。
因此,即使可以禁用附件,也不会有这样做,以增加安全性。