SELinux 보안 정책 커스텀 모듈 리빌드 완벽 가이드

SELinux(Security-Enhanced Linux)는 리눅스 커널의 보안 모듈로서, 필수 접근 제어(MAC)를 구현하여 시스템의 보안을 강화합니다. 기본 SELinux 정책은 대부분의 환경에 적합하지만, 특정 애플리케이션이나 서비스의 요구 사항에 맞게 정책을 조정해야 하는 경우가 있습니다. 이때 커스텀 모듈을 활용하여 SELinux 정책을 확장하고 리빌드하는 방법을 배우는 것은 매우 중요합니다.

SELinux 정책 커스터마이징, 왜 중요할까요?

SELinux 작동 방식 핵심 이해

SELinux는 객체(파일, 프로세스, 소켓 등)와 주체(프로세스)에 보안 컨텍스트를 할당하고, 정책 규칙에 따라 접근을 허용하거나 거부합니다. 보안 컨텍스트는 사용자(user), 역할(role), 유형(type)으로 구성됩니다. 정책 규칙은 이러한 보안 컨텍스트 간의 상호 작용을 정의합니다.

예를 들어, 웹 서버 프로세스(httpd_t)가 웹 콘텐츠 파일(/var/www/html, httpd_sys_content_t)에 접근하는 경우, SELinux 정책은 httpd_t가 httpd_sys_content_t에 대해 읽기(read), 쓰기(write) 권한을 갖도록 정의할 수 있습니다. 만약 권한이 없다면, SELinux는 접근을 거부하고 감사 로그에 기록합니다.

커스텀 모듈, 무엇을 할 수 있을까요?

커스텀 모듈은 SELinux 정책을 확장하는 데 사용되는 작은 정책 파일입니다. 새로운 유형, 규칙, 인터페이스 등을 정의하여 기존 정책에 추가할 수 있습니다. 커스텀 모듈을 사용하면 전체 정책을 수정하지 않고도 특정 애플리케이션이나 서비스에 대한 정책을 추가하거나 수정할 수 있습니다.

커스텀 모듈은 주로 다음과 같은 작업을 수행하는 데 사용됩니다.

커스텀 모듈 리빌드 단계별 가이드

커스텀 모듈을 리빌드하는 과정은 다음과 같습니다.

    • 모듈 소스 파일 작성 (.te): SELinux 정책 언어(CIL, Common Intermediate Language) 또는 legacy policy language를 사용하여 모듈의 규칙을 정의합니다.
    • 모듈 컴파일 (.mod): `checkmodule` 명령어를 사용하여 소스 파일을 컴파일하여 모듈 파일(.mod)을 생성합니다.
    • 정책 패키지 생성 (.pp): `semodule_package` 명령어를 사용하여 모듈 파일과 정책 버전을 결합하여 정책 패키지(*.pp)를 생성합니다.
    • 모듈 설치: `semodule -i` 명령어를 사용하여 정책 패키지를 설치합니다.

1단계 모듈 소스 파일 작성

`.te` 파일은 SELinux 정책 규칙을 정의하는 텍스트 파일입니다. 예를 들어, 새로운 파일 유형을 정의하고 특정 프로세스에 해당 파일 유형에 대한 접근 권한을 부여하는 규칙을 정의할 수 있습니다.

다음은 `mywebapp.te` 파일의 예시입니다.



module mywebapp 1.0;


require {

  type httpd_t;

  type httpd_sys_content_t;

  class file { read getattr };

}


type mywebapp_config_t;

files_type(mywebapp_config_t, httpd_sys_content_t);


allow httpd_t mywebapp_config_t:file { read getattr };

이 예제에서는 다음과 같은 내용을 정의합니다.

2단계 모듈 컴파일

`checkmodule` 명령어는 `.te` 파일을 컴파일하여 `.mod` 파일을 생성합니다. 이 파일은 SELinux 정책 모듈의 바이너리 표현입니다.



checkmodule -M -m -o mywebapp.mod mywebapp.te

