IDA와 보쉬(Bochs)를 이용하여 MBR 실시간 디버깅

 

MBR영역을 실시간으로 디버깅하기 위해서는 운영체제 부팅 전단계에서부터 디버거가 디버기를 제어할 수있어야 한다. Windbg는 부팅로더에서 디버거를 연결할 수 있기 때문에 이미 MBR영역에 대한 처리가 완료된 상태로 Windbg를 이용한 커널 디버깅 방법으로는 MBR영역을 분석할 수 없다.

다행히 보쉬라는 가상 머신이 IDA와 함께 이용하면, MBR영역을 분석할 수 있는 기능을 제공한다.

MBR영역은 MBR 루트킷 분석작업에 유용하게 사용될수 있고, IDA와 잘 맞는 또 하나의 가상 머신인 보쉬를 이용하여 당신의 분석 실력을 한단계 더 올려줄 것이다.

그럼 보쉬를 홈페이지 http://bochs.sourceforge.net/ 에 방문하여 설치하도록 하자.

현재 2.6.9버전까지 나와있다.

 

[그림] 보쉬 2.3.7 버전 설치

 

이후 부팅할 수 있는 가상머신을 만들기 위해, 가상 머신에 사용할 가상 디스크 이미지를 생성하여야 한다. 보쉬를 설치한 디렉토리나 프로그램 메뉴를 열어보면 bximage.exe(Disk Image Creation Tool)이 존재한다. 이를 실행하여, 적당한 크기의 가상 디스크 이미지를 생성하도록 하자
예제에서는 hd(디스크타입), flat(이미지타입), 1000(용량, MB단위), mbr.img(이미지이름)로 생성하였다.

 

[그림] 보쉬 디스크이미지 생성

 

이렇게 옵션을 주면 가상 디스크 이미지를 생성하는데, 생성하면서 보쉬에서 디스크를 추가할 때 주어야하는 설정값을 같이 알려준다. 이를 클립보드, 메모장등을 통해 복사해 두었다가 아래와 같이 메모장을 열고 아래와 같이 좀전에 만든 디스크 이미지와 운영체제 설치 시디를 ata0-master와 운영체제 설치 이미지를 ata0-slave로 설정하고 메모리를 megs 옵션을 사용해 256MB으로 설정을 아래 텍스트와 같이 입력후, 확장자를 bxrc로 지정하면 보쉬 가상머신을 실행 할 수 있는 준비가 완료 된다.

 

[그림] 보쉬 가상머신 설정 파일

 

이 상태로 그대로 사용할 수도 있지만, 좀더 자세히 정보를 수정하고 싶다면, 보쉬에서 제공하는 편집기능을 이용하는 것이 편리하다. 보쉬를 저자와 같이 인스톨 버전으로 설치하였다면 bxrc 확장자가 자동 등록되며 마우스 오른쪽 메뉴를 사용할 수 있는데, Configure 메뉴를 통해 세부적인 가상 머신의 설정을 변경할 수 있다.

 

[그림] 보쉬의 다양한 설정을 GUI를 이용하여 활용할 수 있다.

 

이를 통해 수정후 저장하게 되면, 각 옵션값을 생성하여 아래 내용과 같이 저장된다.

아래 내용을 필요에 따라 수정하여 사용하면 된다.

 

# configuration file generated by bochs

 

plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, gameport=1, pci_ide=1, acpi=1, ioapic=1

config_interface: win32config

display_library: win32

memory: host=256, guest=256

romimage: file=”C:\Program Files (x86)\Bochs-2.4.5/BIOS-Bochs-latest”

vgaromimage: file=”C:\Program Files (x86)\Bochs-2.4.5/VGABIOS-lgpl-latest”

boot: disk, cdrom

floppy_bootsig_check: disabled=0

# no floppya

# no floppyb

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

ata0-master: type=disk, mode=flat, translation=auto, path=”mbr.img”, cylinders=2031, heads=16, spt=63, biosdetect=auto, model=”Generic 1234″

ata0-slave: type=cdrom, path=”ko_WinXP_sp2.iso”, status=inserted, biosdetect=auto, model=”Generic 1234″

ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15

ata2: enabled=0

ata3: enabled=0

parport1: enabled=1, file=””

parport2: enabled=0

com1: enabled=1, mode=null, dev=””

com2: enabled=0

com3: enabled=0

com4: enabled=0

usb_uhci: enabled=0

usb_ohci: enabled=0

i440fxsupport: enabled=1

vga_update_interval: 50000

vga: extension=vbe

cpu: count=1, ips=4000000, reset_on_triple_fault=1, ignore_bad_msrs=1

cpuid: cpuid_limit_winnt=0, mmx=1, sse=sse2, xapic=1, sep=1, aes=0, xsave=0, movbe=0, 1g_pages=0

print_timestamps: enabled=0

port_e9_hack: enabled=0

text_snapshot_check: enabled=0

private_colormap: enabled=0

