최근 수정 시각 : 2024-12-12 21:31:35

가상머신

가상 머신에서 넘어옴
1. 가상 머신이란2. 사전지식3. 원리
3.1. 세부 용어 및 기술 설명
3.1.1. 에뮬레이션, 가상화, 반가상화3.1.2. Binary Translation
4. 가상 머신 생성용 프로그램
4.1. 범용4.2. x86/x64 계통 가상 머신 전용
5. 목적6. 사용법
6.1. QEMU 사용법6.2. VirtualBox 사용법
6.2.1. VirtualBox 다운로드6.2.2. Ubuntu 다운로드6.2.3. Ubuntu 설치
6.3. VMware 사용법
6.3.1. VMware Workstation 사용법
6.3.1.1. Ubuntu 설치
6.3.2. VMware Fusion의 사용법
6.3.2.1. Ubuntu 설치
6.4. 클라우드 가상 머신
7. 취약점8. 탐지 우회9. 관련 문서

1. 가상 머신이란

물리적으로 존재하는 컴퓨터가 아닌, 다른 컴퓨터가 만들어내는 가상의 컴퓨터를 말한다. 즉 컴퓨터 안에 있는 컴퓨터인 셈이다. 그래서 가상 머신으로 돌린 컴퓨터에서 가상 머신을 돌리는 것도 가능하다. 또는 자바 가상 머신처럼 특정 언어로 쓰여진 프로그램을 돌리기 위한 인터프리터를 가리키기도 한다.

가상머신의 개념 자체는 컴퓨터가 보급되기 이전부터 존재했다. 보편 튜링 머신은 어떤 다른 튜링 머신을 모사할 수 있는 튜링 머신으로 정의되었다. 오늘날에 널리 사용되는 많은 종류의 컴퓨터들이 보편 튜링 머신의 구현체이다. 보편 튜링 머신은 모든 튜링 머신을 모사할 수 있기 때문에 보편 튜링 머신인 컴퓨터는 튜링 머신인 다른 컴퓨터를 모사할 수 있다.

무언가를 에뮬레이션하는 것이라면 어떤 소프트웨어든 가상 머신이다. 하드웨어든 소프트웨어든 상관없다. 대표적으로 JVM은 기계어를 에뮬레이션하는 가상 머신이다. 사실 에뮬레이션으로만 가상머신을 만들면 매우 느려지기 때문에 그렇게 하는 경우는 거의 없다. 그래서 가상 시스템에서 실행되는 명령어 중 원래 시스템에서 그대로 실행해도 무방한 명령어는 그대로 CPU에서 실행시키고, 그렇지 않은 명령어는 에뮬레이션한다.

가상 머신은 크게 프로세스 가상 머신과 시스템 가상 머신으로 나뉘는데, 프로세스 가상 머신은 본 문서에서 언급되지 않는다. 프로세스 가상 머신은 하나의 프로세스만을 위해 생성되고 그 프로세스가 끝나면 없어지며(앱 인벤터2의 가상 머신 등), (일반적으로) 실제로 존재하지 않는 기계를 에뮬레이트하고, 프로그래밍 언어의 하드웨어 추상화를 위해 사용된다. 오라클의 HotSpot(Java 바이트코드), MS의 .NET과 Mono(CIL), 에릭슨의 BEAM( Erlang, Elixir, LFE 등), 구글의 Dalvik( JVM 바이트코드 등)이 대표적이다. 예외적인 경우로 윈도의 시스템 콜을 가상화하는 Wine도 들 수 있다.

이후부터 현 문서에서 가상 머신이라고 하면 시스템 가상 머신을 의미한다.

Windows 10의 '가상 데스크탑' 기능과는 다르다. 이것은 그냥 '데스크탑'이라는 디스플레이를 여러 개 만들어 작업을 수월하게 한 것인데, 쉽게 말해 좁은 책상 하나에 여러 교과서를 펼쳐 둔 게 아니라 책상 여러 개에 교과서를 하나씩 두고 책상 사이를 오가는 것과 같다. 다르게 말하면 모니터는 하나인데 거기에 딸린 바탕 화면이 여러 개라고 생각하면 편하다. 듀얼모니터 이상 구성이라면 모니터 숫자만큼 곱해져서 적용된다. OS X의 Mission Control과 유사하다. 옛날에 '더블모니터'라고 알려진 'Shock4Way'라는 프로그램의 기능이라고 보면 된다.

