Backdoor.ngrbot
먼저 악성코드가 실행되면 모든 Process를 찾아서 Code Injection을 시도
그림1. 모든 프로세스에 Code Injection
이후 Injection된 Code가 각 Process에서 실행되면 IAT(Import Address Table)를 구성하고 ntdll.LdrEnumerateLoadedModules라는 Native API를 호출한다. LdrEnumerateLoadedModlues는 모든 로드된 모듈을 대상으로 CallBack 함수를 실행하는 API(undocument이지만 실제 그렇게 행동하는 것을 확인함)로 CallBack 함수는 특정 대상 API를 Inline Patch한다. 또한 ‘NtResumeThread’, ‘LdrLoadDll’ 두 함수의 경우 CallBack함수와 별도로 Inline Patch를 한다.
그림2. Inline Patch Code
여기서 ntdll의 Native API 주소는 다음과 같이 PEB_LDR_DATA 정보를 찾아서 로드된 모듈이 ‘ntdll.dll’과 일치할 경우 해당 모듈의 Header 정보를 통해 Export된 Function Offset(address)을 찾는 방법을 사용한다.
그림3. FS레지스터를 통해 로드된 ‘ntdll.dll’를 찾는 과정
그림4. ‘ntdll.dll’의 Header 정보를 통해 특정 API Address를 찾는 과정
분석 시 확인된 Patched API는 다음과 같다. (하지만 악성코드 버전 별로 대상이 상이 함을 확인)
##ntdll - NtQueryDirectoryFile, NtEnumerateValueKey, NtResumeThread, LdrLoadDll
##kernel32 - CopyFileW, CopyFileA, CreateFileW, CreateFileA, MoveFileW, MoveFileA
##wininet - InternetWriteFile, HttpSendRequestW, HttpSendRequestA
##ws2_32 - getaddrinfoW, send
##urlmon - URLDownloadToFileA, URLDownloadToFileW
ngrbot 악성코드는 자기 자신을 %profile%\application data\Random.exe형태의 랜덤 이름으로 복사/레지스트리 등록/실행을 하고 새로운 프로세스에 대해서도 변조를 하기 때문에 안전모드에서 해당 파일을 삭제하면 치료가 가능하다. 따라서 감염된 상태에서 탐지를 위해 User-mode에서의 inline patch를 대응하기 위해 주요 API에 대한 메모리 검사와 같은 조치가 필요할 것이다.
그 외 악성행위 부분은 다음을 참고
http://www.bitdefender.com/VIRUS-1000651-en--Backdoor-IRCBot-Dorkbot-A.html
'악성코드 상세분석 > BOT' 카테고리의 다른 글
Koobface 악성코드 분석 (0) | 2010.10.18 |
---|