사전 다중 등급 보안
개념

다중 등급 보안

gabury1고친 사람 github-actions[bot]

다중 등급 보안은 비밀 등급이 서로 다른 정보를 한 시스템에 함께 두면서 사람마다 자기 등급까지만 보게 막아 줍니다. 높은 등급의 정보가 낮은 등급으로 새어 내려가는 것도 시스템이 막습니다. 군과 정부처럼 정보에 등급을 매겨 다루는 곳을 위해 생겼습니다.

쉽고 빠른 이해

다중 등급 보안은 등급이 다른 문서와 사람이 한 시스템을 나눠 쓰게 해 줍니다. 등급은 공개, 대외비, 비밀, 일급비밀 순으로 높아집니다. 비밀 등급을 받은 사람은 대외비 문서는 읽지만 일급비밀 문서는 못 엽니다.

이게 없으면 등급마다 컴퓨터와 네트워크를 따로 둬야 합니다. 한 시스템에 섞어 두고 권한을 사람 손에 맡기면, 악성 프로그램 하나가 비밀을 공개 파일로 옮겨 적을 수 있습니다.

어떻게 도는가:

  1. 모든 문서와 모든 사람에게 등급을 붙입니다
  2. 자기보다 높은 등급의 문서는 읽지 못합니다
  3. 자기보다 낮은 등급의 문서에는 쓰지 못합니다
  4. 이 규칙은 시스템이 강제하고 사용자는 풀 수 없습니다

대가는 불편함입니다. 정보가 위로만 흐르니 문서 등급이 자꾸 올라갑니다. 아래로 내리려면 따로 절차를 밟아야 합니다. 같은 팀이라도 등급이 다르면 한 파일을 함께 고치기 어렵습니다.

그래서 주로 군과 정부 기관처럼 정보에 등급을 매기는 제도가 있는 곳이 씁니다. 보통의 웹 서비스는 이 방식 대신 역할에 권한을 붙이는 방식을 씁니다.

상세

층마다 게시판과 건의함이 있는 건물을 떠올려 보겠습니다. 위층 사람은 아래층 게시판을 지나가며 읽을 수 있지만 거기에 쪽지를 붙이지는 못합니다. 아래층 사람은 위층 건의함에 쪽지를 넣을 수 있지만 안을 꺼내 보지는 못합니다.

다중 등급 보안(Multilevel Security, MLS)은 등급이 다른 정보와 등급이 다른 사용자가 한 시스템을 함께 쓸 때, 누가 무엇을 읽고 쓸 수 있는지를 등급으로 정하는 보안 방식입니다. 같은 파일 서버에 일급비밀 작전 계획과 누구나 봐도 되는 보도자료가 함께 들어 있는 경우가 그렇습니다.

등급마다 시스템을 따로 두면 이런 고민은 없습니다. 대신 컴퓨터와 네트워크가 등급 수만큼 늘어납니다. 자료를 한 등급에서 다른 등급으로 옮기는 일도 사람이 손으로 해야 합니다. 다중 등급 보안은 그 칸막이를 시스템 하나 안에 세웁니다. 큰 갈래로는 접근 제어의 한 방식입니다.

정보의 등급과 사람의 인가 등급

정보에는 보안 등급을 붙입니다. 새어 나갔을 때 피해가 클수록 높은 등급을 받습니다. 공개, 대외비, 비밀, 일급비밀처럼 높낮이가 한 줄로 정해진 몇 단계를 씁니다.

사람에게는 인가 등급을 줍니다. 그 사람이 어느 등급까지 다뤄도 된다고 조직이 믿는지를 나타냅니다. 비밀 인가를 받은 사람은 비밀 이하의 정보를 다룰 수 있습니다.

구획

등급만으로는 모자랄 때가 있습니다. 비밀 인가를 받았다고 모든 비밀을 봐야 하는 것은 아닙니다. 해군 작전을 맡은 사람에게 핵무기 설계 자료는 필요 없습니다.

그래서 등급 옆에 구획을 함께 붙입니다. 구획은 주제별로 나눈 이름표입니다. 그 주제를 알아야 일할 수 있는 사람에게만 줍니다. 일에 꼭 필요한 만큼만 알게 한다는 이 원칙을 알 필요 원칙이라고 부릅니다.

구획에는 높낮이가 없습니다. 「핵」과 「암호」 중 어느 쪽이 위인지 묻는 것은 뜻이 없습니다. 그래서 구획은 한 줄로 세우지 않고 집합으로 다룹니다.