2. 사전지식

3. 원리

CPU, RAM, 하드디스크 등 컴퓨터의 주요 부품들을 가상으로 만들어서 구동하는 식으로 동작한다.
가상으로 만들기 위해서는 각 부품들의 기능을 소프트웨어적으로 구현할 필요가 있다.

데스크톱 CPU의 하드웨어 지원의 경우, 인텔 CPU에서는 VT-x(VT-d), AMD CPU에서는 AMD-V( AMD FX 시리즈까지)/SVM( AMD RYZEN 시리즈 이후부터)이 활성화되어야 제대로 된 사용이 가능하다.

3.1. 세부 용어 및 기술 설명

3.1.1. 에뮬레이션, 가상화, 반가상화

모든 부품의 모든 기능을 소프트웨어적으로 구현하는 방식을 에뮬레이션이라고 부른다. 이 방식은 정의 상 가장 속도가 떨어지는 방식이나, 범용성은 가장 뛰어나다. 예를 들면, Bochs를 사용하면 ARM 계열의 스마트폰 위에서 x86 가상 머신을 만들어 윈도우 등의 x86 운영체제를 설치할 수 있으며, QEMU를 사용하면 x86 플랫폼에서 ARM 계열 가상 머신을 만들어서 안드로이드를 설치할 수 있다.

반면, CPU 등 주요 부품의 구현에서 하드웨어의 기능 지원을 받으면 가상화라고 부른다. 이러한 가상화는 속도가 빠르다는 장점이 있으나, 해당 하드웨어 기능에 크게 종속되기 때문에 범용성이 상대적으로 떨어진다. 예를 들면, CPU를 가상화 형식으로 구현하면 실제 컴퓨터의 CPU가 처리할 수 있는 기계어 세트에서 크게 벗어나는 가상 CPU를 지원할 수 없게 된다.

마지막으로, 완전한 에뮬레이션/가상화를 포기하고, 가상 머신 내에 설치될 OS에 수정을 가하거나 전용 드라이버를 사용하여 하드웨어에 직접 접근하는 방안을 별도로 마련하는 방법이 있으며, 이는 반가상화라 부른다. 이 방안은 속도가 가장 빠르나, 하드웨어 기능 뿐만이 아니라 운영체제 및 드라이버에도 종속성이 생기기 때문에 범용성은 가장 떨어진다.

CPU를 예시로 들면, 가상 머신 내부에서 가상 CPU 모델을 구축하여 가상 머신에서 명령어가 수행될 때마다 가상 CPU가 처리할 내용을 모델에 따라 업데이트하는 방식은 에뮬레이션에 해당하고, 가상 머신의 명령어를 대부분 실제 CPU에서 직접 실행하나, 일부 특수 케이스에 해당하는 명령어들만 별도 처리를 하는 방식은 가상화에 해당한다. 그리고 문제가 있는 기계어 부분을 미리 다른 명령어로 대체하고, 관련 기능을 사용할 땐 하이퍼바이저와 별도 통신 채널을 활용하는 등의 기법이 반가상화에 해당한다.

CPU 가상화에서, Binary Translation과 같이 가상 머신에서 실행하는 기계어 코드를 동적으로 수정하는 방식과, 하드웨어 자체에서 제공하는 가상화 지원 기능을 활용하는 방법이 있다. 현재 나오는 대부분의 x86/x64 CPU 는 CPU 및 RAM 에 대한 가상화를 돕는 기능을 지원하며, VT-x 등이 이에 해당한다.

더 간단히 요약하자면
에뮬레이션 | 모든 걸 소프트웨어적으로 구현
가상화 | 주요 부품의 구현에서 하드웨어적 지원을 받음
반가상화 | 100% 완벽한 에뮬레이션, 가상화를 포기한 방법

