SELinux 소개
SELinux 장점
SELinux 는 미국 국가안보국(NSA - National Security Agency)이 개발한 Flask 라는 보안 커널을 리눅스에 이식한 강제 접근 통제 커널 보안 모듈입니다.
NSA는 리눅스에 강제 접근 통제를 구현하기 위해 리눅스 커널의 많은 부분을 수정했으며 그 결과물을 리눅스 커뮤니티에 기증하여 2003년부터 2.6 버전의 커널에 공식 포함되었습니다.
RHEL 기반의 배포판에는 버전 4부터 공식적으로 포함되었으며 원활한 사용을 위해 ls, cp, mv, ps 등의 시스템의 많은 유틸리티가 SELinux를 지원하게 수정이 되었고 아파치 웹 서버, ftp 서버, 삼바 서버등 주요 서비스 데몬 프로세스를 위한 SELinux 정책이 기본 탑재되었습니다.
현재는 많은 제품들이 SELinux 를 지원하므로 기본적인 개념과 설정 방법을 익힌다면 큰 어려움 없이 사용할 수 있을 정도이며 이를 사용한다면 다음과 같은 장점이 있습니다.
사전 정의된 접근 통제 정책 탑재
사용자, 역할, 타입, 레벨등의 다양한 정보를 조합하여 어떤 프로세스가 어떤 파일, 디렉터리, 포트등에 접근 가능한지에 대해 잘 정의된 접근 통제가 제공되므로 강제 접근 통제 적용을 위해 시스템 관리자가 할 일이 대폭 줄었습니다.
"Deny All, Permit Some" 정책으로 잘못된 설정 최소화
서두에 말한 "모든 걸 차단하고 필요한 것만 허용"하는 정책은 단순하면서 강력한, 정보 보호를 위한 최선의 정책으로 SELinux 의 보안 정책도 이 방식으로 사전에 설정되어 있으므로 잘못된 기본 설정으로 인한 보안 취약점이 최소화 됩니다.
최소 권한 정책에 따른 취약점 감소
SELinux는 setuid 비트가 켜져 있거나 루트로 실행되는 데몬 프로세스 프로그램들은 샌드박스안에서 별도의 도메인으로 격리되어 낮은 등급으로 실행되므로 루트 권한을 탈취해도 해당 도메인에만 영향을 미치고 전체 시스템에 미치는 영향을 최소화 합니다.
예로 아파치 httpd 서버의 보안 취약점을 통해 권한을 획득했어도 낮은 등급의 권한을 부여 받으므로 공격자는 정해진 타입의 파일만 읽을 수 있으므로 /etc/passwd 파일을 가져갈 수 없으며 mysql 데이타 파일에도 접근할 수 없습니다.
또 80, 443 같이 웹 서비스에 필요한 포트에만 접근을 허용하고 있으므로 웹 서버 권한을 획득했어도 ssh 로 다른 서버에 접근할 수 없으므로 이차 피해를 최소화할 수 있습니다.
잘못된 설정과 버그로부터 시스템 보호
데이타와 기밀성과 무결성을 적용할 수 있으며 신뢰할 수 없는 입력에서 프로세스를 보호할 수 있습니다. 예로 버퍼의 입력 길이등을 제대로 체크하지 않아서 발생하는 버퍼 오버 플로 공격(buffer overflow attack)의 경우 SELinux 는 어플리케이션이 메모리에 있는 코드를 실행할 수 없게 통제하므로 데몬 프로그램에 버퍼 오버 플로 버그가 있어도 쉘을 쉽게 얻을 수 없습니다.
SELinux 의 한계
SELinux 의 주요 목표는 잘못된 설정이나 프로그램의 보안 버그로 인해 시스템이 공격 당해도 시스템과 데이타를 보호하고 2차 피해를 막는 것으로 SELinux 로 모든 보안 요건이 충족되지는 않습니다.
중요한 서비스라면 SELinux 외에 추가 보안 수단을 사용하여 시스템과 서비스를 보호해야 하며 방화벽이나 백신, 침입 탐지 시스템(Intrusion Detection System) 등과 혼용해서 사용해야 더욱 견고한 시스템을 구성할 수 있습니다.