A Security Analysis of CheriBSD and Morello Linux
이 논문은 CHERI 아키텍처가 메모리 오염에 대해 효과적임에도 불구하고 기존의 격리 메커니즘이 단순한 버그와 공격을 통해 우회될 수 있음을 입증하며 CheriBSD와 Morello Linux의 보안성을 분석하고, 이러한 취약점을 해결하기 위한 구체적인 완화 방안과 권고 사항을 제안한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
고도로 보안된 은행 금고를 상상해 보십시오. 과거에는 도둑이 창문을 깨면(소프트웨어 버그), 은행 안을 마음대로 휘저으며 텔러의 책상부터 CEO의 금고까지 모든 것을 훔칠 수 있었습니다.
이를 막기 위해, 엔지니어들은 CHERI라는 새로운 종류의 금고를 만들었습니다. 단순히 문을 잠그는 대신, 그들은 은행의 모든 물건에 특별한 "마법 열쇠"(캡빌리티/Capability라고 불림)를 부여했습니다. 이 열쇠는 단순히 "이 문을 열 수 있다"라고 말하는 것이 아니라, "당신은 이 특정 문을 열 수 있지만, 오전 9시에서 오후 5시 사이에만 가능하며, 내부를 들여다보기만 할 수 있고 만질 수는 없다"라고 명시합니다.
CHERI의 목표는 **구획화(Compartmentalization)**입니다. 즉, 은행을 아주 작은 격리된 방들로 나누는 것입니다. 만약 도둑이 "기프트 숍" 방에 침입했다면, 그곳에서 발견한 마법 열쇠들은 오직 기프트 숍의 문들만 열 수 있어야 합니다. 그들은 "금고" 방으로 걸어 들어갈 수 없어야 합니다.
이 논문은 일종의 보안 감사 보고서와 같습니다. 연구원들은 다음과 같이 질문했습니다. "만약 도둑이 기프트 숍에 들어갔다면, 여전히 금고로 몰래 들어갈 수 있는가?" 그들은 이 테스트를 두 가지 다른 버전의 은행 시스템인 Morello Linux와 CheriBSD에서 수행했습니다.
다음은 이를 쉽게 설명한 연구 결과입니다.
핵심 문제: 마스터 키 유출
벽은 튼튼하지만, 연구원들은 "기프트 숍"의 도둑이 "금고"를 여는 열쇠를 훔칠 수 있는 네 가지 방법을 발견했습니다.
1. "스택 워킹(Stack Walking)" 공격 (쓰레기통 뒤지기)
비유: 은행 직원이 업무를 수행할 때마다 메모를 적어 포스트잇에 붙여 책상 위에 쌓아둔다고 상상해 보십시오. 업무를 마치면 다음 업무로 넘어가지만, 가끔 예전 포스트잇을 버리는 것을 잊어버리곤 합니다.
공격: 기프트 숍의 도둑은 이전 직원들이 남겨둔 포스트잇 더미를 살펴봅니다. 그러다 "여기에 금고 열쇠가 있음"이라고 적힌 메모를 발견합니다. 시스템이 메모(메모리)를 제대로 치우지 않았기 때문에, 도둑은 열쇠를 훔쳐 금고로 바로 걸어 들어갑니다.
해결책: 연구원들은 은행이 사용 직후 모든 포스트잇을 즉시 닦아내는 "청소부"를 두거나, 직원들에게 각자의 개인 책상을 주어 서로의 메모를 볼 수 없게 해야 한다고 제안합니다.
2. "Dlopen" 유출 (결함이 있는 지도)
비유: 은행에는 모든 방이 어디에 있는지 알려주는 중앙 디렉토리(지도)가 있습니다. 새로운 방이 추가되면 디렉토리가 업데이트됩니다. 도둑은 디렉토리에 기프트 숍의 지도를 요청합니다.
공격: 디렉토리는 그들에게 지도를 주지만, 그것은 "결함이 있는" 버전입니다. 기프트 숍만 보여주는 대신, 실수로 금고, CEO 집무실, 금고를 포함한 은행의 모든 방에 대한 비밀 목록을 포함하고 있습니다. 도둑은 이 실수로 만들어진 목록을 이용해 곳곳의 열쇠를 찾아냅니다.
해결책: 연구원들은 디렉토리가 도둑에게 "봉인된" 지도를 주어야 한다고 제안합니다. 도둑은 지도를 볼 수는 있지만, 특별한 봉인 해제 도구가 없는 한 비밀 부분을 읽을 수는 없습니다.
3. "힙 스캐빈징(Heap Scavenging)" 공격 (더미 속 뒤지기)
비유: 은행 구석에는 버려진 상자들의 큰 더미(메모리)가 있습니다. 상자가 버려질 때는 비어 있어야 합니다. 하지만 가끔 작업자들이 상자를 비우는 것을 잊어버려 도구나 열쇠가 들어있는 채로 버리기도 합니다.
공격: 도둑은 버려진 상자 더미를 뒤지며 열쇠가 들어있는 상자를 찾습니다. 만약 "금고" 직원이 남겨둔 열쇠를 발견한다면, 그 열씨를 사용해 금고를 열 수 있습니다.
해결책: 은행에는 "상자를 버리기 전에 반드시 깨끗이 쓸 것"이라는 규칙이 필요합니다. 또는 도둑이 전체 은행이 아닌, 기프트 숍에 속한 상자 더미만 뒤질 수 있도록 제한해야 합니다.
4. "힙 스토링(Heap Storing)" 공격 (시한폭탄)
비유: 도둑이 더미에서 상자 하나를 집어 들고, 자신의 이름을 적은 뒤 주머니에 숨깁니다. 나중에 은행이 그 똑같은 상자를 버리고 새로운 직원에게 줍니다.
공격: 도둑은 기다립니다. 나중에 도둑이 주머니를 확인해 보니, 그 상자는 이제 새로운 직원이 금을 보관하는 데 사용되고 있습니다. 도둑은 여전히 그 특정 상자에 대한 "포인터"(정신적인 메모)를 가지고 있기 때문에, 원래는 들어올 수 없음에도 불구하고 그 안에 손을 뻗어 금을 훔칠 수 있습니다.
해결책: 은행은 상자가 버려지는 즉시 그 상자에 대한 기존 열쇠를 "철회(revoke)"(파괴)하는 시스템을 갖추어야 합니다. 그래야 도둑의 정신적 메모가 무용지물이 됩니다.
결과: 두 종류의 은행
연구원들은 이 기술들을 두 가지 시스템에서 테스트했습니다.
- Morello Linux: 이 시스템은 매우 취약했습니다. 도둑은 네 가지 기술을 모두 사용하여 기프트 숍을 탈출하고 메인 금고로부터 개인 열쇠를 훔칠 수 있었습니다. 이는 마치 보안 요원이 없고 사방에 지저도한 포스트잇이 널려 있는 은행과 같았습니다.
- CheriBSD: 이 시스템은 훨씬 더 나았습니다. 내장된 가드( c18n 및 heap revocation이라 불림)가 있었습니다.
- "스택 워킹" 기술은 작동하지 않았는데, 이는 모든 직원이 자신만의 개인 책상(격리된 스택)을 가졌기 때문입니다.
- "힙 스토링" 기술은 작동하지 않았는데, 이는 은행이 즉시 기존 열쇠를 파괴하는 시스템을 갖추었기 때문입니다.
- 하지만, "Dlopen" 유출과 "힙 스캐빈징"은 여전히 작동했습니다. 도둑은 여전히 비밀 지도를 찾을 수 있었고 더러운 상자들을 뒤질 수 있었습니다.
핵심 결론
연구원들은 "Dlopen" 유출을 통해 보안 프로그램으로부터 개인 키(마스터 비밀번호와 같은 것)를 성공적으로 훔쳐내는 "개념 증명(Proof of Concept)"을 수행했습니다.
결론:
CHERI 아키텍처는 기존 방식의 절도(예: 벽을 부수고 들어오는 것)를 막아주는 환상적인 발명품입니다. 하지만 그 위에서 실행되는 소프트웨어(운영 체제 및 라이브러리)에는 여데도 버그가 존재합니다. 이러한 버로들은 열린 창문이나 잃어버린 열쇠처럼 작용하여, 벽이 아무리 튼든하더라도 도둑이 보안을 우회할 수 있게 만듭니다.
이 논문은 하드웨어는 안전하지만, 시스템을 진정으로 안전하게 만들기 위해서는 소프트웨어(포스트잇을 치우고, 결함 있는 지도를 수정하며, 상자를 깨끗이 쓰는 것)를 반드시 고쳐야 한다고 결론짓습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.