Google이 프로덕션 머신에서 부팅 무결성을 시행하는 방법

이 콘텐츠는 2023년 10월에 마지막으로 업데이트되었으며 작성된 당시의 상황을 나타냅니다. Google의 보안 정책 및 시스템은 고객 보호를 지속적으로 개선함에 따라 앞으로도 계속 변경될 수 있습니다.

이 문서에서는 Google이 프로덕션 머신에서 부팅 프로세스의 무결성을 적용하는 데 사용하는 인프라 제어를 설명합니다. 신중한 부팅 프로세스를 기반으로 하는 이러한 제어는 Google이 데이터 센터 머신을 부팅 스택의 취약점으로부터 복구하고 머신을 임의의 부팅 상태에서 알려진 정상 구성으로 되돌리도록 합니다.

소개

데이터 센터 머신의 보안 상태는 부팅 시 설정됩니다. 머신의 부팅 프로세스는 머신 하드웨어를 구성하고 운영체제를 초기화하면서 머신이 Google의 프로덕션 환경에서 안전하게 실행되도록 합니다.

Google은 부팅 프로세스의 각 단계에서 업계 최고의 제어를 구현하여 예상되는 부팅 상태를 적용하고 고객 데이터를 안전하게 보호합니다. 이러한 제어를 통해 Google 머신이 의도한 소프트웨어로 부팅될 수 있으므로 머신의 초기 보안 상태를 손상시킬 수 있는 취약점을 제거할 수 있습니다.

이 문서에서는 부팅 프로세스를 설명하고 부팅 흐름의 각 단계에서 제어가 작동하는 방식을 보여줍니다.

배경

이 섹션에서는 머신 사용자 인증 정보, 신뢰할 수 있는 하드웨어 루트, 실링된 사용자 인증 정보, 암호화 실링과 같은 용어를 정의하고 컨텍스트를 제공합니다.

머신 사용자 인증 정보

Google 머신 관리 시스템의 중심 구성요소 중 하나는 내부 인증 기관(CA)과 사용자 인증 정보 순환 흐름을 조정하는 기타 제어 영역 요소로 구성됩니다.

Google 프로덕션 Fleet의 머신은 보안 채널을 설정할 때 상호 인증을 수행합니다. 상호 인증을 수행하기 위해 각 머신은 Google의 CA 공개 키를 소유합니다. 또한 각 머신은 자체 공개 키/비공개 키 쌍과 해당 키 쌍에 대한 인증서를 소유합니다.

각 머신의 공개 키/비공개 키 쌍을 CA에서 서명한 인증서와 함께 머신 사용자 인증 정보라고 하며, 머신은 이를 사용하여 Fleet의 다른 머신에 자신을 인증합니다. 프로덕션 네트워크 내에서 머신은 트래픽을 교환하기 전에 다른 머신의 공개 키가 Google CA의 인증을 받았는지 확인합니다.

신뢰할 수 있는 하드웨어 루트 및 암호화 실링

컴퓨팅 기기가 더 정교해짐에 따라 각 기기의 공격 표면도 커집니다. 이를 고려하여 기기에는 머신의 민감한 정보를 보호하는 작고 신뢰할 수 있는 실행 환경인 신뢰할 수 있는 하드웨어 루트(RoT)가 점점 더 많이 사용됩니다. RoT는 노트북이나 휴대전화 같은 휴대기기와 데스크톱 PC와 같은 기존 기기에도 표시됩니다.

Google의 데이터 센터 머신은 각 머신의 가장 깊은 레이어에 통합된 Google에서 설계한 신뢰할 수 있는 커스텀 하드웨어 루트를 특징으로 하며, 이는 Titan이라고 알려져 있기도 합니다. Google에서는 암호화 실링이라는 메커니즘과 함께 Titan을 사용하여 각 머신이 예상한 구성 및 소프트웨어 버전을 실행하도록 합니다.

암호화 실링은 Trusted Computing Group이 게시한 사양인 Trusted Platform Module(TPM)을 사용한 실링과 유사하지만 암호화 실링에는 몇 가지 추가적인 이점이 있습니다. Titan은 하위 수준 펌웨어를 더 잘 측정하고 증명할 수 있는 기능을 제공합니다.

