将java远程调试器端口暴露给Internet是否安全?

时间:2015-10-17 09:07:35

标签: java security remote-debugging exploit

我打算通过互联网公开一个用于远程调试基于Java的Web服务的端口,但是想了两次我意识到它没有任何身份验证。

理论上,似乎可以编写一个附加到远程调试器端口的工具,并通过Java API执行任意系统命令。或者修改/转储数据库,依此类推。 至少这种利用似乎是http://securityaffairs.co/wordpress/36394/hacking/paypal-remote-code-execution.html

的情况

我不记得曾经强烈警告过暴露远程调试器端口。但是现在,当数百个僵尸网络扫描端口寻找漏洞时,应该更好地做广告。

可以请任何人评论它是否安全和/或如何以安全的方式在任意基于Java的Web服务上执行此操作?我的目标是能够在生产服务器上执行远程调试。

1 个答案:

答案 0 :(得分:7)

您可以配置远程调试以使用SSL和身份验证,这适用于Windows和Linux,但有点麻烦。港口一直开着。

我确信您有充分的理由调试您的实时/高效应用程序并知道当您真正调试它时,不仅使用连接来获取对JMX数据的访问权限,例如,当您连接调试器时,您的应用程序将停止运行。

Oracle documents一些风险,一些风险更高或更低,具体取决于您配置代理的方式:

  

注意 - 已使用密码识别出潜在的安全问题   客户端获取时对远程连接器的身份验证   来自不安全的RMI注册表的远程连接器(默认)。如果   攻击者在之前在目标服务器上启动伪造的RMI注册表   合法的注册表启动,然后攻击者就可以窃取客户端'   密码。此方案包括启动Java VM的情况   启用远程管理,使用系统属性   com.sun.management.jmxremote.port = portNum,即使启用了SSL也是如此。   尽管可能会注意到这种攻击,但它仍然是一种攻击   漏洞。

     

注意 - 此配置不安全。任何知道的远程用户   (或猜测)您的JMX端口号和主机名将能够   监视和控制Java应用程序和平台。虽然它可能   对于开发是可以接受的,不建议用于生产   系统

     

注意 - 此配置不安全:任何知道的远程用户   (或猜测)您的端口号和主机名将能够监控   并控制您的Java应用程序和平台。此外,可能   损害不仅限于您在MBean中定义的操作。一个   远程客户端可以创建一个javax.management.loading.MLet MBean和   使用它从任意URL创建新的MBean,至少如果有的话   没有安全经理。换句话说,一个流氓远程客户端可以制作   您的Java应用程序执行任意代码。

     

因此,虽然禁用安全性可能是可以接受的   开发时,强烈建议您不要禁用   生产系统的安全性。

即使涉及最高安全性的配置(移植端口,启用ssl,通过ssl客户端证书进行身份验证)仍然存在风险。 如果您仍然需要调试连接,我建议您使用可能已存在的服务器ssh连接,并使用此连接创建到调试器端口的ssh隧道。你可以在这里阅读更多相关信息:Cannot remotely debug JVM via SSH tunnel(因为它已经开始了我不会复制细节)

打开没有加密和身份验证的端口将允许任何人连接到您的jvm。这将允许读取和写入JMX值,停止代码的执行,修改值,创建堆转换,覆盖代码和所有其他不良内容。