耐解析機能の分類

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

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

仮想マシンモニタの分類

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

命令セットアーキテクチャを基準に分類することで,より分かりやすくなっている.今後はこの図に準拠したい.
話を戻そう.
何が言いたいのかというと,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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に関する文字列が含まれる検体を抽出するルールであり,コードは以下のようになっている.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
rule vmdetect
{
meta:
author = "nex"
description = "Possibly employs anti-virtualization techniques"
strings:
// Binary tricks
$vmware = {56 4D 58 68}
$virtualpc = {0F 3F 07 0B}
$ssexy = {66 0F 70 ?? ?? 66 0F DB ?? ?? ?? ?? ?? 66 0F DB ?? ?? ?? ?? ?? 66 0F EF}
$vmcheckdll = {45 C7 00 01}
$redpill = {0F 01 0D 00 00 00 00 C3}
// Random strings
$vmware1 = "VMXh"
$vmware2 = "Ven_VMware_" nocase
$vmware3 = "Prod_VMware_Virtual_" nocase
$vmware4 = "hgfs.sys" nocase
$vmware5 = "mhgfs.sys" nocase
$vmware6 = "prleth.sys" nocase
$vmware7 = "prlfs.sys" nocase
$vmware8 = "prlmouse.sys" nocase
$vmware9 = "prlvideo.sys" nocase
$vmware10 = "prl_pv32.sys" nocase
$vmware11 = "vpc-s3.sys" nocase
$vmware12 = "vmsrvc.sys" nocase
$vmware13 = "vmx86.sys" nocase
$vmware14 = "vmnet.sys" nocase
$vmware15 = "vmicheartbeat" nocase
$vmware16 = "vmicvss" nocase
$vmware17 = "vmicshutdown" nocase
$vmware18 = "vmicexchange" nocase
$vmware19 = "vmdebug" nocase
$vmware20 = "vmmouse" nocase
$vmware21 = "vmtools" nocase
$vmware22 = "VMMEMCTL" nocase
$vmware23 = "vmx86" nocase
$vmware24 = "vmware" nocase
$virtualpc1 = "vpcbus" nocase
$virtualpc2 = "vpc-s3" nocase
$virtualpc3 = "vpcuhub" nocase
$virtualpc4 = "msvmmouf" nocase
$xen1 = "xenevtchn" nocase
$xen2 = "xennet" nocase
$xen3 = "xennet6" nocase
$xen4 = "xensvc" nocase
$xen5 = "xenvdb" nocase
$xen6 = "XenVMM" nocase
$virtualbox1 = "VBoxHook.dll" nocase
$virtualbox2 = "VBoxService" nocase
$virtualbox3 = "VBoxTray" nocase
$virtualbox4 = "VBoxMouse" nocase
$virtualbox5 = "VBoxGuest" nocase
$virtualbox6 = "VBoxSF" nocase
$virtualbox7 = "VBoxGuestAdditions" nocase
$virtualbox8 = "VBOX HARDDISK" nocase
// MAC addresses
$vmware_mac_1a = "00-05-69"
$vmware_mac_1b = "00:05:69"
$vmware_mac_1c = "000569"
$vmware_mac_2a = "00-50-56"
$vmware_mac_2b = "00:50:56"
$vmware_mac_2c = "005056"
$vmware_mac_3a = "00-0C-29" nocase
$vmware_mac_3b = "00:0C:29" nocase
$vmware_mac_3c = "000C29" nocase
$vmware_mac_4a = "00-1C-14" nocase
$vmware_mac_4b = "00:1C:14" nocase
$vmware_mac_4c = "001C14" nocase
$virtualbox_mac_1a = "08-00-27"
$virtualbox_mac_1b = "08:00:27"
$virtualbox_mac_1c = "080027"
condition:
any of them
}

