윈도우

윈도우의 새로운 보안 기술, VBS 인클레이브 이해하기

Simon Bisson | InfoWorld 2024.10.07
마이크로소프트가 신뢰할 수 있는 실행 환경에서 리콜(Recall)의 벡터 인덱스를 보호한다. 약간의 계산 오버헤드가 추가되지만 데이터 보안을 위해서는 필수적이다. 
 
최근 마이크로소프트는 출시를 앞둔 AI 어시스턴트 툴 리콜의 보안 개선을 위한 노력을 발표했다. 리콜은 필자가 지난 몇 년 동안 다룬 익숙한 툴과 서비스를 기반으로 하는 만큼 세부적인 사항은 대체로 이미 알려진 내용이었지만 가장 중요한 기능인 VBS 인클레이브(VBS Enclave)는 대부분의 사람들에게 생소할 것이다.  
 
ⓒ Getty Images Bank
 
마이크로소프트는 저수준 크립톤(Krypton) 하이퍼바이저를 사용해서 암호화된 가상머신의 핵심 기능을 격리하는 방식으로 가상화를 통해 윈도우를 보호하기 위한 노력을 기울이는 중이며 VBS 인클레이브는 이 같은 노력의 최신 결과물이다. 
 

윈도우의 상시 가동 하이퍼바이저, 크립톤 

크립톤은 가상머신과 호스트 운영체제가 스케줄러를 공유해서 윈도우 로그인과 같은 기능을 운영체제의 나머지 부분으로부터 격리할 수 있게 해준다는 면에서 현대 윈도우의 중요한 요소다. 이를 통해 계속 윈도우 기능으로 실행되면서 비밀번호와 생체 정보를 보호할 수 있으며 격리된 상태로 유지되므로 호스트 윈도우 인스턴스의 맬웨어가 접근할 수 없다. 
 
윈도우 11 하드웨어 보안의 대부분을 구성하는 기반인 크립톤은 PC의 신뢰할 수 있는 플랫폼 모듈(TPM)과 함께 작동해 암호화 키, 디지털 서명, 검증 해시를 관리한다. PC에서 민감한 정보가 유출될 위험을 대폭 줄이고, 일반적으로 신뢰할 수 있는 윈도우 기능을 맬웨어가 대체할 위험을 낮춰주는 방법이라고 생각하면 된다. 
 
마이크로소프트는 오래전부터 가상화 기반 보안에 대해 관심을 가져왔다. 시작은 윈도우 서버 2016과 보안 윈도우 컨테이너를 도입한 시점까지 거슬러 올라간다. 도커와 기타 컨테이너 기반 애플리케이션 격리 툴에 대한 윈도우 지원을 통해 얼마간의 프로세스 격리가 가능했지만 완벽하지는 않았다. 
 
보안 윈도우 컨테이너는 컨테이너와 하이퍼-V의 보안 툴을 혼합해서 호스트 운영체제가 아닌 가상머신에 보안 컨테이너를 호스팅함으로써 격리를 더 강화했다. 애플리케이션 컨테이너를 위한 별도의 운영체제를 실행하는 데 따라 오버헤드가 발생했지만 나노 서버, 윈도우 서버 코어와 같은 기능으로 오버헤드를 최소화했고, 이후 릴리스에서는 서버 이미지 크기를 크게 줄였다. 
 

윈도우 11의 가상화 기반 보안 

마이크로소프트는 윈도우의 보안을 강화하기 위해 이 접근 방식과 TPM 기능을 혼합해 윈도우 11에 적용했다. 이 같은 이유로 윈도우 11에는 TPM 2.0을 지원하는 하드웨어가 필요하다. 
 
TPM에는 디지털 서명을 관리하기 위한 키와 인증서가 저장된다. 이를 통해 크립톤 하이퍼바이저에서 실행되는 하이퍼-V 보호 VM을 사용해 강화된 가상 환경에서 윈도우 메모리 무결성 서비스와 같은 툴을 실행할 수 있다. 메모리 무결성을 통해 커널 모드 드라이버와 바이너리에 실행에 앞서 유효한 서명이 있는지 확인되므로 서명되지 않은 코드는 PC를 손상시키기 전에 차단된다. 
 
