Hypervisor 기반의 가상화 기술에 대한 단상... - 보안(Security)

image

2008년 2월 14일 ZDNET의 한 블로그에 Review: Microsoft’s Hyper-V puts VMWare and Linux on notice라는 제목의 글이 포스팅되었습니다. 가상화쪽에서 많은 경력을 가진 분께서, Windows Server 2008 Hyper-V에 대한 느낌을 포스팅하셨는데, 상당히 내용상으로 많은 의미를 담고 있습니다. 시간이 되실때 한번 읽어보시면 좋을 것 같습니다.

Microsoft가 가상화 기술에 대한 개발에 착수하면서, 여러가지 가상화 기술이 반드시 가져야 할 사항들에 대해서 고민한 흔적을 내부에서 주고받은 메일을 살펴보면서 느낄 수 있었습니다. 이 포스팅은 제가 2월 26일에 진행되었던 호스팅 데이에서 발표한 가상화 철학이라는 세션의 내용을 근간으로 작성하였습니다.

Microsoft 가상화의 철학은 크게 3가지로 나눌 수 있습니다.

  1. 보안(Security)
  2. 신뢰성(Reliability)
  3. 확장성(Scalable)

당연히 성능적인 사항은 기본적입니다. 요즘 어떠한 기술도 성능은 기본적인 사항이기 때문에, 새로운 버전이 출시될 때, 성능이 몇 % 증가하였다는 이야기는 별도로 언급하고 있지는 않습니다. 그렇다면 가상화에서 왜 보안이 중요할까요? 이 보안은 가상화 서비스를 제공하는 기반 물리적 서버의 플랫폼에만 필요한 사항일까요? 아닙니다. 가상화에 대한 보안은 물리적인 머신뿐만 아니라, 서비스되고 있는 가상 머신에 대한 보안도 중요합니다. 이러한 보안을 확립하기 위해, 가상화는 분리(Isolation)최소화(Minimalism) 원칙을 지켜줘야 합니다.

먼저 분리 측면에서는 데이터의 분리(Data Isolation) , 시간의 분리(Temporal Isolation) , 내부 분리(Internal Isolation) , 즉 3가지 분리가 있습니다.

  1. 데이터의 분리 - 하나의 파티션(가상 머신 혹은 물리적인 머신)내 코드 및 데이터는 해당 파티션에서 공유하지 않는한 절대로 다른 파티션에서 접근할 수는 없어야 합니다.
  2. 시간의 분리 - 하나의 파티션에서 하드웨어 프로세싱에 대해서 독점할 수 없어야 합니다.
  3. 내부 분리 - 하이퍼바이져는 각 파티션간 메모리를 분리해주는 것과 같은 방식으로 파티션간 분리를 책임져야 합니다.

분리적인 측면에서 Windows Server 2008 Hyper-V는 아래의 사항을 따릅니다.

  1. 가상화된 장치간 공유 불가
  2. 부모 파티션으로 연결된 VM간 메모리 블럭(VMBUS)는 완전히 분리
    image
  3. 파티션간 메모리 공유 안함 (각각의 고유 주소 영역을 사용)
  4. 파티션간은 일반적인 네트워킹 이외 개별 통신 불가
  5. 물리적인 파티션을 제외한 가상 파티션에서는 물리적인 장치에 직접 맵핑되지 않으므로, DMA(Direct Memory Access - 직접 메모리 참조) 공격 불가
    image
  6. 파티션은 하이퍼바이져로의 쓰기 요청 자체가 불가

하이퍼바이져 계층의 크기는 작아야 한다는 철학이 바로 최소화(Minimalism) 철학입니다. Hyper-V의 Hypervisor의 용량은 약 550KB입니다. 다른 가상화 기술에 비해 몇십배나 작은 용량이죠. 그럼 왜 이렇게 작게 만들었는가? 먼저 말씀드리면, 현재 가상화 시장에서 볼 수 있는 대부분의 하이퍼바이져 기반의 가상화가 다 같은 하이퍼바이져 방식이 아닙니다.

image

하이퍼바이져는 Monolithic Hypervisor와 Microkernelized Hypervisor, 크게 2가지 방식이 있습니다. 대부분의 하이퍼바이져 기반의 솔루션이 전부 Monolithic Hypervisor를 사용하고 있으며, Windows Server 2008의 Hyper-V만이 Microkernelized Hypervisor를 사용합니다.

