[논문 리뷰] When Good Components Go Bad: Formally Secure Compilation Despite Dynamic Compromise
이 논문은 불안정한 언어에서의 안전한 컴파일링을 위한 형식적 보안 기준 RSCDC를 제안하며, 정의되지 않은 동작을 만났더라도 컴포넌트가 손상되지 않도록 보장한다. RSCDC를 만족하는 컴파일러는 런타임에 손상된 컴포넌트가 目표 수준에서의 영향을 소스 수준에서 공격자 제어 컴포넌트가 가질 수 있는 것 이상으로 확대하지 않음을 보장한다. 이는 기계로 검증된 Coq 증명과 소프트웨어 장애 격리 또는 참조 모니터를 통한 실용적 구현을 통해 이루어진다.
We propose a new formal criterion for evaluating secure compilation schemes for unsafe languages, expressing end-to-end security guarantees for software components that may become compromised after encountering undefined behavior---for example, by accessing an array out of bounds. Our criterion is the first to model dynamic compromise in a system of mutually distrustful components with clearly specified privileges. It articulates how each component should be protected from all the others---in particular, from components that have encountered undefined behavior and become compromised. Each component receives secure compilation guarantees---in particular, its internal invariants are protected from compromised components---up to the point when this component itself becomes compromised, after which we assume an attacker can take complete control and use this component's privileges to attack other components. More precisely, a secure compilation chain must ensure that a dynamically compromised component cannot break the safety properties of the system at the target level any more than an arbitrary attacker-controlled component (with the same interface and privileges, but without undefined behaviors) already could at the source level. To illustrate the model, we construct a secure compilation chain for a small unsafe language with buffers, procedures, and components, targeting a simple abstract machine with built-in compartmentalization. We give a machine-checked proof in Coq that this compiler satisfies our secure compilation criterion. Finally, we show that the protection guarantees offered by the compartmentalized abstract machine can be achieved at the machine-code level using either software fault isolation or a tag-based reference monitor.
연구 동기 및 목표
- 정의되지 않은 동작로 인해 손상될 수 있는 상호 신뢰하지 않는 컴포넌트를 가진 시스템에서 안전한 컴파일링의 보안 보장을 형식화하는 것.
- 손상된 컴포넌트가 소스 수준에서의 공격자 권한과 동일한 권한으로만 영향을 미칠 수 있도록 보장하는 기준을 정의하는 것.
- 보안 컴파일 체인의 RSCDC 기준을 기계로 검증된 Coq 증명을 통해 공식적으로 검증하는 것.
- 소프트웨어 장애 격리 또는 태그 기반 참조 모니터를 사용하여 기계어 수준에서의 분할 기반 보호를 실현할 수 있음을 보여주는 것.
제안 방법
- 불안정한 언어에서의 안전한 컴파일링을 위한 형식적 기준으로 RSCDC(Robust Safety Criteria for Dynamic Compromise)를 제안한다.
- 정의되지 않은 동작을 만난 후 공격자가 컴포넌트를 완전히 제어하게 되는 것으로 동적 손상을 모델링한다.
- RSCDC 하에서 유지되는 안전성 성질의 클래스 ZP = Safety ∩ Closed≺P를 정의하여, 정의되지 않은 동작 확장에 대한 강건성을 보장한다.
- 내장된 격리 기능을 가진 분할된 추상 기계를 대상으로 하는 소규모 불안정한 언어를 위한 보안 컴파일 체인을 구축한다.
- 기계로 검증된 Coq 증명을 사용하여 컴파일러가 RSCDC를 만족함을 공식적으로 검증한다.
- 소프트웨어 장애 격리 또는 태그 기반 참조 모니터를 사용하여 기계어 수준에서 보호 모델을 실용적으로 구현함을 보여준다.
실험 결과
연구 질문
- RQ1컴포넌트가 정의되지 않은 동작로 인해 손상될 수 있을 경우, 컴파일 체인의 보안 보장을 어떻게 형식적으로 정의할 수 있는가?
- RQ2보안 컴파일 체인은 어떤 성질을 유지해야 하며, 이로 인해 손상된 컴포넌트가 목표 수준에서 소스 수준에서의 공격자 권한을 초월한 영향을 미치지 못하게 할 수 있는가?
- RQ3제안된 RSCDC 기준은 Coq와 같은 증명 보조 도구를 사용해 기계로 검증된 증명을 통해 공식적으로 검증할 수 있는가?
- RQ4기존의 저수준 메커니즘을 사용하여 분할 보호의 보안 보장을 기계어 수준에서 어떻게 구현할 수 있는가?
- RQ5RSCDC 하에서 유지되는 안전성 성질의 클래스는 무엇이며, 이를 소스 언어에서 어떻게 표현하여 목표 수준의 강건성을 확보할 수 있는가?
주요 결과
- RSCDC 기준은 형식적으로 정의되었으며, ZP = Safety ∩ Closed≺P에 속하는 모든 성질을 유지함과 동치임을 증명하였다.
- 소규모 불안정한 언어를 대상으로 하는 보안 컴파일 체인을 Coq에서 형식적으로 검증하여 RSCDC를 만족함을 입증하였으며, 이는 런타임 손상이 소스 수준에서 허용되는 공격 표면을 초과하지 않음을 보장한다.
- 논문은 소프트웨어 장애 격리 또는 태그 기반 참조 모니터를 사용하여 기계어 수준에서 분할 보호의 보안 보장을 달성할 수 있음을 보여주었다.
- ZP 클래스는 정의되지 않은 동작에 대한 확장에 대해 닫혀 있는 안전성 성질을 포함하며, 정의되지 않은 동작을 포함하는 추적을 허용하면 그 확장도 모두 허용됨을 보장한다.
- 더 강력한 안전성 성질 S1의 변형인 SZ+P1을 정의하고, ZP에 속한다는 것을 증명하였으며, 이는 이러한 성질이 RSCDC 하에서 강건해질 수 있음을 보여준다.
- ZP에 속하지 않는 안전성 성질 π에 대해, 가능한 한 더 관용적인 조건을 만족하면서 ZP에 속하는 강력한 변형 πZ+P를 구성할 수 있으며, 이는 RSCDC 기반 컴파일러가 원하는 안전성 보장을 유지할 수 있음을 의미한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.