마이크로소프트는 최근 가상화 기반 보안 모델을 VBS 인클레이브로 확장했다. 윈도우 서버 또는 애저에서 기밀 컴퓨팅 구현을 접한 적이 있다면 인텔 SGX 명령어 집합을 사용해 메모리 영역을 잠그고 이를 신뢰할 수 있는 실행 환경으로 사용하는 인클레이브 개념도 낯설지 않을 것이다. 이 접근 방식에는 특정 프로세서가 필요하며, 최신 세대의 SGX는 엔터프라이즈 제온 하드웨어로 제한된다. 
 

소프트웨어를 사용해 신뢰할 수 있는 실행 환경 실행하기 

VBS 인클레이브는 메모리 보호를 위해 이와 비슷한 접근 방식을 제공하지만 특정 하드웨어는 불필요하다. 따라서 마이크로소프트는 인텔, AMD, ARM 하드웨어에서 보안 인클레이브를 제공할 수 있다. 결과적으로 리콜은 크립톤 하이퍼바이저의 통제 하에 신뢰할 수 있는 메모리에서만 실행되며, PC의 TPM이 암호화 키를 관리하고 윈도우 헬로가 액세스를 제어해서 사용자 존재를 확인한다. 
 
PC에 신뢰할 수 있는 실행 환경을 두는 방식은 AI 보안 이상으로 유용하다. 이 실행 환경은 민감한 데이터를 보호하며, 보관 중 보호와 이동 중 보호에 더해 새로운 보호 수준인 사용 중 데이터 보호를 추가한다. VBS 인클레이브를 정의하고 사용하기 위해 더 많은 작업이 필요하지만 성능에 대한 영향은 제한적이면서 보안을 강화할 수 있으므로 감수할 가치는 있다. 
 
VBS 인클레이브는 윈도우 11의 메모리 무결성 툴을 통해 윈도우의 일부인 하이퍼바이저를 사용해서 권한이 높고 격리된 새로운 시스템 메모리 영역인 가상 신뢰 수준 1(Virtual Trust Level 1)을 생성한다. 대부분의 코드와 윈도우 자체는 계속해서 가상 신뢰 수준 0에서 실행된다. VTL 1은 자체적인 격리된 사용자 모드가 있는 윈도우 커널의 보안 버전에 사용된다. VBS 인클레이브는 여기서 애플리케이션의 일부로 실행된다. 이 애플리케이션은 두 영역 간의 경계를 넘는 것으로 보이는데, 실제로는 VTL 1 인클레이브를 분리하고 보안 채널을 사용해 VTL 0의 나머지 애플리케이션과 통신하는 방식이다. 
 

애플리케이션에 VBS 인클레이브 사용하기 

VBS 인클레이브를 구축하고 사용하려면 어떻게 해야 할까? 먼저 VBS가 활성화된 윈도우 11 또는 윈도우 서버 2019 이상이 필요하다. VBS 활성화는 윈도우 보안 툴, 그룹 정책을 통해서 하거나, 인튠을 사용해서 MDM을 통해 제어할 수 있다. 메모리 무결성 서비스의 일부이므로 코드에서 VBS 인클레이브를 사용할 계획이 없다 해도 지원되는 모든 디바이스에서 이를 활성화해야 보안 위험을 줄일 수 있다. 
 
암호화된 스토리지를 안전하게 사용하는 방법이라고 생각하면 된다. 예를 들어 데이터베이스를 사용해 민감한 데이터를 저장한다면 인클레이브에서 실행되는 코드를 사용해 이 데이터를 처리 및 쿼리하고 결과를 애플리케이션의 나머지 부분에 전달할 수 있다. 필수적인 액세스만 허용되는 안전한 환경에 데이터를 캡슐화하는 것이다. 시스템의 다른 부분에서는 복호화 키에 액세스할 수 없으므로 디스크의 데이터는 안전하게 유지된다. 
 
