Network & Infrastructure · · 10 min read

物理ハードウェア vs 仮想マシン:フィンガープリンティングが検出できること

仮想マシンはあらゆるレベルで検出可能な痕跡を残します:ハイパーバイザー CPU フラグ、仮想ハードウェア ID、合成 GPU レンダラー、仮想 NIC MAC プレフィックス、BIOS 文字列、タイミングサイドチャネル。アンチ検出ブラウザはハイパーバイザーレベルのマーカーを隠すことができません。VM 検出シグナルをゼロにする唯一のハードウェアは、本物のハードウェアです。

著者:, Founder

仮想化検出の問題

すべての主要プラットフォーム(Amazon、Stripe から銀行や広告ネットワークまで)は、着信接続に対してデバイスフィンガープリンティングを実行します。そのフィンガープリンティングの一部は、デバイスが物理マシンか仮想マシンかを具体的にチェックします。このチェックが存在するのは、VM がアカウント詐欺、ボット操作、ID 複製の主要ツールだからです。1台の物理サーバーから数百の VM を生成でき、それぞれが別のユーザーを装うことができます。

検出方法は階層化されており、システムスタックの異なる深さで動作します。一部は簡単に検出できます。他は高度な分析を必要とします。しかし総合的に、仮想ハードウェアと物理ハードウェアを確実に区別するフィンガープリントを作成し、ソフトウェアのみのソリューションではすべてのシグナルを完全に抑制することはできません。


ハイパーバイザービット:CPU レベルのフラグ

現代の x86 プロセッサには、ハイパーバイザービット(CPUID leaf 1、ECX bit 31)と呼ばれる特定の CPU フラグがあります。仮想マシンが実行されているとき、ハイパーバイザーはこのビットを設定して、オペレーティングシステムが仮想化環境内で実行されていることを示します。これはオプションではなく、ハードウェア仮想化仕様(Intel VT-x、AMD-V)の一部です。

VM 内で実行されるソフトウェアはこのビットを解除できません。VM は物理 CPU を制御していないからです。一部の高度な構成では、ネストされた仮想化トリックを使用してハイパーバイザービットを隠そうとしますが、追加の一貫性シグナルをチェックする高度なフィンガープリンティングには失敗します。


仮想ハードウェア ID:デバイスフィンガープリント

コンピュータのすべてのハードウェアには識別文字列があります。物理マシンでは、これらは実際のハードウェアメーカーによって設定されます。仮想マシンでは、これらの文字列が仮想化プラットフォームを暴露します。

VMware シグネチャ:

VirtualBox シグネチャ:

Hyper-V シグネチャ:

KVM/QEMU シグネチャ:

これらのハードウェア ID はさまざまなブラウザ API を通じてオペレーティングシステムに公開され、デバイスフィンガープリントの一部になります。


仮想 GPU 検出:WebGL と Canvas

GPU は、ブラウザが WebGL を通じて GPU 情報を公開するため、最も確実にフィンガープリントされるコンポーネントの1つです。フィンガープリンティングスクリプトが WebGL getParameter() で UNMASKED_RENDERER_WEBGL を呼び出すと、ブラウザは GPU レンダラー文字列を返します。

物理マシンは実際の GPU 識別子を返します:「NVIDIA GeForce RTX 4070」、「AMD Radeon RX 7800 XT」。仮想マシンは仮想 GPU 識別子を返します:

Canvas フィンガープリンティングはこの問題を悪化させます。仮想 GPU は物理 GPU とは異なるレンダリング出力を生成し、同じハイパーバイザーを使用するすべての VM で一貫しています。つまり、すべての「独立した」VM アイデンティティが同じ canvas ハッシュを生成します。


仮想 NIC MAC アドレスプレフィックス

ネットワークインターフェースカードには MAC アドレスがあり、最初の 24 ビット(OUI)はメーカーに割り当てられています。各仮想化プラットフォームには登録済みの OUI があります:

