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.
Środa, czerwca 11. 2008
Tamagotchi XIV: Logexts
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( TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE 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( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE FALSE 0x000001B0) -> 0x000007C4
Po czym do pamięci procesu zapisywane są dane:
Thrd1 00402E1F lstrlen( "f424") -> 0x00000004
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000004 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x00BB0000
Thrd1 00402E40 lstrlen( "f424") -> 0x00000004 Thrd1 00402E1F lstrlen( "ise32.exe") -> 0x00000009
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000009 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x00BC0000
Thrd1 00402E40 lstrlen( "ise32.exe") -> 0x00000009
Thrd1 00402E1F lstrlen( "asd-6+094997_") -> 0x0000000D
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000D MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x00F80000 Thrd1 00402E40 lstrlen( "asd-6+094997_") -> 0x0000000D
Thrd1 00402E1F lstrlen( "{28ABC5C0-4FCB-11CF-AAX5-81CX1C635612}") -> 0x00000026
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000026 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x00F90000 Thrd1 00402E40 lstrlen( "{28ABC5C0-4FCB-11CF-AAX5-81CX1C635612}") -> 0x00000026
Thrd1 00402E1F lstrlen( "1.4.0") -> 0x00000005
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000005 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x00FA0000
Thrd1 00402E40 lstrlen( "1.4.0") -> 0x00000005
Thrd1 00402E1F lstrlen( "!") -> 0x00000001
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x01D50000
Thrd1 00402E40 lstrlen( "!") -> 0x00000001
Thrd1 00402E1F lstrlen( "TrB") -> 0x00000003
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x01D60000
Thrd1 00402E40 lstrlen( "TrB") -> 0x00000003 (...)
Thrd1 00402E1F lstrlen( "Internet Security Service") -> 0x00000019
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000019 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02100000
Thrd1 00402E40 lstrlen( "Internet Security Service") -> 0x00000019
Thrd1 00402E1F lstrlen( "s") -> 0x00000001
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02110000
Thrd1 00402E40 lstrlen( "s") -> 0x00000001
Thrd1 00402E1F lstrlen( "*") -> 0x00000001
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000001 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02120000
Thrd1 00402E40 lstrlen( "*") -> 0x00000001
Thrd1 00402E1F lstrlen( "Start flooding.") -> 0x0000000F
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000F MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02130000
Thrd1 00402E40 lstrlen( "Start flooding.") -> 0x0000000F
Thrd1 00402E1F lstrlen( "Flooding done.") -> 0x0000000E
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02140000
Thrd1 00402E40 lstrlen( "Flooding done.") -> 0x0000000E
Thrd1 00402E1F lstrlen( "udp") -> 0x00000003
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02150000 Thrd1 00402E40 lstrlen( "udp") -> 0x00000003
Thrd1 00402E1F lstrlen( "syn") -> 0x00000003
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000003 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02160000
Thrd1 00402E40 lstrlen( "syn") -> 0x00000003
Thrd1 00402E1F lstrlen( "fstop") -> 0x00000005
Thrd1 00402E26 VirtualAllocEx( 0x000007C4 0x00000000 0x00000005 MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02170000
Thrd1 00402E40 lstrlen( "fstop") -> 0x00000005
Thrd1 00402E8C lstrlen( "u.sqlteam.info") -> 0x0000000E
Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02180000
Thrd1 00402EAD lstrlen( "u.sqlteam.info") -> 0x0000000E
Thrd1 00402E8C lstrlen( "u.sqlteam.info") -> 0x0000000E
Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 0x02190000
Thrd1 00402EAD lstrlen( "u.sqlteam.info") -> 0x0000000E Thrd1 00402E8C lstrlen( "u.sqlteam.info") -> 0x0000000E
Thrd1 00402E93 VirtualAllocEx( 0x000007C4 0x00000000 0x0000000E MEM_COMMIT PAGE_EXECUTE_READWRITE) -> 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...
Zobacz też
- Jak zepsuć walidację (środa, 17 września 2008)
- (Nie)bezpieczny Firefox 3 (czwartek, 19 czerwca 2008)
- You must buy our decryptor... A właśnie, że nie (wtorek, 17 czerwca 2008)
- Tamagotchi XIII: brakujące ogniwo (poniedziałek, 9 czerwca 2008)
- Forensic (sobota, 7 czerwca 2008)
- Nowy OWASP TOP10 (poniedziałek, 16 lipca 2007)
- Następny wpis: Pamięć do pliku, czyli jak żyć bez \Device\PhysicalMemory
- Poprzedni wpis: Trochę podobne pliki...

Lista procesów aktywnych w systemie jest jednym z podstawowych źródeł informacji o tym, czy przypadkiem nie działa jakiś "wrogi kod". Problem w tym, że ów wrogi kod wcale na liście procesów pojawić się nie musi, co jednak wcale nie musi być równoznaczne z
Przesłany: Cze 06, 20:22