해당 포스터는 Redhat의 Security blog와 송도경 교수님의 컴퓨터과학입문 강의를 참고해서 적었다.
최근 많은 서비스들이 Cloud 서비스를 통해서 운영이 된다. 다만 AWS와 같이 외부적으로 지원하는 클라우드 서비스들은 보안 측면에서 본질적인 한계가 존재하는데, 바로 클라우드 제공사들이 사용자들의 데이터를 볼 수 있다는 점이다. 따라서 이들을 신뢰할 수 없다면 당연히 민감한 데이터가 유출될 가능성을 생각할 수밖에 없으므로, 클라우드 컴퓨팅을 이용할 수 없다. 암호화를 사용하면 되는 것 아니냐라고 할 수 있겠지만, 암호화는 저장 중인 데이터 (예: 디스크 암호화)와 전송 중인 데이터 (예: 네트워크 암호화)만 보호할 수 있다. 그러나 런타임에는 코드나 데이터나 메모리 상에 decrypt 된 상태로 올라가야 하고, 클라우드 제공사, 혹은 해당 권한을 얻는 attacker는 이러한 데이터에 접근이 가능하다. (예를 들어서 python runtime에 melicious 한 code가 injection 되어있는 경우가 있을 수 있다.) 이에 대한 해결책으로 제시되는 것이 하드웨어적인 지원을 더한 Confidential Computing이다.
기존의 Cloud computing 방식은 TCB에 Cloud management software(ex : hypervisor)가 포함되어 있다. 반면에 Confidential Cloud computing의 경우에는 TCB를 minimize 하고, Cloud management software를 외부에서 관리하도록 한다.
이런 방식으로 설계한다면 TCB는 TEE(Trusted Execution Environment)를 구성할 수 있다. 가장 기본적으로는 Firmware와 HardWare로 구성되며, 그 위에는 윗 사진과 같이 kernel, library, runtime, program 등이 stack 형태로 쌓인다. 이때 CPU Chip을 통해서 이러한 것들을 검증하는 과정을 거치기 때문에 customer들은 해당 TCB를 fully trust 할 수 있는 환경이 조성된다. 이를 통해서 Untrusted cloud server에서 user는 TEE 환경을 통해서 원격으로 state와 configuration을 attest할 수 있다. 따라서 Remote attestation을 통해서 Cloud Operator나 외부 access에 대해서 검증을 하는 방식이 반드시 필요하다고 할 수 있다. 이 때 Remote attestation은 일반적으로 TEE state/configuration의 무결성을 증명하고 attestation report의 진위를 확인하는 것을 말한다.
(예시를 hypervisor로 든 이유는 새 모델에서 가장 확실한 공격 벡터 중 하나가 hypervisor이기 때문이다. malicious hypervisor는 상대적으로 쉽게 random data를 주입하거나 guest의 실행을 방해하여 timing attacks을 용이하게 하거나, supporting platform의 상태 및 기능에 대해 거짓말을 하여 필요한 완화를 억제할 수 있다. 특히 PCI 공간의 device register에 대한 access는 잘못된 데이터가 confidential data를 노출시키는 controlled guest crashes로 이어질 수 있기에 주의해야 한다.)
가장 기본적인 해결책은 바로 one way hash function을 이용해서 root of trust로 시작하는 chain of trust를 구축하는 것이다.
여기서 원칙은 실행 전에 각 다음 단계가 이전 단계에 의해서 measure 된다는 것이다. 즉, 모든 해시가 trusted components로 구성된 경우 해시 체인이 root of trust에 기반을 두고 있기 때문에 전체 부팅 시퀀스를 신뢰할 수 있어야 한다. 이때 attacker는 가짜 코드를 삽입하거나 모든 단계(root 제외)에서 기존의 코드를 다른 코드로 대체하는 방식으로 공격을 할 수 있다. 그러나 이런 일이 발생하면 이전 단계의 measure는 잘못된 해시를 나타낸다.
이러한 일련의 과정들이 Attestation을 하는 방식의 한 형태이다. 이를 통해서 사용 중인 시스템에 대한 몇 가지 중요한 properties를 third party에게 증명한다.
여기에 제시된 모든 confidential computing platforms은 전체 chain of trust의 유효성을 확인하기 위해 암호화 방법을 사용하여 isolated, independent 한 physical root of trust라는 핵심 아이디어를 계승한다. 이러한 attestation 기법으로는 passport model과 the background check model 이 있다.
confidential computing이 보장하는 것은 confidentiality이다. confidentiality은 trusted domain 외부에서 데이터를 읽지 못하도록 보호하는 것이다. 다만 attacker가 trusted domain을 변조할 수 없도록 하려면 integrity protection도 필요하다는 것을 알 수 있다. 만약 trusted domain을 변조한다면, 신뢰할 수 있는 데이터가 손상될 뿐만 아니라 execution flow을 장악하여 데이터 유출이 발생할 수도 있다. 따라서 integrity protection까지 지켜져야만 confidential computing을 할 수 있다.
이를 위해서 hash함수를 이용한 전자 서명을 주로 사용한다. 그 후, private key를 통해서 dectypt하여 비교하는 방식을 통해서 integrity도 보장할 수 있다.
이러한 암호를 decryption 하는 방법은 대부분의 플랫폼에서 memory encryption key는 하드웨어에 존재하며, 이를 통해서 암호를 decryption 한다. 이를 추출하는 HW level에서 exploit 할 수 있는 방법을 찾는 것을 제외하고는 암호화된 메모리를 해독할 수 있는 실질적인 방법이 없다. 또한 이러한 방법을 통해 사람의 실수를 통해 key에 access 할 수 없다는 장점도 있다.
이렇게 될 경우 Public cloud server의 악의적인 시스템 관리자가 더 이상 가상 머신의 메모리를 dump 하여 암호가 처리되는 동안 이를 훔치려고 시도할 수 없음을 의미한다. Attacker가 만약 메모리를 dump하여 어떤 정보를 얻는다고 하더라도 얻을 수 있는 것은 기껏해야 암호의 암호화된 버전일 것이다.
+ ps: 그리고 많은 사람들이 Authentication과 Attestation을 착각하는데 정리하고 넘어가자면...
Authentication을 통해 Attestation’s result를 증명할 수 있다.
Attestation은 integrity를 확인한다.