ERIM: Secure, efficient in-process isolation with protection keys (MPK)


개요

Sandboxing을 위해서 hardware page table로 memory protection을 하는 것은 좋은 방법이나 context swtiching이 많이 발생하는 작업에선 큰 overhead를 만들어 낸다. 이러한 kernel - userlevel context switching을 줄이기 위해서 Intel MPK를 이용하여서 memory bound를 확보하면 문맥 교환을 줄임으로서 속도를 올릴 수 있다. 여기서 PKRU명령어를 1. binary rewriting으로 block하는 법, 2. instruction의 실행을 rewrite하여 unaligned execution을 없애기를 통해서 막음으로 security를 보장하고 최종적으로 sandboxing하는 법을 개발하였다.

Thread Model & Lifecycle

T (trust zone)과 U (Untruste Zone)에서 문맥교환시, mpk를 통하여 pkru레지스터를 바꾸는 것으로 현재 어떤 그리고 어떤 permission을 가지고 명령을 execute할지 정하게 된다.

ERIM은 trusted model에서 사용할 dynamic memory allocator을 할당시킨뒤, 소스 코드가 사용하는 allocator로 hook시킨다. 이를 통해서 소스 코드가 사용하는 memory allocation은 transparent하게 PKRU 레지스터에 연결되게 된다. 그뒤 ERIM은 Unstrusted memory의 memory pool을 검사하고 의도하지 않은 WRPKRU명령어가 있는지 검사한다. 그뒤 interception method을 연결한뒤, main으로 control flow를 옮기게 된다. 이를 통해서 Trusted zone의 메모리 할당은 Unstrusted memory pool을 참조할수 있지만 그 반대는 성립되지 않게 된다.

한계

  1. Side-channel, rowhammer attack, microachitextural leaks은 방어할 수 없음
  2. MPK를 다른 방식으로 사용하는 프로그램과 함께 사용할 수 없음
  3. pre-designated entry point를 일일이 지정해 주어야 함