본문 바로가기
악성코드 정보

MBR을 변조하는 Halcbot 부트킷 상세 분석

by 알 수 없는 사용자 2011. 10. 14.
추석 연휴가 끝나는 마지막 휴일인 9월 13일 국내 보안 제품을 무력화 시키고 감염된 시스템의 MBR(Master Boot Record)를 변조하는 Halcbot 부트킷(Bootkit)이 국내에서 발견되었다.

이 번에 발견된 Halcbot 부트킷은 9월 13일 새벽 0시 50분 경에 취약한 웹 사이트를 통해 최초 유포 되었던 것으로 추정하고 있으며, 드라이버(*.SYS) 파일을 이용하여 악성코드 자신을 보호하는 기능도 포함되어 있다.

Halcbot 부트킷에 감염되면 MBR을 변조하며, 아래 그림과 같이 스타트섹터(StartSector)부터 감염 코드 및 악의적인 루트킷(Rootkit)과 DLL 파일을 저장한다.

MBR이 감염되면 Ntldr을 패치한 뒤 Ntoskrnl이 로드 되면  다시 Call 패치를 수행하여 해당 악성코드에 의해 생성된 악의적인 드라이버 파일을 로드 한다. 로드 된 악의적인 드라이버 파일은 Atapi.sys를 이용하여 SSDT 후킹(Hooking)을 시도하며 이를 통해 악성코드 자기 보호와 함께 안티 바이러스 무력화하는 기능을 수행하게 된다.

해당 악성코드가 실행되면 FileEngine.sys 라는 악의적인 루트킷을 생성하며, 서비스를 이용하여 해당 드라이버 파일을 실행하게 된다.
 


악성코드와 생성된 루트킷은 상호 통신을 하게 됨으로 루트킷은 Symbolic Link와 같은 초기화 작업을 수행하게 되며, 이후 nt!IoCreateFile()를 아래 이미지와 같이 메모리 패치하여 후킹하게 된다.


국내에서 제작된 안티 바이러스 소프트웨어의 프로세스가 확인 될 경우, STATUS_OBJECT_NAME_NOT_FOUND(0xC0000034) 리턴하여 해당 안티 바이러스 소프트웨어의 탐지를 우회하게 된다. 그리고 FileEngine.sys, FileEn~1.sys, DiskSystem.exe, DISKSY~1.EXE, halc.dll 이름으로 IoCreateFile()을 실행하게 될 경우에도 역시 STATUS_UNSUCCESSFUL( 0xC0000001) 리턴하여 탐지를 방해한다.


이 후 Atapi.sys 의 DeviceType 중 FILE_DEVICE_DISK Type의 DeviceObject를 찾고 Disk.sys 확인 되면DeviceIoControl() 를 이용하여 악성코드와 통신을 진행하며 MBR 감염 작업을 진행하게 된다.


MBR 감염 작업을 진행하기 전에 정상 MBR를 백업하는 작업을 수행하는데, 악성코드는 0x9C 키로 XOR 1바이트로 암호화 한다.


IOCTL_CODE  0x222014 는 악성코드에게 필요한 데이터를 스타트 섹터에 쓰는 기능을 수행하고IOCTL_CODE  0x222020 은 Atapi.sys 의 Major Function INTERNAL_DEVICE_CONTROL 를 후킹하여 스타터 섹터에 쓰기 기능을 무력화 한다.


메모리 패치된 Atapi.sys의 Major Function은 아래와 같이 STATUS_ACCESS_DENIED (0xC0000022) 코드를 리턴하여 악성코드 감염 이후에 발생할 수 있는 MBR 변조를 막는다.



이 후 악성코드 자신의 복사본을 윈도우 시스템 폴더(C:\System32)에 DiskSystem.exe로 생성 한 후 서비스로 등록하여 실행하게 된다. 그리고 생성한 halc.dll 파일을 정상 파일인 Rundll32.exe를 이용하여 실행하게 된다.


아래 이미지와 같은 감염된 MBR은 아래 그림과 같으며 Interrupt 13h 후킹하여, 저장된 코드를 읽어오고 실행한다.


후킹된 Int 13h 코드는 Ah가 0x42, 0x2 일 때 후킹된 코드로 넘어 가는데, 0x2는 Read Setors From Drive 이며, 0x42는 Extended Read Sectors From Drive 이며 모두 읽기와 관련 있다. 그리고 Ntldr(osloader.exe) 에서 0x15FF를 찾아 Call를 패치 한다. 


이 후 악성코드는 ntoskrnl.exe 로드 시점에서 Call InitSystem() 를 명령어를 찾아 해당 Call를 패치 한 후ntoskrnl.exe 마지막 섹션에 실행 시킬 코드를 저장한다.


해당 Halcbot 부트킷의 역할을 간단하게 정리하면 다음과 같다.

1. 윈도우 폴더(C:\Windows) lpk.dll 명으로 파일을 생성한다.
2. CreateProcessEx() SSDT 후킹하여, 안티 바이러스 프로그램과 시스템 복원 프로그램을 무력화하고 우회하게 된다.
3. Atapi.sys 의 Major Funtion를 후킹한다.


Halcbot 부트킷에 의해 생성된 lpk.dll 파일은 DNS 및 host 파일 변조 그리고 다운로드 등 기존에 알려진 일반적인 악의적인 봇(Bot)과 유사한 기능을 수행하게 된다.

해당 Halcbot 부트킷 악성코드는 V3 제품군에서 Backdoor/Win32.Agent로 진단하며, 이외에 별도의 전용 백신을 배포 중에 있다.


<<주의 사항>>
본 전용백신은 진단과 복구시 운영체제의 민감한 부분을 이용합니다. 중요한 작업을 수행하는 시스템이나, 24시간 동작하는 시스템에서는 사용을 자제해 주시기 바랍니다.
 

댓글