SELinux
SELinux(Security-Enhanced Linux)
보안 정책을 지원하는 매커니즘을 제공하는 리눅스 커널 보안 모듈이다. 다양한 리눅스 배보판에 추가할 수 있는 커널 수정 및 사용자 공간 도구들의 모임이다.
접근통제(Access Control)
운영체제에서 접근통제는 디렉터리나 파일 네트워크 소켓 같은 시스템 자원을 적절한 권한을 가진 사용자나 그룹이 접근하고 사용할 수 있게 통제하는 것을 의미합니다.
SELinux 의 장점
1. 사전 정의된 접근 통제 정책 탑재
SELinux 를 사용하면 사용자, 역할, 타입, 레벨등의 다양한 정보를 조합하여 어떤 프로세스가 어떤 파일, 디렉터리, 포트등에 접근 가능한지에 대해 사전에 잘 정의된 접근 통제 정책이 제공됩니다.
2. “ Deny All, Permit Some “ 정책으로 잘못된 설정 최소화
“ Deny All, Permit Some “ 의 뜻은 “ 모든 걸 차단하고 필요한 것만 허용” 하는 정책은 단순하면서 강력한 정보 보호를 위한 최선의 정책입니다. SELinux 의 보안 정책도 이 방식으로 사전에 설정되어 있으므로 잘못된 설정이 기본 포함돼 있을 여지가 적습니다.
3. 권한 상승 공격에 의한 취약점 감소
Setuid 비트가 켜져 있거나 루트로 실행되는 프로세스처럼 위험한 프로그램들은 샌드박스안에서 별도의 도메인으로 격리되어 실행되므로 루트 권한을 탈취해도 해당 도메인에만 영향을 미치고 전체 시스템에 미치는 영향이 최소화 됩니다.
4. 잘못된 설정과 버그로부터 시스템 보호
잘못된 설정이나 신뢰할 수 없는 입력을 악용한 공격에서 프로세스를 보호할 수 있습니다. 예로 버퍼의 입력 길이등을 제대로 체크하지 않아서 발생하는 버퍼 오버 플로공격의 경우 SELinux 는 어플리케이션이 메모리에 있는 코드를 실행할 수 없게 통제하므로 데몬 프로그램에 버퍼 오버 플로 버그가 있어도 쉘을 얻을 수 없습니다.
SELinux 의 단점
1. SELinux 에 대한 자료 부실
인터넷을 찾아봐도 자료가 많지 않으며 그중 대다수는 SELinux 를 끄는 방법에 대한 자료이다.
2. 에러 발생시 원인을 알기 어렵다.
SELinux 하에서 프로그램이 차단되었을 경우 제대로 에러 메시지가 나오지 않으므로 원인을 알기 어려운 경우가 있다.
SELinux 명령어
Setenforce 0 or 1 명령어는 setenforce 0 이라는 명령어를 내린다면 SELINUX = permissive 와 동일한 결과이며 setenforce 1 은 enforcing 모드를 의미한다. SELINUX를 완전히 사용하지 않으려면 /etc/sysconfig/selinux 파일에서 SELINUX = disabled 처럼 설정해야 한다.
chcon 명령어는 chown와 chmod와 비슷한 방법으로 파일들과 디렉터리들에게 보안 context를 변경하는 방법입니다. SELinux에서 chown, chmod를 아무리 적용해도 permission이 풀리지 않습니다.
SELinux 사용하기
SELinux의 사용 여부는 sestatus 명령어를 통해 Current mode 에 enforcing 이 있는지 여부로 확인 할 수 있습니다.
[jhyoon@localhost ~ ]$ sestatus
SELinux status : enabled
SELinuxfs mount : /sys/fs/selinux
SELinux root directory : /etc/selinux
Loaded policy name : targeted
Current mode : enforcing
Mode from config file : enforcing
Policy MLS status : enabled
Policy deny_unknown status : allowed
Max kernel policy version : 31
SELinux 의 상태로는 3가지가 있다.
1. Enforcing : 강제모드(사용)
2. permissive 허용모드(보안경고만 사용)
3. disabled 비활성화 모드(사용하지 않음)
[root@localhost jhyoon]# setenforce 0
[root@localhost jhyoon]# sestatus
SELinux status : enabled
SELinuxfs mount : /sys/fs/selinux
SELinux root directory : /etc/selinux
Loaded policy name : targeted
Current mode : permissive
Mode from config file : enforcing
Policy MLS status : enabled
Policy deny_unknown status : allowed
Max kernel policy version : 31
Security Context
SELinux는 모든 프로세스와 객체마다 보안 콘텍스트(Security Context)이라고 부르는 정보를 부여하여 관리하고 있습니다. 이 정보는 접근 권한을 확인하는 데 사용되고 있으며 SELinux를 이해하기 위한 핵심요소이며 다음 4가지 구성 요소로 이루어져 있습니다.
1. 사용자
시스템의 사용자와는 별도의 SELinux 사용자이며 역할이나 레벨과 연계하여 접근 권한을 관리하는 데 사용
2. 역할(Role)
하나 혹은 그 이상의 타입과 연결되어 SELinux의 사용자의 접근을 허용할지 결정하는 데 사용
3. 타입(Type)
Type Enforcement의 속성 중 하나로 프로세스의 도메인이나 파일의 타입을 지정하고 이를 기반으로 접근 통제를 수행
4. 레벨(Level)
레벨은 MLS(Multi Level System)에 필요하며 강제 접근 통제보다 더 강력한 보안이 필요할 때 사용하는 기능
가장 중요한 부분은 타입이며 이는 보안 콘텍스트의 핵심 부분으로 SELinux를 활성화하면 파일이나 디렉터리등의 객체마다 보안 콘텍스트를 부여하고 있습니다.
잘못된 부분이 있다면 jh3859025@gmail.com 부탁드리겠습니다.
감사합니다.