Amazon EC2 NitroTPM 및 UEFI 보안 부팅 지원 정식 출시
컴퓨팅에서 신뢰할 수 있는 플랫폼 모듈(TPM) 기술은 하드웨어 기반의 보안 관련 기능을 제공하도록 설계되었습니다. TPM 칩은 암호화 작업을 수행하도록 설계된 안전한 암호화 프로세서입니다. TPM 기술을 사용하면 세 가지 주요 이점이 있습니다.
첫째, 운영 체제 외부에서 암호화 키에 대한 액세스를 생성, 저장 및 제어할 수 있습니다. 둘째, TPM 모듈을 사용하면 TPM 모듈에 물리적으로 기록된 TPM의 고유 RSA 키를 사용하여 플랫폼 디바이스 인증을 수행할 수 있습니다. 셋째, 보안 측정을 수행하고 저장하여 플랫폼 무결성을 보장하는 데 도움이 될 수 있습니다.
2021년 re:Invent에서는 AWS Nitro 시스템을 기반으로 하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스용 가상 TPM 2.0 호환 TPM 모듈인 NitroTPM의 향후 출시를 발표했습니다. 또한 EC2에 대한 통일 확장 펌웨어 인터페이스(UEFI) 보안 부팅(Secure Boot) 출시도 발표했습니다.
오늘 AWS GovCloud(미국) 리전을 포함하여 중국 이외의 모든 AWS 리전에서 NitroTPM과 보안 부팅을 모두 사용할 수 있게 되었습니다.
NitroTPM을 사용하여 디스크 암호화 키 또는 SSH 키와 같은 보안 암호를 EC2 인스턴스 메모리 외부에 저장하여 인스턴스에서 실행되는 애플리케이션으로부터 보호할 수 있습니다. NitroTPM은 Nitro System의 격리 및 보안 속성을 활용하여 인스턴스만 이러한 보안 암호에 액세스할 수 있도록 합니다. 물리적 또는 개별 TPM과 동일한 기능을 제공합니다. NitroTPM은 ISO TPM 2.0 사양을 따르므로 TPM을 활용하는 기존 온프레미스 워크로드를 EC2로 마이그레이션할 수 있습니다.
NitroTPM은 EC2 인스턴스의 보안 태세를 강화하기 위한 몇 가지 사용 사례(예: OS 수준의 볼륨 암호화를 위한 보안 키 저장 및 액세스, 측정된 부팅 또는 자격 증명 액세스를 위한 플랫폼 증명)에 활용할 수 있습니다.
보안 키 저장 및 액세스
NitroTPM은 특정 플랫폼 측정값(플랫폼 구성 레지스터(PCR)라고 함)에 래핑되고 연결된 키를 생성하고 저장할 수 있습니다. NitroTPM은 해당 플랫폼 측정값이 키가 생성된 시점의 값과 동일한 경우에만 키를 언래핑합니다. 이 절차를 ‘TPM에 키 봉인’이라고 합니다. 키를 해독하는 것을 봉인 해제라고 합니다. NitroTPM은 인스턴스와 OS가 양호하다고 알려진 상태일 때만 키의 봉인을 해제합니다. TPM 2.0 사양을 준수하는 운영 체제는 이 메커니즘을 사용하여 볼륨 암호화 키를 안전하게 봉인 해제합니다. NitroTPM을 사용하여 Microsoft Windows에서 BitLocker에 대한 암호화 키를 저장할 수 있습니다. Linux 통합 키 설정(LUKS) 또는 Linux의 dm-verity는 NitroTPM을 활용할 수 있는 OS 수준 애플리케이션의 예입니다.
플랫폼 증명
NitroTPM이 제공하는 또 다른 주요 기능은 부트로더 및 운영 체제가 부팅 프로세스 중에 로드하는 소프트웨어 또는 구성의 측정값으로 PCR을 확장하는 프로세스인 ‘측정된 부팅’입니다. 이렇게 하면 예를 들어 악성 프로그램이 커널의 일부를 맬웨어로 덮어쓰는 경우 보안이 향상됩니다. 또한 측정된 부팅을 사용하면 TPM에서 서명된 PCR 값을 가져와 해당 값을 사용하여 부팅 상태가 유효하다는 것을 원격 서버에 입증할 수 있으므로 원격 증명 지원이 가능합니다.
NitroTPM 사용 방법
NitroTPM 사용을 시작하기 위해서는 세 가지 전제 조건이 있습니다.
- 최신 버전의 Windows 또는 Linux와 같이 TPM 2.0용 명령 응답 버퍼(CRB) 드라이버가 있는 운영 체제를 사용해야 합니다. Red Hat Enterprise Linux 8, SUSE Linux Enterprise Server 15, Ubuntu 18.04, Ubuntu 20.04, Windows Server 2016, 2019 및 2022와 같은 OS가 테스트되었습니다.
- Nitro 기반 EC2 인스턴스에 배포해야 합니다. 현재 UEFI 부팅 모드를 지원하는 모든 인텔 및 AMD 인스턴스 유형이 지원됩니다. Graviton1, Graviton2, Xen 기반, Mac, 베어 메탈 인스턴스는 지원되지 않습니다.
- NitroTPM은 현재 일부 추가 인스턴스 유형에서는 작동하지 않지만 이런 인스턴스 유형에 대한 지원은 출시 후 곧 제공될 예정입니다. 해당하는 목록은 C6a, C6i, G4ad, G4dn, G5, Hpc6a, I4i, M6a, M6i, P3dn, R6i, T3, T3a, U-12tb1, U-3tb1, U-6tb1, U-9tb1, X2idn, X2iedn 및 X2iezn입니다.
- 자체 AMI를 생성할 때 UEFI를 부팅 모드로 사용하고 NitroTPM을 사용하도록 플래그를 지정해야 합니다. AWS에서 제공하는 Windows AMI는 기본적으로 플래그가 지정됩니다. Linux 기반 AMI는 기본적으로 플래그가 지정되지 않으므로 직접 생성해야 합니다.
TPM이 활성화된 상태에서 AMI를 생성하는 방법
AWS는 TPM이 활성화된 여러 버전의 Windows용 AMI를 제공합니다. DescribeImages
API 호출을 사용하여 AMI가 NitroTPM을 지원하는지 확인할 수 있습니다. 예를 들면 다음과 같습니다.
aws ec2 describe-images --image-ids ami-0123456789
AMI에 대해 NitroTPM이 활성화되면 다음 예제와 같이 출력에 “TPMSupport”: “v2.0"
이 표시됩니다.
{
"Images": [
{
...
"BootMode": "uefi",
"TpmSupport": "v2.0"
}
]
}
또한 DescribeImageAttribute
API 호출을 사용하여 tpmSupport
를 쿼리할 수도 있습니다.
자체 AMI를 생성할 때 boot-mode
를 uefi
로 설정하고 tpm-support
를 v2.0
으로 설정하여 RegisterImage
API 호출을 사용한 TPM 지원을 활성화할 수 있습니다.
aws ec2 register-image
--region us-east-1
--name my-image
--boot-mode uefi
--architecture x86_64
--root-device-name /dev/xvda
--block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} DeviceName=/dev/xvdf,Ebs={VolumeSize=10}
--tpm-support v2.0
TPM이 활성화된 AMI를 생성하는 방법을 알아보았으므로 이제 Windows 인스턴스를 생성하고 BitLocker를 구성하여 루트 볼륨을 암호화해 보겠습니다.
연습: BitLocker와 함께 NitroTPM 사용
BitLocker는 사용 가능한 경우 자동으로 NitroTPM을 탐지해서 사용합니다. BitLocker를 설치 및 구성하기 위해 여기서 수행하는 것 외에 추가로 필요한 구성 단계는 없습니다. 설치 시 BitLocker는 TPM 모듈을 인식해서 자동으로 사용하기 시작합니다.
설치 단계를 진행해 보겠습니다. uefi
와 TPM v2.0
이 모두 활성화된 AMI를 사용하여 평소처럼 인스턴스를 시작합니다. 지원되는 Windows 버전을 사용하고 있는지 확인합니다. 여기서 저는 Windows Server 2022 04.13을 사용하고 있습니다.
인스턴스에 연결되면 Windows에서 TPM 모듈을 인식하는지 확인합니다. 확인하기 위해 tpm.msc
애플리케이션을 시작하면 신뢰할 수 있는 플랫폼 모듈(TPM) 관리(Trusted Platform Module (TPM) Management) 창이 열립니다. 모든 것이 순조롭게 진행되면 TPM 제조업체 정보(TPM Manufacturer Information) 아래에 제조업체 이름(Manufacturer Name): AMZN이 표시됩니다.
servermanager.exe
애플리케이션을 열고 화면 오른쪽 상단의 관리(Manage)를 선택합니다. 드롭다운 메뉴에서 역할 및 기능 추가(Add Roles and Features)를 선택합니다.
다시 부팅한 후 서버에 다시 연결하고 제어판을 엽니다. 시스템 및 보안(System and Security) 섹션에서 BitLocker 드라이브 암호화(BitLocker Drive Encryption)를 선택합니다.
보안을 강화하기 위해 암호화가 끝날 때 재부팅하기로 결정했습니다. 이것이 꼭 필요한 것은 아닙니다. 하지만 컴퓨터의 루트 볼륨(C:
)을 암호화했기 때문에 컴퓨터가 여전히 부팅되는지 궁금합니다.
다시 부팅한 후 인스턴스에 다시 연결하고 암호화 상태를 확인합니다.
PowerShell
을 열고 다음을 입력합니다.
manage-bde -protectors -get C:
C:
볼륨 암호화 키를 NitroTPM 모듈에서 가져왔고 인스턴스가 무결성 유효성 검사를 위해 보안 부팅을 사용했음을 확인할 수 있습니다. 복구 키도 볼 수 있습니다.
이전 스크린샷에서 복구 키를 일반 텍스트로 남겨 둔 이유는 여러분이 읽으실 때는 이 데모에 사용한 인스턴스와 볼륨이 더 이상 존재하지 않기 때문입니다. 이런 경우가 아니면 복구 키를 공개적으로 공유해서는 안됩니다.
중요 고려 사항
이제 NitroTPM을 사용하여 BitLocker의 볼륨 암호화 키를 보호하는 방법을 살펴보았으므로 몇 가지 추가 고려 사항을 살펴보겠습니다.
- Amazon EC2 콘솔이 아닌 AWS CLI를 통해
RegisterImage
API를 사용해야만 NitroTPM 지원용 AMI를 활성화할 수 있습니다. - AMI에 플래그를 설정하면 NitroTPM 지원이 활성화됩니다. AMI로 인스턴스를 시작한 후에는 인스턴스의 속성을 수정할 수 없습니다.
ModifyInstanceAttribute
API는 실행 중이거나 중지된 인스턴스에서는 지원되지 않습니다. ImportImage
API와 같이 NitroTPM을 사용하여 EC2 인스턴스를 가져오거나 내보내면 NitroTPM 데이터가 생략됩니다.- NitroTPM 상태는 EBS 스냅샷에 포함되지 않습니다. EBS 스냅샷은 동일한 EC2 인스턴스에만 복원할 수 있습니다.
- TPM 기반 키로 암호화된 BitLocker 볼륨은 다른 인스턴스에서 복원할 수 없습니다. 인스턴스 유형(중지, 인스턴스 유형 변경 및 재시작)을 변경할 수 있습니다.
현재 UEFI 부팅 모드를 지원하는 모든 인텔 및 AMD 인스턴스 유형을 지원합니다. Graviton1, Graviton2, Xen 기반, Mac, 베어 메탈 인스턴스는 지원되지 않습니다. 일부 추가 인스턴스 유형은 출시 시점에서 지원되지 않습니다(이전에 정확한 목록을 공유했음). 출시 후 곧 해당 내용에 대한 지원이 추가될 예정입니다.
NitroTPM을 사용할 때에는 추가 요금이 부과되지 않습니다. 현재 중국을 제외하고 AWS GovCloud(미국) 리전을 포함한 모든 AWS 리전에서 사용할 수 있습니다.