[42서울] Born2beroot_접근 통제

jabae·2022년 5월 9일
0

42Seoul

목록 보기
7/20

🗂 접근 통제

운영체제에서 접근 통제(Access Control, 접근 제어)는 디렉토리나 파일, 네트워크 소켓 같은 시스템 자원을 적절한 권한을 가진 사용자나 그룹이 접근하고 사용할 수 있게 통제하는 것을 의미한다.

접근 통제에서는 시스템 자원객체(Object)라고 하고, 자원에 접근하는 사용자나 프로세스주체(Subject)라고 정의한다.

즉, 주체가 객체에 읽기, 쓰기, 실행 등의 접근 여부를 허가하거나 거부하는 기능을 말한다. 보안 정책에 근거하여 접근을 승인하거나 거부함으로써 허가 받지 않은 주체에 의한 불법적인 자원 접근 및 파괴를 예방한다.

주체가 객체를 참조할 때는 직접 참조하기 않고, 보안 커널을 통해 참조한다. 주체와 객체가 통신하기 전에 보안 커널을 통해 요청이 허가되어 있는 지 판단하기 위해 접근 통제 정책을 검토해야 한다.

보안 커널(Security Kernel)
주체, 객체 간의 모든 접근과 기능을 중재하는 보안 절차를 구현한 하드웨어이다. 참조 모니터 개념이 구현되어 있다.
참조 모니터(Reference Monitor)
보안 커널의 핵심으로, 주체 객체 간의 접근 통제 기능을 수행하는 핵심 모듈이다. 주체와 객체 사이의 모든 접근 통제를 중재한다.

커널(Kernel)
컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 사용자가 시스템 콜을 통해 컴퓨터 자원을 사용할 수 있게 해주는 자원 관리자라고 할 수 있다.
시스템콜과 커널 정리했던 TIL
redhat: Linux 커널이란 무엇일까요?

✅ 접근 통제 단계

  • 식별(Identification) : 객체에 주체의 식별자를 요청하는 과정(사용자 ID, 계정 번호, 메모리 카드 확인 등)
  • 인증(Authentication) : 허가된 사용자인지 사용자 정보를 확인하는 보안 절차 (패스워드, 토큰, 생체 인증 확인 등)
  • 인가(Authorization) : 객체에 접근하는 것을 허가하는 권한이 주어지는 것(접근 제어 목록; ACL, 보안 등급)

✅ 접근 통제 정책

세 가지 주요 접근 통제 정책으로 DAC, MAC, RBAC가 있다. 그 중 과제에서 등장하는 SELinux, AppArmor와 관련된 DAC, MAC을 먼저 알아보도록 하자.

🔸 DAC

  • 임의 접근 통제 (Discretionary Access Control)
  • 사용자나 그룹의 신분으로 통제: 사용자나 그룹의 신분을 기준으로 시스템 객체에 대한 접근을 제한
  • 객체의 소유자인 사용자나 그룹의 판단에 의해 다른 주체에게 이 객체의 접근 권한을 줄 수 있음
  • 특히, root 계정은 모든 권한을 갖고 있어, root 권한을 탈취하면 시스템을 완벽하게 장악할 수 있다.
  • 대부분의 OS가 DAC에 기반함
  • 👍 장점:
    필요에 따라 접근 제어가 가능하므로 시스템은 융통성을 가짐, 상업적 용도로 사용됨
    구현이 용이하고 사용이 간편함
  • 👎 단점:
    신분 도용 시 통제 방법이 없음
    멀 웨어(바이러스, 웜 등)에 치명적

🔸 MAC

  • 강제 접근 통제 (Mandatory Access Control)
  • 보안 등급으로 통제: 미리 정해진 정책과 보안 등급(보안 레이블, 보안 허가증)에 의거해 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교해 접근을 통제
  • 낮은 보안 등급의 주체는 더 높은 보안 등급의 객체에 접근이 불가함
  • 소유자라도 정책에 어긋나면 객체에 접근 불가함
  • 👍 장점:
    확실한 규칙에 따라 통제하므로 DAC보다 보안성이 우수함, 주로 기밀성이 강조되는 조직에서 사용됨
  • 👎 단점:
    모든 주체와 객체에 대해 보안 등급과 허용 등급을 부여해야 하므로 설정이 복잡함
    모든 접근에 대해 보안 정책을 확인해야 하기 때문에 시스템 성능에 영향을 끼침
    사용자 기능 제한적, 관리적 부담, 많은 비용 소모

🗂 SELinux와 AppArmor

SELinux와 AppArmor는 모두 주체가 객체에 접근할 수 있도록 허용하는 규칙을 기반으로 하는 강제 접근 통제(MAC) 보안 모델을 지원한다. SELinux레드햇 계열의 OS에서 사용하고, 데비안 계열을 포함한 다른 대부분의 운영체제에서는 AppArmor를 사용한다.

전통적으로 Linux와 UNIX 시스템은 DAC를 사용해왔다. 하지만 SELinux와 AppArmor는 Linux용 MAC 시스템의 대표적인 예이다.

✅ SELinux

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

AppArmor(Application Armor)는 시스템 관리자가 프로그램별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈이다.

LSM 커널 인터페이스를 사용해서 구현되었으며, AppArmor는 강제적 접근 통제(MAC)를 제공함으로써 전통적인 유닉스 접근 통제 모델(DAC)을 지원한다.

철저히 정책 파일을 기반으로 한다. 개별 응용 프로그램을 보호하는 일에 집중하며, 응용프로그램 단위의 보안 모델을 구현한다. 내외부적 위협으로부터 운영체제와 응용 프로그램을 능동적으로 보호한다.

AppArmor는 정책 파일을 통해 어떤 응용 프로그램이 어떤 파일/경로에 접근 가능한지 허용해준다. /etc/apparmor.d 디렉토리에 저장되며, enforce 모드complain 모드 두 가지 모드가 존재한다.

  • 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)

😮 왜 AppArmor일까?

SELinux는 CentOS에 사용되며, 시스템 전체에 보안을 설정한다. 반면에, AppArmor는 debian에 사용되며, 개별 응용프로그램을 보호하기 위해 응용 프로그램 단위 보안을 설정한다.

42과제에서 나는 데비안을 사용하므로 AppArmor를 설치해야 한다. 데비안에 기본적으로 깔려 있는데, 혹시 모르니 확인해야 한다.

📚 참고

profile
it's me!:)

0개의 댓글