암호화 실링은 다음 두 가지 제어로 구성됩니다.

  • 민감한 정보 암호화
  • 데이터를 복호화하기 전에 충족되어야 하는 정책

실링된 사용자 인증 정보

Google의 사용자 인증 정보 인프라는 암호화 실링을 사용하여 머신의 신뢰할 수 있는 하드웨어 루트로 제어되는 키로 머신 사용자 인증 정보를 암호화합니다. 암호화된 사용자 인증 정보 비공개 키와 해당 인증서를 실링된 사용자 인증 정보라고 합니다. Google은 머신 사용자 인증 정보 외에도 이러한 실링 메커니즘을 사용하여 다른 민감한 정보도 보호합니다.

각 머신은 머신이 부팅되어야 하는 소프트웨어를 지정하는 복호화 정책을 충족할 수 있는 경우에만 머신 사용자 인증 정보를 복호화하고 액세스할 수 있습니다. 예를 들어 원하는 운영체제 커널 버전을 지정하는 정책에 머신의 사용자 인증 정보를 잠그면 필요한 커널 버전을 부팅하지 않는 한 머신이 머신 클러스터에 참여할 수 없습니다.

복호화 정책은 신중한 부팅이라는 프로세스를 통해 시행됩니다. 부팅 스택의 모든 레이어가 다음 레이어를 측정하며, 머신은 부팅이 끝날 때 이 측정 체인을 증명합니다. 이 측정값은 종종 암호화 해시입니다.

사용자 인증 정보 실링 프로세스

이 섹션에서는 Google 머신에서 사용되는 사용자 인증 정보 실링 및 신중한 부팅 프로세스에 대해 설명합니다. 이 흐름을 다이어그램으로 나타내면 다음과 같습니다.

사용자 인증 정보 실링 흐름

머신의 사용자 인증 정보를 특정 부팅 정책에 실링하려면 다음 단계가 수행됩니다.

  1. Google의 머신 자동화 인프라가 머신에서 소프트웨어 업데이트를 시작합니다. 의도된 소프트웨어 버전을 사용자 인증 정보 인프라에 전달합니다.
  2. Google의 사용자 인증 정보 인프라는 머신이 원하는 소프트웨어로 부팅되는 경우에만 Titan에 사용되도록 하는 정책 제약이 있는 Titan 실링 키를 요청합니다.
  3. 사용자 인증 정보 인프라는 반환된 키의 정책을 머신 자동화 인프라에서 전달한 인텐트와 비교합니다. 사용자 인증 정보 인프라가 정책이 인텐트와 일치한다고 충족되면 인증된 머신 사용자 인증 정보를 머신에 발급합니다.
  4. 사용자 인증 정보 인프라는 2단계에서 조달된 실링 키를 사용하여 이 사용자 인증 정보를 암호화합니다.
  5. 암호화된 사용자 인증 정보는 이후 부팅 시 Titan에서 복호화할 수 있도록 디스크에 저장됩니다.

신중한 부팅 프로세스

Google 머신의 부팅 스택은 다음 다이어그램에 시각화된 4개의 레이어로 구성됩니다.

신중한 부팅 프로세스의 4가지 레이어

레이어는 다음과 같습니다.

  • 사용자 공간: 데몬 또는 워크로드와 같은 애플리케이션입니다.
  • 시스템 소프트웨어: 하이퍼바이저 또는 커널입니다. 사용자 공간에 대한 네트워킹, 파일 시스템 또는 가상 메모리와 같은 하드웨어 기능을 추상화하는 가장 낮은 계층의 소프트웨어입니다.
  • 부팅 펌웨어: BIOS 및 부트로더와 같이 커널을 초기화하는 펌웨어입니다.
  • 신뢰할 수 있는 하드웨어 루트: Google 머신에서 펌웨어 및 기타 하위 수준 CPU 서비스를 암호화 방식으로 측정하는 Titan 칩입니다.