見ての通りQEMUに関する記述が存在しない.
そこで,vmdetectに以下の様なコードを追加し,再度スキャンしてみた.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
rule vmdetect
{
~ 略 ~
strings:
$QEMU1 = "Bochs" nocase
$QEMU3 = "QEMU_AUDIO_DRV" nocase
$QEMU4 = "QEMU VVFAT" nocase
$QEMU5 = "QEMU ADB Mouse" nocase
$QEMU6 = "QEMU ADS7846-driven Touchscreen" nocase
$QEMU7 = "QEMU HARDDISK" nocase
$QEMU8 = "QEMU CD-ROM" nocase
$QEMU9 = "QEMU MICRODRIVE" nocase
$QEMU10 = "QEMU-MEMORY" nocase
$QEMU11 = "QEMU_BIOS" nocase
$QEMU12 = "QEMU PS/2 Mouse" nocase
$QEMU13 = "QEMU Sun Mouse" nocase
$QEMU14 = "QEMU TSC2102-driven Touchscreen" nocase
$QEMU15 = "QEMU USB Mouse" nocase
$QEMU16 = "QEMU USB Tablet" nocase
$QEMU17 = "QEMU_VERSION" nocase
$QEMU18 = "QEMU USB Keyboard" nocase
$QEMU19 = "QEMU USB Hub" nocase
$QEMU20 = "QEMU USB MSD" nocase
$QEMU21 = "QEMU PenPartner tablet" nocase
$QEMU22 = "QEMUware SVGA" nocase
condition:
any of them
}

結果は608検体.QEMUを検出するのは4検体だけという結果になった.
自分がマルウェアを開発する立場だったらこうした文字列をそのまま埋め込むことはしないし,このルールは表層的なものでしかなく,例えばQEMUの動的バイナリ変換のスケジューリングに着目したAnti-VMを検出することはできない.
とはいえ,おかげで現状を大雑把に把握することはできた.

パッカーの実態

