'alipop'에 해당되는 글 1건

  1. 2011.07.16 [Malware Analysis] MBR및 ntldr을 이용하는 Popureb Rootkit 분석 (3)

외국 보안업체에 의해 MBR과 ntldr 등을 이용하는 Popureb / Phanta / Alipop이라 불리는 루트킷이 소개되어 분석을 해보았다.(이하 Popureb) 최초에는 해당 악성코드 감염시 윈도우를 재설치 해야한다고 소개되어 부족하나마 시간을 내어 분석을 진행해보았다.(물론 완벽하지는 않다.)

   

○ Main Dropper 분석

Main Dropper 실행시 [그림 1]과 같이 CreateFileA 함수를 이용하여 "\\.\PhysicalDrive0" 즉, 첫번째 하드디스크의 디바이스의 핸들을 얻어온다. 이어서 DeviceIoControl 함수를 이용하여 IoControlCode 파라미터에 IOCTL_DISK_GET_DRIVE_GEOMETRY Control Code 값을 설정하여 하드디스크의 type, number of cylinders, tracks per cylinder, sectors per track, and bytes per sector 등의 값을 얻어온다. 이는 차후에 디스크의 마지막 섹터에 특정 파일을 기록하기 위해 얻어오는 것으로 추정된다.

[그림 1]

이어서 [그림 2]와 같이 ReadFile 함수를 이용하여 첫번째 섹터의 첫번째 값부터 512 Byte 즉, MBR을 특정 메모리 영역으로 복사한다.

[그림 2]

위에서 읽어온 MBR을 REP operation을 통해 특정 메모리 영역에 복사한다.

[그림 3]

이어서 메모리 상의 Original MBR 코드를 ROL operation을 통해 변형한다. [그림 4]에서 보는 것과 같이 아래와 같은 과정을 통하여 변형이 이루어진다.

0041169C MOV AL, BYTE PTR DS:[EDX+400300] // Original MBR의 1Byte를 읽어 AL 레지스터에 저장

...

004116AE MOV CX, 73 // CX레지스트에 0x73값을 대입

004116B2 ROL AL, CL // Original MBR을 ROL 3연산을 통해 변형

....

004116D3 MOV BYTE PTR DS:[EDX+400300], DL // Original MBR이 저장된 영역에 변형된 MBR 값을 기록


[그림 4]

[그림 5]와 같이 파일 포인터를 특정 오프셋으로 이동한다. 자세한 과정은 모르겠으나 Procmon을 통하여 확인한 결과 디스크의 가장 마지막 부분에 특정 값을 기록하는 것을 확인할 수 있다. Sophos의 분석자료에 의하면 기록되는 부분은 "TracksPerCylinder * Cylinders * SectorPerTrack * BytesPerSector - 0x32000 - 0x26000" 연산을 통하여 얻어진다고 한다.

[그림 5]

오프셋을 이동한 뒤 [그림 6]과 같이 WriteFile 함수를 이용하여 특정 값을 위에서 얻어진 특정 디스크 오프셋에 기록하는 것을 볼 수 있다.

[그림 6]

디스크의 마지막 부분에 기록되는 값은 [그림 7]과 같은 형태를 띄고 있다. 생성되는 BLOB(대체로 이미지나 사운드 파일과 같은 하나의 커다란 파일이라고 한다.)는 가장 윗부분에 해당 BootKit을 로딩하는 코드가 존재하며 이어서 Driver 파일이 존재한다. 모두 ROL 3 연산을 통해 암호화된 형태로 존재하며 Dropper의 text 섹션 상에 이미 그 값을 갖고 있다. 마지막 부분에는 Original MBR을 ROL 연산을 통해 변형한 값이 기록된다.

[그림 7]

이어서 두번째 write 연산이 이루어진다. 이번에는 [그림 8]과 같이 파일 포인터를 디스크의 가장 앞부분으로 옮기는 것을 볼 수 있다.

[그림 8]

디스크 가장 앞부분이므로 MBR 영역인 것을 알 수 있으며 [그림 9]와 같이 512 Byte 크기의 MBR 만큼 덮어씌운다.

[그림 9]

변조되기 전후의 MBR영역을 살펴보면 [그림 10]과 같이 위의 WriteFile 연산 이후에 변경된 것을 확인할 수 있다.

[그림 10]

이어서 3번째 Write 연산이 이루어지는데 이번에는 첫번째 디스크의 마지막 부분에 생성한 데이터 부분 뒤쪽에 PE 파일 형태의(하지만 MZ 헤더가 없다.) 데이터를 기록한다. 따라서 디스크의 마지막 즈음에 기록된 데이터는 [그림 12]와 같은 형태를 띄게 된다.

[그림 11]

