什么是可以被利用以获取系统访问权限的常见Java漏洞?我最近一直在思考这个问题,但没有找出很多内容。整数溢出 - 可能吗?竞争条件 - 它给你什么?我不是在寻找像“web应用程序中的SQL注入”之类的东西。我正在寻找类似于缓冲区溢出 - C / C ++的关系。有什么安全专家可以帮忙吗?谢谢。
我不是安全专家,但我们公司有一些模块不能用Java编写,因为Java字节码很容易被反编译。我们考虑过混淆,但如果想要真正的混淆,就会带来很多问题(性能损失/丢失调试信息)。
有人可以窃取我们的逻辑,用修改后的版本替换模块,返回不正确的结果等等...
所以与C/C++相比,我想这是一个突出的“漏洞”。
我们还在我们的Java模块中内置了软件许可机制,但这也可以通过反编译和修改代码轻松破解。
阅读了大部分回答后,我认为你的问题已经以间接的方式得到了回答。我只是想直接指出这一点。Java不会遭受与C/C++中看到的相同问题,因为它保护开发人员免受这些类型的内存攻击(缓冲区溢出、堆溢出等)。这些事情不可能发生。由于语言安全性中存在这种基本保护,安全漏洞已经向上移动到了堆栈。
它们现在发生在更高的层面上。SQL注入、XSS、DOS等。你可以想出一种方法让Java远程加载恶意代码,但要做到这一点,就需要利用服务层中的其他漏洞来远程推送代码到目录中,然后通过类加载器触发Java加载。远程攻击在理论上是可能的,但使用Java更加复杂。而且通常如果你能够利用其他漏洞,那么为什么不直接去攻击并削弱Java的作用呢?可写入世界目录,其中加载Java代码,可能被用来对付你。但此时问题真的是Java吗?还是你的系统管理员或其他可利用服务的供应商呢?
多年来,我只看到Java中可能存在远程代码潜在漏洞的情况是VM加载的本地代码。libzip漏洞、gif文件解析等,这些问题都很少见,2-3年出现一次而已。而且这种漏洞存在于JVM加载的本地代码中,而不是Java代码中。