Tamagotchi XIV: Logexts

Tak jak pisałem z debuggerem nie czuję się jakoś specjalnie zaprzyjaźniony. Jest jednak narzędzie, które może być pomocne w odkryciu tego, w jaki sposób proces explorer.exe jest infekowany przez malware. Narzędzie to jest częścią pakietu Debugging Tools For Windows i nazywa się Logger.

Za pomocą tego narzędzia można utworzyć log zawierający listę wywoływanych przez dany proces funkcji. W wielu przypadkach jest to wystarczająco wiele, by uzyskać odpowiedź na pytanie “jak to się dzieje”. W tym wypadku – czy rzeczywiście malware korzysta z techniki code injection w celu “przekonania” procesu explorer.exe do wykonania jego kodu?

Co mówią logi? Potwierdzają moje przypuszczenie. Po pierwsze pobierana jest lista procesów działających w systemie:

Thrd1 00402CF3 CreateToolhelp32Snapshot( TH32CSSNAPHEAPLIST | TH32CSSNAPPROCESS | TH32CSSNAPTHREAD | TH32CSSNAPMODULE 0x00000000) –> 0x000007A0

Następnie lista jest przeglądana do czasu, aż znaleziony zostanie proces explorer.exe :

Thrd1 00402D67 Process32Next( 0x000007A0) –> TRUE ( [0x0012FDA8] –> 0x00000128 , 0x00000000 , 0x000001B0 , 0x00000000 , 0x00000000 , 0x0000000D , 0x000007D4 , 8 , 0x00000000 , “explorer.exe”) Thrd1 00402D3E lstrcmpi( “explorer.exe” “explorer.exe”) –> 0x00000000

Po znalezieniu otwierany jest handle do procesu:

Thrd1 00402D51 OpenProcess( PROCESSCREATETHREAD | PROCESSQUERYINFORMATION | PROCESSVMOPERATION | PROCESSVMREAD | PROCESSVMWRITE FALSE 0x000001B0) –> 0x000007C4

Po czym do pamięci procesu zapisywane są dane:

Thrd1 00402E1F lstrlen( “f424”) –> 0x00000004 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000004 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x00BB0000 Thrd1 00402E40 lstrlen( “f424”) –> 0x00000004 Thrd1 00402E1F lstrlen( “ise32.exe”) –> 0x00000009 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000009 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x00BC0000 Thrd1 00402E40 lstrlen( “ise32.exe”) –> 0x00000009 Thrd1 00402E1F lstrlen( “asd-6+094997”) –> 0x0000000D Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000D MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x00F80000 Thrd1 00402E40 lstrlen( “asd-6+094997”) –> 0x0000000D Thrd1 00402E1F lstrlen( “{28ABC5C0-4FCB-11CF-AAX5-81CX1C635612}”) –> 0x00000026 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000026 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x00F90000 Thrd1 00402E40 lstrlen( “{28ABC5C0-4FCB-11CF-AAX5-81CX1C635612}”) –> 0x00000026 Thrd1 00402E1F lstrlen( “1.4.0”) –> 0x00000005 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000005 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x00FA0000 Thrd1 00402E40 lstrlen( “1.4.0”) –> 0x00000005 Thrd1 00402E1F lstrlen( “!”) –> 0x00000001 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x01D50000 Thrd1 00402E40 lstrlen( “!”) –> 0x00000001 Thrd1 00402E1F lstrlen( “TrB”) –> 0x00000003 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x01D60000 Thrd1 00402E40 lstrlen( “TrB”) –> 0x00000003 (...) Thrd1 00402E1F lstrlen( “Internet Security Service”) –> 0x00000019 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000019 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02100000 Thrd1 00402E40 lstrlen( “Internet Security Service”) –> 0x00000019 Thrd1 00402E1F lstrlen( “s”) –> 0x00000001 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02110000 Thrd1 00402E40 lstrlen( “s”) –> 0x00000001 Thrd1 00402E1F lstrlen( “*“) –> 0x00000001 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02120000 Thrd1 00402E40 lstrlen( “*“) –> 0x00000001 Thrd1 00402E1F lstrlen( “Start flooding.”) –> 0x0000000F Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000F MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02130000 Thrd1 00402E40 lstrlen( “Start flooding.”) –> 0x0000000F Thrd1 00402E1F lstrlen( “Flooding done.”) –> 0x0000000E Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02140000 Thrd1 00402E40 lstrlen( “Flooding done.”) –> 0x0000000E Thrd1 00402E1F lstrlen( “udp”) –> 0x00000003 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02150000 Thrd1 00402E40 lstrlen( “udp”) –> 0x00000003 Thrd1 00402E1F lstrlen( “syn”) –> 0x00000003 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02160000 Thrd1 00402E40 lstrlen( “syn”) –> 0x00000003 Thrd1 00402E1F lstrlen( “fstop”) –> 0x00000005 Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000005 MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02170000 Thrd1 00402E40 lstrlen( “fstop”) –> 0x00000005 Thrd1 00402E8C lstrlen( “u.sqlteam.info”) –> 0x0000000E Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02180000 Thrd1 00402EAD lstrlen( “u.sqlteam.info”) –> 0x0000000E Thrd1 00402E8C lstrlen( “u.sqlteam.info”) –> 0x0000000E Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x02190000 Thrd1 00402EAD lstrlen( “u.sqlteam.info”) –> 0x0000000E Thrd1 00402E8C lstrlen( “u.sqlteam.info”) –> 0x0000000E Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEMCOMMIT PAGEEXECUTEREADWRITE) –> 0x021A0000 (...)

...a później tworzony jest wątek:

Thrd1 0040345F GetProcAddress( 0x7C800000 “CreateRemoteThread”) –> 0x7C8104BC Thrd1 00403474 CreateRemoteThread( 0x000007C4 [0x00000000] NULL 0x00000000 0x02200000 0x02250000 0x00000000 [0x0012FED0] –> 0x00140000) –> 0x0000076C

Pierwszy parametr to oczywiście handle do procesu explorer.exe , ostatni to wskaźnik na początek kodu, który ma być wykonany. I w ten prosty sposób teoria o wykorzystaniu code injection została potwierdzona...

Oryginał tego wpisu dostępny jest pod adresem Tamagotchi XIV: Logexts

Autor: Paweł Goleń