Post

UTM 환경 구축 및 도커 설정

인텔 맥을 사용하다가 M시리즈 맥북을 구매하게 되었는데, Wargame을 풀기위해서 x64 환경이 필요했습니다. 따라서, UTM과 Docker를 이용해서 환경 구축을 진행해서 환경 구축 방법을 알려드리겠습니다.

0환경구축 결과

완성한다면 위처럼 하나의 가상환경에서 ubuntu 버전별로 실행할 수 있습니다.

다운로드!!

  • 링크에 들어가서 UTM을 설치합니다.
  • ubuntu server를 다운 받습니다.
    • 저 같은 경우 22.04 버전을 설치했습니다.

설치 방법

우선 UTM과 iso를 전부 다운 받으면 UTM을 실행시켜서 가상환경을 구축합니다.

💡 별도의 언급이 없으면 기본값으로 설정하면 됩니다!

  1. 새 가상머신 만들기를 클릭합니다.

    1UTM 설정 1

  2. 새로운 아키텍쳐 환경을 구축할 것이기 때문에 Emulate를 클릭합니다.

    2UTM 설정 2

  3. 아까 다운로드 받은 iso 파일을 Boot ISO Image에 넣어줍니다.

    3UTM 설정 3

  4. 이후, 메모리와 CPU Cores, Storage의 값만 원하는 값으로 변경하고 기본값으로 유지합니다.
  5. 원한다면 공유 폴더를 지정해 줍니다. 다만, 저같은 경우 여러개의 UTM 가상환경을 구축한 경우 같은 공유 폴더를 공유하면 에러가 발생했습니다.
    • 공유 폴더를 지정했다면, 환경구축이 끝난 후 아래의 공유 폴더 설정 항목을 보시기 바랍니다!

    4UTM 설정 4

  6. 부팅하기전 다음 그림처럼 시스템 항목의 멀티코어 강제 활성화를 체크해줍니다.

    5UTM 설정 5

  7. 이후, 가상환경을 부팅하고 아래의 OpenSSH Server를 제외한 전부 기본값으로 설치를 진행합니다.

    6UTM 설정 6

  8. reboot하라는 메세지가 뜨면 iso 파일을 추출하고 재부팅합니다.

이까지 따라하셨다면 기본적인 환경구축은 끝나게 됩니다. 이후, 원하는대로 ubuntu를 설치하면 됩니다.

SSH 설정

OpenSSH Server를 설정했기 때문에, Host에서 ssh를 통해 Guest인 UTM 가상환경에 접속이 가능합니다. 다음과 같이 Guest의 ip 주소를 알아야지 접속할 수 있습니다.

1
2
3
4
5
6
7
8
9
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet **192.168.64.5**  netmask 255.255.255.0  broadcast 192.168.64.255
        inet6 fe80::9c95:32ff:fe68:c042  prefixlen 64  scopeid 0x20<link>
        inet6 fdf0:8099:95c2:dab3:9c95:32ff:fe68:c042  prefixlen 64  scopeid 0x0<global>
        ether 9e:95:32:68:c0:42  txqueuelen 1000  (Ethernet)
        RX packets 121  bytes 44835 (44.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 89  bytes 15655 (15.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

저는 ip 주소를 입력해서 들어가는 것도 귀찮았기 때문에 /etc/hosts의 설정을 다음과 같이 변경해서 도메인으로 접속을 하고 있습니다.

  • 아래의 값에서 ip 주소와 도메인만 변경하면 도메인으로 접속할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
**192.168.64.5** utm.ubuntu22.04

공유폴더 설정

공유폴더 설정 이후, ubuntu에서 아래의 작업을 진행해야 정상적으로 작동하게 됩니다.

우선 관련 패키지를 설치합니다.

1
2
sudo apt install spice-vdagent
sudo apt install spice-webdavd

이후, 다음과 같이 원하는 경로에 mount를 해줘야 공유폴더가 활성화 됩니다.

1
2
sudo mkdir [mount point]
sudo mount -t 9p -o trans=virtio share [mount point] -oversion=9p2000.L

부팅 시 마다 mount 명령어를 실행해야하는 번거로움이 있었습니다. 그래서 저는 Docker와 함께 서비스를 등록해서 부팅시 자동으로 mount되게 설정해줬습니다.

Docker 설정

Wargame을 풀 때 다양한 ubuntu 환경이 필요하게 됩니다. 따라서, 다음과 같이 환경 구축한 ubuntu에 Docker를 이용해서 다양한 환경도 추가적으로 구축했습니다.

💡 제가 빌드할때 사용한 Dockerfile은 링크에 있습니다.

  1. Docker를 빌드했다면 아래의 명령어를 이용해서 실행합니다.
    • Host에서 바로 Docker로 접속할 수 있게 Docker의 ssh도 활성화해서 아래와 같이 포트를 지정했고, Host와 Guest인 UTM의 공유폴더도 Docker에서 공유를 함으로써 Host와 Docker도 폴더를 공유하게 지정했습니다.
1
docker run -d --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -p 10002:22 -v /root/MacShared:/root/MacShared --name ubuntu22.04 hogbal/hack_intel:ubuntu22.04
  1. /etc/init.d에 쉘 스크립트를 작성합니다.
    • 공유 폴더를 지정했기 때문에 mount 명령과 Docker를 전부 시작하는 명령을 포함시켰습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh
### BEGIN INIT INFO
# Provides:          docker_pwnable
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: hogbal docker pwnable
# Description:       hogbal docker pwnable auto start
### END INIT INFO

mount -t 9p -o trans=virtio share /root/MacShared -oversion=9p2000.L

MOUNT_PATH=/root/MacShared

start() {
	docker start ubuntu18.04
	docker start ubuntu20.04
	docker start ubuntu22.04
}

stop() {
	docker stop ubuntu18.04
	docker stop ubuntu20.04
	docker stop ubuntu22.04
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac
  1. 해당 파일에 실행권한을 부여합니다.
1
chmod +x [shellscript]
  1. 다음의 명령어와 같이 부팅할 때 실행하게 설정을 변경합니다.
1
sudo update-rc.d [shellscript] defaults

이렇게 설정을 완료하면 부팅할 때 마다 해당 스크립트 파일이 실행되기 때문에 원하는 명령어를 입력해서 Custom하면 편하게 사용할 수 있습니다.

여기까지 따라하셨다면, M시리즈 맥북에서도 x64 환경을 이용해서 Wargame 문제를 풀기위해 디버깅 및 실행이 가능합니다.

This post is licensed under CC BY 4.0 by the author.