보안 레이블과 지배 관계

등급과 구획 집합을 한데 묶은 것을 보안 레이블이라고 합니다. 「비밀, {핵}」처럼 적습니다. 문서에도 사람에게도 레이블이 하나씩 붙습니다.

두 레이블을 견줄 때는 지배 관계를 씁니다. A 의 등급이 B 이상이고 B 의 구획이 전부 A 안에 들어 있으면, A 가 B 를 지배한다고 말합니다. 접근을 허락할지는 모두 이 견줌 하나로 정해집니다.

아래 표는 「비밀, {핵}」 레이블을 가진 사람을 문서 넷과 견준 것입니다.

문서 레이블 사람이 문서를 지배하나 까닭
대외비, {핵} ✓ 등급이 높고 「핵」 구획도 있다
비밀, {} ✓ 등급이 같고 문서에 구획이 없다
대외비, {핵, 암호} ✗ 「암호」 구획이 없다
일급비밀, {} ✗ 등급이 낮다

셋째 줄은 사람이 문서를 지배하지 못하고 문서도 사람을 지배하지 못합니다. 이처럼 레이블 사이에는 높낮이를 댈 수 없는 짝이 생깁니다.

같은 견줌을 코드로 적으면 한 줄입니다. 등급은 공개 0, 대외비 1, 비밀 2, 일급비밀 3 으로 바꿔 두었습니다.

Python
def dominates(a, b):
    level_a, cats_a = a
    level_b, cats_b = b
    return level_a >= level_b and cats_b <= cats_a

me = (2, {"핵"})
dominates(me, (1, {"핵"}))          # True
dominates(me, (1, {"핵", "암호"}))  # False
dominates(me, (3, set()))           # False

cats_b <= cats_a 는 파이썬 집합에서 「b 의 구획이 전부 a 안에 있나」를 묻는 식입니다. 세 호출의 결과는 위 표의 첫째, 셋째, 넷째 줄과 같습니다.

지배 관계는 두 문서를 합쳐 보고서를 만들 때도 쓰입니다. 보고서는 두 문서를 다 읽을 수 있는 사람만 읽어야 하므로, 두 레이블을 함께 지배하는 레이블을 받습니다. 그중 가장 낮은 것은 높은 쪽 등급에 두 구획을 합친 레이블입니다. 「비밀, {핵}」 문서와 「대외비, {암호}」 문서를 합친 보고서는 「비밀, {핵, 암호}」를 받습니다.

어떤 두 레이블을 골라도 이런 레이블은 하나로 정해집니다. 이런 성질을 가진 순서를 격자라고 부릅니다. 다중 등급 보안의 레이블은 격자를 이룹니다.

문서를 여는 주체와 열리는 객체

지금까지는 사람과 문서로 말했습니다. 그런데 시스템 안에서 파일을 여는 것은 사람이 아니라 프로그램입니다. 그래서 읽고 쓰는 쪽을 주체, 읽히고 쓰이는 쪽을 객체라고 따로 부릅니다. 사용자가 실행한 프로세스가 주체이고 파일과 레코드가 객체입니다.

주체는 자기를 실행한 사용자의 레이블을 물려받습니다. 비밀 인가자가 띄운 편집기는 비밀 인가자의 레이블로 돕니다. 아래의 두 규칙은 이 주체와 객체 사이에 걸립니다.

위로 읽지 않는다

주체는 자기 레이블이 지배하는 객체만 읽을 수 있습니다. 비밀 인가자가 일급비밀 문서를 못 여는 것이 이 규칙입니다. 흔히 「위로 읽지 않는다」라고 줄여 말합니다.

아래로 쓰지 않는다

쓰기 규칙은 방향이 반대입니다. 객체의 레이블이 주체의 레이블을 지배할 때만, 곧 자기와 같거나 높은 객체에만 쓸 수 있습니다. 비밀 인가자는 공개 파일에 내용을 쓰지 못합니다. 「아래로 쓰지 않는다」라고 부릅니다.

인가를 준 사람의 쓰기를 왜 막는지 의문이 들 수 있습니다. 막는 대상은 사람이 아니라 사람 이름으로 도는 프로그램입니다. 비밀 인가자가 받은 편집기에 악성 코드가 숨어 있다고 해 봅시다. 그 프로그램은 사용자의 인가 등급으로 돌기 때문에 비밀 문서를 읽을 수 있습니다.

