UEFI를 사용하여 OS 실행 이전의 환경 보호

Microsoft에서 보안 부팅을 구현한 방법에 대해 몇 가지 의견이 있었지만, 안타깝게도 실제의 경우와 다른 여러 가지 시나리오를 다룬 것에 불과했었기 때문에 이 글에서는 UEFI로 보안 부팅을 실현하는 방식과 PC 제조업체가 선택할 수 있는 옵션에 대해 더 자세히 설명하려고 합니다. 가장 중요한 개념은 어떤 것도 포기하지 않고 고객의 기대를 충족하는 보안 기능을 도입하는 동시에, PC를 전체적으로 완벽하게 제어할 수 있도록 계속 지원하는 것입니다. 이 글은 에코시스템 팀의 Tony Mangefeste가 작성했습니다. - Steven

주요 내용 요약

  • UEFI를 통해 펌웨어에서 보안 정책을 실행할 수 있습니다.
  • 보안 부팅은 UEFI 프로토콜이며 Windows 8의 기능이 아닙니다.
  • UEFI 보안 부팅은 Windows 8 보안 부팅 아키텍처의 일부입니다.
  • Windows 8은 보안 부팅을 사용하여 OS 실행 이전의 환경에서 보안을 보장합니다.
  • 보안 부팅은 OS 로더를 '잠그는' 것이 아니라 펌웨어에서 구성 요소의 신뢰성을 검사할 수 있도록 하는 정책입니다.
  • OEM은 해당 플랫폼에서 인증서와 정책 관리 수준을 사용자 지정하는 방식으로 고객의 필요에 따라 펌웨어를 조정할 수 있습니다.
  • Microsoft는 Windows 외에 다른 OS에서 보안 부팅을 제어하거나 지원하는 PC 펌웨어의 설정에 대해 어떤 것도 규정하거나 통제하지 않습니다.

궁극적 목표 – 어떤 것도 포기하지 않는 보안 환경

UEFI 보안 부팅 프로토콜은 플랫폼과 펌웨어 보안에 대해 아키텍처 측면에서 중립적으로 접근하는 방식의 토대가 됩니다. 보안 부팅은 펌웨어 이미지의 실행을 허용하기 전에 유효성을 검사하는 PKI(공개 키 인프라) 프로세스를 기반으로 부팅 로더 공격의 위험을 줄입니다. Microsoft는 Windows 8에서 플랫폼 보안을 개선하기 위해 이 프로토콜을 사용하고 있습니다.

Windows 8 플랫폼 무결성 아키텍처를 보여 주는 다이어그램: 1. 보안 부팅은 알 수 없는 OS 로더의 실행을 차단합니다. 2. 커널은 ELAM(Early Launch Anti-Malware) 드라이버를 먼저 실행한 다음, 타사 드라이버와 앱에 대한 정책을 시행합니다. 3. 시스템 시작 중 측정된 상태가 부팅 중에 TPM에 기록됩니다. 4. 클라이언트의 정상적인 상태를 입증하기 위해 맬웨어 방지 소프트웨어는 원격 검증 도구에 TPM 측정 결과를 알려줄 수 있습니다.
그림 1 – 플랫폼 무결성 아키텍처

Microsoft는 파트너와 협력하여 고객이 보안 부팅으로 뛰어난 효과를 얻을 수 있도록 전력을 다하고 있습니다. Microsoft는 OEM이 보안 인증서를 관리하는 주체, 고객이 보안 인증서를 가져오고 관리할 수 있는 방법, 그리고 보안 부팅을 관리하는 방법을 유연하게 결정하도록 지원합니다. OEM에게 이러한 유연성을 부여하고, 고객이 시스템의 관리 방식을 결정할 수 있도록 지원하는 것이 중요하다고 생각합니다.

Windows 고객을 위해 Microsoft는 Windows 인증 프로그램을 사용하여 Windows 8과 함께 제공되는 시스템이 기본적으로 보안 부팅을 사용하고, 펌웨어에서는 보안 부팅을 프로그래밍 방식으로 제어하지 못하게 하여 맬웨어가 펌웨어에서 보안 정책을 무효화하는 것을 방지합니다. 또한 OEM이 무단으로 펌웨어를 업데이트하여 시스템 무결성을 저해하지 않도록 차단하고 있습니다.

이러한 정책은 대부분 UEFI 펌웨어에 새로 도입된 것이 아니며, 오늘날 대부분의 PC는 일정 형태의 펌웨어 유효성 검사를 수행하고 있습니다. BIOS 암호와 같은 기존의 레거시 지원도 수년간 OEM과 최종 사용자가 제어할 수 있었던 일종의 보안 부팅입니다. 그러나 업계와 Microsoft는 보안 부팅과 UEFI를 통해 뛰어난 시스템 무결성을 보장하고 더욱 안전한 상태로 만들어 점차 확대되는 보안 위협을 막아내기 위해 강력한 보호 기능을 제공하는 데 박차를 가하고 있습니다.

UEFI란?

