当在不受控制的计算机上运行Java环境时,如何确保安全性?有什么方法可以防止某人创建Java代理或本地JVMTI代理并转储字节码或重写类以绕过许可证和/或其他安全检查?是否有任何方法可以从Java代码中检测是否运行了任何代理?从JNI?从JVMTI代理?
当在不受控制的计算机上运行Java环境时,如何确保安全性?有什么方法可以防止某人创建Java代理或本地JVMTI代理并转储字节码或重写类以绕过许可证和/或其他安全检查?是否有任何方法可以从Java代码中检测是否运行了任何代理?从JNI?从JVMTI代理?
看起来我可以使用一些自定义JNI本地代码的组合来进行检查。
1.) 命令行嗅探以搜索代理。 2.) 确保命令行参数-XX:+ DisableAttachMechanism存在。(这将防止人们附加到我的运行VM)
我记得我曾经制作过一个几乎无声的Java代理程序。我想你最好寻找端口扫描器或类似的东西。
Java 2安全性、jar文件签名等,可以在一定程度上控制应用程序中加载的内容。
然而,最终如果恶意人士能够访问机器并写入磁盘,那么很可能他们有足够的能力进行危害,而不需要使用巧妙的Java黑客技术。
换个角度思考,在任何语言中,你可以做些什么来检测木马?
对于你关心的机器进行谨慎的访问控制是非常重要的,但这并不容易。如果你认真对待这些问题,安全专家可能看起来有点过于多疑,但这通常意味着他们真正理解风险。
如果你无法控制平台,就无法控制其上的软件。
即使你可以关闭你列出的所有检查方法,Java 是开源的。他们可以拿走源代码并重新编译它以内置必要的更改。
此外,请记住,尽管这是您的代码,但这是他们的机器。他们有权检查您的代码,以验证在他们的机器上运行代码是否符合他们的期望,并且不执行可能会产生不良后果的“额外”操作。过去不太可信的公司曾经扫描非相关文件,将敏感信息复制回其主服务器等。