Ryoan: A Distributed Sandbox for Untrusted Computation on Secret Data


Tyler Hunt, Zhiting Zhu, Yuanzhong Xu, Simon Peter, and Emmett Witchel, The University of Texas at Austin
12th USENIX Symposium on Operating Systems Design and Implementation (OSDI ’16)

개요

Service provider를 믿지 못하는 상황에서 End client user가 어떻게 하면 외부의 머신과 안전하게 통신하여 Service를 제공받을 수 있을지 고민한 논문이다. 이를 위해서 NaCL, SGX를 사용한 새로운 Threat model를 개발하였고, 이를 통해서 앞으로 CCA가 나아가야할 방향성을 제시하였다.

Motivation

데이터에 대한 중요성이 점차 커지는 환경에서, 데이터를 제공하는 Client는 Service provider를 반드시 믿어야 하였다. 그러나 Service provider가 Malicious한 provider이라면 Client의 Data를 몰래 탈취하여 악의적으로 사용할 수 있을 것이다. 따라서 완벽한 Confidential computing을 위해서라면, 위와 같은 Attack senario를 막을 필요가 있다.

Importance

기존에는 Hardware platform만을 대상으로 하여서 Provider의 공격을 상주하였다. 그러나 Service provider가 Platform provider와 Collude(공모)하거나 아니면 직접 공격하는 것은 Threat model로 상주하지 않았다. 이러한 경우 어떻게 대처해야 하는지가 이 논문에서 다루는 내용이다.

Challenge

  1. Covert channel attack: Service provider가 Platform혹은 다른 Provider와 짜고 특정 I/O혹은 시스템 콜 패턴등을 이용해서 공격하는 경우
  2. Hardware-based side channel attacks
  3. TOCTOU Attack, Reaply-attack...

와 같은 다양한 방식을 통해서 Ryoan이 제공하는 protection model를 우회하는 시도들이 있는데, 이를 어떻게 confinement시킬 수 있을지가 이 논문의 challenge가 된다.

Design

모든 Application의 프로그램은 Module이라는 단위로 구성된다. 각각의 Module은 Request-oridented enclave으로써, Input하나를 받고 Output하나를 내보낸다. 이때 Output을 내보내고 internal state들은 Royan에 의해서 Flush된다. 이러한 Module들은 NaCL을 통해서 Sandboxing되며 다시한번 Intel SGX를 통해서 Sandboxing된다. NaCL은 소프트웨어 기반 공격들을 보호하며, SGX는 하드웨어 기반 공격들을 보호한다.

Confining module
Royan은 NaCL를 통해서 Module이 외부 Platform과 direct하게 통신하는 것을 차단하고, 반드시 Trusted된 NaCL Runtime을 통해서만 통신하도록 하였다. NaCL는 사용하는 시스템콜을 제한하고, 최대한 내부적으로 Execution을 처리하기 때문에, Royan module이 Malicious한 공격을 Covert attack을 통해서 외부로 진행하는 것을 막는 역활을 담당한다. Hardware는 Royan의 Initial state가 Intact함을 Attestation을 통해서 Client에게 보장한다.
Distributed sandbox
각각의 모듈들은 Direct acylic graph (DAG)를 이루어서 통신하게 된다. 이러한 통신은 Secure channel로 인해서 보호되며 (SSL), 각각의 모듈들은 통신을 할떄 tagging을 하여서 적법한 통신인지를 구별할 수 있다. 이러한 태그를 관리하는 것은 Royan이 관리하며, 이를 통해서 보호된 네트워크 계층에서 적법한 Module들이 통신하고 있음을 보장할 수 있다.
Side-channel attacks
Processing-time을 통한 side channel을 막기위해서, Fixed processing time혹은 랜덤한 패딩을 Process execution time에 추가할 수 있도록 하였다. 또한 State들을 통한 Side-channel attack을 막기위해서 Royan은 Input data는 단 한번만 처리할 수 있도록 제한을 걸었으며, Output이 만들어진 뒤에는 모든 State들을 Flush하였다. 또한 Iago attack과 같은 Privielged software를 통한 공격을 막기위해서, Royan의 내부 libc는 모든 return value들을 검증하도록 하였다.
Optimization
부팅 속도를 빠르게 하기 위해서 Initialization이후에 check point를 뜨고 그 시점부터 시작할 수 있는 기능이 있다. 또한 1 to 1 request의 성능 하락을 방지하기 위해서 Request를 batching하는 방법을 사용하도록 권장하였다.

Evaluation

Use cases들은 Email processing, Personal health analysis, Image processing, Translation등이 있으며 최소 27% 최대 419% 정도의 오버헤드가 발생하였다.

Conclusion

Royan이 다른 CCA기반 논문들과 다르게 특별한 점은 Client, Service provider, Platform provider의 삼자축의 Threat model를 재정의 하였다는 사실이다. 기존의 논문들은 Service provider를 건너뛰고, Client와 platform provider사이의 Mutual trust만을 고려하였다면, Royan은 Service provider도 고려한 Threat model을 만들고 Solution을 제공하였다. 한 가지 아쉬운 점은 Correctness측면에서 정말로 Royan이 제공한 Solution이 엄밀하게 Correct하냐고 답할 수는 없다는 사실이다. 그러나 Royan에서 중요한 점은 새로운 Treat model의 제시이기 때문에 그 중요성은 다른 보안 관련 논문과는 다르게 접근해야 한다고 생각한다.