퍼포먼스와 범용성을 비교하면 아래와 같다.
퍼포먼스 (속도)
에뮬레이션 < 가상화 < 반가상화
범용성
반가상화 < 가상화 < 에뮬레이션

3.1.2. Binary Translation

과거에 사용되던 가상화 기법 중 하나. 하드웨어 가상화 지원이 개발되기 전부터 VMware 사에서 애용하던 기법이다. 가상 머신에서 호출되는 기계어 중, 실제 컴퓨터에서 그대로 호출하면 안 되는 기계어 명령(x86의 링0 권한 등 특수 권한이 필요한 명령어 등)을 발견할 경우 해당 코드만 다른 내용으로 고쳐서 실행하는 방식이다. 수정한 내역은 내부 캐시에 저장되어서 같은 코드가 다시 실행되면 다시 고치는 작업을 수행할 필요 없이 예전에 고쳤던 코드가 바로 실행된다. 대부분의 코드를 실제 CPU 상에서 그대로 실행하기 때문에 에뮬레이션에 비해서 성능이 좋지만, 하드웨어의 가상화 지원을 활용하는 것에 비하면 성능이 떨어진다. 단, 1세대 하드웨어 가상화 지원은 상당히 효율이 떨어졌기 때문에 당시에는 Binary Translation이 더 성능이 좋았다.

4. 가상 머신 생성용 프로그램

4.1. 범용

4.2. x86/x64 계통 가상 머신 전용

5. 목적

컴퓨터 안에 다른 컴퓨터를 만든다는 특성상, 가상 머신의 용도는 무궁무진하다.
  • 하나의 컴퓨터로 동시에 서로 다른 2개 이상의 운영체제를 실행하고 싶을 때 (특히 서로 호환되지 않는 프로그램을 원하는 경우)
    • UNIX Linux[1]
    • Microsoft Windows의 타 언어 버전
    • 하위버전 Windows, 특히 Windows XP 때 쓰였던 인터넷뱅킹 및 각종 공문서 수발 프로그램이나 닷넷 프레임워크 관련 프로그램[2]에서 유용하다. 본컴에서 증명서발급 등이 먹히지 않는 경우 가상 XP에서는 웬만하면 잘 된다. 하지만 일부는 가상 머신에서 실행하는 걸 막아서 본컴에 모듈을 까는 걸 강요받는데, 우회하면 되긴 한다.
    • 해당 Windows가 하드웨어 지원이 안 되는 경우, 이를 우회할 수도 있다. 가령 Windows XP는 Intel 스카이레이크 제품군에, Windows 7 Intel 커피레이크 제품군에 설치가 되지 않으나, 상위 버전 Windows의 가상 머신에 올려놓고 정상적으로 사용할 수 있다. 멀티코어 프로세서를 사용한 시스템에서 정상적인 사용이 되지 않는 Windows 9x 역시 가상 머신 위에서는 잘 돌아간다. 다만 SMT를 쓰는 경우 제대로 된 실행이 되지 않는다.
    • macOS[3]
  • 하나의 컴퓨터의 자원을 여러 명에게 나누어 주고 싶은데, 각 사용자 간의 상호 간섭을 없애고 싶을 때
    • 21세기 들어서 널리 사용되는 클라우드 등에서 사용하는 가상 머신이 이러한 경우에 해당한다.
  • 컴퓨터의 다른 부분에는 영향을 주지 않는 독립 환경을 만들고 싶을 때
    • 인터넷 뱅킹, 결제 등의 목적으로 각종 보안 프로그램, 인증 프로그램을 덕지덕지 깔아야 하는 경우, 메인 데스크탑에서 이렇게 하면 시스템에 악영향을 미치므로 가상 머신을 활용할 수 있다.
    • 악성코드 분석 등을 할 때 실수로 컴퓨터 전체가 감염되지 않도록 가상 머신을 사용하는 방법 등이 있다. 다만 해커나 금융권의 ActiveX, 안티 치트 등의 개발자들이 자신을 분석하지 못하게 가상 머신를 감지하는 기능이 들어가있는 경우가 있다. 이 경우 아래 무력화 방법으로 무력화하거나 실제 PC를 어느 컴퓨터와도 연결되지 않은 환경으로 구성 후 테스트한다.
    • 웹하드 비트토렌트[4]도 가상 머신에서 돌리면 본 컴퓨터에 영향을 끼치지 않고 마음껏 다운받을 수 있다. 웹하드의 문제는 액티브X 그리드 프로그램으로 인해 컴퓨터 자원을 윈도우 시작과 동시에 잡아먹기 시작한다는 점인데, 가상 머신을 쓰면 그런 문제가 한 번에 해결된다.
    • cmd /c rd /s /q c:\ 또는 rm -rf / 같은 것을 실험해 볼 때 (본컴에서 절대로 따라하면 안 된다.)[5]
    • 셰어웨어 날짜 제한을 우회하는 경우. 실제 PC에 설치 시 사용 흔적이 남기 때문에 사용 기한이 지날 때마다 프로그램 설치 전 스냅샷으로 되돌린 후 재설치하는 방식으로 계속 사용할 수 있다. 물론 저작권법 위반이며 회사에서 적발 시 가상머신[6]+윈도우[7]+셰어웨어 삼중으로 처벌받을 수 있다.
    • 장치 드라이버 같은 것을 개발할 때 사용하면 편하다. 드라이버를 개발하다 보면 커널 패닉을 수도 없이 보게 될 것이기 때문이다.

