什么是常见的Java漏洞?

什么是常见的Java漏洞?,java,security,Java,Security,可以利用哪些常见的Java漏洞获得对系统的某种访问?我最近一直在思考这个问题,但我没能想出很多东西——整数溢出——也许?比赛条件-它给了你什么 我不是在寻找“web应用程序中的sql注入”之类的东西。我正在寻找一种类似于缓冲区溢出的关系-c/c++ 有安全专家能帮忙吗?谢谢。我不是安全专家,但我们公司有些模块无法用java编写,因为反编译java字节码非常容易。我们研究过模糊处理,但如果您想要真正的模糊处理,它只会带来很多问题(调试信息的性能命中/丢失)。 有人可能窃取我们的逻辑,用一个会返回错

可以利用哪些常见的Java漏洞获得对系统的某种访问?我最近一直在思考这个问题,但我没能想出很多东西——整数溢出——也许?比赛条件-它给了你什么

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


有安全专家能帮忙吗?谢谢。

我不是安全专家,但我们公司有些模块无法用java编写,因为反编译java字节码非常容易。我们研究过模糊处理,但如果您想要真正的模糊处理,它只会带来很多问题(调试信息的性能命中/丢失)。
有人可能窃取我们的逻辑,用一个会返回错误结果的修改版本替换模块等等

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


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

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

恶意代码注入

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

这是一个漏洞,自Java的第一个版本以来,就一直在使用各种机制来对付它

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

如果您想知道为什么所有这些都很重要,可以想象一个JDBC驱动程序被注入到类路径中,能够将所有SQL语句及其结果传输给远程第三方。好吧,我想你现在明白了。

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

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

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

作为一种语言,Java非常安全。即使是我讨论过的理论上可以攻击的这些问题,平台中也有钩子来阻止它们。签名代码阻碍了大多数这类操作。但是,很少有Java程序运行时安装了安全管理器。主要是因为性能和可用性,但主要是因为这些Vuln最多的范围非常有限。Java中的远程代码加载还没有达到90年代末/2000年代C/C++缓冲区溢出的流行水平


Java作为一个平台不是防弹的,但它比树上的其他果实更难利用。黑客们是机会主义者,他们追求的是一个低挂果实。

出于好奇,你为什么将缓冲区溢出归类为c/c++漏洞?即使在Java中,如果VM具有相同的漏洞,也有可能存在漏洞。通常,漏洞存在于应用程序中,而不是语言本身。@Vinet:公平地说,在您编写的Java代码中创建缓冲区溢出的风险是不存在的;C#和其他托管语言也是如此。VM本身的缓冲区溢出风险非常低,从而消除了大约99.9%的总体风险。我将BOs指定为c/c++漏洞,因为Java语言本身不可能利用它们-将被利用的是底层VM/core。该核心不是用Java编写的。我正在寻找解释语言中的漏洞,这些漏洞在所有java应用程序中都很常见,类似于在c应用程序中使用strcp函数而没有对定义的缓冲区进行健全性检查时的关系。我想我没有将缓冲区溢出定义为c/c++漏洞,但更多的是与此相关