1.3. SELinux 예
다음 예제에서는 SELinux가 보안을 강화하는 방법을 보여줍니다.
- 기본 동작은 거부됩니다. 파일을 여는 프로세스와 같이 액세스를 허용하는 SELinux 정책 규칙이 없으면 액세스가 거부됩니다.
-
SELinux는 Linux 사용자를 제한할 수 있습니다. SELinux 정책에 제한된 SELinux 사용자가 많이 있습니다. Linux 사용자는 제한된 SELinux 사용자에게 매핑되어 보안 규칙과 여기에 적용되는 메커니즘을 활용할 수 있습니다. 예를 들어 Linux 사용자를 SELinux
user_u
사용자에 매핑하면sudo
및su
와 같은 다른 설정의 사용자 ID(setuid) 애플리케이션을 설정하지 않으면 을 실행할 수 없는 Linux 사용자가 생성됩니다. - 프로세스 및 데이터 분리 증가 SELinux 도메인 의 개념은 특정 파일 및 디렉터리에 액세스할 수 있는 프로세스를 정의할 수 있습니다. 예를 들어 달리 구성된 경우가 아니면 SELinux를 실행하는 경우 공격자는 Samba 서버를 손상시킬 수 없으며 해당 Samba 서버를 공격 벡터로 사용하여 MariaDB 데이터베이스와 같은 다른 프로세스에서 사용하는 파일을 읽고 쓸 수 있습니다.
-
SELinux는 구성 오류로 인한 손상을 완화하는 데 도움이 됩니다. DNS(Domain Name System) 서버는 영역 전송에서 서로 간에 정보를 복제하는 경우가 많습니다. 공격자는 영역 전송을 사용하여 잘못된 정보로 DNS 서버를 업데이트할 수 있습니다. RHEL의 DNS 서버로 Berkeley Internet Name Domain(BIND)을 실행하는 경우 관리자가 영역 전송을 수행할 수 있는 서버를 제한하는 것을 잊어버리더라도 기본 SELinux 정책은 영역 파일 업데이트를 방지합니다. [1] 영역 전송을 사용하는 경우 데몬 자체 및 기타 프로세스에 의해
이름이 지정된
BIND입니다. -
SELinux가 없으면 공격자는 Apache 웹 서버의 traversal을 라우팅하기 위해 취약점을 악용할 수 있으며, .
/
와 같은 특수 요소를 사용하여 파일 시스템에 저장된 파일 및 디렉터리에 액세스할 수 있습니다. 공격자가 강제 모드에서 SELinux로 실행되는 서버를 공격하는 경우 SELinux는httpd
프로세스가 액세스할 수 없는 파일에 대한 액세스를 거부합니다. SELinux는 이러한 유형의 공격을 완전히 차단할 수는 없지만 효과적으로 완화합니다. -
강제 모드의 SELinux는 비SMAP 플랫폼에서 커널 NULL 포인터 역참조 연산자(CVE-2019-9213)를 악용하지 않습니다. 공격자는
mmap
함수의 취약점을 악용하여 null 페이지의 매핑을 확인하지 않고 이 페이지에 임의의 코드를 배치합니다. -
enforcing 모드에서
deny_ptrace
SELinux 부울 및 SELinux는 PTRACE_TRACEME 취약점(CVE-2019-13272)으로부터 시스템을 보호합니다. 이러한 구성으로 인해 공격자가root
권한을 얻을 수 있는 시나리오가 방지됩니다. -
nfs_export_all_rw
및nfs_export_all_ro
SELinux 부울을 사용하면 실수로/home
디렉터리와 같은 NFS(Network File System)의 잘못된 설정을 방지하기 위해 사용하기 쉬운 툴이 제공됩니다.
추가 리소스
- SELinux가 운영 체제의 보안 약자인 SELinux - Real-world 이점 및 예제 지식 베이스 문서
- Ansible 지식베이스를 사용한 SELinux 강화 문서
- SELinux 강화를 위한 Ansible 플레이북이 포함된 selinux-playbooks Github 리포지토리