에뮬레이션의 범용성이 반드시 필요한 경우를 제외하면 성능을 위하여 가상화 기법 또는 반가상화 기법을 사용하는 경우가 많다. 실제로 가상화 기법을 적용한 x64 가상 머신의 동작 속도는 실제 컴퓨터의 동일 스펙 컴퓨터에 비하여 5~10%의 성능 저하도 보이지 않는 경우가 많다.

6. 사용법

6.1. QEMU 사용법

파일:상세 내용 아이콘.svg   자세한 내용은 QEMU 문서
번 문단을
부분을
참고하십시오.

6.2. VirtualBox 사용법

* 본 문단은 2016.05.10을 기준으로 작성하였으며, 이후 변동이 있을 수 있다. 사실 2017년 즈음 WSL (윈도우 서브시스템 리눅스)가 나오면서 Windows 10에서 우분투 18.04를 설치하기 위해서는 더 이상 가상 머신을 이용해야 할 필요가 없다.
* 본 문단은 Windows 10에서 VirtualBox 5.0을 사용하여 Ubuntu 16.04 LTS를 설치하는 방법에 대하여 서술하였다.
* 따라서, 본 문단을 읽고 가상 머신을 사용할 경우에는 본인의 컴퓨터 사양, 운영체제, 등을 먼저 확인한 후에 아래 과정을 따라하기 바란다.

6.2.1. VirtualBox 다운로드

1. http://virtualbox.org접속, "Download VirtualBox 7.0" 클릭
2. "for Windows host"우측 청색 링크 클릭[8]
3. 브라우저 내에서 자동 다운

6.2.2. Ubuntu 다운로드

1. https://ubuntu.com 접속
2. 상단 배너의 "Download"버튼 클릭
3. "Ubuntu Desktop" 주황색 링크 클릭
4. 우측 황색의"Download" 클릭
5. 기부창이 나오는 데 기부하고 싶지 않다면 적색의 "Not now, take me to the download >" 링크 클릭
6. 다운로드[9]

6.2.3. Ubuntu 설치

