ウェブトラフィックにおけるエミュレータと仮想マシンの検知
エミュレータと仮想マシンは大規模な不正を支えます。デバイスファーム、モバイルアプリのエミュレーション、クラウドブラウザ。それらの検知とは、仮想化環境が完全には再現できないハードウェア、タイミング、整合性のシグナルを読み解くことです。
大規模に行われる不正の多くは、仮想化されたインフラ上で動いています。というのも、代替手段——物理的なスマートフォンやノートパソコンでいっぱいの部屋——はスケールせず、また隠れることもできないからです。エミュレータや仮想マシンを使えば、1人の運用者がオンデマンドで数千の一見別個のデバイスを立ち上げることができ、それぞれが真新しい消費者向けエンドポイントのように見えます。その仮想化を検知することは、デバイスインテリジェンスの層が行う最もレバレッジの高い作業の1つです。なぜなら、個々の不正な行為を1件ずつ追いかけるのではなく、大規模な悪用のインフラそのものを特定するからです。
本稿では、エミュレータとVMがウェブおよびアプリのトラフィックの中でどのように正体を現すかを扱います。仮想化環境が再現に苦しむハードウェア、タイミング、整合性のシグナル、なぜ単一のシグナルでは不十分なのか、そして正当な仮想化を壊さずに検知結果にどう対処するかです。対象読者は、ボット検知を構築または評価するエンジニアと不正対策チームです。
なぜエミュレータとVMが不正にとって重要なのか
エミュレータと仮想マシンが重要なのは、それらが大量不正のコスト効率の良い基盤だからです。1台のマシンをクリーンに見えるデバイスの艦隊に変えます。これはまさに、ほとんどの不正の経済性が要求するものです。
不正における繰り返し現れる問題は、規模です。単一の偽アカウントや単一の不正取引が採算に合うことはめったにありません。お金になるのは、それを数千回行うことです。数千回行うには数千のデバイスアイデンティティが必要です。なぜなら、プラットフォームはますますデバイス単位で悪用を紐付けるようになっているからです(デバイスフィンガープリンティングの仕組みを参照)。物理的なハードウェアは、多くのデバイスアイデンティティを得る正直な方法ですが、法外に高価で遅いものです。仮想化は安価な方法です。
具体的には、仮想化は以下を支えています。
デバイスファーム。 エミュレートされたモバイル端末やヘッドレスブラウザインスタンスのラック群が、アカウント作成、プロモーションの獲得、偽レビューの投稿、あるいはクレデンシャルスタッフィングやアカウント作成の悪用を大量に行うよう組織化されます。各エミュレートされたインスタンスは、別個のスマートフォンやノートパソコンとして現れます。
モバイルアプリのエミュレーション。 デスクトップやサーバーのハードウェア上のエミュレータでAndroidやiOSアプリを実行し、本来は実機を必要とするはずだったアプリベースのフロー——モバイルのサインアップ、アプリ限定のプロモーション、アプリ内不正——を自動化します。
クラウドブラウザとブラウザ・アズ・ア・サービス。 クラウドVM上で動作する完全なブラウザが、スクレイピング、広告不正、アカウント悪用のために自動化されます。これらはページを完全にレンダリングしJavaScriptを実行するため、粗雑なボットよりも洗練されています。
共通する筋書きは、1台の物理マシン、多数の仮想アイデンティティです。仮想化を検知できれば、その艦隊を本来の規模へと畳み込むことができます。そして、実際には1台のエミュレートされたホストである「1000人のユーザー」は、1000台の実在のデバイスとはまったく異なるリスク判断となります。これこそが、仮想化検知が力の増幅装置である理由です。大量不正を成り立たせているコスト構造を攻撃するのです。
仮想マシンの正体を暴くもの
仮想マシンは、所有するのではなく合成しなければならない物理的なシグナル——GPU、タイミング挙動、センサー、そしてその上で動作するハイパーバイザーの低レベルのアーティファクト——を通じて自らの正体を暴きます。実在の消費者向けハードウェアは、実在することの副作用としてこれらのシグナルを生み出します。VMはそれらを偽装しなければならず、それらすべてを整合的に偽装するのは困難です。
仮想化されたGPUの署名。 これは最も強力な手がかりの1つです。グラフィックスレンダリングは、実際のGPU、そのドライバー、そしてその浮動小数点挙動に依存します。VMは通常、仮想化されたグラフィックスまたはソフトウェアレンダリングされたグラフィックスを使用します——SwiftShader、llvmpipe、VMware/VirtualBox/QEMUの仮想GPU、あるいは依然として特徴的な文字列を報告するパススルーGPUです。WebGLのレンダラー文字列とベンダー文字列は、しばしば仮想化を直接名指しします(「SwiftShader」「llvmpipe」「VMware SVGA」「Google SwiftShader」)。そしてそれらの文字列が偽装されている場合でも、canvasとWebGLのレンダリング出力そのものが、微妙で偽装しにくい形で物理的なGPUとは異なります。実在のGPUは、複雑なシーンを特徴的なドライバー固有のアーティファクトとともにレンダリングします。ソフトウェアレンダリングは異なる署名を生成します。
きれいすぎるタイミング。 実在のハードウェアはノイジーです。JITコンパイル、ガベージコレクション、サーマルスロットリング、OS割り込み、メモリ階層の影響が、タイミング測定に絶え間ないジッターをもたらします。仮想化環境——とりわけ高品質なインフラ上でクラウドホストされたもの——は、しばしば滑らかすぎる動作をし、タイミングのばらつきが物理的な消費者向けデバイスが示すものよりも低くなります。特定の計算パターンの高解像度タイミング測定は、パフォーマンスプロファイルが不自然なほど均一な環境を露呈させることができます。逆説的に、データセンターVMの「きれいさ」それ自体がシグナルなのです。
ハイパーバイザーのアーティファクト。 仮想化は低レベルの痕跡を残します。ハイパーバイザー下で異なるCPU機能フラグと命令タイミングの癖、特定のTSC(タイムスタンプカウンター)の挙動、そして——観測可能な場合——消費者向けというより典型的なVM構成の周りに集まるhardware-concurrencyやメモリ値です。消費者向けのノートパソコンを名乗りながら、非常にサーバーらしいコア数とメモリプロファイルを報告するデバイスは整合していません。
オーディオおよびその他のハードウェアフィンガープリント。 AudioContextフィンガープリントは、オーディオサブシステムに依存します。仮想化された、または存在しないオーディオハードウェアは、実在のサウンドハードウェアとは異なる浮動小数点出力を生成します。それ単独では小さいものの、組み合わせると有用です。
ネットワークの文脈。 エミュレータとVMの艦隊は、しばしばデータセンターで動作します。そのためネットワーク層——データセンターのASN、ホスティングプロバイダーのIP——が、エンドポイントのシグナルを裏付けます。VMの署名とデータセンターのIPは、いずれか一方だけよりもはるかに強力なパターンです。(洗練された運用者は、ネットワーク側を隠すためにVMの前面にレジデンシャルプロキシを配置します。だからこそ、エンドポイントレベルのVM検知が独立して重要なのです。それはプロキシを生き延びます。)
モバイルエミュレータはどのように正体を現すか
モバイルエミュレータは、スマートフォンに適用された同じ原理を通じて正体を現します。物理的な端末の特定のハードウェア、センサー、レンダリング特性を合成しなければならず、その合成は不完全です。デスクトップハードウェア上のエミュレータで動作するAndroidまたはiOSアプリは、スマートフォンではなく、十数のシグナルがそう告げています。
ハードウェアアイデンティティの文字列。 エミュレータは特徴的なデバイスモデル、build fingerprint、ハードウェア名の値を持ちます。Androidエミュレータは歴史的に「generic」「goldfish」「ranchu」「sdkgphone」などのビルド識別子を、エミュレータ典型のモデル名とともに報告してきました。これらが実在のデバイスを模倣するようパッチされている場合でも、モデル、ボード、CPU ABI、build fingerprintの組み合わせ_が、出荷された実在のどのデバイスとも一致しないことがしばしばあります。x86 ABIを持つと主張されるフラッグシップ端末(実在のスマートフォンはARMです)は、明らかな手がかりです。
欠落または偽のセンサー。 実在のスマートフォンは加速度センサー、ジャイロスコープ、磁気センサー、環境光センサー、気圧センサーを持ち、そして——決定的なことに——それらのセンサーは、端末が持たれ動かされるにつれて連続的で相関のあるノイジーなデータを生成します。エミュレータは、これらのセンサーを欠くか、静的な値を報告するか、あるいは、人間の手で持たれている端末の自然なばらつきとクロスセンサー相関を持たない合成パターンを再生します。加速度センサーが完璧な定数を示す「スマートフォン」や、ジャイロスコープと加速度センサーが物理法則の要求する形で連動して動かない「スマートフォン」は、エミュレートされたものです。
レンダリングとGPUの差異。 デスクトップと同様、モバイルGPUのレンダリング署名は、物理的な端末のモバイルGPU(Adreno、Mali、Apple GPU)と、エミュレートまたはソフトウェアレンダリングされたものとの間で異なります。特定の主張された端末モデルと一致するべき画面密度、解像度、レンダリングアーティファクトが、しばしば一致しません。
タイミングとパフォーマンスプロファイル。 エミュレータ内のサーバークラスのハードウェア上で動作するスマートフォンアプリは、実際の端末のSoC上の同じアプリとは異なる動作をします——しばしば実機よりも速く滑らかで、これも「きれいすぎる」手がかりのもう1つの実例です。
モバイルのケースは、センサーデータが決定的になる場面です。なぜなら、それをうまく偽装するのは本当に困難だからです。実在のスマートフォンのモーションセンサーの連続的で物理的に整合した出力を再現すること——加速度センサーとジャイロスコープが同じ動きについて一致し、現実的な人間の手のマイクロジッターを伴うこと——は、モデル名の文字列を編集するよりもはるかに大変な作業であり、ほとんどのエミュレーション構成はそれを説得力のある形で行いません。
なぜ単一のシグナルでは不十分なのか
単一のシグナルは仮想化を確実には検知できません。なぜなら、どんな1つのシグナルも、それを知る運用者によって偽装され得るからです。だからこそ、堅牢な検知は個々のチェックではなくクロスシグナルの整合性に依存します。これはアンチディテクトブラウザの検知を支配するのと同じ原理です。個々の手がかりはパッチ可能ですが、それらすべてにわたる整合性はそうではありません。
意志の固い運用者は、次のことを行います。
- 実在のGPUを名指すようWebGLのベンダー/レンダラー文字列を偽装する。
- 実在のスマートフォンに一致するようAndroidのbuild fingerprintとモデルをパッチする。
- モーションデータを偽装するため合成センサー値を注入する。
- ネットワークシグナルをクリーンにするためVMの前面にレジデンシャルプロキシを配置する。
これらのいずれも、その1つのシグナルに依存する検知器を打ち破ります。WebGLのレンダラー文字列だけをチェックするシステムは、文字列の編集で打ち破られます。build fingerprintだけをチェックするシステムは、パッチで打ち破られます。
困難なのは、それらのすべてを一度に整合的に行うことです。Adreno GPUを主張するためWebGL文字列を偽装する運用者も、実在のAdrenoとは一致しないcanvasレンダリング出力を依然として生成します。モデル名を偽装する者も、依然としてx86 ABIを、あるいはそのようなスマートフォンが持たないコア数を、あるいは現実的なクロスセンサー相関のないセンサーデータを、あるいは主張するSoCにしてはきれいすぎるタイミングを報告します。彼らが追加する偽装のそれぞれが、他のすべてと整合し続けなければならないもう1つの表面であり、その制約は掛け合わされていきます。
これが環境整合性の原理です。検知とは「この1つの値は仮想化されて見えるか」ではなく、「これらの値すべてが、単一の、実在する、物理的に可能なデバイスを描写しているか」です。GPUがソフトウェアのようにレンダリングし、センサーが定数を示し、ABIがx86であり、タイミングがデータセンターのように滑らかであると主張されるiPhoneは、1つの点で不整合なのではなく、4つの点で不整合であり、4つすべてを同時に整合させることが高コストな部分です。あらゆるシグナルにわたる完全な整合性を維持するコストこそが、単一シグナルのチェックが破綻する場面で整合性ベースの検知を持ちこたえさせるものです。より広範な軍拡競争とその現状については、ボットトラフィックの現状で扱っています。
仮想化検知にどう対処するか
反射的に仮想化をブロックしてはいけません。文脈の中でそれをリスクシグナルとして重み付けしてください。なぜなら、正当な仮想化は存在し、一律のブロックは誤検知を引き起こすからです。適切な対応は、そのトラフィックについて他に何が真であるかに依存します。
ユーザーがVMやエミュレータの中にいる、現実的で正当な理由は存在します。エミュレータでテストする開発者、セキュリティ研究者、VMでブラウザを実行するプライバシー意識の高いユーザー、企業の仮想デスクトップインフラ、アクセシビリティ構成などです。すべての仮想化を一律にブロックすることは、これらのユーザーに不利益を与えます。仮想化はリスクシグナルであって、判定ではありません。
生産的なアプローチは、それを段階的な判断への1つの入力として扱います。
- 仮想化のみ、その他の文脈は正常: 低〜中リスク。エミュレータを使う1人の開発者は不正ではありません。記録はしても、ブロックはしません。
- 仮想化+データセンターネットワーク+新規アカウント+高い速度: 高リスク。これはデバイスファームの署名です。ホスティングインフラ上のエミュレートされたエンドポイントが、急速にアカウントを作成しています。これらのシグナルは互いを裏付け、確信のある判定へとまとまります。
- 仮想化+整合性違反(レンダリングと一致しない偽装文字列、あり得ないハードウェアの組み合わせ): 高リスク。仮想化に加えてそれを隠そうとする能動的な試みは、それ自体が最も強力なシグナルです。正当なVMユーザーは、フラッグシップ端末になりすますためにbuild fingerprintをパッチしたりしません。
- 艦隊の相関: 多くの「別個の」デバイスが、特徴的な仮想化の署名を共有し、協調した形で振る舞うとき、艦隊検知はそれらを本来の起源へと畳み込みます。これは、個々のアカウントの見かけがどうであれ決定的です。
このパターンは、ヘッドレスブラウザの検知やボット検知全般と整合しています。個々のシグナルがスコアに情報を与え、シグナルの組み合わせが判定を生み、そして応答は段階的です——許可、チャレンジ、ブロック——仮想化それ自体への無差別なブロックではありません。エミュレータとVMの検知は、単独のゲートとしてではなく、ネットワークと行動の文脈と組み合わさることで、大量不正の背後にあるインフラを露呈させる、重く重み付けされたシグナルとしてこそ最も価値があります。
Tracioは、130+のシグナルにわたるデバイスインテリジェンスの一部として仮想化を検知します——GPUとレンダリングの署名、タイミングとハードウェア整合性のチェック、モバイルセンサーとビルドアイデンティティの分析——これらをIPインテリジェンスのネットワークの文脈と、単一シグナルの検知器が見逃す偽装の試みを捕捉するクロスシグナルの整合性チェックと組み合わせます。それはボット検知の層を通って実行され、基盤となるシグナルを添えた判定を、50ms未満で返します。
仮想化検知が、あなた自身のファネルの中のデバイスファームやエミュレータのトラフィックに対してどう機能するかを見てみたいですか?
無料トライアルを始める — 2,500件の検証が無料、クレジットカード不要。デモを予約することで、あなた特有の脅威モデルに対するエミュレータとVMの検知を一通りご案内します。