윈도우 커널 디버깅을 위한 가상환경 구축

기술문서

2019. 2. 21. 23:34

윈도우 커널 디버깅을 위한 가상환경 구축

이 글에서는 Windbg, Virtualbox를 활용한 윈도우 커널 디버깅을 가상환경 구축을 기술하고 있습니다.

가상환경을 위한 Virtualbox 설치

Virtualbox Official site [LINK]

커널 디버깅의 경우 OS의 동작을 담당하는 커널을 디버깅하는 작업하기 때문에 상당한 위험이 존재합니다. 또한 분석을 위해 Break된 상태가 되면 모든 입력(키보드, 마우스)등을 처리하지 못하기 때문에 컴퓨터를 강제로 종료해야하는 부담도 존재합니다. 때문에 대부분의 커널 디버깅은 가상환경과 연결하여 진행되는데 대표적으로 VMWARE, VirtualBox가 사용됩니다. 이 글에서는 무료로 사용가능한 Virtualbox를 사용하게 됩니다.

커널 디버깅을 위한 WinDBG 설치

Visual studio 2017 community [LINK]

WDK for Windows 10 [LINK]


커널 디버깅을 하기위해서는 디버거 도구가 필요합니다. 흔히 사용되는 Ollydbg, x64dbg등은 유저 모드 디버거이기 때문에 커널과 연결해 디버깅을 할 수 없습니다. 따라서 윈도우에서 제공되는 Windbg를 통해 진행되는 Windbg는 많은 분석가들에게 사용되며 인정받는 도구이므로 충분히 안정성이 있다고 생각합니다.


Windbg의 경우 WDK(Windows Driver Kit)을 설치하면 되기 때문에 위 주소를 통해 다운받으시면 됩니다. 만약 Visual studio 2017이 설치되지 않은 경우라면 먼저 Visual studio를 설치하신 후 WDK를 설치해주시기 바랍니다.


가상환경 구성

먼저 디버깅을 하기 위한 Windows OS 환경을 구성해야합니다. Virtualbox의 경우 가상환경을 사용할 수 있지만 Windows를 포함하고 있지 않기 때문에 먼저 Windows 이미지를 받아야합니다. Microsoft에서는 개발자를 위해 다양한 종류의 가상환경 이미지를 제공하는 이곳에서 다운받으시면 됩니다.

[그림1] MS에서 제공하는 가상이미지 다운로드


원하는 Windows 환경을 선택하고, 사용중인 가상화 소프트웨어(이 글에서는 Virtualbox를 기준으로 합니다.)에 따라 선택하여 다운로드 받으시면 됩니다.


[그림2] 가상 이미지 가져오기


다운로드가 완료되면 압축을 풀고 Virtualbox를 실행합니다. Virtualbox가 실행되면 상단 메뉴에서 [파일 - 가상 시스템 가져오기(Ctrl + i)]를 눌러 다운받은 가상 시스템을 가져옵니다. 가상 시스템 가져오기 작업이 완료되면 Virtualbox 좌측 목록에 추가한 가상  시스템을 확인합니다.


[그림3] 가상 디스크의 시리얼 포트 설정


가져온 가상 시스템의 설정에 들어와 [직렬 포트] 항목에 들어가게 되면 포트1,2,3,4가 존재하는데 이 중 [포트 1]에서 "직렬 포트 사용하기" 체크를 하면 아래 항목이 활성화가 됩니다. 이 중에 "포트 모드"를 "호스트 파이프", 아래 체크박스를 해체하고 "경로/주소"에 \\.\pipe\임의이름 같은 형식의 이름을 작성합니다. 이 글에서는 \\.\pipe\kerneldbg로 사용하겠습니다.



[그림4] 가상 환경의 부트옵션 설정


이제 가상 시스템을 실행하면 정상적으로 부팅이 진행된 후 평소에 보던 Windows 7 화면을 확인할 수 있습니다. 이제 가상 시스템의 환경을 설정해야하는데 먼저 [Window + R]키를 눌러 실행 실행(Run)을 실행 후 "msconfig"를 입력합니다. 이후 Boot 탭에서 Advanced options를 클릭하여 [그림4]와 동일하게 설정합니다.


이제 가상시스템을 종료하고 Windbg 설정을 진행하겠습니다.


Windbg 설정

이제 Windbg와 가상 시스템을 연결하는 작업을 하겠습니다. 현재 MS에서 권장하는 방식은 Net방식이지만 현재 우리가 사용할 Windows 7의 경우 Net 방식이 지원하지 않으므로 시리얼 방식을 사용하도록 하겠습니다.

[그림5] Windbg 심볼서버 설정


위 WDK를 설치했다면 시작메뉴에 Windows Kit 아래에 Windbg가 존재하게 됩니다. Windbg를 실행하고 File - Symbol File Path..을 클릭하여 심볼 서버를 지정합니다.



SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols

위 부분을 드래그하여 붙여넣어면 Windbg의 설정도 마무리가 됩니다. 이제 본격적으로 Windbg와 가상 시스템을 연결하기 위해서 File - Kernel Debug... (Ctrl + K)를 누릅니다.

[그림6] 커널 디버깅을 위해 시리얼 설정


COM탭에 들어와 Port에 [그림3]에서 경로/주소에 입력한 내용을 작성하고 Pipe에 체크를 합니다. 이제 가상 시스템을 시작하고 확인을 누르게 되면 정상적으로 커널과 연결된 모습을 확인할 수 있습니다.