콘텐츠로 이동

접근 행렬 (Access Matrix)

Jan 27, 2026

접근 행렬(Access Matrix)은 시스템의 보호 정책을 표현하는 추상 모델이다. 행(row)은 도메인(Domain), 열(column)은 **객체(Object)**를 나타내며, 각 항목 access(i, j)는 도메인 Di가 객체 Oj에 대해 수행할 수 있는 연산의 집합을 담고 있다.

쉽게 말해, “누가 무엇을 할 수 있는가”를 표 한 장으로 정리한 것이다.

│ O1(파일A) │ O2(파일B) │ O3(프린터) │ O4(프로그램) │
─────────────┼─────────────┼─────────────┼──────────────┼────────────────┤
D1(사용자A) │ read │ read,write │ │ execute │
─────────────┼─────────────┼─────────────┼──────────────┼────────────────┤
D2(사용자B) │ read,write │ │ print │ execute │
─────────────┼─────────────┼─────────────┼──────────────┼────────────────┤
D3(관리자) │ read,write │ read,write │ print │ read,execute │
─────────────┴─────────────┴─────────────┴──────────────┴────────────────┘
  • access(1, 1) = {read} → D1은 O1에 대해 읽기만 가능
  • access(2, 3) = {print} → D2는 O3(프린터)에 대해 인쇄 가능
  • access(3, 4) = {read, execute} → D3는 O4에 대해 읽기와 실행 가능

도메인 자체도 객체로 취급할 수 있다. access(i, j)switch가 포함되어 있으면 도메인 Di에서 도메인 Dj로 전환할 수 있다.

│ D1 │ D2 │ D3 │
─────────────┼──────────┼──────────┼──────────┤
D1 │ │ switch │ │
─────────────┼──────────┼──────────┼──────────┤
D2 │ │ │ switch │
─────────────┼──────────┼──────────┼──────────┤
D3 │ │ │ │
─────────────┴──────────┴──────────┴──────────┘

D1 → D2 전환 가능, D2 → D3 전환 가능하지만, D3에서는 다른 도메인으로 전환할 수 없다.

접근 행렬은 정적이지 않다. 다음 특수 권한으로 행렬 자체를 수정할 수 있다.

권한설명
copy (*)해당 항목의 권한을 같은 열의 다른 항목으로 복사 가능
owner해당 열(객체)의 항목을 추가하거나 삭제 가능
control해당 행(도메인) 전체의 항목을 수정 가능

정보 유출 방지(Confinement)는 일반적으로 **해결 불가능(undecidable)**한 문제이다. 어떤 프로세스가 비공식 채널(covert channel)을 통해 정보를 유출하는지 완전히 판별하는 것은 이론적으로 불가능하다.

UNIX 시스템에서의 접근 행렬 적용:

  • 도메인 = (user-id, group-id) 쌍
  • 객체 = 파일, 디렉터리, 디바이스
  • 권한 = r(read), w(write), x(execute)
  • chmod 명령어는 접근 행렬의 항목을 수정하는 것에 해당

Windows에서는 Access Token(도메인)과 Security Descriptor(객체)를 사용해 접근 행렬을 구현한다.