부팅이 진행되는 동안 각 레이어는 해당 레이어에 제어를 전달하기 전에 다음 레이어를 측정합니다. 부팅 시 캡처된 모든 측정 데이터가 Google의 사용자 인증 정보 인프라에 지정된 대로 실링된 사용자 인증 정보의 복호화 정책을 준수하는 경우에만 머신의 실링된 사용자 인증 정보가 운영체제에 제공됩니다. 따라서 머신이 실링된 사용자 인증 정보로 작업을 수행할 수 있으면 이는 머신이 신중한 부팅 정책을 충족했다는 증거입니다. 이 프로세스는 암시적 증명 형식입니다.

머신이 의도한 상태에서 벗어나는 소프트웨어를 부팅하는 경우 머신이 Fleet 내에서 작동하는 데 필요한 사용자 인증 정보로 작업을 복호화하고 수행할 수 없습니다. 이러한 머신은 머신 관리 인프라가 자동 복구 작업을 트리거할 때까지 워크로드 예약에 참여할 수 없습니다.

커널의 취약점 복구

머신에서 커널 버전 A를 실행 중이지만 보안 연구원이 이 커널 버전에 취약점이 있다는 것을 발견했다고 가정해 보겠습니다. 이러한 시나리오에서는 Google에서 취약점을 패치하고 업데이트된 커널 버전 B를 Fleet에 출시합니다.

Google에서는 취약점을 패치하는 것 외에도 Fleet의 각 머신에 새 머신 사용자 인증 정보를 발급합니다. 사용자 인증 정보 실링 프로세스에 설명된 대로 새 머신 사용자 인증 정보는 커널 버전 B가 머신에서 부팅되는 경우에만 충족되는 복호화 정책에 바인딩됩니다. 부팅 펌웨어 측정이 머신의 부팅 정책을 충족하지 않으므로 의도한 커널을 실행하지 않는 모든 머신은 새 머신 사용자 인증 정보를 복호화할 수 없습니다. 이 과정에서 이전 머신 사용자 인증 정보도 취소됩니다.

따라서 이러한 머신은 제어 영역의 인텐트를 준수하도록 커널이 업데이트될 때까지 머신 클러스터에 참여할 수 없습니다. 이러한 제어를 통해 취약한 커널 버전 A를 실행하는 머신이 커널 버전 B로 업그레이드될 때까지 작업 또는 사용자 데이터를 수신할 수 없습니다.

부팅 펌웨어의 취약점 복구

부팅 펌웨어에 운영체제 커널 대신 취약점이 있다고 가정해 보겠습니다. 커널의 취약점 복구에 설명된 것과 동일한 제어로 이러한 취약점을 복구할 수 있습니다.

Google의 Titan 칩은 실행되기 전에 머신의 부팅 펌웨어를 측정하므로 Titan이 부팅 펌웨어가 머신 사용자 인증 정보의 부팅 정책을 충족하는지 확인할 수 있습니다. 의도한 부팅 펌웨어를 실행하지 않는 머신은 새 머신 사용자 인증 정보를 얻을 수 없으며, 부팅 펌웨어가 제어 영역의 인텐트를 준수할 때까지 머신 클러스터에 참여할 수 없습니다.

신뢰할 수 있는 루트 펌웨어의 취약점 복구

RoT는 취약점에 영향을 미치지 않지만 Google의 부팅 제어 기능을 사용하면 RoT의 자체 변경 가능한 코드 내에서 부팅 스택의 이 레이어에서도 버그를 복구할 수 있습니다.

Titan의 부팅 스택은 자체적으로 안전하고 신중한 부팅 흐름을 구현합니다. Titan 칩의 전원이 켜지면 하드웨어가 Titan의 부트로더를 암호화하여 측정하고, 이 부트로더는 다시 Titan 펌웨어를 측정합니다. 머신의 커널 및 부팅 펌웨어와 마찬가지로 Titan 펌웨어는 버전 번호로 암호화 서명됩니다. Titan의 부트로더는 서명을 검증하고 Titan 펌웨어의 버전 번호를 추출하여 버전 번호를 Titan의 하드웨어 기반 키 파생 하위 시스템에 제공합니다.

