网络观察者如何识别运行旧版本 Java 的计算机?

信息安全 爪哇 漏洞扫描器
2021-08-11 22:22:57

我今天早些时候收到了一封来自我的 ISP(一所大学)的电子邮件。电子邮件内容(部分):

您的网络连接已被禁用,因为您的 Java 版本未针对最新的安全漏洞进行修补。这会使您的计算机容易受到攻击。如果不修补这些漏洞,您的计算机可能会受到黑客的控制。

我的机器上根本没有安装 Java,所以这似乎是一个明显的误报。我联系了他们并收到回复说:

我们的系统会自动检测这些漏洞,并且误报很少见。

因此,他们似乎正在对网络上的主机进行自动扫描,以尝试识别 Java 的旧版本(可能还有其他软件)。我会被认出来似乎很奇怪,因为:

  • 我阻止除 ICMP 和端口 22 (SSH) 之外的所有传入流量;事件发生后执行的测试确认防火墙在 LAN 和 WAN 上均按预期运行

  • 我所有的互联网流量都通过加密的 OpenVPN 隧道路由到远程服务器。事件发生后,我确认所有流量(包括 DNS)都通过此隧道(按预期)路由。

为了避免未来的误报,这类自动漏洞扫描通常使用什么样的方法?我的兴趣特别是关于 Java 等不在后台运行或充当服务器的软件。

一些背景:

  • 我的系统正在运行 Debian 稳定版。系统上没有(或曾经)安装 JDK 甚至 JRE。

  • ISP 可以监控所有流量或运行扫描,但不能以任何方式访问我的计算机。我从未从 ISP 安装任何软件或被要求安装。

2个回答

好吧,显然,在您的情况下,ISP 采用的任何启发式方法都是错误的,因为您根本没有 Java。我们可以想象几个场景:

  • ISP 检测基于跟踪 Oracle 站点的下载:他们的系统未能检测到从您的计算机下载的任何更新,因此得出结论,您的 Java“一定是旧的”。(这将是一个非常愚蠢、不可靠的检测系统。)

  • 在您的 VPN 之外,您访问过一个大学网页,该网页包含一些 Java 插件检测机制(例如这个)。一些检测方法只涉及一些查看浏览器属性的 Javascript,并且 Javascript 可能已经对您的浏览器感到非常困惑,而您的浏览器恰好不是 Internet Explorer,并且根本不能在 Windows 中运行。

  • ISP 使用动态 IP 地址,Java 检测系统不知道这一点。别人的计算机有一个旧的 Java,并且正在使用一个 IP 地址,然后分配给你,检测系统认为你是罪魁祸首。

  • 由于恶意或(更常见的)错误配置,另一个使用旧 Java 的用户暂时将您的 IP 地址用作他自己的 IP 地址。与前一个场景相同的结果:关于未打补丁的 Java 的报告发给了错误的人(你)。

要检测用户浏览器中安装了哪个版本的 Java 插件,该浏览器必须发生一些事情:浏览器必须启动,并运行 Java 小程序或一些扫描浏览器属性的 Javascript。除了让您的浏览器连接到他们控制的站点之外,他们唯一剩下的非愚蠢方法是被动扫描 HTTP 请求;当一些 Java 代码与某个服务器建立 HTTP 连接时(许多小程序与其源服务器对话作为其操作的一部分),HTTP 请求将包含一个User-Agent标头行,其中包含最后包含的 Java VM 版本(例如,“Java/ 1.5.0_19")。我可以想象一个“Java 检测系统”,它只是等待这样的字符串作为User-Agent网络流量标头的一部分出现。

对我来说,这听起来像是某种网络钓鱼攻击。您的 ISP 无法确定您可能正在运行的 Java 版本。

显然,如果您在电子邮件中收到此信息,则“您的网络连接已被禁用”的说法是错误的。