4

在您无法控制的机器上运行时,如何保护 Java 环境?什么是阻止某人创建 java 代理或本机 JVMTI 代理并转储字节码或重写类以绕过许可和/或其他安全检查?有什么方法可以检测是否有任何代理从 Java 代码运行?来自 JNI?来自 JVMTI 代理?

4

7 回答 7

2

如果你不控制环境,那么我很抱歉 - 你真的被卡住了。是的,您可以通过某种 cmdline 嗅探来寻找琐碎的 JVMTI 代理,但这是您最不担心的问题。想想 java/lang/Classloader.defineClass() 被直接破坏了。如果您拥有该盒子,这很容易做到 - 只需替换 rt.jar 中的 .class 文件。事实上,在 JVMTI 出现之前,这是分析器和监控工具检测 Java 代码的典型方式。

回到 JVMTI——“延迟附加”功能还允许动态加载 JVMTI 代理。当您第一次扫描时,这可能不会发生。

底线 - 如果有人可以更改磁盘上 JRE 的字节,他们可以做任何他们想做的事情。这合乎道德,不是吗?他们能被抓住吗?有可能,但你永远不会赢得战争。

于 2010-05-06T05:59:00.663 回答
1

看起来我可以在一些自定义 JNI 本机代码中结合检查。

1.) 命令行嗅探以搜索代理。2.) 确保命令行参数 -XX:+DisableAttachMechanism 存在。(这将防止人们附加到我正在运行的 VM)

于 2010-05-06T12:50:44.067 回答
0

基本上这是一场失败的战斗。

看看 Sun JDK 中的 visualvm 是如何工作的,以及它如何附加到正在运行的进程并重新定义它喜欢的任何东西。以可移植的方式检测到这一点非常困难,除非你能做到,否则你还不如放弃这种方法。

问题是,你想避免什么?

于 2010-05-06T06:05:49.843 回答
0

我记得我曾经制作了一个几乎无声的 Java 代理。我想你最好寻找端口扫描仪或其他类似的东西。

于 2010-05-05T14:07:58.073 回答
0

Java 2 安全性、jar 签名等,对加载到应用程序中的内容提供了一定程度的控制。

然而最终,如果一个恶意的人可以访问一台机器以便他们可以写入磁盘,那么他们很可能有足够的能力来造成伤害,而无需求助于聪明的 Java hack。

转过头来,用任何语言你能做些什么来检测特洛伊木马?

如果您认真对待此类问题,则对您关心的机器进行仔细的访问控制并非易事,但必不可少。安全专家可能看起来偏执,但这通常意味着他们真正了解风险。

于 2010-05-05T14:17:52.823 回答
0

如果你不能控制平台,你就不能控制上面的软件。

即使您可以关闭您列出的所有检查途径,Java 也是开源的。他们可以只获取源代码并使用内置的必要更改重新编译它。

另外,请记住,虽然它是您的代码,但它是他们的机器。他们有权检查您的代码,以验证在他们的机器上运行它是否符合他们的预期,并且不会执行他们可能认为不受欢迎的“额外”操作。过去不太值得信赖的公司会扫描不相关的文件,将敏感信息复制回其家庭服务器等。

于 2010-05-05T14:19:58.093 回答
0

我会查看命令行,看看是否有任何“-agent”参数。所有分析器、调试器和其他代码修改器都使用它进行自省。您还可以检查引导类路径上的异常 jar,因为它们也可能构成威胁(但请注意,您还必须提供自定义 JVM,因为 Quicktime 等某些软件会将自身添加到所有运行的 Java 应用程序的引导类路径中...... (当我看到那个时,我简直不敢相信自己的眼睛......))

于 2010-05-05T15:36:18.200 回答