윈도우 커널 디버깅을 위한 가상환경 구축
가상환경을 위한 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를 설치해주시기 바랍니다.
가상환경 구성
[그림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 설정
[그림5] Windbg 심볼서버 설정
[그림6] 커널 디버깅을 위해 시리얼 설정
COM탭에 들어와 Port에 [그림3]에서 경로/주소에 입력한 내용을 작성하고 Pipe에 체크를 합니다. 이제 가상 시스템을 시작하고 확인을 누르게 되면 정상적으로 커널과 연결된 모습을 확인할 수 있습니다.