我本来打算公开一个端口,用于通过互联网远程调试基于 Java 的 Web 服务,但三思而后行,我意识到它没有任何身份验证。
从理论上讲,似乎可以编写一个工具,附加到远程调试器端口,并通过 Java API 执行任意系统命令。或者修改/转储数据库等等。
至少这个漏洞似乎是这样http://securityaffairs.co/wordpress/36394/hacking/paypal-remote-code-execution.html http://securityaffairs.co/wordpress/36394/hacking/paypal-remote-code-execution.html
我不记得曾被强烈警告过公开远程调试器端口。但如今,当数百个僵尸网络扫描端口寻找漏洞时,应该更好地进行宣传。
请任何人评论它是否安全和/或如何在任意基于 java 的网络服务上以安全的方式做到这一点?我的目标是能够在生产服务器上执行远程调试。
您可以配置远程调试以使用 SSL 和身份验证,这适用于 Windows 和 Linux,但有点麻烦。并且该端口始终开放。
我确信您有充分的理由来调试实时/生产应用程序,并且知道当您真正调试它时,而不仅仅是使用连接来访问 JMX 数据,例如,当您连接调试器时,您的应用程序将停止运行。
Oracle 文件 http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html有些风险较高或较低,具体取决于您如何配置代理:
注意 - 已发现密码存在潜在安全问题
当客户端获取远程连接器的身份验证
来自不安全的 RMI 注册表的远程连接器(默认)。如果
攻击者在目标服务器上启动伪造的 RMI 注册表
启动合法的注册表,攻击者就可以窃取客户端的注册表
密码。此场景包括启动 Java VM 的情况
启用远程管理,使用系统属性
com.sun.management.jmxremote.port=portNum,即使启用了 SSL 时也是如此。
尽管此类攻击可能会被注意到,但它仍然是一种
脆弱性。
注意 - 此配置不安全。任何知道的远程用户
(或猜测)您的 JMX 端口号和主机名将能够
监视和控制您的 Java 应用程序和平台。虽然它可能
适合开发,不推荐用于生产
系统。
注意 - 此配置不安全:任何知道的远程用户
(或猜测)你的端口号和主机名将能够监控
并控制您的 Java 应用程序和平台。此外,可能
危害不仅限于您在 MBean 中定义的操作。 A
远程客户端可以创建 javax.management.loading.MLet MBean 并
使用它从任意 URL 创建新的 MBean,至少如果有的话
没有安全经理。换句话说,恶意远程客户端可以使
您的 Java 应用程序执行任意代码。
因此,虽然禁用安全性对于
开发中,强烈建议您不要禁用
生产系统的安全。
即使涉及最高安全性的配置(移动端口、启用 ssl、通过 ssl 客户端证书进行身份验证)仍然存在风险。
如果您仍然需要调试连接,我建议您使用可能已经存在的服务器 ssh 连接,并使用此连接创建到调试器端口的 ssh 隧道。您可以在这里阅读更多相关内容:无法通过 SSH 隧道远程调试 JVM https://stackoverflow.com/questions/7645455/cannot-remotely-debug-jvm-via-ssh-tunnel(因为它已经开启所以我不复制细节)
在不加密和身份验证的情况下打开端口将使任何人都可以连接到您的 jvm。这将允许读取和写入 JMX 值、停止代码的执行、修改值、创建堆转储、覆盖代码和所有其他不好的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)