VTL 1 환경에서 실행되는 코드에는 마이크로소프트의 서명이 필요하다. 두 신뢰 영역 간에 CPU 레지스터를 리셋하는 OS 수준 핸드오프를 통해 상대적으로 안전하지 않은 사용자 모드와 VBS 인클레이브 간에 상태가 전송될 위험을 낮춘다. VBS 인클레이브를 사용할 경우 당연히 컴퓨팅 비용이 더 많이 들고 마이크로초 단위이긴 하지만 작업 실행 시간도 더 길어진다. 
 
VBS 인클레이브는 DLL이므로 실행하기 위해서는 호스트 애플리케이션이 필요하다. 윈도우 시스템 수준 C++ API의 일부만 사용할 수 있으며 사용 가능한 유니버설 C 런타임 API 목록은 개발 문서에 나와 있다. 지원되는 다른 API는 VBS 인클레이브 런타임(Vertdll)과 Bcrypt 암호화 라이브러리에 있다. 
 

샘플 인클레이브로 시작하기 

마이크로소프트는 VBS 인클레이브 애플리케이션의 수명 주기를 설명하는 유용한 샘플 애플리케이션을 통해 호스트 애플리케이션에서 인클레이브 함수를 호출하는 방법을 보여준다. 외부 함수는 명시적으로 내보내야 하며 호스트에서는 그렇게 내보낸 함수만 호출할 수 있다. 인클레이브를 컴파일하기 위해서는 링커에서 특정 구성을 통해 적절한 라이브러리가 포함되고 결과 DLL이 올바르게 계측되도록 해야 한다. 그 외에 위조된 플랫폼 DLL을 통한 공격으로부터 VBS 인클레이브를 보호하는 기능이 있다. 
 
컴파일한 다음에는 코드 서명이 필요하다. VBS 인클레이브 서명에는 각각 서명, 인클레이브, 작성자용으로 3개의 특정 EKU(확장 키 용도)가 필요하다. 프로덕션에서는 인클레이브에 서명하기 위한 프로필을 제공하는 마이크로소프트의 신뢰 서명(Trusted Signing) 서비스를 사용할 수 있다. 이 방식을 사용하면 애저 CLI로 서명을 자동화할 수 있다. 
 
VBS 인클레이브를 사용하는 코드를 작성할 때는 몇 가지 중요한 사항을 고려해야 한다. 호스트 PC에서 실행되는 모든 애플리케이션이 로드할 수 있으므로 인클레이브 외부의 모든 것을 신뢰할 수 없는 요소로 명시적으로 처리하는 코드를 작성해야 한다. 
 

민감한 데이터를 위한 필수 보안 

애저 SQL과 SQL 서버의 항상 암호화(Always Encrypted) 기능에도 동일한 기술이 사용된다. 이 방식은 권한이 있는 사용자만 민감한 데이터에 액세스할 수 있도록 보장한다. T-SQL 작업은 내부 TLS 채널을 통해 기밀 쿼리를 사용해서 보안 인클레이브 경계를 넘을 수 있다. 작업은 인클레이브 내부에서 이뤄지므로 기반 데이터는 항상 암호화된 상태로 유지된다. 
 
VBS 인클레이브는 필연적으로 복잡하며 표준 DLL에 비해 제한이 많다. 그러나 이러한 제약이 없으면 보안도 표준 DLL과 다를 바 없을 것이다. 코드를 라이브러리 및 헤더 수준에서 봉쇄해 신뢰할 수 있는 실행 환경에서 실행되도록 하면 의도적 또는 우발적유출에 관계없이 데이터 유출 위험을 크게 낮출 수 있다. 
 
약간 더 시간이 걸리고 부가적인 시스템 리소스가 필요하지만 민감한 정보를 다룬다면 그 정도는 감수할 가치가 있다. 사용자의 벡터 인덱스 리콜 기록이든 저장된 결제 정보든 건강 기록이든 개인 식별 정보를 사용하는 모든 곳에서는 필수적으로 VBS 인클레이브와 암호화된 스토리지를 사용해야 한다. 

데이터와 관련된 위험이 존재한다면 이 기술을 사용하지 않을 이유가 없다. 민감한 데이터에 관한한 VBS 인클레이브가 기본 선택이어야 한다. 
editor@itworld.co.kr 

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.