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.cil
및 vendor_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
파일 시스템의 특정 타입에 대해 보안 컨텍스트를 적용하는 역할을 합니다. 예를 들어, sysfs
와 procfs
같은 가상 파일 시스템이 포함됩니다.
genfscon proc / u:object_r:proc:s0
위 규칙은 /proc
파일 시스템이 proc
보안 컨텍스트를 가지도록 설정합니다.
2.7. plat_sepolicy.cil
및 vendor_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.mk
및 Android.bp
파일을 통해 컴파일되며, 최종적으로 커널이 이해할 수 있는 sepolicy
바이너리로 변환됩니다. 빌드 과정은 다음과 같습니다.
system/sepolicy/
내의.te
,.cil
,.conf
파일들을 기반으로 정책을 생성합니다.checkpolicy
툴을 이용해 정책을 컴파일합니다.- 결과물을
sepolicy
파일로 변환하여 시스템 부팅 시 로드됩니다.
빌드 명령어 예시
mm -j$(nproc) system/sepolicy
위 명령을 실행하면 sepolicy
가 빌드되고, 결과는 out/target/product/{device}/root/sepolicy
에 생성됩니다.
4. 결론
Android sepolicy는 SELinux를 기반으로 Android 시스템의 보안성을 강화하는 중요한 역할을 합니다. 파일 및 서비스 컨텍스트를 정의하는 여러 파일을 포함하며, 플랫폼과 벤더 정책을 분리하여 보다 유연한 관리가 가능합니다. sepolicy를 이해하고 적절히 설정하는 것은 Android 시스템 개발 및 커스텀 ROM 개발에 필수적인 요소입니다.
'Android > Seploicy' 카테고리의 다른 글
avc: denied 로그 분석 및 이해하기 (0) | 2025.04.29 |
---|---|
Android SELinux 정책의 주요 파일 및 디렉터리 구성 (0) | 2025.04.28 |
Android SELinux 정책의 기본 파일 구조 (0) | 2025.04.27 |
Android에서 SELinux의 역할과 필요성 (0) | 2025.04.25 |
SELinux란? 기본 개념 및 보안 모델 (0) | 2025.04.24 |