UEFI(Unified Extensible Firmware Interface)는 칩셋, 하드웨어, 시스템, 펌웨어 및 OS 공급업체가 모여 만든 UEFI 포럼에서 관리합니다. 이 포럼은 많은 UEFI PC에 사용되고 있는 사양, 테스트 도구, 참조 구현을 관리합니다. Microsoft는 이 포럼의 운영 회원사로, 포럼은 개인이나 회사가 무료로 자유롭게 참여할 수 있습니다.

UEFI는 PC의 차세대 펌웨어 인터페이스를 정의합니다. BIOS(기본 입출력 시스템) 펌웨어는 원래 어셈블리로 작성되어 I/O를 위해 소프트웨어 인터럽트를 사용하는 것으로, 처음 도입된 이후 줄곧 PC 에코시스템의 기반으로 자리매김해 왔습니다. 그러나 컴퓨팅 환경의 변화로 차세대 태블릿과 장치에 적합한 '현대적 펌웨어'를 정의할 수 있는 길이 열리게 되었습니다.

UEFI 도입의 취지는 부팅 과정에서 OS가 플랫폼 펌웨어와 통신하는 표준 방식을 정의하는 것입니다. UEFI를 도입하기 전에 부팅 과정에서 하드웨어와 통신하는 주된 방식은 소프트웨어 인터럽트였습니다. 최신 PC는 하드웨어와 소프트웨어 간에 블록 I/O를 보다 빠르게 효과적으로 수행할 수 있으며 UEFI를 통해 하드웨어의 잠재력을 최대한 이끌어내도록 설계할 수 있습니다.

UEFI 방식에서는 모듈식 펌웨어 설계가 가능하기 때문에 하드웨어 및 시스템 설계자는 보다 자유롭게 펌웨어를 설계하여 더욱 까다로운 현대적 컴퓨팅 환경을 지원할 수 있습니다. I/O는 소프트웨어 인터럽트에 의해 제한되는 반면, UEFI는 이벤트 기반의 아키텍처 중립적인 코딩 표준의 개념을 추구합니다.

보안 부팅이란?

UEFI는 UEFI 2.3.1 사양 27장에 정의된 '보안 부팅'이라는 펌웨어 유효성 검사 프로세스를 사용합니다. 보안 부팅은 플랫폼 펌웨어가 보안 인증서, 펌웨어 유효성 검사, 펌웨어와 OS 사이의 인터페이스(프로토콜) 정의를 관리하는 방식을 정의합니다.

Microsoft의 플랫폼 무결성 아키텍처는 UEFI 보안 부팅과 펌웨어에 저장된 인증서를 사용하여 플랫폼 펌웨어를 신뢰할 수 있는 기반을 마련합니다. 점차 정교해지고 있는 맬웨어 공격 코드는 부팅 경로를 주요 공격 대상으로 삼고 있는데, 악성 소프트웨어가 맬웨어 방지 제품의 로드 자체를 완전히 차단하여 실행되지 못하게 하기 때문에 이러한 형태의 공격은 막아내기 어렵습니다. Windows 8의 보안 부팅 아키텍처를 사용하면 신뢰할 수 있는 기반이 마련되어 OS 자체가 로드되기 전에 서명이 있는 인증된 '정상' 코드와 부팅 로더만 실행될 수 있으므로 부팅 경로에서 악성 코드의 실행이 차단됩니다.

오늘날 대부분의 PC에서 OS 실행 이전의 환경은 부팅 로더 전달이 악성 로더로 재지정되는 공격에 취약합니다. 악성 로더는 OS 보안 기능과 맬웨어 방지 소프트웨어에 감지되지 않은 상태로 유지됩니다.

기존 부팅 프로세스: BIOS > OS 로더 코드 > OS 시작
그림 2 - 레거시 BIOS 부팅 경로

Windows 8은 UEFI 보안 부팅으로 이러한 취약성을 해결하며, 인증서와 함께 펌웨어에 있는 정책을 사용하여 올바로 서명이 지정되고 인증된 구성 요소만 실행되도록 합니다.

Windows 8의 보안 부팅: 기본 UEFI 2.3.1 > 확인된 OS 로더만 > OS 시작
그림 3 - UEFI에서 보안 부팅 경로

보안 부팅은 Windows 8 플랫폼 무결성을 보장하기 위한 여러 조치 중 하나입니다. Microsoft의 전략은 UEFI와 함께 사용 가능한 다른 하드웨어에 대한 총체적 접근을 통해 플랫폼의 보안을 더욱 강화하는 것입니다.

배경: 작동 방식

PC 전원을 켜면 OS 실행을 위한 준비 단계로 프로세서, 메모리 및 하드웨어 주변기기를 구성하는 코드가 실행됩니다. 이 프로세스는 기본 실리콘 아키텍처(x86, ARM 등)에 관계없이 모든 플랫폼에서 동일합니다.

시스템 전원을 켜고 나서 곧바로, 펌웨어는 네트워크 카드, 저장 장치 또는 비디오 카드 등의 하드웨어 주변기기에 있는 펌웨어 코드의 서명을 확인하고, 그 후에 OS 로더로 전달됩니다. 옵션 ROM이라고 하는 이 장치 코드는 OS로 전달할 수 있도록 주변기기를 준비하여 구성 프로세스를 계속 진행합니다.

