耐解析機能の分類

Gabriel N. BarbosaとRodrigo R. Brancoは,マルウェアの耐解析機能をAnti-Debugging, Anti-Disassembly, Obfuscation, Anti-VMの四種類に分類した.彼らはIntelのセキュリティ研究者であり,マルウェアに備わった耐解析機能の統計を過去二回に渡って発信してきた.
気になるのは,サンドボックスの実装にあたって問題となるAnti-VMだ.8,103,167もの検体を用いた調査によると,その内訳は以下のようになっている.

f:id:isoiso175:20150627135802j:image
これらはいずれもVMware社製品を検出するための手法である.残念ながら他の仮想マシンモニタについての情報は掲載されていない.

仮想マシンモニタの分類

以前にも少しばかり述べた,サンドボックスの透明性(transparency)に関する話を蒸し返そう.
サンドボックスにOut-of-the-boxなVMIを採用すれば,少なくともAnti-Debuggingについては無視できる.
では,サンドボックスXenを用いれば,QEMUより検出されにくくなるだろうか.あるいは,その逆はどうだろうか.
多くの研究者が好き勝手なことを言っているが,仮想マシンモニタの実現手法をもってサンドボックスの透明性を語るのは些か性急だろう.なぜなら,サンドボックスの透明性はその設計ではなくマルウェアの実装によって左右されるからだ.Out-of-the-box VMIは設計の話だが,Anti-VMは実装の話だ(と思う).
ところで私は,仮想マシンモニタの実現手法を「プロセッサ拡張によるもの」と「バイナリ変換によるもの」に分類していたが,別の分類方法を見つけた.
f:id:isoiso175:20150627135856p:image

命令セットアーキテクチャを基準に分類することで,より分かりやすくなっている.今後はこの図に準拠したい.
話を戻そう.
何が言いたいのかというと,in-the-wildなマルウェアに備わったAnti-VMの内訳が分からないことには,サンドボックスの透明性について云々することはできないということだ.

検体

誰もやっていないようなので,調べてみることにした.
やや恣意的(誤用?)な選択だが,今回はVirusShare.comからCitadelのバリアント479検体や,MandiantのAPT1レポートにて報告された中国軍総参謀部第三部第二局こと61398部隊と思しきグループ製の874検体を含む総計33,260検体を用いた.

Anti-VMの実態

YARAを用いてAnti-VMの実態を調べた.
ルールには公式のantidebug.yarを用いた.なお,このルールにはAnti-VMのみならずAnti-Debuggerについても記載されている.

コードは以下の通り
1
# awk '{ print $1}' yara.log | sort | uniq -c | sort -r
  20340 DebuggerPattern__RDTSC
  18966 DebuggerPattern__CPUID
   9292 DebuggerTiming__Ticks
   7371 DebuggerPattern__SEH_Inits
   6955 DebuggerException__UnhandledFilter
   5715 DebuggerTiming__PerformanceCounter
   4377 DebuggerPattern__SEH_Saves
   2949 DebuggerCheck__API
   2631 DebuggerCheck__QueryInfo
   2182 SEH__vba
   1315 DebuggerOutput__String
    887 ThreadControl__Context
    604 vmdetect
    303 DebuggerException__SetConsoleCtrl
    186 SEH__vectored
     83 DebuggerHiding__Thread
     80 DebuggerHiding__Active
     52 DebuggerException__ConsoleCtrl
     10 Check_Dlls
      5 DebuggerCheck__RemoteAPI
      2 DebuggerCheck__GlobalFlags
      1 ▒▒DebuggerPattern__RDTSC
      1 Debuggeattern__SEH_Inits
      1 Check_VBox_VideoDrivers
      1 Check_VBox_Description

マルウェアの開発者がよりgenericな手法を好むことは,RDTSC命令を用いる検体が61.15%, CPUID命令を用いる検体が57.02%含まれていることからも明らかだ.たった2バイトを基準に検出しているため,false positiveだらけなのだろうとはいえ.
一方でvmdetectとして計上された検体は全体の1.18%に過ぎない.これはVMware, Virtual PC, Xen, Virtual Boxに関する文字列が含まれる検体を抽出するルールであり,コードは以下のようになっている.