Titan의 하드웨어 하위 시스템은 버전이 지정된 키 파생 스키마를 구현하며, 여기서 버전이 X인 Titan 펌웨어는 X보다 낮거나 같은 모든 버전에 바인딩된 칩 고유 키를 얻을 수 있습니다. Titan 하드웨어를 사용하면 버전이 X인 펌웨어가 X보다 낮거나 같지만 X보다 높지 않은 버전에 바인딩된 키에 액세스할 수 있습니다. 머신 사용자 인증 정보를 포함하여 Titan에 실링된 모든 보안 비밀은 버전이 지정된 키를 통해 암호화됩니다.

증명 및 실링 키는 각 Titan 칩마다 다릅니다. Google은 고유한 키를 통해 Google 데이터 센터 내에서 실행될 것으로 예상되는 Titan 칩만 신뢰합니다.

다음 다이어그램은 버전 키가 있는 Titan을 보여줍니다. 버전 X 펌웨어에서 버전 X+1 키에 액세스할 수 없지만 그보다 오래된 모든 키에 액세스할 수 있습니다.

Titan 버전

Titan 펌웨어에 심각한 취약점이 발생하면 Google이 더 큰 버전 번호로 패치를 출시한 후 상위 Titan 펌웨어 버전에 바인딩되는 새 머신 사용자 인증 정보를 발급합니다. 취약하고 오래된 Titan 펌웨어는 이러한 새로운 사용자 인증 정보를 복호화할 수 없습니다. 따라서 머신이 프로덕션에서 새 사용자 인증 정보로 작업을 수행하는 경우 Google은 머신의 Titan 칩이 최신 Titan 펌웨어를 실행 중이라고 확신할 수 있습니다.

신뢰할 수 있는 루트 인증 보장

이 문서에서 설명한 제어 기능은 모두 하드웨어 RoT의 자체 기능에 의존합니다. Google의 사용자 인증 정보 인프라는 이러한 RoT에서 내보내진 서명을 사용하여 머신이 의도한 소프트웨어를 실행하는지 확인합니다.

따라서 사용자 인증 정보 인프라에서 하드웨어 RoT가 신뢰할 수 있는지 여부와 RoT가 최신 펌웨어를 실행하는지 확인하는 것이 중요합니다.

각 Titan 칩이 제조될 때는 고유한 엔트로피가 프로그래밍됩니다. Titan의 하위 수준 부팅 루틴은 엔트로피를 기기 고유 키로 변환합니다. Titan 제조 라인의 보안 요소는 Google이 합법적인 Titan 칩으로 인식하도록 이 칩 고유 키를 보증합니다.

다음 다이어그램은 이 보증 프로세스를 보여줍니다.

Titan 보증 프로세스입니다.

프로덕션 단계에서 Titan은 기기 식별자 구성 엔진(DICE)과 유사한 흐름을 사용하여 내보내는 모든 서명을 기기 고유 키를 사용하여 보증합니다. 보증에는 Titan 펌웨어 버전 정보가 포함됩니다. 이 증명은 공격자가 Titan 칩에서 내보낸 서명을 가장하고 이전 Titan 펌웨어로 롤백하고 최신 Titan 펌웨어를 가장하는 것을 방지하는 데 도움이 됩니다. 이러한 제어를 통해 Google은 Titan에서 수신된 서명을 신뢰할 수 있는 Titan 펌웨어를 실행하는 신뢰할 수 있는 Titan 하드웨어에서 내보냈는지 확인할 수 있습니다.

부팅 무결성 기반

이 문서에서는 머신의 애플리케이션 프로세서가 의도한 코드를 부팅하도록 하는 메커니즘을 설명합니다. 이러한 메커니즘은 신뢰할 수 있는 하드웨어 루트 칩과 결합된 신중한 부팅 흐름을 사용합니다.

Google의 위협 모델에는 머신의 복호화된 사용자 인증 정보를 부적절하게 얻기 위해 CPU와 RoT 간의 버스에 물리적으로 개입할 수 있는 공격자가 포함됩니다. 이러한 위험을 최소화하기 위해 Google은 신뢰 컴퓨팅 그룹의 TPMDPE API와 Caliptra 신뢰할 수 있는 통합 루트를 결합하여 활성 침입자를 무력화하는 표준 기반 접근 방식을 개발하고 있습니다.

다음 단계

저자: 제프 앤더슨, 케빈 플리본