운영체제에서 접근 통제(Access Control, 접근 제어)는 디렉토리나 파일, 네트워크 소켓 같은 시스템 자원을 적절한 권한을 가진 사용자나 그룹이 접근하고 사용할 수 있게 통제하는 것을 의미한다.
접근 통제에서는 시스템 자원을 객체(Object)라고 하고, 자원에 접근하는 사용자나 프로세스는 주체(Subject)라고 정의한다.
즉, 주체가 객체에 읽기, 쓰기, 실행 등의 접근 여부를 허가하거나 거부하는 기능을 말한다. 보안 정책에 근거하여 접근을 승인하거나 거부함으로써 허가 받지 않은 주체에 의한 불법적인 자원 접근 및 파괴를 예방한다.
주체가 객체를 참조할 때는 직접 참조하기 않고, 보안 커널을 통해 참조한다. 주체와 객체가 통신하기 전에 보안 커널을 통해 요청이 허가되어 있는 지 판단하기 위해 접근 통제 정책을 검토해야 한다.
❓ 보안 커널(Security Kernel)
주체, 객체 간의 모든 접근과 기능을 중재하는 보안 절차를 구현한 하드웨어이다. 참조 모니터 개념이 구현되어 있다.
❓ 참조 모니터(Reference Monitor)
보안 커널의 핵심으로, 주체 객체 간의 접근 통제 기능을 수행하는 핵심 모듈이다. 주체와 객체 사이의 모든 접근 통제를 중재한다.❓ 커널(Kernel)
컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 사용자가 시스템 콜을 통해 컴퓨터 자원을 사용할 수 있게 해주는 자원 관리자라고 할 수 있다.
시스템콜과 커널 정리했던 TIL
redhat: Linux 커널이란 무엇일까요?
세 가지 주요 접근 통제 정책으로 DAC
, MAC
, RBAC
가 있다. 그 중 과제에서 등장하는 SELinux
, AppArmor
와 관련된 DAC, MAC을 먼저 알아보도록 하자.
SELinux와 AppArmor는 모두 주체가 객체에 접근할 수 있도록 허용하는 규칙을 기반으로 하는 강제 접근 통제(MAC) 보안 모델을 지원한다. SELinux는 레드햇 계열의 OS에서 사용하고, 데비안 계열을 포함한 다른 대부분의 운영체제에서는 AppArmor를 사용한다.
전통적으로 Linux와 UNIX 시스템은 DAC를 사용해왔다. 하지만 SELinux와 AppArmor는 Linux용 MAC 시스템의 대표적인 예이다.
SELinux(Security-Enhanced Linux)는 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있게 하는 Linux 시스템용 보안 아키텍처이다.
원래 미국 국가안보국(United States National Security Agency, NSA)이 LSM(Linux Security Module)을 사용하여 Linux 커널에 대한 일련의 패치로 개발한 것이다. MAC의 접근 통제 정책을 지원하는 매커니즘을 제공하는 리눅스 커널 보안 모듈이다.
SELinux는 시스템의 애플리케이션, 프로세스, 파일에 대한 액세스 제어를 보안 정책을 사용해서 허용된 액세스만을 실행한다. 시스템 전체에 보안을 설정한다.
SELinux를 설정하여 시스템을 보호할 수 있는 방법으로 일반적인 타겟 정책, 또는 다단계 보안(Multi-Level Security, MLS)이 있다. 타겟정책은 기본 옵션으로서 다양한 프로세스와 태스크 및 서비스를 처리한다. MLS는 매우 복잡하여 보통 정부 기관에서만 사용한다.
주요 목표는 시스템 공격으로 인한 시스템과 데이터를 보호하녀 2차 피해를 막는 것으로, 여러가지 보안 요소 중 하나이며 여러 보안 요소와 혼용해야 한다.
❓ LSM(Linux Security Module)
리눅스 보안 모듈(Linux Security Module, LSM)은 리눅스 안에서 다양한 보안 모듈의 구동 환경을 제공해주는 프레임워크이다. 리눅스 커널에 최소한의 변화를 주면서 강제 접근 통제(MAC)를 구현하기 위해 설계되었다. 현재 Linux의 Capability, SELinux, AppArmor, smack들의 기법들은 모두 LSM을 이용하고 있다.
AppArmor(Application Armor)는 시스템 관리자가 프로그램별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈이다.
LSM 커널 인터페이스를 사용해서 구현되었으며, AppArmor는 강제적 접근 통제(MAC)를 제공함으로써 전통적인 유닉스 접근 통제 모델(DAC)을 지원한다.
철저히 정책 파일을 기반으로 한다. 개별 응용 프로그램을 보호하는 일에 집중하며, 응용프로그램 단위의 보안 모델을 구현한다. 내외부적 위협으로부터 운영체제와 응용 프로그램을 능동적으로 보호한다.
AppArmor는 정책 파일을 통해 어떤 응용 프로그램이 어떤 파일/경로에 접근 가능한지 허용해준다. /etc/apparmor.d
디렉토리에 저장되며, enforce 모드
와 complain 모드
두 가지 모드가 존재한다.
$ sudo apt --installed list apparmor # apparmor 설치 확인
$ sudo apt install apparmor # apparmor 설치(없다면)
$ sudo apt install apparmor-utils # apparmor utils 설치
$ aa-enabled # 활성화 여부 확인
$ sudo aa-status # 현재 상태 확인 가능(enforced, complain, unconfined)
SELinux는 CentOS에 사용되며, 시스템 전체에 보안을 설정한다. 반면에, AppArmor는 debian에 사용되며, 개별 응용프로그램을 보호하기 위해 응용 프로그램 단위 보안을 설정한다.
42과제에서 나는 데비안을 사용하므로 AppArmor를 설치해야 한다. 데비안에 기본적으로 깔려 있는데, 혹시 모르니 확인해야 한다.