如何使管理员相信Java ON SERVER本身并不是不安全的?


13

应用程序

我们有一个小型Java应用程序,它使用一些Camel路由从Web服务器上载上传的文件,对其进行处理并发送一些带有结果的电子邮件。

已取消运行该应用程序的服务器。现在,我们必须在功率不足的硬件上运行它,因为我不能说服管理员在Web服务器(实际上是多用途服务器)上安装JRE。

害怕

我本人是一名Java应用程序工程师,我为生活编写JEE代码,每周处理价值数万欧元的B2B交易。但是我很难找到可靠的资源来驳斥Java本身是不安全的神话。

管理员反对安装JRE的两个主要参数:

  1. Java应用程序耗尽了我所有的RAM
  2. Java充满漏洞

真相?

当涉及到Java应用程序吃掉ram时。好吧...我想说我们必须为Xmx设置适当的值。做完了

现在,有许多资料谈到Java的许多漏洞。这些资源主要针对美国Redmond公司运行特定操作系统的最终用户。AFAIK对于未修补版本的Java Browser Plugin可能是正确的,该Java Browser Plugin配置为自动执行所有小程序,因此很有可能成为驱动器被感染的受害者。就像在通勤上班时在火车上与伊维酮进行无保护的性行为时,可能会传染性病。

但是,我在全球interwebz上找不到任何谈论服务器应用程序或无头运行的JRE的人。那是另一回事。

还是我在这里想念什么?

[edit 2014-08-28]澄清:我只关心服务器上的Java。我不在乎Java插件和/或用Java开发的特定软件的问题。


7
如果所使用的硬件明显功率不足并引起问题,那么SA的担忧肯定是您有购买新硬件的商业案例。
user9517

4
说服他这不是他刚刚在thedailywtf.com上看到的公司代码。
迈克尔·汉普顿

9
Java 在2013年是艰难的一年。甚至有一个网站跟踪零日漏洞的利用,因为它们一直在不断推出。自去年年中以来,还没有任何0天漏洞利用,但是研究人员仅今年就发现了107个Java CVE。与“安全”相距甚远。
克里斯·S

5
我是否可以通过向您的应用程序提供恶意数据来触发JVM错误?你最好相信它。这些CVE中有相当一部分与在服务器上运行Java有关,而不是通常的Windows桌面浏览器插件。
迈克尔·汉普顿

3
@lajuette我提供了一个带有107号的链接,这是有原因的-如果您单击它,您刚才提出的所有问题都将得到回答。在这107个中,有一些与非Oracle实现有关,例如Android的Dalvak,但绝大多数与Oracle实现有关。Java并不是天生不安全的,但是Sun / Oracle的JRE充满了问题。PHP,Perl,Ruby也都具有漏洞-它们都不是完美的。我不能说Java是否比目前更好或更糟,但是在过去的一年中,它肯定是安全行业的鞭策者。
克里斯·S

Answers:


18

Java为您的环境提供的附加安全性表面很复杂,因此请不要忽略它或尝试简化它,这一点很重要。

首先,JRE拥有关于安全漏洞的可怕记录。很难指出一个特定的漏洞,这是最可怕的部分-这些漏洞绝大多数都是带有未指定向量的未指定漏洞。

当我作为安全顾问阅读诸如“允许远程攻击者”之类的条款而没有进一步了解其含义时,我发现这很可能意味着进入某个功能的某些参数可能会调用易受攻击的状况,即使您仅运行您编写的代码。而且,由于未指定它们,因此您不知道自己是否受到影响。

更好的是,由Oracle发布的规范化JRE对关键更新(包括几乎所有安全更新)有规定的季度更新周期。在过去的四年中,他们总共创建了11次非周期补丁。这意味着,在报告任何安全漏洞后的三个月内,您有可能无法修复它。

Java还有其他问题,我不会在这里讨论,但实际上,似乎有合理的顾虑,尤其是对于多功能服务器。如果必须运行此类任务,则至少应为其创建一个单用途VM,并将其与其他事物隔离开。