clock: sync=none, time0=local

# no cmosimage

ne2k: enabled=0

pnic: enabled=0

sb16: enabled=0

# no loader

log: –

logprefix: %t%e%d

panic: action=ask

error: action=report

info: action=report

debug: action=ignore

pass: action=fatal

keyboard_type: mf

keyboard_serial_delay: 250

keyboard_paste_delay: 100000

keyboard_mapping: enabled=0, map=

user_shortcut: keys=none

mouse: enabled=0, type=ps2

[내용] 보쉬 가상머신 환경 설정 파일

 

이렇게 만들어진 가상 머신을 실행하여, 운영체제를 설치하도록 하자. 물론 MBR영역이 필요하므로, 플로피 디스크 타입으로 만들어 사용하여도 되며, 인터넷에 공개된 디스크 이미지를 사용하여도 된다. 이유인즉 보쉬는 일반적인 가상 머신 보다 실행 및 설치 속도가 상당히 느리다. 윈도우 XP를 설치하는데 샛업파일 복사에만 20-30분가량 소요되니, 만약 보쉬를 이용하여 운영체제를 설치한다면 상당한 인내심이 필요할 것이다. J

IDA Pro를 제공하는 Hex-rays에서 제공하는 블로그의 글 http://www.hexblog.com/?p=103을 통해 mbr 영역 이미지와 어셈블리 코드를 얻을 수 있으며, IDA 활용 팁도 확인 할 수 있으므로 꼭 방문해 보기 바란다.

 

[그림] 보쉬를 이용한 윈도우XP 설치

 

설치가 잘 마무리 되었다면(혹 이미지를 구했다면) 정상적으로 실행가능한지 보쉬에서 제공하는 디버거를 이용하여 테스트를 해보자 테스트는 아래와 같은 명령을 이용하여 진행 할 수 있다.

 

bochs dbg –f “확인하고자하는가상머신” -q

[내용]보쉬 가상머신 실행에 문제가 없는지 확인

 

만약 실행중 잘못된 구분이나 오류가 있다면 해당 행과 오류 구분을 표시하여 해당 부분을 조치 할 수 있다.

 

[그림] 가상머신에 오류가 있는 경우 손쉽게 확인할 수 있다.

 

이제 막바지로, IDA 설정 내용을 확인 할 차례이다.

아래와 같이 Debugger->Run->Local bochs debugger를 선택하거나, File->Open을 이용하여 MBR 분석을 위해 만들어둔 가상 머신을 열면 된다.

 

(아래 그림과 같이 Open메뉴를 이용해 보쉬 가상머신을 실행할 수있다.)

 

[그림] IDC의 보쉬 환경 설정 파일 연결 설정

 

단 MBR을 컴퓨터 부팅중 초기작업에 시작되므로, 디버깅 시작과 동시에 일시정지를 걸어두면 편리하기 때문에 아래와 같이 Debugger setup 메뉴의 Stop on debugging start 설정을 체크하도록 하자.

 

[그림] 디버깅 시작시 바로 일시정지하도록 설정

 

모든 설정을 완료하였다면 이제 bochsdbg.exe의 경로를 지정하면 완료가 되는데, IDA Pro 6.0 이하 버전이라면 bochsdbg 실행파일의 위치를 지정이 올바른지 Debugger setup 메뉴위 Set specific options을 통해 확인해 보도록 하자.

 

[그림]IDA 6.0이전 버전의 bochsdbg.exe가 설치된 디렉토리지정

 

IDA 6.0 이후 버전부터는 위와 같은 bochsdbg설정항목을 제공하지 않는다. 운영체제에서 set path명령을 통한 환경변수를 선언해 주어야 해당 변수의 값을 참조하여 bochsdbg 위치를 확인한다.

환경 변수는 다음과 같이 설정 가능하다.

 

set BXSHARE=”보쉬설치경로”

[내용]IDA 6.0이후 버전에서는 BXSHARE 환경 변수를 참조

 

만약 BXSHARE 변수로 bochsdbg.exe의 경로를 확인할 수 없을 경우 아래와 같은 오류가 나타나며, 디버깅 진행이 중지 된다.

 

[그림] bochsdbg.exe를 찾을 수 없다는 오류메세지

 

이는 아래와 같이 내컴퓨터에서 마우스 오른쪽 메뉴인 속성을 통해 시스템 변수로 등록하거나 Set path명령을 통해 등록 하자.

 

[그림] 운영체제 환경변수에 보쉬 경로 설정

 

여기까지 구성하였다면, 이제 아래와 같이 IDA를 통한 MBR 실시간 디버깅 가능하다.

이와 같은 구성은 악성코드 및 응용프로그램을 보쉬가 제공하는 가상화에서 분석을 진행할 때에도 용의하므로 사전에 보쉬와 연동이 가능하도록 IDA를 구성해 놓으면 편리하다.

 

[그림]MBR 영역에서 실시간 디버깅 할 수 있다.

END

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.