접근통제 정책과 기법
주체·객체·권한, ACL·Capability와 DAC·MAC·RBAC·ABAC를 비교합니다.
1. 접근통제의 기본 요소
- 주체(subject): 자원에 접근을 요청하는 사용자·프로세스·서비스
- 객체(object): 파일·DB 행·프로그램·장치·API 같은 접근 대상
- 동작(action): 읽기·쓰기·실행·삭제·승인·관리
- 권한(permission): 특정 주체·역할이 객체에 수행할 수 있는 동작
식별·인증·인가·감사를 구분한다.
- 식별: 누구라고 주장하는가
- 인증: 그 주장이 맞는가
- 인가: 어떤 행위를 허용할 것인가
- 감사: 누가 무엇을 했는지 기록·추적
2. 핵심 설계 원칙
최소 권한
업무 수행에 필요한 최소 권한만 부여한다. 필요할 수 있으니 미리 관리자 권한을 준다는 최소 권한에 어긋난다.
알 필요성
보안등급이나 직급이 높더라도 실제 업무상 필요가 있는 정보만 접근하도록 한다.
직무 분리
중요 업무를 여러 역할로 나눠 한 사람이 요청·승인·집행·감사를 모두 수행하지 못하게 한다.
- 정적 직무 분리: 상충 역할을 동시에 배정하지 않음
- 동적 직무 분리: 같은 거래·세션에서 상충 역할을 동시에 활성화하지 않음
기본 거부
명시적으로 허용되지 않은 접근은 거부한다. 정책 정보가 누락되거나 오류가 발생했을 때 무조건 허용하는 방식은 위험하다.
책임 추적성
공유 계정 대신 개인별 계정을 사용하고 권한 변경·특권 사용을 기록한다.
3. 접근통제 행렬
접근통제 행렬은 행에 주체, 열에 객체를 놓고 각 칸에 권한을 표현한다.
| 주체 \ 객체 | 보고서 | 급여 DB | 결재 기능 |
|---|---|---|---|
| 일반 직원 | 읽기 | 없음 | 없음 |
| 인사 담당 | 읽기 | 읽기·수정 | 없음 |
| 관리자 | 읽기·수정 | 관리 | 승인 |
실제 시스템에서는 희소한 행렬 전체를 저장하기보다 ACL 또는 Capability List로 표현한다.
ACL(Access Control List)
객체마다 누가 어떤 권한을 가지는가를 기록한다.
급여 DB ACL = { 인사담당: read/write, 감사자: read }
특정 객체의 접근자를 확인·회수하기 쉽다. Capability는 권한을 나타내는 위조 불가능한 참조·증표여야 하며 단순히 사용자가 작성한 권한 목록이 아니다.
Capability List
주체마다 어떤 객체에 어떤 권한을 가지는가를 기록한다.
인사담당 capability = { 급여DB: read/write, 보고서: read }
주체가 가진 권한을 한눈에 보기 쉽지만 capability의 위조·복사·전달을 안전하게 통제해야 한다.
4. DAC
DAC(Discretionary Access Control)는 객체 소유자나 권한 보유자의 재량으로 접근권한을 부여·전달할 수 있는 방식이다.
- 장점: 유연하고 일반 운영체제 파일 권한에 적용하기 쉽다.
- 단점: 사용자가 권한을 잘못 전달하거나 악성 프로그램이 사용자의 권한으로 정보를 유출할 수 있다.
5. MAC
MAC(Mandatory Access Control)은 중앙 정책과 보안 레이블에 따라 접근을 강제한다. 사용자가 임의로 레이블 정책을 변경하거나 권한을 전달할 수 없다.
- 주체: 허가 등급·범주
- 객체: 보안 등급·범주
- 결정: 중앙 정책의 레이블 비교
여기서 MAC은 Message Authentication Code가 아니라 강제적 접근통제라는 점에 주의한다.
6. RBAC
RBAC(Role-Based Access Control)는 사용자에게 권한을 직접 나열하기보다 역할에 권한을 부여하고 사용자를 역할에 배정한다.
사용자 → 역할 → 권한 → 객체
장점:
- 인사이동 시 사용자-역할 관계만 바꾸어 관리 가능
- 역할 계층으로 공통 권한 상속 가능
- 직무 분리 제약을 표현하기 쉬움
주의점:
- 역할을 지나치게 세분화하면 역할 폭증이 발생한다.
- 역할에 과도한 권한이 누적되면 최소 권한이 깨진다.
7. ABAC
ABAC(Attribute-Based Access Control)는 주체·객체·행위·환경 속성을 정책 규칙에 대입해 결정한다.
예:
허용 조건 =
사용자.부서 == 문서.소유부서
AND 사용자.직급 >= 문서.최소직급
AND 접속시간은 업무시간
- 장점: 시간·위치·장치·금액 같은 동적 조건을 세밀하게 반영
- 단점: 속성 품질과 정책 규칙이 복잡해질 수 있음
수평 권한 상승은 다른 사용자의 같은 수준 자원에, 수직 권한 상승은 관리자 같은 상위 기능에 무단 접근하는 경우다. 화면에서 버튼을 숨기는 것만으로 권한이 집행되지 않는다. 서버에서 주체·객체·동작을 확인하고, 퇴사·역할 변경 시 남은 권한도 회수한다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01객체별로 누가 어떤 권한을 갖는지 저장하는 것과 주체별로 어떤 객체 권한을 갖는지 표현하는 것은?
앞은 ACL, 뒤는 Capability List의 관점이다. 실제 Capability는 사용자가 임의로 위조할 수 없는 참조·권한 증표로 통제되어야 한다.
02역할을 기준으로 권한을 연결하는 정책과 부서·시간·객체 속성을 함께 판단하는 정책은?
앞은 RBAC, 뒤는 ABAC다. 소유자의 재량은 DAC, 중앙 레이블 규칙의 강제는 MAC으로 구분한다.