ついでに,PEiDを用いてパッカーの利用状況を調べた.
UserDBにはBob / Team PEiD signaturesを用いた.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# awk '{{for(i=3;i<NF;i++)printf("%s ",$i) }print($NF)}' peid.log | sort | uniq -c | sort -r
21159 Nothing found *
3065 Nothing found [Overlay] *
1412 Microsoft Visual Basic 5.0 / 6.0
916 Microsoft Visual C++ 8.0 DLL Method2
747 Microsoft Visual C++ 6.0
685 Microsoft Visual Basic 5.0 - 6.0
405 Borland Delphi 6.0 - 7.0 [Overlay]
351 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
333 Microsoft Visual C++ 7.0 [Overlay]
320 UPX 2.93 - 3.00 [LZMA] -> Markus Oberhumer, Laszlo Molnar & John Reiser [Overlay] *
239 Borland Delphi 6.0 - 7.0
201 Microsoft Visual C++ 6.0 [Overlay]
185 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo [Overlay]
167 Nullsoft PiMP Stub [Nullsoft PiMP SFX] *
99 Microsoft Visual C++ 6.0 DLL
83 Microsoft Visual C++ 7.0 [Debug] [Overlay]
82 Nothing found [Debug] *
79 UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo [Overlay]
63 Microsoft Visual C++ 7.0
62 Microsoft Visual C# / Basic .NET
61 Microsoft Visual Basic 5.0 / 6.0 [Overlay]
42 Themida 1.8.x.x - 1.9.x.x -> Oreans Technologies
42 ASPack 2.12 -> Alexey Solodovnikov [Overlay]
38 ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov
32 ASPack 2.12 -> Alexey Solodovnikov
31 PE Win32 DLL (0 EntryPoint)
31 Nothing found [RAR SFX] *
31 Microsoft Visual C++ 6.0 DLL [Overlay]
28 Borland C++
26 PECompact 2.x -> Jeremy Collake [Overlay]
24 Morphine 1.2 - 1.3 -> rootkit
23 MinGW GCC 3.x [Overlay] *
22 UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo
22 Microsoft Visual C# / Basic .NET [Overlay]
19 Nothing found [ZIP SFX] *
18 PECompact 2.x -> Jeremy Collake
18 Microsoft Visual C++ 7.0 [Debug]
15 Borland C++ [Overlay]
14 Borland Delphi 4.0 - 5.0
14 ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov *
13 UPX 2.93 - 3.00 [LZMA] -> Markus Oberhumer, Laszlo Molnar & John Reiser *
13 Microsoft Visual C++ 6.0 [Debug]
13 Microsoft Visual C++ 5.0
12 UPX 0.80 - 1.24 DLL -> Markus & Laszlo
12 BobSoft Mini Delphi -> BoB / BobSoft [Overlay] *
11 Themida 1.8.x.x -> Oreans Technologies *
11 Microsoft Visual C++ Private Version 1
11 Borland Delphi 6.0
11 Borland Delphi 2.0 [Overlay]
10 BobSoft Mini Delphi -> BoB / BobSoft *
9 NsPack 2.9 -> North Star *
9 Microsoft Visual C++ 5.0 [Debug]
8 Microsoft Visual C++ 7.1 DLL
8 Microsoft Visual C++ 7.0 Method2
7 Xtreme-Protector v1.05 *
7 Microsoft Visual C++ 8.0 DLL Method2 [Overlay]
6 Xtreme-Protector v1.05 [Overlay] *
6 Microsoft Visual C++ 8.0 [Debug] [Debug]
6 ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov [Overlay]
5 nSPack 3.7 -> North Star/Liu Xing Ping
5 Wise Installer Stub [Overlay] *
5 WinZip 32-bit SFX 8.x module
5 Thinstall 2.4x - 2.5x -> Jitit Software [Overlay] *
5 PureBasic 4.x -> Neil Hodgson *
5 PE Win32 DLL (0 EntryPoint) [Overlay]
5 Microsoft Visual C++ 7.1 DLL [Overlay]
4 tElock 0.98b1 -> tE!
4 Themida 1.8.x.x - 1.9.x.x -> Oreans Technologies [Overlay]
4 PureBasic 4.x -> Neil Hodgson [Overlay] *
4 PC-Guard 5.0 -> Blagoje Ceklic [Overlay]
4 MoleBox v2.0 *
4 Microsoft Visual C++ 8.0 [Debug]
4 Microsoft Visual C++ 5.0 [Overlay]
4 Borland Delphi 4.0 - 5.0 [Overlay]
4 Borland C++ 1999 [Overlay]
4 Borland C++ 1999
4 Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
4 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
4 ASProtect 2.1x SKE -> Alexey Solodovnikov
3 nSPack 3.7 -> North Star/Liu Xing Ping [Overlay]
3 Upack 0.39 beta -> Dwing
3 UPX 0.80 - 1.24 DLL -> Markus & Laszlo [Overlay]
3 Themida 1.2.0.1 (compressed) -> Oreans Technologies [Overlay]
3 Themida 1.2.0.1 (compressed) -> Oreans Technologies
3 NsPack 3.4 -> North Star *
3 NakedPacker 1.0 - by BigBoote *
3 MinGW GCC 3.x [ZIP SFX] *
3 Microsoft Visual C++ [Overlay]
3 Microsoft Visual C++ 6.0 SPx Method 1
3 Microsoft Visual Basic 5.0 - 6.0 [Overlay]
3 Inno Setup Module Heuristic Mode [Overlay]
3 ASProtect 2.1x SKE -> Alexey Solodovnikov [Overlay]
2 tElock 0.90 -> tE! [Overlay]
2 Upack 0.28 - 0.399 (relocated image base) - Delphi, .NET, DLL -> Dwing
2 Upack 0.24 - 0.29 beta -> Dwing
2 UltraProtect 1.x -> RISCO Software Inc. [Overlay]
2 UltraProtect 1.x -> RISCO Software Inc.
2 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo [RAR SFX]
2 SVKP 1.3x -> Pavol Cerven
2 PureBasic DLL -> Neil Hodgson *
2 PEtite 2.x [Level 0] -> Ian Luck
2 PE-Armor V0.7X -> hying *
2 PC-Guard 5.0 -> Blagoje Ceklic
2 Nullsoft Install System 2.1x [Nullsoft PiMP SFX]
2 NsPack 1.4 -> Liuxingping *
2 NTKrnl Security Suite -> NTKrnl Team
2 Morphine 1.4 - 2.7 -> Holy_Father & Ratter/29A
2 MinGW GCC 3.x *
2 Microsoft Visual C++ Private Version 1 [Overlay]
2 Microsoft Visual C++ DLL Method 1
2 Microsoft Visual C++ 7.0 Method2 [Debug] [Overlay]
2 Microsoft Visual C++ 7.0 DLL Method 3
2 Microsoft Visual C++
2 Microsoft Visual Basic 5.0 / 6.0 [Debug]
2 MASM32 / TASM32
2 EXECryptor 2.2.4 -> Strongbit/SoftComplete Development (h1) *
2 EXECryptor 1.x.x -> SoftComplete Developement
2 Borland Delphi DLL
2 Borland Delphi 6.0 [Overlay]
2 Borland Delphi 3.0
2 Borland C++ DLL Method 2 [Overlay]
1 yoda's Protector 1.3 -> Ashkbiz Danehkar
1 yoda's Protector 1.03.3 -> Ashkbiz Danehkar
1 yoda's Protector 1.03.2 -> Ashkbiz Danehkar
1 tElock v0.90 [Overlay] *
1 tElock v0.90 *
1 tElock 1.0 (private) -> tE!
1 tElock 0.61 -> tE!
1 nSpack V2.3 -> LiuXingPing *
1 eXPressor 1.3.0 -> CGSoftLabs
1 Winkript 1.0 -> Mr. Crimson/WKT
1 WinRAR 32-bit SFX Module [RAR SFX] *
1 WWPack32 1.x -> Piotr Warezak
1 Upack 0.28 - 0.399 (relocated image base) - Delphi, .NET, DLL -> Dwing [Overlay]
1 Upack 0.24 - 0.29 beta -> Dwing [Overlay]
1 UPX 1.03 - 1.04 -> Markus & Laszlo [Overlay]
1 UPX 1.03 - 1.04 -> Markus & Laszlo
1 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo [Nullsoft PiMP SFX]
1 Themida 1.8.x.x -> Oreans Technologies [Overlay] *
1 Themida -> Oreans Technologies 2004 *
1 SafeDisc 2.05.030 -> Macrovision [Overlay]
1 RLPack V1.11 -> ap0x [Overlay] *
1 RLPack 1.20 Basic Edition [aPLib] -> Ap0x *
1 RCryptor v1.6d --> Vaska *
1 Pelles C 3.00, 4.00, 4.50 EXE (X86 CRT-LIB) [Overlay]
1 PKLITE32 v1.1 *
1 PEtite 2.x [Level 1/9] -> Ian Luck [Overlay]
1 PEtite 2.x [Level 1/9] -> Ian Luck
1 PEncrypt 4.0 Gamma / 4.0 Phi -> junkcode
1 PESpin 0.3x - 1.xx -> cyberbob
1 PECompact 2.xx --> BitSum Technologies [Overlay] *
1 PECompact 2.xx --> BitSum Technologies *
1 PECompact 1.40 - 1.45 -> Jeremy Collake [Overlay]
1 PEBundle 2.0x - 2.4x-> Jeremy Collake
1 PEBundle 0.2 - 3.x -> Jeremy Collake
1 PE Pack 1.0 -> ANAKiN [Overlay]
1 PE Pack 1.0 -> ANAKiN
1 PE Crypt 1.02 -> random, killa & acpizer
1 Obsidium 1.3.0.4 -> Obsidium Software [Overlay]
1 Nullsoft PiMP stub [Nullsoft PiMP SFX]
1 Nullsoft Install System 2.x [Nullsoft PiMP SFX]
1 NsPack 2.9 -> North Star [Overlay] *
1 Nothing found [CAB SFX] *
1 NSPack 3.x -> Liu Xing Ping *
1 Morphine 1.4 - 2.7 -> Holy_Father & Ratter/29A [Overlay]
1 MoleBox v2.0 [Overlay] *
1 Microsoft Visual C++ 8.0 [Debug] [Overlay]
1 Microsoft Visual C++ 7.0 Method2 [Overlay]
1 Microsoft Visual C++ 7.0 DLL Method 3 [Overlay]
1 Microsoft Visual C++ 6.0 [ZIP SFX]
1 Microsoft Visual C++ 6.0 SPx Method 1 [Overlay]
1 Microsoft Visual C++ 6.0 DLL [Debug]
1 Microsoft Visual C++ 4.x [Overlay]
1 Microsoft Visual C++ 4.x [Debug]
1 Microsoft Visual Basic 6.0 DLL [Overlay]
1 Microsoft CAB SFX module
1 LCC Win32 1.x -> Jacob Navia
1 KByS V0.28 -> shoooo [Overlay] *
1 KByS V0.22 -> shoooo *
1 InstallShield AFW [Overlay]
1 Install Stub 32-bit -> InstallShield [Overlay]
1 Inno Installer 4.0.5 [Inno SFX]
1 FSG 2.0 -> bart/xt
1 EZIP 1.0 -> Jonathan Clark [Overlay]
1 EXECryptor 1.x.x -> SoftComplete Developement [Overlay]
1 CD-Cops II -> Link Data Security [Overlay]
1 Borland Delphi DLL [Overlay]
1 Borland Delphi 5.0 KOL/MCK [Overlay]
1 Borland Delphi 5.0 KOL [Overlay]
1 Borland Delphi 3.0 [Overlay]
1 Borland Delphi 2.0 [Inno SFX]
1 Borland Delphi 2.0
1 Borland Component
1 Armadillo v1.71 [Overlay] *
1 Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks [Overlay]
1 Armadillo 2.01 -> Silicon Realms Toolworks [Overlay]
1 ASProtect SKE 2.1x (exe) -> Alexey Solodovnikov [Overlay] *
1 ASProtect 2.0x Registered -> Alexey Solodovnikov [Overlay]
1 ASProtect 2.0x Registered -> Alexey Solodovnikov
1 ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov [Overlay] *
1 ASProtect 1.2 / 1.2c-> Alexey Solodovnikov
1 ASPack 2.12b -> Alexey Solodovnikov
1 ASPack 1.08.03 -> Alexey Solodovnikov [Overlay]
1 ASPack 1.06b / 1.061b -> Alexey Solodovnikov [Overlay]
1 AHTeam EP Protector 0.3 (fake Microsoft Visual C++ 7.0) -> FEUERRADER *
1 ACProtect V2.0 -> risco *
1 ACProtect 2.00 - RISCO Software Inc. [Overlay]
1 ACProtect 1.40 - 1.41 - RISCO Software Inc.
1 .BJFNT 1.1b -> :MARQUiS:
1 * PseudoSigner 0.2 [Microsoft Visual Basic 5.0 - 6.0] --> Anorganix [Overlay] *
1 * PseudoSigner 0.2 [Microsoft Visual Basic 5.0 - 6.0] --> Anorganix *

