2/12/2009

Conficker웜에 사용된 NtQueueApcThread를 이용한 DLL 인젝션

Conficker웜에 사용된, 두가지 DLL 인젝션에 대해서 설명하고 있는데 첫번째야 잘아는 CreateRemoteThread를 이용한 방법이고, 두번째가 조금 흥미롭다. 바로 APC를 이용하는 방법이다.

ThreatExpert Blog: Conficker/Downadup: Memory Injection Model
NtQueueApcThread(HANDLE hThreadHandle, PIO_APC_ROUTINE lpApcRoutine, PVOID pApcRoutineContext, ...),

where hThreadHandle is a handle of the enumerated thread that receives an APC call into its queue, lpApcRoutine is the address of the entry point to the user APC routine, and pApcRoutineContext is the user defined parameter for APC routine.

Guess what address it uses for the user APC routine? That's right, it's the address of the API LoadLibraryExA() imported from kernel32.dll, and the parameter for this call is the name of the Conficker DLL, previously saved inside the process's address space.


APC는 커널 모드와 유저 모드가 있는데, 유저 모드에서는 주로 비동기적인 IO(한마디로 IO Completion Port를 이용한 파일 읽기등을)의 Completion routine을 호출하기 위해서 많이 사용된다. 또한 APC는 호출된 이후 다시 호출이 일어 나기전의 상태로 컨텍스트를 돌려 놓기 때문에 해당 쓰레드에 문제를 일으키지 않고 원하는 코드를 인젝션하는 좋은 방법으로 채택된듯 하다.

어쨌든 나중에 응용할 곳이 있을 듯 한 방법임...

Posted via email from bugtruck's posterous

댓글 없음:

댓글 쓰기