USENIX Security 2024 Hongyi Lu, Shuai Wang, Techang Wu, Wanning He, Fengwei Zhang
개요
MOAT는 eBPF의 보안상의 문제점을 Intel PKS를 통해서 해결한 논문이다.
Motivation
eBPF는 널리 사용되고 있지만 새로운 기능이 추가되면 Static verifier의 verification logic이 복잡하게 바뀌어, 점차 더 많은 CVE들이 eBPF static verifier에서 발견되고 있다.
Importance
eBPF Static verifier에서 발견되고 있는 이러한 CVE들은 치명적인 결과를 가져오기 때문에, eBPF의 Static verifier에만 의존하는 것은 Kernel의 Security에 대한 측면에 있어서, 큰 문제점이 되고 있다.
Main Idea
Intel MPK를 통해서 eBPF의 Static verifier의 기능을 Hardware protection으로 offloading한다. 이 경우 다음과 같은 문제가 생긴다.
- MPK는 최대 16개의 PKEY만을 허용한다.
- Memory에 대한 공격을 막아도, Helper function에 대한 공격또한 막아야 한다.
Design
- Lightweight Isolation Domain via PKS
- 커널과 eBPF가 사용하는 메모리를 PKS를 통해서 분리하였다.
- Helper function Security
- Buggy한 Helper function이 Arbitrary커널 오브젝트에 접근하는 것을 막기 위해서 Helper function이 사용하는 오브젝트를 다른 PKS값으로 Tagging하였다. 또한 Helper function에 잘못된 Argument가 들어오는 것을 막기 위해서 Runtime check을 삽입하였다. 전자는 Critical Object Protection (COP), 후자는 Dynamic parameter auditing (DPA)로 명명하였다.
Conclusion
MOAT는 eBPF verifier의 문제를 효과적으로 식별하고 이에 대한 해결책을 제시하였다.
- DoS를 TCB 밖으로 분리하려는 시도는 이해할 수 있으나, DoS와 관련된 Kernel state의 snapshot을 유지하는 것은 매우 어려운 과제로 보인다. 특히, eBPF의 복잡한 Static verification의 주요 목적 중 하나가 DoS와 Kernel state 변조를 방지하는 데 있다고 생각하면, 해당 접근법의 동기가 충분히 설명되지 않은 것처럼 보인다.
- uSwitch (S&P 2022)와 같은 논문에서 MPK의 한계를 PCB와 같은 방식으로 해결하는 방법이 이미 제시되었으나, 본 논문에서는 이에 대한 논의가 포함되지 않았다. PKS와 PKU의 유사성을 고려했을 때, 이러한 유사성만으로는 Design point로서 충분히 설득력을 갖기 어려워 보인다.
- Software fault isolation을 사용하는 다른 연구들과 비교했을 때, Hardware를 사용해야만 하는 명확한 장점이 드러나지 않은 것으로 보인다. 이와 같은 비교 분석이 추가된다면 설계의 강점이 더 명확해질 수 있을 것이다.
- Evaluation에서 사용된 Hardware(Intel 8505 Processor)는 Intel PKS를 지원하지 않는 것으로 보인다. Intel PKS는 Graphite부터 제공되는 XEON CPU의 기능으로 알려져 있다(PKU는 지원됨). 평가에 사용된 환경이 PKS 기반 설계와의 호환성에 미치는 영향을 명확히 설명한다면 독자에게 더 큰 신뢰를 줄 수 있을 y것이다.
- MOAT에서는 PKS의 Granularity 문제를 해결하기 위해 Memory copy 및 4K page mapping과 같은 방식을 사용하고 있으나, 일부 커널 오브젝트(예: VMA)와 같은 경우 4K align되지 않은 상황에서도 eBPF는 이러한 타입들에 대해 안전한 접근과 iteration을 지원한다. 이와 관련된 사례가 논문에서 다루어지지 않은 점은 아쉬운 부분이다.
- COP 또한 Page-granularity의 영향을 받으며, DPA는 수작업이 요구되는 부분이 있다. 이에 따라 TCB가 증가하는 것으로 해석될 수 있다. 또한, 동적으로 추적해야 하는 변수의 Range가 있는 경우, DPA는 Static하게 확인 가능한 Range만 추적 가능하다. 결과적으로 eBPF Static verifier가 Range check에 대한 Assertion 추가를 통해서만 이를 보완할 수 있는 것으로 보인다.