Android/Seploicy

SELinux란? 기본 개념 및 보안 모델

임베디드 친구 2025. 4. 24. 16:08
728x90
반응형

SELinux란? 기본 개념 및 보안 모델

SELinux(Security-Enhanced Linux)는 미국 국가안보국(NSA, National Security Agency)에서 개발한 보안 아키텍처로, 리눅스 커널에 추가된 강력한 접근 제어 메커니즘입니다. 기존의 리눅스 보안 모델이 주로 소유자 기반의 권한 관리(Discretionary Access Control, DAC)에 의존하는 반면, SELinux는 강제적 접근 제어(Mandatory Access Control, MAC)를 도입하여 보안성을 한층 강화하였습니다. 특히, Android 운영체제에서는 SELinux를 활용하여 애플리케이션 및 시스템 프로세스의 접근을 철저히 제한하고 있습니다.

이번 포스팅에서는 SELinux의 기본 개념과 보안 모델을 설명하고, Android에서 SELinux가 어떻게 적용되는지 살펴보도록 하겠습니다.


1. SELinux의 기본 개념

SELinux는 리눅스 커널의 확장 기능으로, 보안 정책을 기반으로 파일, 프로세스, 네트워크 등에 대한 접근을 제어합니다. SELinux의 주요 특징은 다음과 같습니다.

  1. 강제적 접근 제어(MAC)

    • 기존의 DAC 방식에서는 사용자가 파일과 디렉터리에 대한 접근 권한을 직접 설정할 수 있지만, SELinux는 사전 정의된 정책에 따라 접근을 결정합니다.
    • 예를 들어, root 사용자라도 SELinux 정책에 위배되는 작업을 수행할 수 없습니다.
  2. 라벨(Label) 기반 접근 제어

    • 시스템 내 모든 객체(파일, 프로세스, 소켓 등)에는 보안 컨텍스트(Security Context)라는 라벨이 부여됩니다.
    • 보안 컨텍스트는 사용자(user), 역할(role), 타입(type) 등의 정보를 포함하며, 접근 정책은 이 컨텍스트를 기반으로 결정됩니다.
  3. 정책 기반 보안

    • SELinux는 커널 수준에서 정책을 적용하여 시스템의 동작을 제한합니다.
    • 정책 파일을 통해 허용할 동작과 금지할 동작을 정의할 수 있습니다.
  4. 보안 모드

    • SELinux는 다음과 같은 세 가지 모드에서 동작할 수 있습니다.
      • Enforcing Mode: SELinux 정책을 강제 적용하여 위반되는 접근을 차단합니다.
      • Permissive Mode: 정책을 적용하되, 위반 사항을 로깅만 하고 실제 차단은 하지 않습니다.
      • Disabled Mode: SELinux를 비활성화합니다.

2. SELinux의 보안 모델

SELinux는 기존 리눅스 보안 모델보다 강화된 제어를 제공하며, 다양한 보안 모델을 지원합니다. 주요 보안 모델은 다음과 같습니다.

2.1. 유형 기반 보안(Type Enforcement, TE)

Type Enforcement(TE)는 SELinux의 핵심 보안 모델 중 하나로, 객체와 주체를 타입(Type)으로 분류하고, 미리 정의된 규칙에 따라 접근을 제어합니다.

예를 들어, 특정 프로세스가 /data/app 디렉터리에 접근하려고 할 때, SELinux는 해당 프로세스와 디렉터리의 타입을 확인하고, 정책 파일에서 허용 여부를 결정합니다.

정책 예제:

allow my_app_t data_file_t: file { read write };

위 규칙은 my_app_t 타입을 가진 프로세스가 data_file_t 타입을 가진 파일을 읽고 쓸 수 있도록 허용하는 설정입니다.

2.2. 역할 기반 접근 제어(Role-Based Access Control, RBAC)

SELinux는 역할 기반 접근 제어(RBAC)도 지원합니다. RBAC는 특정 역할(Role)을 기반으로 접근 권한을 부여하는 방식입니다. 사용자는 특정 역할을 부여받고, 역할에 따라 실행할 수 있는 도메인과 권한이 달라집니다.

예를 들어, system_r 역할을 부여받은 사용자는 시스템 관리 작업을 수행할 수 있지만, user_r 역할을 가진 일반 사용자는 제한된 작업만 수행할 수 있습니다.

정책 예제:

role system_r types my_app_t;

위 규칙은 system_r 역할이 my_app_t 타입을 가진 프로세스를 실행할 수 있도록 설정합니다.

2.3. 다중 등급 보안(Multi-Level Security, MLS)

MLS는 군사 및 민감한 데이터 보호를 위해 설계된 보안 모델로, 객체에 보안 등급(Security Level)을 부여하고, 등급이 높은 객체가 낮은 객체에 접근하지 못하도록 제한합니다.

MLS 정책 예제:

sensitivity s0 - s15;
category c0 - c255;

위 설정은 보안 등급을 s0부터 s15까지, 카테고리를 c0부터 c255까지 정의하는 부분입니다.


3. Android에서 SELinux의 역할

Android에서는 SELinux를 도입하여 애플리케이션과 시스템 간의 격리를 강화하였습니다. 주요 역할은 다음과 같습니다.

  1. 애플리케이션 샌드박싱 강화

    • Android는 앱별 UID(User ID)를 할당하여 격리하지만, SELinux를 추가적으로 활용하여 더욱 철저한 접근 제한을 수행합니다.
  2. 시스템 서비스 보호

    • 핵심 시스템 프로세스는 엄격한 SELinux 정책에 의해 보호되며, 악성 코드가 시스템을 변경하는 것을 방지합니다.
  3. 루트 권한 오남용 방지

    • SELinux 정책을 통해 root 권한을 가진 프로세스도 임의의 동작을 수행하지 못하도록 제한할 수 있습니다.

Android에서 SELinux 정책을 확인하는 명령어:

adb shell getenforce  # SELinux 모드 확인
adb shell su -c 'ls -Z /data/data'  # 데이터 디렉터리의 보안 컨텍스트 확인

4. 결론

SELinux는 기존의 리눅스 DAC 모델보다 강력한 보안 모델을 제공하며, Android에서도 보안 강화를 위해 필수적으로 적용되고 있습니다. 특히, 유형 기반 보안(TE), 역할 기반 접근 제어(RBAC), 다중 등급 보안(MLS) 등의 기법을 활용하여 프로세스 및 파일 시스템을 보호합니다.

728x90
반응형