如果在您无法控制的计算机上运行,如何保护Java环境?什么是阻止某人创建java代理或本机JVMTI代理并转储字节码或重写类以绕过许可和/或其他安全检查?有没有办法检测是否有任何代理程序从Java代码运行?来自JNI?来自JVMTI代理?
答案 0 :(得分:2)
如果你不控制环境,那我很抱歉 - 你真的被卡住了。是的,您可以通过某种cmdline嗅探来寻找琐碎的JVMTI代理,但这是您最不担心的问题。考虑直接泄露java / lang / Classloader.defineClass()。如果您拥有该框,那么这很容易 - 只需替换rt.jar中的.class文件即可。实际上,在JVMTI出现之前,这是分析器和监视工具检测Java代码的典型方式。
回到JVMTI - “延迟附加”功能还允许动态加载JVMTI代理。第一次扫描时可能不会发生这种情况。
底线 - 如果有人可以更改磁盘上JRE的字节,他们可以做任何他们想做的事情。这是道德的,不是吗?他们会被抓住吗?可能,但你永远不会赢得这场战争。
答案 1 :(得分:1)
看起来我可以在一些自定义JNI本机代码中使用组合检查。
1。)cmd行嗅探以搜索代理。 2.)确保cmd-line参数-XX:+ DisableAttachMechanism存在。 (这会阻止人们附加到我正在运行的VM上)
答案 2 :(得分:0)
我记得我曾经做过几乎是一个无声的Java代理。我想你最好找一下端口扫描仪或其他东西。
答案 3 :(得分:0)
Java 2安全性,对jar等的签名,可以对加载到应用程序中的内容进行一定程度的控制。
然而,最终如果一个恶意的人可以访问一台机器,以便他们可以写入磁盘,那么他们很有可能在不诉诸聪明的Java黑客的情况下造成伤害。
转向这一轮,用任何语言你可以做些什么来检测特洛伊木马?
如果您对这些问题非常认真,那么对您关心的机器进行严格的访问控制并非易事。安全专家可能看起来很偏执,但这通常意味着他们真正了解风险。
答案 4 :(得分:0)
如果您无法控制平台,则无法通过它控制软件。
即使您可以关闭所列的所有检查途径,Java也是开源的。他们可以只获取源代码并使用内置的必要更改重新编译它。
另外,请记住,虽然这是您的代码,但它是他们的机器。他们有权检查您的代码,以验证在他们的计算机上运行它做了他们期望的操作,并且不执行他们可能认为不合需要的“额外”操作。过去不太值得信赖的公司已经扫描了不相关的文件,将敏感信息复制回家庭服务器等。
答案 5 :(得分:0)
我会查看命令行,看看是否有任何“-agent”参数。所有分析器,调试器和其他代码修改器都使用它进行内省。您还可以检查bootclasspath上的异常jar,因为那些也可能提供威胁(但请注意,您还必须提供自定义JVM,因为某些软件如Quicktime将自己添加到运行的所有Java应用程序的bootclasspath中... (当我看到那个时,我无法相信我的眼睛......))
答案 6 :(得分:0)
基本上这是一场失败的战斗。
了解Sun JDK中的visualvm如何工作以及它如何附加到正在运行的进程并重新定义它所喜欢的内容。以便携方式检测它是非常困难的,除非你能这样做,否则你可能会放弃这种方法。
问题是,你想避免什么?