標準ブラウザ API は MAC アドレスを直接ウェブサイトに公開しませんが、WebRTC ローカル IP ディスカバリ、ブラウザ拡張機能、またはネイティブアプリケーションを通じて漏洩する可能性があります。

アンチ検出ブラウザはソフトウェアレベルで MAC アドレスを偽装できますが、これは不整合を生みます。報告された MAC プレフィックスは「Intel Corporation」と表示されても、実際のネットワーク動作は仮想ネットワークアダプタの特性を示します。


BIOS とファームウェア文字列

システム BIOS、UEFI ファームウェア、SMBIOS テーブルには、オペレーティングシステムに公開される識別文字列が含まれています。物理ハードウェアでは実際のメーカーデータが含まれ、仮想マシンではハイパーバイザー識別子が含まれます。

仮想化を明らかにする主要な SMBIOS フィールド:

ブラウザベースのフィンガープリンティングは SMBIOS データを直接読み取れませんが、ネイティブアプリケーションとブラウザ拡張機能は読み取れます。


タイミングサイドチャネル:最も偽装が難しい

すべてのハードウェア識別子が完璧に偽装されても、タイミング分析は依然として仮想化を検出できます。仮想マシンは特定の操作で測定可能なレイテンシを導入します。ハイパーバイザーが特定の命令をインターセプトしてエミュレートする必要があるためです。

CPUID 命令タイミング。 物理ハードウェアでは予測可能な CPU サイクルで実行されます。VM ではハイパーバイザーが CPUID をインターセプトし、測定可能なオーバーヘッドが追加されます。

メモリアクセスパターン。 VM はメモリ仮想化にシャドウページテーブルまたは拡張ページテーブル(EPT/NPT)を使用し、検出可能なタイミング差を生みます。

I/O 操作タイミング。 VM のディスクとネットワーク I/O はハイパーバイザーの仮想デバイス層を通過し、タイミング特性が物理ハードウェアと測定可能に異なります。

クロックドリフトと精度。 VM クロックはハイパーバイザーによって維持され、ハードウェアクロックとは異なるドリフト特性を示します。

これらのタイミングベースの検出方法は、仮想化自体の基本的な特性を利用するため、特に打ち負かすのが困難です。


アンチ検出ブラウザではなぜ解決できないのか

アンチ検出ブラウザはブラウザレベルで動作します。JavaScript API の戻り値を変更し、canvas レンダリングを偽装し、WebGL 文字列を変更できます。しかし、ブラウザの下で起きていることは変更できません:

アンチ検出ブラウザはブラウザフィンガープリンティング層を処理します。VM 検出はハードウェアと OS 層で動作します。これらはスタックの根本的に異なる深さです。


物理ハードウェアの優位性

物理ハードウェアは VM 検出シグナルをゼロに生成します。検出すべき仮想化層がないからです。実際の CPU、実際の GPU、実際の NIC、実際の BIOS を持つ本物のコンピュータは、主張する通りのものです。ハイパーバイザービット、仮想ハードウェア ID、合成 GPU レンダラー、仮想化ベンダーの MAC プレフィックス、ハイパーバイザーオーバーヘッドによるタイミング異常はありません。

これは巧妙なエンジニアリングによって得られた優位性ではありません。本物のコンピュータのデフォルト状態です。ハードウェアが本物であるため、フィンガープリントは本物です。

物理的な運用環境では、各ワークステーションは独立した物理マシンです。デバイスフィンガープリントは自然にユニークです — 異なる CPU、異なる GPU、異なる NIC、異なる BIOS バージョン。2台の物理マシンが同じフィンガープリントを生成することはなく、VM 検出アーティファクトを生成するマシンもありません。

クラウドデスクトップと VPS サービスが VM 検出にどのように失敗するかについては、クラウドデスクトップと VPS:Amazon が仮想化を検出する方法をご覧ください。デバイスフィンガープリンティング技術のより広い概要については、ブラウザフィンガープリントとデバイス識別とはをお読みください。

--> Skip to main content