쓰기 규칙이 없으면 그 프로그램은 읽은 내용을 공개 파일에 몰래 옮겨 적습니다. 그러면 공개 등급인 누구나 그 내용을 읽게 됩니다. 정상 프로그램인 척하며 이런 일을 하는 코드를 트로이 목마라고 부릅니다. 아래로 쓰지 않는다는 규칙이 이 경로를 막습니다.

두 규칙 아래에서 정보가 지나갈 수 있는 길을 비밀 인가자 한 명을 가운데 두고 그리면 이렇습니다. 화살표는 정보가 흐르는 방향입니다.

flowchart TD
    C["대외비 문서 (낮은 등급)"]
    P(["비밀 인가자"])
    T["일급비밀 문서 (높은 등급)"]
    C -->|"읽는다"| P
    P -->|"쓴다"| T

거꾸로 가는 길, 곧 일급비밀 문서를 읽거나 대외비 문서에 쓰는 길은 없습니다. 읽기와 쓰기가 둘 다 되는 것은 같은 레이블의 문서뿐입니다. 그 결과 정보는 낮은 등급에서 높은 등급 쪽으로만 흐릅니다.

이 두 규칙을 수학으로 적어 증명할 수 있게 만든 것이 벨-라파둘라 모델입니다. 거기서는 읽기 규칙을 단순 보안 속성, 쓰기 규칙을 스타 속성이라고 부릅니다. 다중 등급 보안을 말할 때 대개 이 모델의 규칙을 가리킵니다.

사용자가 풀 수 없는 규칙

보통의 파일 권한은 주인이 원하면 남에게 읽기 권한을 줄 수 있습니다. 이렇게 권한을 객체 주인의 재량에 맡기는 방식을 임의적 접근 제어(Discretionary Access Control, DAC)라고 합니다.

다중 등급 보안은 그 재량을 없앱니다. 레이블은 시스템을 관리하는 쪽이 정합니다. 사용자는 자기 문서의 레이블을 낮추거나 권한을 넘겨줄 수 없습니다. 이렇게 시스템 전체에 한결같이 강제되는 방식을 강제적 접근 제어(Mandatory Access Control, MAC)라고 합니다. 다중 등급 보안은 강제적 접근 제어의 대표 사례입니다.

강제는 운영체제 안의 한 부품이 맡습니다. 모든 접근 요청은 반드시 이 부품을 거칩니다. 부품은 검증할 수 있을 만큼 작게 만듭니다. 이 부품을 참조 모니터라고 부릅니다.

무결성을 지키는 반대 방향

지금까지의 규칙은 비밀이 새지 않게 하는 것, 곧 기밀성만 지킵니다. 낮은 등급의 엉터리 정보가 높은 등급 문서를 더럽히는 것은 오히려 열려 있습니다. 위로 쓰기가 허락되기 때문입니다.

정보가 함부로 바뀌거나 오염되지 않게 하는 성질을 무결성이라고 합니다. 무결성을 지킬 때는 정보마다 얼마나 믿을 수 있는지를 매긴 무결성 등급을 따로 붙입니다. 이 등급은 비밀 등급과 별개로 매길 수 있습니다.

무결성을 지키려면 방향을 뒤집습니다. 여기서 위아래는 무결성 등급의 높낮이입니다. 믿을 수 없는 아래쪽 정보는 읽지 않고, 믿을 수 있는 위쪽에는 쓰지 않습니다. 이 규칙을 정리한 것이 비바 모델입니다.

두 모델은 이렇게 거울처럼 마주 봅니다.

벨-라파둘라 모델 비바 모델
지키는 것 기밀성 무결성
읽을 수 있는 방향 같거나 아래 같거나 위
쓸 수 있는 방향 같거나 위 같거나 아래

두 모델을 한 시스템에 다 걸면서 비밀 등급과 무결성 등급에 같은 레이블을 쓰면, 주체는 자기와 같은 레이블의 객체하고만 읽고 쓸 수 있게 됩니다.

위로만 쌓이는 등급

정보가 위로만 흐르므로 문서의 등급은 올라가기만 합니다. 비밀 인가자가 공개 자료를 참고해 쓴 보고서는 비밀 등급이 됩니다. 시간이 지나면 공개해도 되는 내용까지 높은 등급에 갇힙니다.

