Windows 10, 보다 안전한 컴퓨팅 환경을 위한 핵심 기술, Device Guard (장치 보호) 1편

image

요즘, 악성 코드를 통한 개인 정보 유출 등의 여러 이슈가 사회적인 회자가 되고 있습니다. 우리가 사용하는 PC 및 모바일 환경에서 악성 코드를 대응하는 기본적인 기술은 바로 백신이라고 부르는 안티 멀웨어 프로그램이 대표적입니다. 이 안티 멀웨어 기술은 매우 오래된 형태의 기술로서, 기술 제조사에서 빠른 감지 엔진을 업데이트하고, 제공하여, 이를 탑재한 컴퓨터에서 빛을 바라게 되어 있습니다. 조금만 뒤집어서 바라보면, 악성 코드를 막으려는 움직임 자체가 일단 악성 코드가 실행되고, 이를 업데이트된 안티 멀웨어 엔진에서 감지한 후, 실행하지 않도록 조치를 취하는 순서를 밟고 있습니다.

매일 약 300,000개 이상의 악성 코드가 새롭게 발견된다고 합니다. 지금까지 이를 대응하던 사후 조치적인 방법으로는 어떠한 형태의 보안도 보장받기에는 무리수가 있어 보입니다.

Windows 10에서는 이러한 형태의 보안 접근 방식에 대해, 다소 새로운 방향으로 대응하여, 보다 안전한 컴퓨팅 환경을 제공하기 위해 기술을 탑재하였습니다. 바로 장치 보호(Device Guard)가 여기에 해당됩니다. (Windows 10 Enterprise, Education에서만 지원, Professional/Home에선 지원하지 않음, https://www.microsoft.com/en-us/WindowsForBusiness/Compare 참고)

이 포스팅내 가장 상위에 있는 메시지를 실제 PC나 태블릿에서 본 적은 아직 없을 것입니다. 장치 보호가 가동된 Windows 10  환경에서 코드 무결성 정책을 따르지 않는 프로그램이 실행될 경우, 원천적인 실행을 차단할 때, 나오는 메시지 창입니다. Device Guard는 단순한 하나의 기술로만 구성된 형태가 아니라, 소프트웨어/하드웨어 보안 기술들이 유기적으로 결합되어 구성된 기술입니다.

이쯤에서 머리가 아프신 분들은 하나만 기억하시면 됩니다. 바로 Device Guard는 모든 프로그램의 실행을 원천적으로 차단하고(어떠한 것도 신뢰하지 않는 - Trust Nothing), 조직내 또는 PC 제조사에서 허가한 프로그램만 실행하도록 잠겨 있는 보안 기술입니다. Windows RT/Windows Phone/iOS에서 앱(App)을 바라보는 철학과 동일한 형태이죠.

Device Guard에서는 코드 무결성(Code Integrity)가 핵심 기능이며, 이 코드 무결성은 어떠한 프로그램, 그리고 신뢰된 소프트웨어 회사(앱/응용 프로그램을 서명한 인증서를 기반)만 실행할 수 있을지를 결정합니다.

image

이러한 소프트웨어적 접근과 함께, 하드웨어 기술, 예를 들어, CPU 가상화 기술, IOMMU(Direct Memory Attack - DMA 보호를 위해 필요), TPM, SLAT등을 이용하여 보안 기술을 적용한 부분도 존재합니다. 앞서 열거한 기술을 Hyper-V에서 사용하고 있다는 것은 잘 아실 것입니다. Hyper-V는 가상 컴퓨터를 생성하여, 하나의 하드웨어에서 여러 논리적인 컴퓨터가 구동될 수 있게 합니다. Windows 10에서는 가상화 기술을 운영 체제의 주요 서비스(Core Service, 대표적으로 코드 무결성을 확인하는 서비스가 배치됩니다.)를 별도의 가상화 영역(Container, 이를 Virtual Secure Mode, VSM이라고 부릅니다.)에 격리하여, 운영 체제 자체가 악성 코드에 공격을 받을 때, 아주 중요한 영역을 방어할 수 있도록(아예 접근할 수 없게) 보호하기도 합니다. 코드 무결성에 대한 서비스를 가상화 기반 보안(VBS, Virtualization-Based Security)에서 동작하려면, Device Guard 구성 시, 이를 설정해야 합니다. (아래 그림) 또한 VBS에서 보호할 수 있는 영역이 자격 증명 격리(Credential Guard)입니다. Windows에서 로그온을 시도하게 되면, 계정과 암호가 인증을 위해 Local Security Authentication Service(LSASS)에 전달되게 되는데, 해당 서비스는 커널에 배치되어 있어, 커널을 탈취했을 경우, 계정과 암호가 노출되는 문제점이 발생할 수 있습니다. 이 역시 별도의 격리된 공간에 서비스를 배치하여, 탈취 가능성 자체를 없애 버립니다.

image

운영 체제는 크게 커널/사용자 모드로 나눠집니다. 운영 체제의 핵심인 커널은 하드웨어와 직접 통신을 하는 영역이며, 사용자 모드는 우리가 사용하는 프로그램들이 동작하는 영역이죠. 프로그램에서 메모리를 요구할 경우, 직접 하드웨어에 접근하지 않고, 커널에게 요구하여, 제공받는 구조를 가지고 있습니다. 코드 무결성은 Windows가 신뢰할 수 있고, 안전하게 동작한다는 것을 확인해 주는 Windows 운영 체제의 주요 구성 요소입니다. 이 코드 무결성에 대한 부분도 커널/사용자 모드로 나눠져 있는데, 커널 모드 코드 무결성(Kernel Mode Code Integrity, KMCI)와 사용자 모드 코드 무결성(User Mode Code Integrity, UMCI)입니다. KMCI는 이미 운영 체제에 구현되어 있는 기술이죠. 바로 서명되지 않는 하드웨어 드라이버가 설치 및 동작되지 않게 해주는 것이 대표적입니다. 하드웨어 제조사 및 Microsoft에서 검증하고, 서명을 한 드라이버만을 동작하게 하여, 악의적인 드라이버, 그리고 안정적이지 못한 드라이버를 구동하지 못하게 합니다. UMCI에 대한 부분은 많이 사용하는 Windows 운영 체제에는 구현되어 있지 않았던 부분입니다. Windows RT, Windows Phone에서 적용된 기술로, 응용 프로그램 설치 및 실행에 대한 제어를 하게 됩니다.

코드 무결성, 역시 Device Guard를 이루는 기술 중 하나입니다. 대부분의 악성 코드는 서명이 되지 않은 형태로 배포되기에(물론 아닌 경우도 있지만), 서명되지 않는 응용 프로그램만 실행을 할 수 없게 하여도, 현재 공격의 95%를 막을 수 있다고, Microsoft는 보고 있습니다.

마지막으로 Device Guard를 구성하는 기술은 바로 UEFI(Unified Extensible Firmware Interface) 기반의 보안 부팅(Secure Boot)입니다.

image

UEFI의 보안 부팅은 Windows 운영 체제가 동작하기 전, 무결성을 보장해주는 역할을 하게 됩니다. Windows 8에서 소개된 보안 부팅은 허가되지 않은 코드가 부팅 영역을 손댈 수 없도록 하는 기술이라고 생각하시면 됩니다. 이를 위해서는 반드시 UEFI가 필요합니다. 또한, UEFI 부팅 순서를 수정하여, CD/USB/네트워크 부팅등을 할 수 있으므로, 부팅 순서에 대한 잠금 설정, 역시 있어야겠죠.

image

머리아픈 이야기의 결론은 위의 그림 하나로 정리됩니다. 시스템이 켜져서, 외부의 침입없이 부팅을 시작하고, 부팅이 시작되었을 때, 호출하는 프로그램도 외부에서 변경하거나, 손상되지 않음을 보장받아야 합니다. (Secure Boot) 이후, 운영 체제가 올라올 때, 안전하지 않은 드라이버에 대한 로딩을 할 수 없게 하는 KMCI, 나아가 Device Guard에서 실행 가능 여부를 판한다는 코드 무결성을 응용 프로그램 레벨에서 검사하는 UMCI까지가 한 셋트입니다. (참 많죠?)

운영 체제 커널의 주요 영역을 하드웨어 기반의 가상화 기술을 통해 격리하는 VSM을 구성할 경우, 더욱 보안은 올라가고, Device Guard 요구 사항에 100% 충족하기 위해서는 가상화 기반 보안 적용은 필요합니다. (물론 없을 경우, 코드 무결성 검사 기술 구현은 가능하지만, 보다 높은 수준의 보안은 아니겠죠? Smile https://msdn.microsoft.com/en-us/library/dn986865(v=vs.85).aspx 링크에서 가상화 기반 기술이 적용될 경우, 안될 경우에 대한 비교를 살펴볼 수 있습니다.)

image

Device Guard를 사용하려면, Windows 10의 기능 중, “격리된 사용자 모드”를 설치해야 합니다. Windows 10에서 새롭게 추가된 기능이 바로 Device Guard를 위한 부분입니다. (아하?!)

image

이 후, 그룹 정책, 또는 레지스트리 수정을 통해, 기술을 활성화 해야 합니다. 이 설정 및 코드 무결설 정책을 구성하는 방법은 2편에서 살펴보도록 하겠습니다. Smile

현재 사용중인 하드웨어가 어느 레벨의 Device Guard 기술을 지원하는지 살펴보려면, msinfo32나 systeminfo 명령어를 이용하시면 알 수 있습니다.

image

격리된 사용자 모드를 설치하게 되면, 사용 가능한 하드웨어를 검색하여, 활성화 가능한 기술의 목록을 보여줍니다. (제 경우에는 VBS, Secure Boot, IOMMU, Credential Guard까지 모두 되네요..)

image

앞으로 새롭게 나올 Windows 10용 디바이스들은 3가지 형태로 Device Guard에선 나눠지게 될 것입니다. Device Guard Ready(하드웨어가 모두 지원하고, 장치 보호 기술을 적용하였음), Device Guard Capable(하드웨어가 모두 지원하나, 장치 보호 기술 적용을 안함), Not Support (지원안함)입니다.

조금은 머리 아픈 이야기이지만, 잘 정리해보시면, 여러 기술들의 복합체, 그리고 기술 활용에 대한 새로운 시각을 통해 보다 안전한 컴퓨팅을 위한 기술이라고 느끼실 수 있을 것입니다. 이제 대략적인 개요를 살펴보았으니, 어떻게 설정하는지를 2편에서 살펴보시죠!