ほとんど検出できていないのが残念.ひときわ面倒なThemidaは11検体だった.

サンドボックスの実態

サンドボックスの透明性が研究されている一方で,実際のマルウェアはあまり凝ったAnti-VMを備えていなかった.
一方で,現実のサンドボックスはどうだろうか.いくら論文で優れた手法が編み出されようが,役立てられていなければ意味がない.
そこで,一般に公開されているサンドボックスに対してシステム情報を取得するプログラムを挿入し,仮想マシンモニタの種類を判別できるかどうか試してみたのだが,実態はあまりにもお粗末だった.
詳細は言うまい.
だが,systeminfoコマンドとNtQuerySystemInformationだけで露見する代物ばかりだった.
マルウェアの解析ではなく検出を目的としたサービス,言ってしまえばVirusTotalをサンドボックスのフロントエンドとしたことが,この一因として挙げられる.
凝ったAnti-VMを備えたマルウェアがあまり多くないことも考えると,現状のサンドボックスで十分だということなのだろうか.

感想

研究をしているうちに袋小路に突入してしまい,サンドボックスの透明性やAnti Anti-VMあくまでマルウェア解析の一側面に過ぎないことを私は忘れかけていた.
本質は別のところにある.

TEQUILABOOMBOOM

公開されているサンドボックスの中にTEQUILABOOMBOOMというホスト名のものがあった.
Trojan.Win32.Inject.uljvBackdoor.Win32.Agent.dkbpなど一部のマルウェアは,このホスト名に基づいてサンドボックスを検出することが知られている.調べてみると,Question about keylogged PC - Printable Version[FUD][FREE] Agent Tesla [Keylogger] [ClipboardLogger] [On-Screen Keyboard Logger] - Page 16など,2013年の時点で情報が攻撃者の間で共有されている.

So I managed to crypt a keylogger and have my victim download it through dropbox (I think). I haven’t received any logs yet but it shows that I’m connected to a computer from france which is janettedoe@TEQUILABOOMBOOM. I’m not sure how this is possible, or if it’s some sort of error. Does anybody know what this is? My keylogger hasn’t been sent anywhere other than to my targets email.

どうやらこれはGoogleが動かしているCuckoo Sandboxが用いるホスト名らしく,攻撃者によるサンドボックスの実態調査が進んでいることを伺わせる.
サンドボックスの透明性について拘りすぎる必要はないにせよ,その情報が攻撃者の手に渡ることを前提としたサービスについては検討の余地がある.

参考文献