Network & Infrastructure · · 10 min read

物理硬件 vs 虚拟机:指纹识别能检测到什么

虚拟机在每个层面都留下可检测的痕迹:虚拟化管理程序 CPU 标志、虚拟硬件 ID、合成 GPU 渲染器、虚拟网卡 MAC 前缀、BIOS 字符串和计时侧信道。反检测浏览器无法隐藏虚拟化管理程序级别的标记。唯一不产生 VM 检测信号的硬件是真正的物理硬件。

作者:, Founder

虚拟化检测问题

每个主要平台——从亚马逊和 Stripe 到银行和广告网络——都对传入连接运行设备指纹识别。该指纹识别的一部分专门检查设备是物理机还是虚拟机。这种检查的存在是因为 VM 是账户欺诈、机器人操作和身份复制的主要工具。一台物理服务器可以生成数百个 VM,每个都假装是独立的用户。

检测方法是分层的,在系统堆栈的不同深度运行。有些很容易检测,有些需要复杂的分析。但综合来看,它们创建了一个能可靠区分虚拟和物理硬件的指纹——没有纯软件解决方案可以完全抑制所有信号。


虚拟化管理程序位:CPU 级别的标志

现代 x86 处理器有一个特定的 CPU 标志,称为虚拟化管理程序位(CPUID leaf 1, ECX bit 31)。当虚拟机运行时,虚拟化管理程序设置此位以指示操作系统正在虚拟化环境内执行。这不是可选的——它是硬件虚拟化规范(Intel VT-x, AMD-V)的一部分。

在 VM 内运行的任何软件都无法取消设置此位,因为 VM 不控制物理 CPU——虚拟化管理程序控制。一些高级配置尝试使用嵌套虚拟化技巧隐藏此位,但这些方法对简单的检测脚本有时有效,对检查额外一致性信号的复杂指纹识别则会失败。


虚拟硬件 ID:设备指纹

计算机中的每个硬件都有标识字符串——制造商名称、型号、序列号和设备 ID。在物理机中,这些由实际硬件制造商设置。在虚拟机中,这些字符串会暴露虚拟化平台。

VMware 签名:

VirtualBox 签名:

Hyper-V 签名:

KVM/QEMU 签名:

这些硬件 ID 通过各种浏览器 API 暴露给操作系统,成为设备指纹的一部分。报告"VMware Virtual Platform"作为系统板的机器明确是虚拟机。


虚拟 GPU 检测:WebGL 和 Canvas

GPU 是最可靠的指纹识别组件之一,因为浏览器通过 WebGL 暴露 GPU 信息。当指纹脚本调用 WebGL getParameter() 获取 UNMASKED_RENDERER_WEBGL 时,浏览器返回 GPU 渲染器字符串。

物理机返回真实的 GPU 标识符:"NVIDIA GeForce RTX 4070"、"AMD Radeon RX 7800 XT"。虚拟机返回虚拟 GPU 标识符:

Canvas 指纹识别加剧了这个问题。虚拟 GPU 产生的渲染输出与物理 GPU 不同,而且这些输出在使用相同虚拟化管理程序的所有 VM 中是一致的——这意味着你所有"独立"的 VM 身份产生相同的 canvas 哈希。


虚拟网卡 MAC 地址前缀

网络接口卡有 MAC 地址——48 位标识符,其中前 24 位(OUI)分配给制造商。每个虚拟化平台都有注册的 OUI:

虽然标准浏览器 API 不直接向网站暴露 MAC 地址,但它们可以通过 WebRTC 本地 IP 发现、浏览器扩展或原生应用程序指纹识别泄露。

反检测浏览器通常允许你在软件级别伪造 MAC 地址。然而,这造成了不一致:报告的 MAC 前缀可能显示"Intel Corporation",但实际的网络行为和驱动程序堆栈仍显示虚拟网络适配器特征。


BIOS 和固件字符串

系统 BIOS、UEFI 固件和 SMBIOS 表包含暴露给操作系统的标识字符串。在物理硬件上,这些包含真实的制造商数据。在虚拟机上,它们包含虚拟化管理程序标识符。

揭示虚拟化的关键 SMBIOS 字段:

浏览器指纹识别不能直接读取 SMBIOS 数据,但原生应用程序和浏览器扩展可以。信息也通过物理和虚拟 BIOS 实现之间不同的系统行为模式间接泄露。


计时侧信道:最难伪造

即使每个硬件标识符都被完美伪造,计时分析仍然可以检测虚拟化。虚拟机在特定操作中引入可测量的延迟,因为虚拟化管理程序必须拦截和模拟某些指令。

CPUID 指令计时。 在物理硬件上,CPUID 以可预测的 CPU 周期执行。在 VM 上,虚拟化管理程序拦截 CPUID,增加可测量的开销。

内存访问模式。 VM 使用影子页表或扩展页表进行内存虚拟化,在内存密集型操作中造成可检测的计时差异。

I/O 操作计时。 VM 上的磁盘和网络 I/O 通过虚拟化管理程序的虚拟设备层传递,计时特征与物理硬件明显不同。

时钟漂移和精度。 VM 时钟由虚拟化管理程序维护,表现出与硬件时钟不同的漂移特征。

这些基于计时的检测方法特别难以击败,因为它们利用了虚拟化本身的基本属性。只要虚拟化管理程序位于客户操作系统和物理硬件之间,就会有计时伪影。


为什么反检测浏览器无法解决这个问题

反检测浏览器在浏览器级别运行。它们可以修改 JavaScript API 返回值、伪造 canvas 渲染、更改 WebGL 字符串。但它们无法修改浏览器以下发生的事情:

反检测浏览器处理浏览器指纹识别层。VM 检测在硬件和操作系统层运行。这些是堆栈中根本不同的深度。


物理硬件的优势

物理硬件产生零 VM 检测信号,因为没有虚拟化层可供检测。一台具有真实 CPU、真实 GPU、真实网卡和真实 BIOS 的真实计算机就是它声称的样子。没有虚拟化管理程序位、没有虚拟硬件 ID、没有合成 GPU 渲染器、没有虚拟化供应商的 MAC 前缀、没有虚拟化管理程序开销的计时异常。

这不是通过巧妙工程获得的优势,而是真实计算机的默认状态。指纹是真实的,因为硬件是真实的。

在物理运营环境中,每个工作站都是独立的物理机。设备指纹自然是唯一的——不同的 CPU、不同的 GPU、不同的网卡、不同的 BIOS 版本。没有两台物理机产生相同的指纹,也没有机器产生 VM 检测伪影。

关于云桌面和 VPS 服务如何未能通过 VM 检测,请参阅云桌面和 VPS:亚马逊如何检测虚拟化。有关设备指纹技术的更广泛概述,请阅读什么是浏览器指纹和设备识别

--> Skip to main content