리눅스 환경구축에 대한 정보가 부족할 때 쓴 옛날 글입니다. 아래 링크의 강의를 참고해서 Virtual box로 환경구축하세요..
https://dreamhack.io/lecture/courses/439
안녕하세요. System Exploitation Fundamental 강의를 들으면서 윈도우 위에 리눅스 환경을 구성하는 데 구글링 하며 고생하다가 WSL2를 통해서 어느정도 실습환경을 만들었습니다. 이 과정이 힘들었기에 저와 같은 방법으로 실습하시려는 분들을 위한 방법을 정리했습니다. 시작할 때 제 환경은 이랬습니다.
Windows 10 Pro 버전 1903(OS 빌드 18362.959), 64비트 운영 체제, x64 기반 프로세서, 가상화를 지원하는 cpu
저와 비슷한 환경이라면 다음 순서대로 했을 때 잘될 거라고 생각합니다.
1. 윈도우 업데이트
WSL2를 사용하기 위해서 윈도우 10 버전 2004로 업데이트 해야합니다. 윈도우 버전은 윈도우 키를 누르고 winver
를 타이핑해서 확인할 수 있습니다. 버전이 2004가 되어야 한다고 하니 버전이 낮다면 수동으로 업데이트 해주어야 합니다. 다음 링크로 가서 업데이트 합니다.
https://www.microsoft.com/ko-kr/software-download/windows10 (업데이트는 오래 걸립니다.)
2. WSL2 설치
윈도우 키를 누르고 Windows 기능 켜기/끄기
를 입력해서 다음 과정을 따라합니다.
Windows 기능 켜기/끄기 -> Linux용 Windows 하위 시스템 켜기, 가상 머신 플랫폼 켜기 -> 재부팅
그리고 윈도우 키를 누르고 cmd를 입력하고 엔터를 눌러서 명령 프롬프트를 연 다음
Cmd에 wsl --set-default-version 2
입력합니다.
만약 WSL 2에 커널 구성 요소 업데이트가 필요합니다. 자세한 내용은 https://aka.ms/wsl2kernel을 참조하십시오.
위에 것이 뜬다면 경로로 들어가서 시키는 대로 합니다. 저는 Linux 커널 업데이트 패키지를 다운로드하니 해결되었습니다. 시키는대로 다 하고 다시 wsl --set-default-version 2
을 입력했을 때 "WSL 2와의 주요 차이점에 대한 자세한 내용은 https://aka.ms/wsl2를 참조하세요"
이 뜨면 됩니다.
이제 우분투를 설치해야 하는데 버전은 16.04를 다운 받는게 wargame 문제의 환경과 동일하므로 이것을 다운받읍시다.
https://docs.microsoft.com/ko-kr/windows/wsl/install-manual 에서 시키는 대로 하면됩니다. 방법을 정리하면
- 윈도우 키를 누르고
microsoft store
를 입력해 마이크로소프트 스토어에 들어가고windows terminal
를 다운로드 합니다. - https://aka.ms/wsl-ubuntu-1604 을 다운받습니다.
- 다운 받은 파일을 원하는 위치에(예:
C:/files
) 둡니다. - 윈도우 키를 누르고
windows terminal
을 입력해서 파워쉘을 엽니다. Add-AppxPackage C:\files\Ubuntu_1604.2019.523.0_x64.appx
를 입력해서 설치합니다. 파일 명을 입력할 때 tab키를 누르면 전부 입력하지 않고도 자동 완성해줍니다.- 마우스가 있다면 그냥 Ubuntu_1604.2019.523.0_x64.appx를 더블 클릭해서 설치해도 됩니다.
설치하였다면 윈도우 키를 누르고 ubuntu를 입력해서 ubuntu 16.04 LTS를 실행합니다.
실행하여 아이디와 패스워드 설정하고, cmd 명령프롬프트 또는 windows powershell에 wsl -l -v
를 쳤을 때
NAME STATE VERSION
* Ubuntu-16.04 Running 2
처럼 버전 2가 잘 뜬다면 WSL2를 성공적으로 설치한 것입니다. 18.04 버전도 나중 워게임 문제에 필요한데 이건 microsoft store에 들어가면 설치할 수 있습니다.
3. 32bit 프로그램 실행하기
ubuntu 터미널에 $는 입력하지 않고 다음을 입력합니다.
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libc6:i386 libstdc++6:i386
여기까지 오면 32비트 실행 파일도 잘 실행됩니다. 잘 실행되는지 확인하기 위해 Wargame의 basic_exploitation_000 문제의 실행파일을 다운받아서 C:\files\basic_exploitation_000을 두고
$ # 이것은 주석입니다.
$ # 윈도우의 c:\files\basic_exploitation_000를 ubuntu 가상환경으로 옮기기
$ cp /mnt/c/files/basic_exploitation_000 .
$ # 실행하기
$ ./basic_exploitation_000
buf = (0xffe1c138)
잘 실행됩니다. 이제 gcc를 설치하고 32비트 실행파일로 컴파일 해봅시다.
$ sudo apt-get update
$ sudo apt install gcc
$ # c 32비트 컴파일
$ sudo apt-get install gcc-multilib
$ # c++ 32비트 컴파일
$ sudo apt-get install g++-multilib
$ cp /mnt/c/files/example0.c .
$ gcc -o example0 example.c -m32
$ ./example0
1 + 2 = 3
잘 컴파일 되는 것을 알 수 있습니다. 근데 어셈블리 코드를 보면 강의 여기에서 컴파일 한 것과 다르게 나오더라고요. 해결 방법은 모르겠습니다. 강의에서 바이너리 파일도 같이 제공하면 좋을 것 같습니다.
4. 실습 tool 설치
gdb 설치
$ sudo apt-get update
$ sudo apt install gdb
$ # at&t 문법에서 intel 문법으로 전환
$ echo "set disassembly-flavor intel" >> ~/.gdbinit
$ gdb ./basic_exploitation_000
(gdb) disas main
Pwntools 설치
Wargame문제를 푸는 데 필수적인 tool입니다.
$ sudo apt-get update
$ sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
$ pip install --upgrade pip
$ pip install --upgrade pwntools
# pip3을 설치하고 pip3 install pwntools을 하면 python3 에서도 사용 가능합니다.
$ sudo apt install python3-pip
$ python3 -m pip install -U pip
$ sudo pip3 install --upgrade pwntools
이 외에도 더 필요한 것은 강의에서 알려주고 있습니다.
좀 더 찾아보면 WSL2로 GUI도 가능하다고 하니 가상환경 위에서 vscode나 파이어폭스를 킬 수도 있을 것 같습니다.
cp /mnt/c/files/example0.c .
와 같은 방식으로 윈도우 파일을 우분투 환경으로 옮겨도 되지만, cd /mnt/c/files
명령어로 현재 디렉토리를 윈도우의 C:\files
로 옮기면 여기서 작업하는 파일에 빠르게 접근할 수 있습니다. 저는 이런 방법을 통해 코드 수정은 윈도우의 vscode로 Ctrl+S (저장하기)
단축키로 하고, 코드 실행은 터미널에서 합니다.
가장 좋은 실습 환경은 ubuntu로 부팅하는 것이지만, WSL2를 통해서 실행하는 게 저한테는 마음이 편안합니다.