같은 팀이라도 인가 등급이 다르면 한 파일을 함께 고치기 어렵습니다. 높은 쪽은 아래로 쓸 수 없고 낮은 쪽은 위를 읽을 수 없기 때문입니다.

등급을 내리는 신뢰 주체

등급을 내리는 일은 두 규칙 안에서는 할 수 없습니다. 그래서 쓰기 규칙에서 빼 준 특별한 주체를 둡니다. 이를 신뢰 주체라고 부릅니다. 신뢰 주체에게는 사람의 검토를 거쳐 문서를 낮은 등급으로 옮기는 일을 맡깁니다.

신뢰 주체는 규칙의 예외입니다. 이 주체가 잘못 돌면 위에서 세운 칸막이가 한꺼번에 뚫립니다.

정해진 통로 밖으로 새는 은닉 채널

두 규칙은 파일처럼 정해진 통로만 막습니다. 높은 등급 프로그램이 디스크를 일부러 채웠다 비우고, 낮은 등급 프로그램이 남은 용량을 지켜보면 한 비트씩 정보가 넘어갑니다.

이렇게 설계자가 통로로 의도하지 않은 것을 타고 정보가 새는 길을 은닉 채널이라고 부릅니다. 공유하는 자원이 있는 한 은닉 채널을 모두 없애기는 어렵습니다. 그래서 보통은 새는 속도를 낮추는 데서 그칩니다.

같은 키에 레코드가 둘 생기는 다중 인스턴스화

등급이 섞인 데이터베이스에서는 같은 기본 키에 레코드가 둘 생기기도 합니다. 낮은 등급 사용자가 넣으려는 키가 이미 높은 등급 행으로 있다고 해 봅시다. 「이미 있다」고 거절하면 그 거절이 비밀 행의 존재를 알려 줍니다.

그래서 거절하지 않고 낮은 등급 쪽에 행을 하나 더 만들어 줍니다. 등급마다 같은 키의 행이 따로 보이게 되는 이 처리를 다중 인스턴스화라고 부릅니다. 비밀은 지키지만 「키 하나에 행 하나」라는 약속은 깨집니다.

쓰는 곳과 안 쓰는 곳

다중 등급 보안은 정보에 등급을 매기는 제도가 먼저 있는 조직을 위해 생겼습니다. 군, 정보기관, 정부 기관이 그렇습니다. 등급이 다른 네트워크 사이에서 자료를 골라 넘기는 장비도 이 원리를 씁니다. 그런 장비를 교차 도메인 솔루션이라고 부릅니다.

보통의 웹 서비스는 이 방식을 잘 쓰지 않습니다. 사용자를 몇 단계 등급으로 한 줄 세우기 어렵기 때문입니다. 아래로 쓰지 않는다는 규칙이 협업을 막기도 합니다. 이런 곳에서는 역할에 권한을 붙이는 역할 기반 접근 제어나 속성으로 판단하는 속성 기반 접근 제어를 씁니다.

관련 항목

다중 등급 보안이 속하는 상위 분류

접근 제어 · 보안 엔지니어링 · 정보 보안 · 보안 모델

다중 등급 보안을 이루는 구성 요소

보안 등급 · 인가 등급 · 구획 · 보안 레이블 · 지배 관계 · 격자 · 주체 · 객체

다중 등급 보안의 규칙을 형식으로 적은 모델

벨-라파둘라 모델 · 비바 모델 · 클라크-윌슨 모델 · 만리장성 모델 · 격자 기반 접근 제어

다중 등급 보안과 맞세워지는 접근 제어 방식

강제적 접근 제어 · 임의적 접근 제어 · 역할 기반 접근 제어 · 속성 기반 접근 제어 · 접근 제어 목록

다중 등급 보안이 지키는 성질과 원칙

기밀성 · 무결성 · 알 필요 원칙 · 최소 권한

다중 등급 보안의 규칙을 피해 가는 위협

은닉 채널 · 트로이 목마 · 추론 통제 · 집계 공격 · 다중 인스턴스화 · 사이드 채널

다중 등급 보안을 강제하는 장치

참조 모니터 · 보안 커널 · 신뢰 컴퓨팅 기반 · 신뢰 주체 · 교차 도메인 솔루션

다중 등급 보안을 구현하거나 평가한 시스템과 기준

SELinux · Trusted Solaris · Multics · TCSEC · 공통 평가 기준

다른 이름: MLS · Multilevel Security · Multi-Level Security · 다단계 보안 · 다중 수준 보안