什么是常见的Java漏洞?

wun*_*tee 8 java security

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

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

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

Vin*_*lds 5

恶意代码注入.

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

这是一个漏洞,自Java的第一个版本以来,它使用各种机制进行了打击.

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

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


chu*_*ubs 1

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

它们现在正在更高的水平上发生。SQL 注入、XSS、DOS 等。您可以找到一种方法让 Java 远程加载恶意代码,但这样做意味着您需要利用服务层的其他漏洞将代码远程推送到目录中然后通过类加载器触发Java加载。远程攻击理论上是可能的,但使用 Java 时,利用起来更加复杂。通常,如果您可以利用其他一些漏洞,那么为什么不直接追击并将 java 排除在循环之外。加载java代码的世界可写目录可能会用来对付你。但此时,问题真的是 Java 造成的,还是您的系统管理员或其他可利用服务的供应商造成的?

多年来我在 Java 中看到的唯一可能造成远程代码的漏洞来自虚拟机加载的本机代码。libzip 漏洞、gif 文件解析等。这只是少数问题。也许每2-3年一次。同样,漏洞是 JVM 加载的本机代码,而不是 Java 代码。

作为一种语言,Java 是非常安全的。即使我讨论的这些理论上可以被攻击的问题,平台上也有钩子来防止它们。签署代码可以阻止大部分事情。然而,很少有 Java 程序在安装了安全管理器的情况下运行。主要是因为性能、可用​​性,但主要是因为这些漏洞的范围充其量也非常有限。Java 中的远程代码加载尚未达到 90 年代末/2000 年代 C/C++ 缓冲区溢出那样流行的程度。

Java 作为一个平台并不是防弹的,但它比树上的其他果实更难被利用。黑客是机会主义的,他们会追求容易实现的目标。