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.
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...
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: Jun 06, 20:22
Jeśli po mojej prezentacji na dzisiejszym spotkaniu OWASP kogoś zainteresował temat ogólnie pojętego forensic, być może zainteresują go również starsze wpisy dotyczące tego tematu. Nazbierało się tego trochę, więc małe przypomnienie części z poruszanych t
Przesłany: Jun 10, 20:54