윈도우 비스타 데이터 흐름 무결성 타입 시스템
본 논문은 윈도우 비스타의 동적 무결성 라벨링 모델을 분석하고, 신뢰된 코드가 정보 흐름 공격에 책임을 질 수 있다는 관점에서 데이터 흐름 무결성(DFI)이라는 보안 속성을 정의한다. 저자들은 DFI를 보장하는 정적 타입 시스템을 설계하고, 이 타입 시스템이 런타임 접근 제어와 결합될 때 DFI를 효율적으로 강제할 수 있음을 증명한다. 또한, 기존 윈도우 비스타의 실행 제어 중 일부는 불필요함을 보여 최적화 가능성을 제시한다.
저자: Avik Chaudhuri, Prasad Naldurg, Sriram Rajamani
본 논문은 마이크로소프트 윈도우 비스타가 구현하고 있는 동적 무결성 라벨링 메커니즘을 분석하고, 이를 기반으로 데이터 흐름 무결성(Data‑Flow Integrity, DFI)이라는 새로운 보안 속성을 정의한다. DFI는 “신뢰된 객체(높은 무결성 라벨을 가진 객체)의 내용이 환경(낮은 라벨을 가진 프로세스)으로부터 유입되는 데이터를 절대 포함하지 않는다”는 안전성을 목표로 한다. 기존의 비밀성 기반 비상호작용(non‑interference) 모델은 모든 암묵적 흐름까지 차단하려 하지만, 운영체제 수준에서는 암묵적 흐름이 빈번히 발생하고 이를 정적으로 완전히 차단하기 어렵다. 따라서 DFI는 명시적 흐름만을 제한함으로써 현실적인 보안 목표를 설정한다.
윈도우 비스타의 무결성 모델은 프로세스와 객체 각각에 동적으로 변하는 라벨을 부여하고, 라벨 간에는 전역적인 순서 ⊑ 가 존재한다. 라벨이 높은 프로세스는 낮은 라벨의 객체를 읽을 수 있지만, 쓰기와 실행은 라벨이 낮은 객체에 대해 제한된다. 또한, 프로세스는 자신의 라벨을 낮출 수 있고, 객체 라벨을 올리거나 내릴 수 있는 규칙이 존재한다. 이러한 규칙은 실제 운영체제에서 구현된 사용자 접근 제어(User Access Control, UAC)와 실행 제어와 일치한다.
논문은 이러한 모델에서 발생할 수 있는 네 가지 주요 공격을 제시한다. 첫째, 낮은 라벨 프로세스가 높은 라벨 객체에 직접 쓰지는 못하지만, 중간 라벨 프로세스를 이용해 값을 복사함으로써 우회한다(쓰기‑복사 공격). 둘째, 낮은 라벨 객체를 복사해 높은 라벨 객체에 저장하고 실행함으로써 실행 제어를 우회한다(복사‑실행 공격). 셋째, 높은 라벨 객체의 라벨을 낮추어 쓰고 다시 올리는 방식으로 쓰기 제한을 회피한다(보호‑쓰기‑재보호 공격). 넷째, 복사‑보호‑실행 조합을 통해 실행 제어를 우회한다. 이 모든 공격은 반드시 높은 라벨을 가진 신뢰된 프로세스가 참여해야만 성공한다는 점을 강조한다.
이러한 관찰을 바탕으로 저자들은 DFI를 정형화하고, 이를 강제하는 정적 타입 시스템을 설계한다. 타입 시스템의 핵심 아이디어는 각 객체에 대해 정적 하한 라벨 S를 선언하도록 하는 것이다. 런타임에 객체 라벨이 변하더라도, 타입 검증은 객체 라벨이 절대 S 이하로 내려가지 않으며, 객체에 저장되는 값도 S 이하의 라벨을 가진 값만이 될 수 있음을 보장한다. S는 프로그래머가 명시적으로 지정하지만, 추가적인 어노테이션은 필요 없으며, 타입 검사 알고리즘은 효율적인 선형 시간 복잡도를 가진다.
타입 규칙은 명시적 대입(Explicit Substitution) 기법을 활용해 값의 출처를 정확히 추적한다. 이는 “값이 낮은 라벨에서 유입되었는가”를 판단하는 데 필수적이다. 또한, 타입 규칙은 윈도우 비스타의 런타임 접근 제어(쓰기, 읽기, 라벨 변경, 실행)를 전제 조건으로 삼아, 이러한 제어가 없으면 타입 안전성을 보장할 수 없음을 증명한다. 결과적으로, 대부분의 기존 런타임 검사, 특히 실행 제어는 타입 시스템에 의해 대체될 수 있지만, 쓰기 권한 검사와 같은 핵심 제어는 여전히 필요하다.
형식적 증명 부분에서는 타입 시스템이 DFI를 보장한다는 soundness 정리를 제시하고, 타입이 부여된 프로그램이 실행 중에 라벨 위반을 일으키지 않음을 보인다. 또한, 타입 시스템이 기존 윈도우 비스타의 실행 제어 중 일부가 중복임을 증명하고, 이를 최적화함으로써 시스템 성능을 향상시킬 수 있음을 보여준다.
논문의 기여는 크게 세 가지이다. 첫째, 윈도우 비스타 환경에 맞는 실용적인 무결성 속성인 DFI를 정의하고, 명시적 흐름에 초점을 맞춘 보안 모델을 제시한다. 둘째, DFI를 정적 타입 시스템으로 효율적으로 강제하는 방법을 설계하고, 타입 검증이 런타임 접근 제어와 결합될 때 완전한 보안을 제공함을 증명한다. 셋째, 기존 운영체제의 실행 제어 중 불필요한 부분을 식별하고 최적화 가능성을 제시함으로써, 실무 적용 가능성을 높인다.
전체적으로 이 연구는 동적 라벨링과 정적 타입 검증을 결합한 하이브리드 접근법이 운영체제 수준에서 실용적인 무결성 보장을 제공할 수 있음을 입증한다. 이는 향후 운영체제 설계나 보안 툴 개발에 중요한 설계 원칙을 제공하며, 신뢰된 코드가 책임을 지는 모델을 기반으로 한 정적 분석의 유용성을 강조한다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기