Android/Seploicy

Android sepolicy 구조 개요

임베디드 친구 2025. 4. 26. 14:47
728x90
반응형

Android sepolicy 구조 개요

Android의 보안 모델에서 SELinux(SeLinux, Security-Enhanced Linux)는 핵심적인 역할을 합니다. Android는 SELinux를 기반으로 하는 보안 정책을 구현하며, 이를 sepolicy(Security Policy)라고 부릅니다. 본 글에서는 Android sepolicy의 구조를 개괄적으로 살펴보고, 각 구성 요소가 어떤 역할을 하는지 설명하겠습니다.

1. Android sepolicy란?

Android sepolicy는 SELinux 정책을 기반으로 동작하는 보안 프레임워크로, Android 시스템의 보안성을 강화하는 역할을 합니다. 이를 통해 애플리케이션과 시스템 프로세스가 불필요한 리소스 접근을 하지 못하도록 제한합니다.

Android는 SELinux를 강제 모드(Enforcing Mode) 로 실행하며, 보안 정책이 적용되지 않은 동작을 자동으로 차단합니다. 정책은 Android Open Source Project(AOSP) 내의 system/sepolicy 디렉터리에 저장되어 있습니다.

2. Android sepolicy 디렉터리 구조

Android의 sepolicy는 여러 개의 파일로 구성되어 있으며, 다음과 같은 주요 디렉터리를 포함하고 있습니다.

/system/sepolicy/
├── file_contexts
├── policy.conf
├── seapp_contexts
├── property_contexts
├── service_contexts
├── genfs_contexts
├── plat_sepolicy.cil
├── vendor_sepolicy.cil
├── public/
├── private/
└── domain/

각 파일 및 디렉터리는 특정한 역할을 담당하며, 정책을 정의하고 적용하는 데 사용됩니다. 아래에서 주요 파일과 디렉터리에 대해 설명하겠습니다.

2.1. file_contexts

file_contexts는 파일 시스템의 특정 경로에 대해 SELinux 보안 컨텍스트(Security Context)를 지정하는 역할을 합니다. 예를 들어, /data/data 디렉터리는 일반 애플리케이션이 사용하는 공간이며, 이에 대한 보안 컨텍스트는 다음과 같이 정의될 수 있습니다.

/data/data(/.*)?        u:object_r:app_data_file:s0

위 규칙은 /data/data/ 및 그 하위 디렉터리가 app_data_file 보안 컨텍스트를 가지도록 설정합니다.

2.2. policy.conf

policy.conf는 전체 SELinux 정책을 정의하는 주요 파일로, Android.bp를 이용해 컴파일된 후 plat_sepolicy.cilvendor_sepolicy.cil 파일로 변환됩니다. 이 파일은 다양한 보안 규칙을 포함하며, 일반적으로 개발자가 직접 수정하는 경우는 드뭅니다.

2.3. seapp_contexts

seapp_contexts 파일은 Android 애플리케이션의 보안 컨텍스트를 정의하는 데 사용됩니다. 특정 UID, 패키지 이름, 사용자 그룹 등에 따라 애플리케이션에 부여되는 SELinux 컨텍스트를 결정합니다. 예를 들어:

user=system domain=platform_app type=app_data_file levelFrom=all

위 규칙은 system 사용자로 실행되는 애플리케이션이 platform_app 도메인을 사용하도록 지정합니다.

2.4. property_contexts

이 파일은 Android 시스템 속성(System Properties)에 대한 SELinux 보안 컨텍스트를 지정합니다. 예를 들어:

ro.build.fingerprint    u:object_r:system_property:s0

이는 ro.build.fingerprint 속성이 system_property 보안 컨텍스트를 가지도록 설정하는 규칙입니다.

2.5. service_contexts

Android의 다양한 시스템 서비스(서비스 매니저에서 관리되는 서비스)에 대한 SELinux 보안 컨텍스트를 정의합니다. 예를 들어, 다음과 같은 정의가 있을 수 있습니다.

media.codec            u:object_r:media_codec_service:s0

이 규칙은 media.codec 서비스가 media_codec_service 보안 컨텍스트에서 실행되도록 설정합니다.

2.6. genfs_contexts

파일 시스템의 특정 타입에 대해 보안 컨텍스트를 적용하는 역할을 합니다. 예를 들어, sysfsprocfs 같은 가상 파일 시스템이 포함됩니다.

genfscon proc / u:object_r:proc:s0

위 규칙은 /proc 파일 시스템이 proc 보안 컨텍스트를 가지도록 설정합니다.

2.7. plat_sepolicy.cilvendor_sepolicy.cil

Android 8.0(Oreo)부터 sepolicy는 플랫폼 정책과 벤더 정책으로 분리되었습니다.

  • plat_sepolicy.cil: AOSP(Android OS)에서 제공하는 기본 보안 정책
  • vendor_sepolicy.cil: 벤더(OEM)에서 추가한 보안 정책

이러한 구조는 Android의 모듈화(Modularization)를 지원하며, 플랫폼과 벤더 정책을 독립적으로 관리할 수 있도록 합니다.

3. Android sepolicy 빌드 과정

Android의 sepolicy는 sepolicy.mkAndroid.bp 파일을 통해 컴파일되며, 최종적으로 커널이 이해할 수 있는 sepolicy 바이너리로 변환됩니다. 빌드 과정은 다음과 같습니다.

  1. system/sepolicy/ 내의 .te, .cil, .conf 파일들을 기반으로 정책을 생성합니다.
  2. checkpolicy 툴을 이용해 정책을 컴파일합니다.
  3. 결과물을 sepolicy 파일로 변환하여 시스템 부팅 시 로드됩니다.

빌드 명령어 예시

mm -j$(nproc) system/sepolicy

위 명령을 실행하면 sepolicy가 빌드되고, 결과는 out/target/product/{device}/root/sepolicy 에 생성됩니다.

4. 결론

Android sepolicy는 SELinux를 기반으로 Android 시스템의 보안성을 강화하는 중요한 역할을 합니다. 파일 및 서비스 컨텍스트를 정의하는 여러 파일을 포함하며, 플랫폼과 벤더 정책을 분리하여 보다 유연한 관리가 가능합니다. sepolicy를 이해하고 적절히 설정하는 것은 Android 시스템 개발 및 커스텀 ROM 개발에 필수적인 요소입니다.

728x90
반응형