Monolithic Hypervisor의 경우, 하드웨어 드라이버를 Hypervisor 영역내에서 제공하고 있습니다. 이 경우 성능적인 측면에서는 약간의 효과를 볼 수 있습니다. 그렇지만 하기의 단점을 가질 수 있습니다.

  1. 하드웨어 드라이버 확장의 어려움 - 사용자가 추가적인 하드웨어를 가상화 환경에서 이용하고자 할때, 이에 대한 처리를 하이퍼바이져 레벨에서 추가해줘야 합니다. 어떤 조직이 어떤 하드웨어가 필요한지를 확인하여, 이를 일일히 대응한다는 것은 느끼시는 그대로 매우 어려운 숙제입니다. 결국 새 버전이 출시되거나, 패치가 일어나기 전까지는 추가적인 하드웨어를 직접 가상 머신에서 사용하는 것은 불가능해집니다. 버그(Bug)가 발생할 확률도 높아지고, 이에 대한 확인도 어려워집니다.
  2. 문제 발생시 해결의 난해함 - 코드의 양이 많아진다는 것은 그만큼 버그가 발생할 확률이 높다는 것으로 이어지게 되며, 이 버그가 하드웨어 드라이버에서 발생한 것인지, 하이퍼바이져에서 발생한 것인지도 알아내야 합니다. 해당 하드웨어 드라이버는 가상화 벤더에서 제작하는 것이 아니라, 해당 하드웨어 벤더에서 제작하는 것이 되며, 이를 하이퍼바이져 영역에 추가해준 모양이 됩니다. IT 인프라에서 장애 발생시, 하드웨어 업체, 플랫폼 업체, 솔루션 업체를 모두 불러놓고 회의를 해보면, 명확한 확인 전까지는 서로가 떠미는 모습을 보신 경우도 있을거라 생각합니다.
  3. 패치 발생시 임팩트 - 한대의 머신을 다시 시작하는 것이 아니기 때문에, 엄청난 임팩트로 이어지게 됩니다. 2007년 12월 7일에 Virtualization.info에 포스팅된 Patch Tuesday for VMware를 한번 읽어보시면 패치에 대한 생각을 느끼실 수 있습니다.

image

Microkernelized Hypervisor의 경우, 말 그대로 하이퍼바이져는 하이퍼바이져의 일만 하는 것입니다. 해당 코드내에는 추가적인 벤더의 코드는 전혀 들어가지 않습니다. 하드웨어 드라이버에 대한 처리는 하이퍼바이져 영역이 아닌, 물리적인 파티션내 가상화 스택(Virtualization Stack)에서 처리하게 됩니다. 하드웨어에 대한 처리 모델을 물리적인 머신과 가상 머신사이에 연결을 통해 해결하게 되고, 이에 대한 처리는 당연히 하이퍼바이져 영역을 통해 처리됩니다. Hyper-V의 특징은 아래와 같습니다.

  1. 하드웨어 장치 드라이버 - 기존 모델을 그대로 사용합니다. 가상화 환경에서 사용하기 위해 별도의 드라이버 모델을 개발하고 수정할 필요는 없습니다. 위 그림에서 보시는 VSP(Virtualization Service Provider)와 VSC(Virtualization Service Client), VMBUS 모델을 통해 공유하게 됩니다. 내용이 어려우시다면, 제가 설명하는 방식인 멀티 콘센트 모델을 생각하시면 쉬워집니다. 전기 코드가 하나인 경우, 이를 공유하기 위해 뭘 사용하시나요? 바로 멀티 콘센트를 이용하시고, 이때 하나인 전기 코드를 하드웨어 장치 드라이버, 멀티 콘센트를 VSP라고 생각하시면 됩니다. 이를 연결하기 위한 장치의 아답터를 VSC, 아답터와 콘센트를 연결해주는 전기 코드가 VMBUS입니다. 하드웨어 벤더는 하드웨어가 가상화 파티션에서 지원하게 하고자 한다면, 기존 장치 드라이버 모델에 추가적으로 VSP/VSC를 개발하시면 됩니다. 개발과 관련된 Hypercall API는 이미 Microsoft.Com에서 다운로드가 가능합니다. 자연스럽게 확장성(Scalable)까지 가질 수 있게 됩니다. Windows Server 2008내 대부분의 드라이버는 사용자 모드(User Mode)에서 동작하므로, 물리적인 머신내 드라이버 문제가 전체 머신의 문제(BSOD)로 확장되지는 않습니다.
  2. 신뢰성(Reliability) - 적은 용량의 하이퍼바이져는 코드 버그의 확률을 낮춰주고, 이는 신뢰성 향상으로 이어집니다.
  3. 성능 - Microkernelized Hypervisor는 Monolithic에 비해 2%~4%정도 성능이 떨어집니다만, 하드웨어 성능 향상에 따른 컴퓨팅 파워에 비한다면 이는 어느정도 커버링이 가능합니다.
  4. Server Core 버전에 대한 이용 권장 - Windows Server 2008 자체에 대한 최소화도 필요하게 됩니다. 응용 프로그램 기반의 운영 체제로 사용할 수 있는 플랫폼이 바로 Windows Server 2008 Server Core 버전입니다. 이미 Windows Server 2008 Server Core에 대한 이야기는 포스팅을 통해서 많이 드렸습니다.

고객께서는 Monolithic Hypervisor와 Microkernelized Hypervisor에 대해서 선택하실 수 있습니다. 성능 vs 보안, 신뢰성 이라는 갈림길에서 어떠한 방향을 선택하시겠습니까? 가상화 환경은 한대의 머신으로만 돌아가는 환경이 아닙니다. 눈에 보이기에는 한대의 머신이지만, 그안에 무수히 많은 가상 환경이 동작하고 있기 때문에, 문제 발생은 대규모의 장애로 이어질 수 있습니다. 이렇기 때문에, 가상화 환경은 안정적이어야 하며, 보안을 고려한 개발이 필요합니다.