SELinux 로 리눅스 서버를 견고하게 만들기 #1

개요

SELinux(Security-enhanced Linux) 는 첩보 영화에서 자주 나오는 NSA(National Security Agency)가 개발한 보안이 강화된 Linux kernel module 이다.

 

기존 Linux 나 Un*x 의 보안적 문제점중 하나는 root 가 super user라는 점이었다.

root 권한을 획득하면 해당 시스템의 모든 정보에 접근이 가능하여 root 권한이 탈취(root 권한으로 뜨는 daemon이 buffer overflow 공격, 잘못된 setuid bit 설정등)되면 시스템은 중대한 위협에 직면하게 된다.

 

server process 의 보안 취약점으로 인해 root 권한 탈취등을 막기 위해서는 주기적으로 보안 patch 를 설치하고 root 로 구동되는 daemon 을 최소화해야 하나 1024 이하의 well-know port는 root 만 사용할 수 있게 되어서 smtp, web, ftp 등은 root 로 구동할 수 밖에 없다.

 

apache 웹서버는 구동후 fork 된 child process 의 소유자를 httpd.conf 에 지정된 User, Group 으로 바꾸는 것도 이런 취약점을 방지하기 위한 것이다.

 

하지만 root 권한으로 구동된 프로세스라도 지정된 권한과 resource 만 사용 가능하게 강력한 권한 관리가 적용된다면 만약 root 권한이 탈취된다고 해도 시스템과 정보의 피해를 최소화 할 수 있을 것이다.

 

SElinux 는 이런 관점에서 설계 및 구현되었고 linux kernel 2.6 부터 정식 kernel tree 에 포함이 되었다. 

혹자는 SELinux 의 개발이 NSA 가 했고 NSA는 전지구적인 감청 시스템인 애슬론(ECHELON) 을 운영하는 첩보 기관이라 backdoor 를 심어 놓은게 아닌가 의심하기도 한다.. 

애슬론도 의혹만 있다가 사실로 드러났듯이 충분히 타당성있는 의심이지만 NSA 가 기증한 것은 binary 가 아니라 source 이므로 backdoor 를 따로 심을 수는 없을 테니 안심하고 사용해도 좋을 것 같다.

 

SELinux의 장점

  • SELinux 는 방화벽이나 백신, 침입탐지 시스템이 아님. Type Enforcement Framework
  • 보안의 기본 rule은 Deny All. 그리고 허용하는 rule 에 대해 allow 하게 해야 하며 RHEL 등의 Linux 배포본에는 사전에 잘 정의된 policy 가 탑재되어 있음
  • zero-day attack 으로 인해 시스템이 뚫렸을 때 피해 최소화
    • 원격 공격자가 apache httpd 를 해킹하여 httpd 권한을 얻었어도 SELinux 는 httpd 는 80, 443, 8009 포트만 access 할수 있게 TE 적용. 따라서 httpd 를 이용하여 동일 네트웍의 다른 서버로 침입이 불가능.
  • Application 에 대해 SandBox 를 제공하므로 buffer overflow 

설치

linux kernel 의 기본 기능이므로 일반적인 Linux 배포본을 사용하면 기본적으로 포함되어 있다.

 

중요한 Concepts

Labeling

  • Files, processes, ports, 등 모든 resource 는 SELinux 의 context 가 labeling.
  • File 과 Directory 의 label은 File System 의 extended attribute 영역에 저장
  • processes, ports 관련 label 은 kernel 이 관리

Label은 다음과 같은 format 을 갖음

  • user:role:type:level(optional)

Type Enforcement

SELinux 의 policy 의 일부로서 "http_t label 로 구동되는 프로세스는 httpd_config_t label 이 있는 파일을 읽을수 있다" emd

 

동작모드

CentOS SELinux 설정 및 해제하기 참고

참고 자료