  Since its debut, SGX has been used in many applications, e.g., secure data
processing. However, previous systems usually assume a trusted enclave and
ignore the security issues caused by an untrusted enclave. For instance, a
vulnerable (or even malicious) third-party enclave can be exploited to attack
the host application and the rest of the system. In this paper, we propose an
efficient mechanism to confine an untrusted enclave's behaviors. The threats of
an untrusted enclave come from the enclave-host asymmetries. They can be abused
to access arbitrary memory regions of its host application, jump to any code
location after leaving the enclave and forge the stack register to manipulate
the saved context. Our solution breaks such asymmetries and establishes mutual
distrust between the host application and the enclave. It leverages Intel MPK
for efficient memory isolation and the x86 single-step debugging mechanism to
capture the event when an enclave is existing. It then performs the integrity
check for the jump target and the stack pointer. We have solved two practical
challenges and implemented a prototype system. The evaluation with multiple
micro-benchmarks and representative real-world applications demonstrated the
efficiency of our system, with less than 4% performance overhead.
