메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Wedge: Splitting Applications into Reduced-Privilege Compartments

noriwiki


Adrea Bittau, Petr Marchenko, Mark Handley, Brad Karp
NSDI'08: 5th USENIX Symposium on Networked Systems Design and Implementation

개요

현재 리눅스의 Security policy는 Corase-grained인데, 이를 Fine-grained로 나누어서 (wedge해서), 성능의 큰 저하 없이 Security를 높히는 새로운 디자인을 제시하였다.

Motivation

점점더 많은 소프트웨어들이 네트워크 상에 존재함에 따라서, 잠재적 보안에 대한 취약점도 증가하고 있다. Principle of least privilege원칙에 따르면 Application을 여러개로 쪼개서, 각 부분에 맞는 최소한의 권한을 주는 것이 보안적으로 좋은 방법이 된다.

Importance

현재 Process로 주어지는 Isolation granularity는 너무 Coarse-grained라서 이러한 시스템에 적용시키기에는 문제가 있다.

Main Idea

Wedge는 프로그래머가 default-deny정책을 적용한 Isolation단위를 OS레벨에서 제공하여서, 사용자가 위에서 설명한 디자인을 쉽게 구현할 수 있는 모델을 제시하였다. Wedge는 메모리를 Tagging할 수 있도록 하여서, 각 Tagged된 메모리에 대한 접근 권한을 나누었다. 또한 Wedge는 이러한 분리 디자인을 분석할 수 있는 Crowbar이라는 tool을 만들어서, 쉽게 Application을 분석하여서 Wedge로 나눌 수 있도록 하였다.

Design

Sthread
Sthread는 각 Application의 Protection domain의 중심이 되는 단위이다. 각 Sthread는 Tagged memory, File descriptors, Callgates 그리고 Resource와 같은 자원이 접근 권환과 함께 배정이 되어 있다. Sthread의 스폰시에는 Sensitive한 데이터에 대한 접근권한이 전혀 없는데(Default-dency policy), 부모는 자기자신이 가지고 있는 권한하에서 자식 Sthread에게 권한을 상속 시킬 수 있다.
Tagged Memory
Memory permission을 tag라는 단위로 제공하는데, tag는 Sthread가 다른 Sthread와 메모리를 공유하기 위한 방법이다. Tag을 통하지 않고 Allocate된 메모리들은, 다른 Sthread에서 접근할 수 없으며, 다른 Sthread와 메모리를 공유하기 위해서는 Tag를 상속시켜야 한다.
Callgates
Callgate는 프로그램중에서 Caller의 권한보다 더 높은 권한에서(보통은 그 Caller을 실행시킨 부모의 권한에서)실행하는 함수를 말한다. Callgate는 Untrusted component에서 민감한 자료에 접근하기 위해서 사용된다. Callgate는 Entry point, 리소스에 대한 permissions, 그리고 사용할 수 있는 argument들로 구성된다. Sthread는 Callgate를 만들어서, 다른 SThread에 넘길 수 있고, 그 다른 Sthread는 Callgate에 요구된 Argument만을 사용해서 호출해서 생성자의 권한을 가지고 함수를 수행할 수 있다. Callgate가 호출되면, callgate가 지정하는 permission을 가지는 새로운 Sthread가 생성되어서, entry point로 점프한다. Caller는 Callgate수행이 종료될 때 까지 blocking되며 Return 값을 받을 수 있다.
Crowbar
Crowbar는 Application을 분석해서 어디서 할당된 메모리가 어디서 사용되었는지를 분석해 준다. 이를 통해서 Crowbar은 Sthread와 Tagged memory의 관계를 파악할 수 있는 정보를 개발자에게 제공한다.

어떻게 보면 Wedge는 Rust의 오너싶모델을 아직 Rust가 나오기 전에 커널과의 협업으로 구현한 방식같아 보이기도 한다. 서로 Sthread끼리의 암묵적인 자원 공유는 차단하고, 명시적으로 Tagging이라는 Capability모델을 통하여 공유된 메모리만 접근가능하게 하였으니 말이다.

Conclusion

Wedge는 Privilege seperation의 관점을 제시한 초대 논문중에 하나로서, 후속 연구들에 많은 영향을 미친 영향력있는 논문이다.