부팅 과정의 이 부분에서 펌웨어는 응용 프로그램과 같이 펌웨어 모듈에 내장된 서명을 확인하며, 이 서명이 펌웨어에 있는 서명 데이터베이스와 비교하여 일치하면 모듈 실행이 허용됩니다. 이러한 서명은 펌웨어의 데이터베이스에 저장되고, 이 데이터베이스는 부팅 프로세스를 계속할 수 있는지 여부를 결정하는 '허용' 및 '거부' 목록에 해당합니다.

KEK 및 플랫폼 키 인증서로 관리되는 '허용' 목록과 '거부'(맬웨어 해시) 목록을 보여 주는 다이어그램
그림 4 - 인증서 보안 데이터베이스

이 그림은 보안 부팅을 사용하는 시스템에서 서명과 키의 계층을 나타냅니다. OEM이 제조 과정에서 펌웨어에 설치하는 플랫폼 키를 통해 플랫폼의 보안이 유지됩니다. UEFI 또는 레거시 BIOS에 관계없이 현재 판매되는 대부분의 시스템에서 이 프로세스가 사용됩니다. (펌웨어 업데이트 유틸리티와 같은 응용 프로그램이 플랫폼 키를 사용하여 펌웨어 이미지를 보호합니다.) 보안 부팅에서는 펌웨어의 실행을 허용하거나 거부하는 키가 보관된 데이터베이스의 액세스를 보호하기 위해 다른 키들이 사용됩니다.

허용 데이터베이스에는 신뢰할 수 있는 펌웨어 구성 요소와 함께, 무엇보다 중요한 OS 로더를 나타내는 키가 포함되어 있습니다. 거부 데이터베이스에는 맬웨어와 펌웨어의 해시가 포함되어 있어 이러한 맬웨어 구성 요소의 실행을 차단합니다. 이러한 정책의 강점은 Authenticode 및 PKI(공개 키 인프라)를 사용하여 펌웨어에 서명한다는 점입니다. PKI는 정보 교환 과정에서 신뢰 관계를 형성하는 인증서를 생성, 관리, 호출하기 위해 효율적으로 수립된 프로세스로, 보안 부팅에 필요한 보안 모델의 핵심 요소입니다.

보안 부팅에 필요한 항목

보안 부팅을 위해서는 최소한 UEFI 개정 버전 2.3.1을 충족하는 펌웨어가 필요합니다. UEFI 포럼은 기존 보안 부팅 프로토콜을 개선하도록 27장의 정책을 업데이트한 최신 개정 버전을 승인했습니다. 여기에는 시간 인증 변수와 보다 강력한 암호화 키가 포함되고, 이러한 인증서의 저장 방식이 명시되어 있습니다.

이 기능은 PC를 구매하는 소비자에게 명시적으로 제공됩니다. 위의 설명과 같이 OS 자체가 로드되기 전에 시스템 취약성을 노리는 부트킷 및 루트킷 공격을 방어할 수 있도록 시스템의 신뢰성을 확인하기 위한 추가 수단이 제공된다는 이점이 따릅니다.

고객이 직접 제어

최종적으로는 고객이 PC를 제어하게 됩니다. Microsoft가 추구하는 목표는 먼저 고객에게 최상의 경험을 제공한 다음, 스스로 결정할 수 있는 기회를 부여하는 것입니다. 고객에게 이러한 유연성을 제공하기 위해 OEM 에코시스템과 협력하고 있습니다. UEFI가 보안 부팅으로 시스템의 보안을 제공하면 대부분의 고객은 부팅 로더 공격을 차단할 수 있습니다. 이전 OS를 실행하는 사용자도 시스템을 보호하는 데 적절한 방법을 직접 선택할 수 있습니다.

빌드(BUILD) 컨퍼런스 참석자들에게 제공된 삼성 태블릿(Windows 8 개발자 프리뷰 탑재)에서 이런 제어 옵션을 직접 확인할 수 있습니다. 아래 스크린샷을 보면 고객이 보안 부팅을 해제할 수 있도록 펌웨어가 설계된 것을 알 수 있습니다. 하지만 이 기능을 해제할 경우 그에 따른 위험은 고객이 감수해야 합니다. OEM은 이 기능을 지원하는 방식을 자유롭게 선택할 수 있고, 고객에게 고유한 가치를 제공하기 위해 위의 설명과 같이 매개 변수를 추가로 사용자 지정할 수 있습니다. Windows는 소비자와 기업 고객을 비롯하여 많은 사용자에게 중요한 시나리오를 뒷받침할 수 있도록 훌륭한 OS를 제공한다는 본분을 다하고 있습니다.

TPM 구성 옵션이 있는 콘솔 이미지: [Enable virtualization [enabled], CSM Support [Disabled], Attempt Secure Boot [Enabled], Display Rev. Info - Intel UEFI...](가상화 지원 [사용], CSM 지원 [사용 안 함], 보안 부팅 시도 [사용], 개정 정보 표시 - Intel UEFI...)
그림 5 - 삼성 PC 보안 부팅 설정

Tony Mangefeste
에코시스템