尤其是,如果JRE中有一个允许攻击者获得RCE的远程服务器,而PHP中的另一个具有相同功能,而Ruby中的另一个具有相同功能,那么您必须修补这三个漏洞。随着这些事情的发展,这三者似乎都有可能出现,攻击者可以选择最方便的那个,然后拥有整个服务器。这就是为什么我们应该使用VM来分离软件,尤其是诸如托管语言框架之类的漏洞软件,尤其是那些每年仅捆绑四次安全补丁并且专有权归于供应商的供应商,这些供应商在面对所有证据时断言它们是安全。

作为更新,以下是我从ChrisS的链接CVE搜索中精选的一些CVE,以进行演示。

我最喜欢的,因为我在那里:

顺便说一句,那只是一个小样本。


6

Java应用程序耗尽了我所有的RAM

使用RAM的替代方法是浪费RAM。您无法保存以供以后使用。

Java充满漏洞

这并不重要,因为您不会将JVM公开。我想您将不会运行任何恶意程序,如果您愿意,Java比大多数其他语言更安全。重要的是您的应用程序是否有漏洞。


3
好的,所以原因不起作用。说服工具箱中还有哪些其他工具?你有生锈的钳子吗?
David Schwartz 2014年

1
@FalconMomot是的,内核可以使用它来缓存文件。如果内核可以更好地利用它,则可以从JVM中夺走内存。这就是每个现代OS都能工作的程度。使用RAM的替代方法是浪费RAM。操作系统具有专门用于确保RAM达到最佳目的的内存管理器。诸如“ Java应用程序吞噬了我所有的RAM”之类的说法几乎总是表明不了解现代操作系统如何使用RAM的管理员。
David Schwartz 2014年

1
如果JVM不释放内存,则必须将其换出到交换空间(如果有的话)来执行此操作,这很慢。内核无法调用垃圾收集器。另外,即使很少使用文件缓存,文件缓存通常也比用户空间分配的优先级低(正如内核可以告诉他们很少使用文件缓存那样,这不是很好)。
Falcon Momot 2014年

3
我想更多地了解Linux如何在进程仍然认为自己拥有RAM的同时将RAM块用于高速缓存。我以前从未听说过。
迈克尔·汉普顿

1
@FalconMomot内核不需要知道RAM是“空闲”的。除非应用程序锁定页面,否则内核始终可以控制RAM的使用。它只需要使映射的页面可丢弃即可获得RAM。如果数据在一段时间内未修改和未使用,并且I / O带宽未达到饱和,则可以机会性地将其写入以进行交换,从而使页面可丢弃,从而可以在有更好的使用后立即回收RAM。为了它。(这个空间不足以解释现代内存管理的工作原理,但是似乎您有一些非常常见的误解。)
David Schwartz 2014年

2

雇用一家公司对您的程序进行静态分析。例如,Veracode是我过去专门用来审核Java程序的代码安全性的公司。

显然,向您的管理团队收取费用代码。


1

解释所有其他语言(或虚拟机)都可以像部署Java一样,通过部署到它们上的代码来使其不安全。如果他认为其他平台在本质上是安全的(或者比Java更安全)而没有正确解决安全问题,那么他就是妄想。

您的公司显然在雇用Java开发人员方面进行了投资,为什么sysadmin拒绝支持公司决定使用的技术?

我会提出一个问题,问他提出了哪些替代方案,以及它们在特定方面比最新的Server JRE更安全。同时,向您展示您对技术的了解,可能的攻击面以及已将其最小化的工作(例如,不必要的框架,第三方代码等)。验证您的代码,查找最近十年来您依赖的框架所发布的漏洞,并将其与其他语言/框架进行比较(确保也包括市场份额,没有发布漏洞的晦涩框架毫无意义)。

我们可能无法知道你们两个之间的整个转换是如何发生的,但是如果那是他的两个论点,我相信您正在与一个初级系统管理员打交道。他有使用Java应用程序服务器的经验吗?也许他对这项技术感到不舒服,并且害怕在没有完全了解它的情况下将某些东西投入生产(当时的系统管理员态度很好)。


谢谢。我们不是在谈论公司。而是一个非营利性协会。sysadmin在IT和市场营销领域拥有一名医生,但不是真正的sysadmin。是的:我相信他担心Java,但他还没有完全理解。
lajuette
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.