什么是常见的Java漏洞?

时间:2010-07-21 17:27:01

标签: java security

可以利用哪些常见的Java漏洞来获取对系统的某种访问权限?我最近一直在考虑它,并没有能够提出任何东西 - 整数溢出 - 也许?竞争条件 - 它给你带来了什么?

我不是在寻找像“在Web应用程序中注入SQL”之类的东西。我正在寻找类似于缓冲区溢出的关系--c / c ++。

那里有哪些安全专家可以提供帮助?感谢。

4 个答案:

答案 0 :(得分:5)

恶意代码注入。

因为Java(或在运行时使用解释器的任何语言)在运行时执行链接,所以可以在运行时将预期的JAR(相当于DLL和SO)替换为恶意的JAR。

这是一个漏洞,自Java首次发布以来,它使用各种机制进行了打击。

  • 在类加载器的位置有保护,以确保无法从rt.jar(运行时jar)外部加载java。*类。
  • 此外,可以采用安全策略来确保从不同来源加载的类仅限于执行某组操作 - 最明显的例子是applet。 Java安全策略模型限制小程序读取或写入文件系统等;签名小程序可以请求某些权限。
  • JAR也可以签名,这些签名可以在加载时在运行时验证。
  • 包装也可以密封,以确保它们来自相同的代码源。这可以防止攻击者将类放入您的程序包,但能够执行“恶意”操作。

如果你想知道为什么所有这些都很重要,想象一下注入到类路径中的JDBC驱动程序,它能够将所有SQL语句及其结果传输给远程第三方。好吧,我猜你现在得到的照片。

答案 1 :(得分:1)

我不是安全专家,但我们公司的一些模块我们无法在java中编码,因为它很容易解编译java字节码。我们研究了混淆,但是如果你想要真正的混淆,它只会出现很多问题(性能损失/调试信息丢失)。
人们可以窃取我们的逻辑,用修改后的版本替换模块,返回错误的结果等等......

因此,与C / C ++相比,我认为这是一个突出的“漏洞”。

我们的java模块中还内置了软件许可证机制,但也可以通过反编译和修改代码轻松攻击。

答案 2 :(得分:1)

包含第三方类文件并调用它们基本上意味着您运行的是不安全的代码。如果您没有启用安全性,该代码可以执行任何操作。

答案 3 :(得分:1)

在阅读了大部分回复之后,我认为您的问题已经以间接方式得到了回答。我只是想直接指出这一点。 Java不会遇到您在C / C ++中看到的相同问题,因为它可以保护开发人员免受这些类型的内存攻击(缓冲区溢出,堆溢出等)。那些事情不可能发生。因为语言中存在这种基本保护,安全漏洞已经向上移动。

他们现在正处于更高层次。 SQL注入,XSS,DOS等你可以想办法让Java远程加载恶意代码,但这样做意味着你需要利用服务层的其他漏洞将代码远程推送到目录中然后触发Java加载类加载器。远程攻击在理论上是可行的,但使用Java时,它的使用起来会更复杂。通常,如果你可以利用其他一些漏洞,那么为什么不去追求并将java从循环中删除。可以使用从中加载Java代码的世界可写目录。但是在这一点上,问题还是你的系统管理员或其他一些可以利用的服务的供应商真的是Java吗?

多年来我在Java中看到的唯一带来远程代码潜力的漏洞来自VM加载的本机代码。 libzip漏洞,gif文件解析等等。这只是一些问题。也许每2 - 3年一次。而且,vuln是由JVM加载的本机代码而不是Java代码。

作为一种语言,Java非常安全。即使我讨论过的这些问题在理论上也可以被攻击,但在平台上有一些钩子可以防止这些问题。签名代码阻止了大部分内容。但是,安装了安全管理器的Java程序很少。主要是因为性能,可用性,但主要是因为这些漏洞的范围非常有限。 Java中的远程代码加载没有上升到90年代末/ 2000年代C / C ++缓冲区溢出的流行程度。

Java并非作为平台的防弹,但它比树上的其他水果更难开发。而黑客则是机会主义者,并为那些低调的果实而努力。