이 명령어는 `mywebapp.te` 파일을 컴파일하여 `mywebapp.mod` 파일을 생성합니다. `-M` 옵션은 모듈 모드를 지정하고, `-m` 옵션은 모듈 이름을 지정하고, `-o` 옵션은 출력 파일 이름을 지정합니다.

3단계 정책 패키지 생성

`semodule_package` 명령어는 `.mod` 파일과 정책 버전을 결합하여 `.pp` 파일을 생성합니다. 이 파일은 SELinux 정책 모듈을 배포하고 설치하는 데 사용되는 패키지입니다.



semodule_package -o mywebapp.pp -m mywebapp.mod

이 명령어는 `mywebapp.mod` 파일을 사용하여 `mywebapp.pp` 파일을 생성합니다. `-o` 옵션은 출력 파일 이름을 지정하고, `-m` 옵션은 모듈 파일을 지정합니다.

4단계 모듈 설치

`semodule -i` 명령어는 `.pp` 파일을 설치하여 SELinux 정책에 모듈을 추가합니다. 이 명령어는 루트 권한으로 실행해야 합니다.



semodule -i mywebapp.pp

이 명령어는 `mywebapp.pp` 파일을 설치합니다. 설치 후에는 `semanage module -l` 명령어를 사용하여 설치된 모듈을 확인할 수 있습니다.

실생활 활용 예시

웹 애플리케이션 보안 강화: 웹 애플리케이션에서 사용하는 특정 디렉토리에 대한 접근 권한을 제한하거나, 특정 프로세스만 접근하도록 설정하여 웹쉘 공격과 같은 보안 위협으로부터 시스템을 보호할 수 있습니다.

데이터베이스 보안 강화: 데이터베이스 서버 프로세스에 대한 접근 권한을 엄격하게 제한하고, 데이터베이스 파일에 대한 접근을 최소화하여 데이터 유출을 방지할 수 있습니다.

Docker 컨테이너 보안 강화: Docker 컨테이너 내에서 실행되는 프로세스에 대한 접근 권한을 제한하고, 컨테이너 간의 격리를 강화하여 컨테이너 탈출 공격을 방지할 수 있습니다.

유용한 팁과 조언

흔한 오해와 사실 관계

오해: SELinux는 복잡하고 사용하기 어렵다.

사실: SELinux는 처음에는 복잡하게 보일 수 있지만, 기본적인 개념을 이해하고 도구를 활용하면 효과적으로 사용할 수 있습니다. 최근에는 다양한 도구와 문서가 제공되어 SELinux 사용이 훨씬 쉬워졌습니다.

오해: SELinux는 시스템 성능을 저하시킨다.

사실: SELinux는 시스템 성능에 약간의 영향을 줄 수 있지만, 대부분의 경우 무시할 만한 수준입니다. 또한, SELinux는 시스템의 보안을 강화하여 보안 사고로 인한 성능 저하를 예방할 수 있습니다.

자주 묻는 질문과 답변

Q: SELinux를 비활성화해야 하는 경우가 있나요?

A: SELinux를 비활성화하는 것은 보안을 크게 약화시키는 것이므로 권장하지 않습니다. 문제가 발생하는 경우, 정책을 수정하거나 예외 규칙을 추가하여 해결하는 것이 좋습니다.

Q: `audit2allow`는 어떻게 사용하나요?

A: `audit2allow`는 감사 로그를 분석하여 SELinux 정책 규칙을 생성하는 데 사용되는 유틸리티입니다. 예를 들어, 특정 애플리케이션이 SELinux에 의해 차단되는 경우, 감사 로그를 분석하여 필요한 규칙을 생성하고 정책에 추가할 수 있습니다.

비용 효율적인 활용 방법

오픈 소스 도구 활용: SELinux 정책 개발 및 관리에 필요한 도구들은 대부분 오픈 소스로 제공됩니다. 이러한 도구를 활용하여 비용을 절감할 수 있습니다. (예: `audit2allow`, `semanage`, `checkmodule`)

커뮤니티 활용: SELinux 관련 커뮤니티에서 정보를 공유하고 도움을 받을 수 있습니다. 다른 사용자의 경험을 통해 문제를 해결하고 정책 개발 시간을 단축할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다