[그림 12]

위와 같은 과정을 거쳐 디스크 상에 MBR 패치 및 Popureb이 이용하는 BLOB 생성 후에 현재 경로에 hello_tt.sys 파일을 생성한다.

[그림 13]

생성한 hello_tt.sys 파일을 Service로 등록하여 실행시키는 것을 볼 수 있다. 이후 hello_tt.sys 파일은 삭제한다.

[그림 14]

 

○ infected MBR의 기능

감염된 MBR은 Popureb 루트킷을 실행시키는 기능을 한다. 위에서와 같이 디스크의 끝에 기록한 BLOB를 읽어 해독을 하며 윈도우가 부팅시에 드라이버를 로딩시키기 위해 system hook chain을 변경한다. 마지막으로 정상적인 부팅 과정 실행을 위해 original MBR로 제어권을 넘긴다. 이 부분은 아직 내공이 부족하여 자세한 분석을 하지는 못했다.

[그림 15]는 Bochs와 IDA를 이용하여 감염된 MBR을 읽어온 모습이다. Bochs와 IDA를 이용한 MBR 분석 방법은 따로 정리할 예정이다. INT 13 BIOS interrupt call을 이용하여 디스크의 데이터를 읽어오는 부분을 확인할 수 있다.

[그림 15]

MBR 코드의 마지막으로 보이는 부분에서는 [그림 16]과 같이 특정 영역으로 분기하는 것을 확인할 수 있다.

[그림 16]

   

○ BootKit Loader의 기능

디스크에 저장된 BLOB의 가장 윗부분에 존재하는 Bootkit Loader의 경우 3bit 만큼 Shfit Right 해주면 원본 코드를 얻을 수 있다. decrypt한 Bootkit Loader 부분에서 [그림 17]과 같은 부분을 확인할 수 있다. 역시나 내공이 부족하여 정확한 분석을 하지는 못했지만 Sophos의 분석 문서를 참고하여 그 기능을 알 수 있었다. Bootkit Loader의 목적은 루트킷 드라이버를 로드하기 위해 hook chain을 변경하는 것이다. 먼저 int 13 인터럽트를 후킹하여 02h와 42h function에 대하여 필터링을 한다. 이는 각각

Read Sectors From Drive와 Extended Read Sectors From Drive를 의미한다. 이 후킹은 read 연산을 모니터링하며 ntldr을 패치한다. 또한 PsGetCurrentProcess 함수를 주소를 얻어 온 뒤 다른 hook을 설치한다. PsGetCurrentProcess hook은 시스템 쓰레드를 생성하며 이 시스템 쓰레드는 정상 beep.sys 파일을 변경한다.

[그림 17]

   

 

○ Driver의 기능

Popureb 드라이버 파일은 [그림 18]과 같이 시스템 쓰레드를 생성한다.

[그림 18]

생성된 쓰레드는 [그림 19]와 같이 ZwDeleteFile 함수를 이용하여 beep.sys 파일을 삭제한다. 또한 C:\ale.exe 파일을 생성하며 자동실행을 위해 레지스트리의 run 값에 Alg라는 값으로 추가하는 것을 볼 수 있다.

[그림 19]

또한 [그림 20]과 같이 StartIo 함수를 후킹하는 것을 확인할 수 있다. 이는 MBR 영역에 write하는 것을 방지하기 위함이라고 한다.

[그림 20]

   

○ 결 론

Popureb Rootkit의 경우 MBR 변조로 인하여 처음에 해외 블로그를 통해 소개되었을 경우 윈도우 재설치가 필요하다고 소개되었다. 하지만 MS 및 Sophos를 비롯하여 몇몇 보안 업체에서 해당 악성코드에 감염된 시스템의 MBR을 복구하고 BLOB를 삭제할 수 있는 툴을 제공하기 시작했다. 실제로 Original MBR이 ROL 연산으로 암호화된 형태로 디스크 상에 존재하므로 해당 부분을 MBR 영역으로 복구해주면 재설치는 필요하지 않을 것이다.

변조된 MBR 분석 및 드라이버 파일 분석 등에서 막히는 부분이 많았다. 점점 디스크에 직접 접근하거나 루트킷을 사용하는 악성코드가 많아지는 추세이므로 이 부분에 대해서 더욱 보완해야 겠다.


                                                                                                    +---------------------------------+
                                                                                                    | Infinite Flow..                              |
                                                                                                    | mail : reverseinsight@gmail.com    |
                                                                                                    | Blog : http://sinun.tistory.com       |
                                                                                                    | twitter : @unpacker                      |
                                                                                                    | CISSP                                        |
                                                                                                    +----------------------------------+

저작자 표시 비영리 변경 금지
신고
Posted by By. PHR34K