윈도우의 새로운 보안 기술, VBS 인클레이브 이해하기 – Cyber Tech
소프트웨어를 사용해 신뢰할 수 있는 실행 환경 실행하기
VBS 인클레이브는 메모리 보호를 위해 이와 비슷한 접근 방식을 제공하지만 특정 하드웨어는 불필요하다. 따라서 마이크로소프트는 인텔, AMD, ARM 하드웨어에서 보안 인클레이브를 제공할 수 있다. 결과적으로 리콜은 크립톤 하이퍼바이저의 통제 하에 신뢰할 수 있는 메모리에서만 실행되며, PC의 TPM이 암호화 키를 관리하고 윈도우 헬로가 액세스를 제어해서 사용자 존재를 확인한다.
PC에 신뢰할 수 있는 실행 환경을 두는 방식은 AI 보안 이상으로 유용하다. 이 실행 환경은 민감한 데이터를 보호하며, 보관 중 보호와 이동 중 보호에 더해 새로운 보호 수준인 사용 중 데이터 보호를 추가한다. VBS 인클레이브를 정의하고 사용하기 위해 더 많은 작업이 필요하지만 성능에 대한 영향은 제한적이면서 보안을 강화할 수 있으므로 감수할 가치는 있다.
VBS 인클레이브는 윈도우 11의 메모리 무결성 툴을 통해 윈도우의 일부인 하이퍼바이저를 사용해서 권한이 높고 격리된 새로운 시스템 메모리 영역인 가상 신뢰 수준 1(Digital Belief Stage 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에서 실행되는 모든 애플리케이션이 로드할 수 있으므로 인클레이브 외부의 모든 것을 신뢰할 수 없는 요소로 명시적으로 처리하는 코드를 작성해야 한다.