2019年10月29日

アンチ VM ブログ マルウェアの回避テクニック第 2 回

Part of the process of malware analysis and investigation is dynamic analysis – simply put, in this type of analysis, malware (or suspected malware) s

マルウェアの解析や調査のプロセスの一部に動的解析があります。簡単に言うと、この種の解析では、マルウェア(またはその疑いのあるマルウェア)のサンプルを仮想化された環境で実行させます。このタイプの分析では、マルウェア(または疑わしいマルウェア)のサンプルを仮想環境内で実行させ、その動作、流れ、通信などをすべて観察、記録、分析し、他の既知の悪意のある、または疑わしい動作や指標と比較します。

当然のことながら、既存のマルウェアの新しい亜種や、まったく新しい種類のマルウェアがこのような方法で検出された場合、より多くのセキュリティベンダーやソリューションがそのマルウェアを認識してブロックするため、そのマルウェアの野生での有効性が急激に低下するまでに時間はかかりません。

この事実を認識した上で、レーダーから逃れ、マルウェアの寿命をできる限り延ばすために、マルウェアの開発者は、動的解析を妨げるさまざまなメカニズムを組み込むことがあります。

 このブログ では、様々なマルウェアの回避技術を紹介するシリーズの一環として、マルウェア開発者がマルウェアの仮想化実行を検知するために採用している一般的な VM 検知技術に焦点を当て、このトピックの入門編とすることを目的としています。

Radarの下を行く

マルウェアの開発者が解析・研究環境でのマルウェアの実行を妨げるために採用しているアプローチは主に 2 つあり、ほとんどのマルウェアはこれらのアプローチを様々に組み合わせて採用しています。

  • 仮想化の検出と回避 – このアプローチでは、解析システムで採用されている仮想化インフラ(Hyper-V、VMWare、VirtualBox、QEmuなど)のアーティファクトを検出することに重点を置いています。解析システムには、任意の数の仮想マシンをホストする大規模なサンドボックスシステムから、研究者やアナリストが維持する個々の解析マシンや研究マシンなどの小規模なシステムまであります
  • 解析環境/サンドボックスの検出と回避 – このアプローチでは、解析システムで使用されているインフラストラクチャを検出するのではなく、デバッガなどの解析ツールや、SysInternals スイートなどのマルウェア解析で一般的に使用されているツールの存在や、マルウェアが解析環境やサンドボックスで実行されているという事実のヒントとなるような他のアーティファクトに焦点を当てます。このトピックは、次回のブログ記事で取り上げます

マルウェアを解析して検出しようとする試みを阻止するために、マルウェア作者はアンチバーチャルマシン(ant-VM)技術を使用します。この技術を採用することで、マルウェアが仮想マシン内で実行されているかどうかを検出するように設計されており、仮想マシンが検出された場合、マルウェアは別の動作をするか、まったく実行されないようになります。当然のことながら、これはセキュリティアナリストにとって大きな頭痛の種となります。仮想マシン対策の技術は、スパイウェアやボットなど、より増殖力の強いタイプのマルウェアによく見られます。大企業の魅力的な「ハニーポット」は、セキュリティ・インフラストラクチャの一部として仮想マシンを備えていることが多いため、マルウェアは通常、仮想マシンが動作している可能性の低い一般ユーザのマシンを標的とします。

仮想化の検知と回避

CPUID チェック

CPUID は、最近のほとんどの CPU アーキテクチャに搭載されている命令です。CPUID は、ソフトウェアが実行されているマシンのプロセッサに関するさまざまな詳細情報を発見することを目的としています。

  • 例 1:

EAX=0 を入力としてこの命令を呼び出すと、CPU のメーカー ID 文字列が返されます。この文字列は 12 文字の ASCII 文字列で、EBX、EDX、ECX の順に格納されます。

インテルまたは AMD の物理的な CPU で動作するマシンでは、この文字列はそれぞれ「GenuineIntel」または「AuthenticAMD」となります。

Microsoft の Hyper-V または VMware で動作するマシンでは、この文字列は “Microsoft HV “または “VMwareVMware “となります。

  • 例 2:

EAX=1 を入力として CPUID を呼び出すと、 Processor Info and Feature Bits が返され、基本的には CPU に関するさまざまな詳細情報が表示されます。

物理マシンでは、返却された ECX レジスタの 31 ビット目が 0 になりますが、仮想マシンでは 1 になります。

MAC アドレス チェック

MAC アドレスとは、マシン上のネットワーク インターフェース コントローラーに割り当てられた固有の識別子です。MAC アドレスの接頭辞を調べることで、ネットワーク アダプターのメーカーを特定することができます。これは、「ipconfig /all」または「wmic nic list」コマンドを使って簡単に行うことができます。

例えば、多くの PC メーカーにネットワークハードウェアを供給している Broadcom 社のネットワークアダプターは、以下のいずれかの接頭語で始まります。(一部を抜粋)

  • E0:3E:44
  • 00:10:18
  • D4:01:29
  • 00:0D:E6

VMware のネットワークアダプターは、以下のいずれかで起動します :

  • 00:1C:14
  • 00:50:56
  • 00:05:69
  • 00:0C:29

VirtualBox のネットワークアダプタは 08:00:27 から、Hyper-V は 00:03:FF から始まります。

レジストリ チェック

仮想化された Windows 環境には、物理マシンではあまり見られない様々なレジストリ エントリが含まれていることが多く、その存在はマルウェアが VM 上で実行されていることを示すヒントになります。

例 :

  • Generic:

\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0\”Identifier”; ”<value>”
\HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\SystemBiosVersion\”SystemBiosVersion”;”<value>”

  • VMware:

\HKEY_CURRENT_USER\Software\VMware, Inc.\*
\HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\*
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SCSI\*VMware*\*
\HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\*VMware*\*

  • VirtualBox:

\HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\VBOX__
\HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT\VBOX__
\HKEY_LOCAL_MACHINE\HARDWARE\ACPI\RSDT\VBOX__
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VBox*
\HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\*

プロセス チェック

仮想化された Windows 環境では、その運用を容易にするために、物理マシンでは通常見られない特定のプロセスが実行されています。これは、「wmic process」や「tasklist」コマンドで簡単に行うことができます。

例 :

  • VMware:

VGAuthService.exe
vmacthlp.exe
vmtoolsd.exe

  • VirtualBox:

VBoxService.exe
VBoxTray.exe

サービス チェック

仮想化されたWindows環境では、物理的なマシンには存在しない特定のサービスが提供されていることがよくあります。これは、「sc query」や「wmic service list」コマンドで簡単に実現できます。

例 :

  • VMware:

VMTools
vmvss
VGAuthService
VMware Physical Disk Helper Service

  • VirtualBox:

VBoxService

ファイル チェック

仮想化された Windows 環境には、これまで説明してきたものに加えて、特定のファイル(通常はドライバー)が含まれていることが多く、このファイルの存在が仮想化されていることを示しています。

例 :

  • VMware:

C:\Windows\System32\drivers\vmhgfs.sys
C:\Windows\System32\drivers\vmmemctl.sys
C:\Windows\System32\drivers\vmmouse.sys
C:\Windows\System32\drivers\vmrawdsk.sys

  • VirtualBox:

C:\Windows\System32\drivers\VBoxMouse.sys
C:\Windows\System32\drivers\VBoxGuest.sys
C:\Windows\System32\drivers\VBoxSF.sys
C:\Windows\System32\drivers\VBoxVideo.sys

Caught in the Act

上記の技術を使用することで、マルウェアは多くの場合、仮想化環境で実行されているかどうかを検出し、その実行を回避または調整することができます。マルウェアが仮想化環境で正常に実行される可能性を最大限に高めるためには、自社の解析環境でこれらのアーティファクトに対処することをお勧めします。

 次のブログ では、マルウェアの開発者が、サンドボックスや解析環境を回避するために、マルウェアが実行されるマシンを実際に操作しているユーザーがいるかどうかを様々な方法で確認する方法を、時間をかけて追加してきたことをご紹介します。