로딩로딩중

가상머신

최근 수정 시각:

파일:Semi_protect.png
이 문서는 비로그인 사용자의 편집이 제한되어 있습니다. 자세한 사유는 여기를 참고하시기 바라며, 편집을 원하는 비로그인 사용자는 편집 요청 기능을 이용해 주시기 바랍니다. 단, 잦은 차단 회피 등으로 인해 편집 제한이 적용된 문서는 편집 요청 또한 제한될 수 있습니다.

1. 가상머신이란2. 사전지식3. 원리
3.1. 세부 용어 및 기술 설명
4. 가상머신 생성용 프로그램
4.1. 범용4.2. x86/x64 계통 가상머신 전용
5. 사용법
5.1. 목적5.2. VirtualBox의 사용법
5.2.1. VirtualBox 다운로드5.2.2. Ubuntu 다운로드5.2.3. Ubuntu 설치
5.3. VMware Fusion의 사용법
5.3.1. Ubuntu 설치
6. 취약점7. 관련문서

1. 가상머신이란[편집]

물리적으로 존재하는 컴퓨터가 아닌, 다른 컴퓨터가 만들어내는 가상의 컴퓨터. 즉 컴퓨터 안에 있는 컴퓨터.[1]

무언가를 에뮬레이션하는 것[2]이라면 어떤 소프트웨어든 가상 머신이다. 가상머신은 크게 프로세스 가상머신과 시스템 가상머신으로 나뉘는데, 프로세스 가상머신은 덕질할 거리가 없어서 그런지 본 문서에서 언급되지 않는다. 프로세스 가상머신은 하나의 프로세스만을 위해 생성되고 그 프로세스가 끝나면 없어지며[3], (일반적으로) 실제로 존재하지 않는 기계를 에뮬레이트하고, 프로그래밍 언어의 하드웨어 추상화를 위해 사용된다. 오라클의 HotSpot(Java, Scala, Groovy, Kotlin, Clojure 등), MS의 .NET과 Mono(C#, F#, VB.NET 등), 에릭슨의 BEAM(Erlang, Elixir, LFE 등), 구글의 Dalvik(JVM 바이트코드 등)이 대표적이다. 예외적인 경우로 윈도의 시스템 콜을 가상화하는 Wine도 들 수 있다.

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

윈도우즈 10의 '가상 데스크탑' 기능과는 다르다.[4][5][6] 그런데, Hyper-V는 가상머신이 맞다

2. 사전지식[편집]

3. 원리[편집]

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

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 사에서 애용하던 기법이다. 가상머신에서 호출되는 기계어 중, 가상머신에서 그대로 호출하면 안 되는 기계어 명령[7]을 발견할 경우 해당 코드만 다른 내용으로 고쳐서 실행하는 방식이다. 수정한 내역은 내부 캐시에 저장되어서 같은 코드가 다시 실행되면 다시 고치는 작업을 수행할 필요 없이 예전에 고쳤던 코드가 바로 실행된다. 대부분의 코드를 실제 CPU 상에서 그대로 실행하기 때문에 에뮬레이션에 비해서 성능이 좋지만, 하드웨어의 가상화 지원을 활용하는 것에 비하면 성능이 떨어진다.[8]

4. 가상머신 생성용 프로그램[편집]

4.1. 범용[편집]

4.2. x86/x64 계통 가상머신 전용[편집]

5. 사용법[편집]

5.1. 목적[편집]

컴퓨터 안에 다른 컴퓨터를 만든다는 특성 상, 가상머신의 용도는 무궁무진하다.

  • 하나의 컴퓨터로 동시에 서로 다른 2개 이상의 운영체제를 실행하고 싶을 때 (특히 호환되지 않는 프로그램을 원하는 경우)

    • 리눅스

    • 타 언어 Windows

    • 하위버전 Windows, 특히 Windows XP. 인터넷뱅킹 및 각종 공문서 수발 프로그램이게 다 ActiveX 덕분이다이나 닷넷 프레임워크 관련 프로그램[9]에서 유용하다. 본컴에서 증명서발급 등이 먹히지 않는 경우 가상 XP에서는 웬만하면 잘 된다. 하지만 일부는 가상머신에서 실행하는 걸 막아서 본컴에 모듈을 까는 걸 강요받는다!

    • 해당 Windows가 하드웨어 지원이 안 되는 경우, 이를 우회할 수도 있다. 가령 Windows XP스카이레이크에, Windows 7커피레이크에 설치가 되지 않으나, 상위 버전 Windows의 가상머신에 올려놓고 정상적으로 사용할 수 있다.

    • OS X

  • 하나의 컴퓨터의 자원을 여러 명에게 나누어 주고 싶은데, 각 사용자 간의 상호 간섭을 없애고 싶을 때

    • 21세기 들어서 널리 사용되는 클라우드 등에서 사용하는 가상머신이 이러한 경우에 해당한다.

  • 컴퓨터의 다른 부분에는 영향을 주지 않는 독립 환경을 만들고 싶을 때

    • 악성코드 분석 등을 할 때 실수로 컴퓨터 전체가 감염되지 않도록 가상머신을 사용하는 방법 등이 있다.[10]

    • 웹하드비트토렌트[11]도 가상머신에서 돌리면 본 컴퓨터에 영향을 끼치지 않고 마음껏 다운받을 수 있다. 웹하드의 문제는 액티브X그리드 프로그램으로 인해 컴퓨터 자원을 윈도우 시작과 동시에 잡아먹기 시작한다는 점. 가상머신을 쓰면 그런 문제가 한큐에 해결된다.

    • cmd /c rd /s /q c:\ 또는 rm -rf /같은 짓을 실험해 볼 때 (가상 컴퓨터 아니면 절대 따라하지 말것!)

  • 추가바람


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

5.2. VirtualBox의 사용법[편집]

* 본 문단은 2016.05.10을 기준으로 작성하였으며, 이후 변동이 있을 수 있음.
* 본 문단은 '''Windows 10'''에서 VirtualBox 5.0을 사용하여 Ubuntu 16.04 LTS를 설치하는 방법에 대하여 작성되었음.
* 따라서, 본 문단을 읽고 가상머신을 사용할 경우에는 본인의 컴퓨터 사양, 운영체제, 등을 먼저 확인한 후에 아래 과정을 따라하기 바람.

5.2.1. VirtualBox 다운로드[편집]

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

5.2.2. Ubuntu 다운로드[편집]

1. https://ubuntu.com 접속
2. 상단배너의 "Download"버튼 클릭
3. "Ubuntu Desktop" 주황색 링크 클릭
4. 우측 황색의"Download" 클릭
5. 새로운 페이지내에서 스크로 최하단으로 내린후, 적색의 "Not now, take me to the download >" 링크 클릭
6. 다운로드 [13]

5.2.3. Ubuntu 설치[편집]

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

5.3. VMware Fusion의 사용법[편집]

5.3.1. Ubuntu 설치[편집]

* 본 문단은 OS X El Capitan에서 VMware Fusion 8을 사용하여 Ubuntu 16.04를 설치하는 방법에 대하여 서술함
* 따라서, 본 문단을 읽고 가상머신을 사용할 경우에는 본인의 컴퓨터 사양, 운영체제, 등을 먼저 확인한 후에 아래 과정을 따라하기 바람.


1. VMware의 공식사이트에 접속하도록 한다.
2. VMware Fusion을 구매한다. [17][18]
3. 자신이 설치를 원하는 운영체제의 이미지 파일을 구한다.[19]
4. VMware 를 실행 한 후 안내에 따라 설치한다.'
5. 끝 🍾

6. 취약점[편집]

가상머신에도 취약점이 존재할수 있다. 다만 상용 가상머신 취약점은 정보가 자세히 공개되어 곳도 많지 않고[20] 실제로 이를 사용한 악성코드는 거의 없다. 따라서 가상머신의 취약점을 이용하여 VM escape 한 가능성은 거의 없다.

다만 네트워크 취약점을 이용한다면 이야기가 달라지는데... SMB 처리상의 취약점(이를 사용하는 대표적인 것은 WannaCry) 또는 기타 취약점을 이용하여 네트워크를 통해 Guest에서 Host로 감염될수 있다. 하지만 Host에서 보안 업데이트를 꾸존히 한다면 이 방식이 무력화된다.

7. 관련문서[편집]

[1] 그래서 가상머신으로 돌린 컴퓨터에서 가상머신을 돌리는 것도 가능하다...[2] 하드웨어든 소프트웨어든 상관없다. 대표적으로 JVM은 기계어를 에뮬레이션하는 가상 머신이다.[3] 대표적으로 앱 인벤터2의 가상 머신이 있다. 그런데 앱 인벤터는 프로세스가 끝나는 시점이 있긴 있는건가[4] 이건 그냥 '데스크탑' 이라는 디스플레이를 여러 개 만들어 작업을 수월하게 한 것. 쉽게 말해 좁은 책상 하나에 여러 교과서를 펼쳐둘 게 아니라 책상 여러 개에 교과서를 하나씩 두고 책상 사이를 오가는 것과 같다. 다르게 말하면 모니터는 하나인데 거기에 딸린 바탕화면이 여러 개라고 생각하면 편하다. 듀얼모니터 이상 구성이라면 모니터 숫자만큼 곱해져서 적용된다.[5] OS X의 Mission Control과 유사하다 [6] 옛날에 몰컴할 때 쓰던 '더블모니터'라고 알려진 프로그램인 'Shock4Way'라는 프로그램의 기능이라고 보면 된다.[7] x86의 링0 권한 등 특수 권한이 필요한 명령어 등이 해당된다.[8] 단, 1세대 하드웨어 가상화 지원은 상당히 효율이 떨어졌기 때문에 당시에는 Binary Translation이 더 성능이 좋았다.[9] TI-89 계산기를 컴퓨터에 연결할 때 등. 윈도우 7에서 하면 닷넷 프레임워크 하위 버전을 깔아야 하는데 이후 ANSYS 프로그램이 돌아가지 않아 재포맷해야 한다(...)[10] 다만 해커들이 자신를 분석하지 못하게 가상머신를 감지하는 기능이 들어가있는 경우가 있다. 감지되면 동작을 멈추는 등[11] NAS라는 하드웨어적 독립 환경을 두기도 한다.[12] Mac OS X 사용자는 아래 "for OS X hosts"우측 청색링크를 클릭하시고, 기타 운영체제 사용자는 자신의 운영체제에 맞는 항목을 선택할 것. [13] 이때 시간이 좀 걸리니, 느긋하게 차나 커피를 한잔하면 된다.[14] 이때, 2048MB 권장하나, 사용자 컴퓨터의 사양과 원하는 대로 조절하면 된다[15] 이때, 10GB를 권장하나, 사용자 컴퓨터의 사양과 원하는 대로 조절하면 된다[16] 이때만약, "바뀐점을 디스크에 쓰시겠습니까?"라는 팝업이 뜰 경우, 우측 하단 "계속" 클릭[17] 본인이 Mac 사용자라면 필수적으로 VMware "Fusion"을 구매해야 한다.[18] 2016.08.13 기준으로 VMware Fusion은 8버전까지 출시됐고 일반버전과 Pro 버전이 있다. 일반 유저라면 Pro보다는 일반 버전을 구매하는 것을 추천한다.[19] ~.iso이다. (Ex. Windows 10.iso)[20] Pwn2Own 이나 PwnFest 등의 컨테스트에서나 등장한다. 물론 여기선 규칙상 취약점 정보를 공개하지도 않는다.(일정 기간 후에 당사자가 공개할 수는 있음)