1. VirtualBox 실행, 상단 메뉴의 "새로 만들기" 항목 클릭
2. 청색"이름 및 운영체제" 항목이 뜨면, 이름에 사용자가 원하는 이름 입력, 종류 항목을 "Linux"로 변경, 버전(V)항목은 "Ubuntu(64-bit)"로 선택
3. "다음 (N)" 클릭
4. "메모리 크기"항목의 바의 컨트롤러 부분을 조절해 가상 OS의 메모리 크기를 지정해 준다. 보통 기본값은 2048MB로 되어 있다.
5. (3)과정 반복
6. "하드디스크"항목 내용 무시, 하단의 "만들기"클릭
7. "하드 디스크 파일 종류"항목 내용 무시,하단의 "다음 (N)"클릭
8. "물리적 하드 드라이브에 저장"항목 내용 무시, 하단의 "다음 (N)"클릭
9. "파일 위치 및 크기"항목의 (용량 조절)바의 컨트롤러 부분을 조절해 가상OS의 하드 드라이브 용량 크기를 지정한다. 보통 추천값은 10GB이다.
10. (3)과정 반복
11. 위의 일련의 과정을 거치면, 상단 바에 청색 화살표와 "시작(T)"로 표기된 버튼 클릭
12. "시동 디스크 선택"창의 폴더 탐색 버튼(아이콘으로 표기) 클릭 후, 컴퓨터 탐색기 내에서 다운받은 (Ubuntu-'이하생략') 이미지 파일(ISO)을 열고 하단의 "시작"버튼 클릭
13. 부팅이 완료되기 전까지 대기
14. 부팅이 완료되면 좌측 언어 선택 메뉴에서 "한국어"를 선택
15. 우측 "Ubuntu 설치" 버튼 클릭
16. 다음 내용 무시, "계속" 클릭
17. "설치 형식" 항목 무시 후, 우측 하단의 "지금 설치(I)" 클릭[10]
18. "어디에 살고 계신가요?" 항목 서울 지역대 선택 후, "계속" 클릭
19. "키보드 배치" 항목에서 좌측 메뉴에서 "한국어"선택 후 "계속" 클릭
20. 사용자 정보대로 "당신은 누구십니까 "항목 설정 후 "계속" 클릭
21. "우분투를 사용해주셔서 감사합니다" 항목을 보며 대기

6.3. VMware 사용법

VMware 사이트
  • VMware의 공식사이트에 접속하도록 한다.

6.3.1. VMware Workstation 사용법

6.3.1.1. Ubuntu 설치
* 본 문단은 Windows 10에서 VMware Workstation을 사용하여 Ubuntu 18.04 LTS를 설치하는 방법에 대하여 서술하였다.
* 따라서, 본 문단을 읽고 가상 머신을 사용할 경우에는 본인의 컴퓨터 사양, 운영체제, 등을 먼저 확인한 후에 아래 과정을 따라하기 바란다.
  1. VMware Workstation을 구매한다. 또는 무료 버전을 사용할 수도 있다.
  2. 자신이 설치를 원하는 운영체제의 이미지 파일을 구한다. 파일 확장자는 ~.iso이다. 언락커 등으로 macOS를 깔 때는 설치 이미지가 dmg가 아닌지 꼭 확인해야 한다(Ex. Windows 10.iso).
  3. VMware Workstation을 실행 한 후 안내에 따라 설치한다.

6.3.2. VMware Fusion의 사용법

6.3.2.1. Ubuntu 설치
* 본 문단은 OS X El Capitan에서 VMware Fusion 8을 사용하여 Ubuntu 16.04를 설치하는 방법에 대하여 서술하였다.
* 따라서, 본 문단을 읽고 가상 머신을 사용할 경우에는 본인의 컴퓨터 사양, 운영체제, 등을 먼저 확인한 후에 아래 과정을 따라하기 바란다.
  1. VMware Fusion을 구매한다. 본인이 Mac 사용자라면 필수적으로 VMware "Fusion"을 구매해야 한다. 2019.01.29 기준으로 VMware Fusion은 11버전까지 출시됐고 일반 버전과 Pro 버전이 있다. 일반 유저라면 Pro보다는 일반 버전을 구매하는 것을 추천한다.
  2. 자신이 설치를 원하는 운영체제의 이미지 파일을 구한다. 파일 확장자는 ~.iso이며, dmg가 아니다(Ex. Windows 10.iso).
  3. VMware Fusion를 실행한 후 안내에 따라 설치한다.

6.4. 클라우드 가상 머신

Amazon Web Services의 EC2와 Google Cloud Platform에서 제공하는 Google Compute Engine (GCE)에서 인스턴스 (개체)를 생성하면 된다.

유닉스 및 리눅스 OS가 설치된 가상 머신인 경우에는 SSH 프로토콜로 통신하고 디폴트로 명령중 기반 인터페이스로 사용하게 된다. 터미널과 클라이언트 사이에 X11 포워딩 환경을 구축하면 GUI도 사용 가능하다.

Windows Server 시리즈 OS가 설치된 가상 머신인 경우에는 Windows 클라이언트에 기본적으로 설치된 원격 데스크톱 연결 프로그램을 통해 RDP 프로토콜로 연결한다.

7. 취약점

가상 머신에도 취약점이 존재할 수 있다. 다만 상용 가상 머신 취약점은 정보가 자세히 공개되어 있지 않고, Pwn2Own이나 PwnFest 등의 컨테스트에서나 등장한다. 물론 여기서는 규칙상 취약점 정보를 공개하지도 않는다(일정 기간 후에 당사자가 공개할 수는 있음). 실제로 이를 사용한 악성코드도 거의 없다. 따라서 가상 머신의 취약점을 이용하여 악성코드가 가상 머신을 벗어나 감염시키는 경우는 흔하지 않으나, 네트워크 취약점을 이용한다면 이야기가 달라지는데, SMB의 취약점(이를 사용하는 대표적인 것은 WannaCry) 또는 기타 취약점을 이용하여 네트워크를 통해 Guest에서 Host로 감염될 수 있다. 하지만 Host에서 보안 업데이트를 꾸준히 한다면 이 방법이 불가능하지만, 2019년 이후로 Windows XP SP1 등 지원이 중단된 운영체제에서 랜섬웨어가 가상 머신 내에서 감염된 뒤 가상 머신을 벗어나 실제 사용자의 호스트 컴퓨터까지 감염시켜버리는 사례가 흔해졌다. #[깨진_링크] 이를 VM Escape라고 한다. 가상 머신 사용이 늘어남에 따라 해커 및 크래커들, 심지어 안티 치트 등의 방어 솔루션에서도 관심이 큰 기술이다.

네트워크 외의 취약점으로 가상 머신을 벗어날 수 있다. 버추얼박스 확장팩, VMware Tools 등의 게스트 관리 프로그램의 취약점을 이용하기도 하며, 장치나 디스플레이 드라이버의 취약점을 이용하기도 한다. 공개된 가상 머신에도 취약점이 몇 개씩 있다. Hyper-V도 역시 취약점이 몇 개 발견된다.

8. 탐지 우회

특정 레지스트리를 편집하거나 # 추가 기능을 설치하지 않으면 우회할 수 있다. 단 추가 기능을 설치하지 않으면 반쪽짜리가 되어버려 일부 기능을 사용할 수 없는 문제가 생긴다.

VMware의 경우 오른쪽 링크의 설명대로 하면 된다. 그러나 일부 넥슨 게임에서는 막힌다고 한다. #

9. 관련 문서



[1] 참고로 가상머신은 GPU 가속을 지원하지 않으니 주의. [2] TI-89 계산기를 컴퓨터에 연결할 때 등이 해당된다. 윈도우 7에서 하면 닷넷 프레임워크 하위 버전을 깔아야 하는데 이후 ANSYS 프로그램이 돌아가지 않아 재포맷해야 한다. [3] 사실 Apple의 OS들도 유닉스 기반이긴 하다. [4] NAS라는 하드웨어적 독립 환경을 두기도 한다. [5] 각 명령어의 설명을 보면 알겠지만 둘 다 운영체제의 모든 것을 강제로 날려버리는 명령어로, 한 단어로 줄이면 자살, 자폭, 자멸인 셈이다. [6] 유료 제품인데 인터넷에 떠도는 제품 키를 입력한 경우 [7] 제품 키를 입력하지 않았거나 크랙 인증한 경우 [8] Mac OS X 사용자는 아래 "for OS X hosts" 항목을 선택하고, 기타 운영체제 사용자는 자신의 운영체제에 맞는 항목을 선택할 것 [9] 이때 시간이 좀 걸리니, 느긋하게 기다리면 된다. [10] 이때 만약 "바뀐점을 디스크에 쓰시겠습니까?"라는 팝업이 뜰 경우, 우측 하단 "계속" 클릭 [깨진_링크]