Android SELinux 정책의 기본 파일 구조
Android 운영 체제는 보안 강화를 위해 SELinux(Security-Enhanced Linux)를 활용하며, 이를 통해 강력한 액세스 제어를 적용합니다. SELinux 정책은 여러 파일과 디렉터리 구조로 구성되며, AOSP(Android Open Source Project) 내에서 정책 파일이 정의되고 빌드 과정에서 적용됩니다. 이번 포스팅에서는 Android SELinux 정책의 기본 파일 구조와 각 파일의 역할에 대해 설명하겠습니다.
1. SELinux 정책 파일이 위치하는 경로
Android SELinux 정책 파일은 AOSP 내 여러 디렉터리에 분산되어 있습니다. 주요 디렉터리는 다음과 같습니다.
system/sepolicy/
(Android 10 이전)system/sepolicy/private/
및system/sepolicy/public/
(Android 10 이후)device/<vendor>/<device>/sepolicy/
(기기별 정책)vendor/sepolicy/
(벤더 영역 정책)
각 디렉터리에는 SELinux 정책을 정의하는 다양한 파일들이 포함됩니다.
2. 주요 SELinux 정책 파일과 역할
Android의 SELinux 정책 파일은 여러 유형으로 나뉘며, 각각의 역할이 있습니다.
2.1. public/
디렉터리 (공용 정책)
이 디렉터리는 모든 기기가 공유할 수 있는 일반적인 SELinux 정책을 포함합니다. 기기별 또는 벤더별 커스터마이징이 필요하지 않은 정책이 위치합니다.
public/domain.te
: 기본적인 도메인 정책 정의public/file_contexts
: 파일 경로와 보안 컨텍스트 매핑public/service_contexts
: 시스템 서비스의 SELinux 컨텍스트 매핑public/property_contexts
: 시스템 속성(property)과 SELinux 컨텍스트 매핑
2.2. private/
디렉터리 (사유 정책)
이 디렉터리는 Android 플랫폼 내부에서만 사용하는 SELinux 정책을 포함합니다. 기기 제조사나 SoC 벤더가 직접 수정할 필요가 없는 정책들이 포함됩니다.
private/app.te
: 애플리케이션 관련 도메인 정의private/init.te
:init
프로세스 관련 정책private/logd.te
: 로그 서비스 관련 정책private/system_server.te
:system_server
에 대한 정책 정의
2.3. file_contexts
이 파일은 파일 경로와 SELinux 보안 컨텍스트의 매핑을 정의합니다. 예를 들어, 특정 디렉터리나 파일이 어떤 SELinux 도메인으로 라벨링되는지를 지정합니다.
예시 (file_contexts
)
/system/bin/sh u:object_r:shell_exec:s0
/data/anr u:object_r:anr_data_file:s0
/vendor/bin/hw u:object_r:hal_exec:s0
위의 예시에서 /system/bin/sh
는 shell_exec
도메인으로 라벨링되며, /data/anr
은 anr_data_file
로 라벨링됩니다.
2.4. service_contexts
이 파일은 시스템 서비스 이름과 SELinux 도메인의 매핑을 정의합니다. init
프로세스가 서비스를 시작할 때 이 파일을 참조하여 적절한 보안 컨텍스트를 할당합니다.
예시 (service_contexts
)
logd u:r:logd:s0
surfaceflinger u:r:surfaceflinger:s0
adbd u:r:adbd:s0
위의 예시에서 logd
서비스는 logd
도메인으로 실행되며, surfaceflinger
는 surfaceflinger
도메인에서 실행됩니다.
2.5. property_contexts
이 파일은 Android 시스템 속성(Property)과 SELinux 보안 컨텍스트 간의 매핑을 정의합니다. 속성이 특정한 SELinux 도메인과 연결될 수 있도록 합니다.
예시 (property_contexts
)
ro.build.version.release u:object_r:system_property:s0
persist.vendor.camera.quality u:object_r:vendor_camera_prop:s0
여기서 ro.build.version.release
속성은 system_property
도메인에 속하며, persist.vendor.camera.quality
속성은 vendor_camera_prop
도메인에 속합니다.
2.6. seapp_contexts
이 파일은 앱의 UID, 패키지 이름 등에 따라 SELinux 도메인을 할당합니다.
예시 (seapp_contexts
)
user=_app seinfo=platform name=com.android.settings domain=platform_app type=app_data_file
user=_app seinfo=default domain=untrusted_app type=app_data_file
여기서 com.android.settings
앱은 platform_app
도메인을 사용하며, 일반적인 앱은 untrusted_app
도메인을 사용하도록 설정됩니다.
3. 기기별 및 벤더 정책 파일
3.1. device/<vendor>/<device>/sepolicy/
각 기기별 SELinux 정책을 정의하는 곳입니다. BoardConfig.mk
또는 device.mk
파일에서 경로를 지정하며, 기기별 커스텀 정책을 적용할 수 있습니다.
device.te
: 기기 특화된 도메인 정책genfs_contexts
: 특정 파일 시스템의 보안 컨텍스트 정의file_contexts
: 기기 특화된 파일 경로 매핑
3.2. vendor/sepolicy/
벤더 영역에 해당하는 정책을 정의하는 곳입니다. HAL, 드라이버, 기타 벤더 구성 요소에 대한 SELinux 정책이 포함됩니다.
hal_camera.te
: HAL 카메라 서비스 정책hal_audio.te
: HAL 오디오 서비스 정책vendor_init.te
: 벤더init
관련 정책
4. SELinux 정책 빌드 과정
SELinux 정책은 빌드 과정에서 checkpolicy
및 sepolicy_compile
을 통해 컴파일됩니다.
정책 빌드 및 적용 예시
mmm system/sepolicy/
adb push out/target/product/<device>/sepolicy /system/etc/selinux/
adb reboot
위 명령어를 실행하면 새롭게 컴파일된 SELinux 정책이 적용됩니다.
5. 결론
Android SELinux 정책은 여러 파일과 디렉터리로 구성되며, 시스템 및 벤더 정책을 정의하는 다양한 정책 파일들이 존재합니다. 이번 포스팅에서 설명한 파일들의 구조와 역할을 이해하면, Android SELinux 정책을 분석하고 수정하는 데 도움이 될 것입니다.
'Android > Seploicy' 카테고리의 다른 글
avc: denied 로그 분석 및 이해하기 (0) | 2025.04.29 |
---|---|
Android SELinux 정책의 주요 파일 및 디렉터리 구성 (0) | 2025.04.28 |
Android sepolicy 구조 개요 (0) | 2025.04.26 |
Android에서 SELinux의 역할과 필요성 (0) | 2025.04.25 |
SELinux란? 기본 개념 및 보안 모델 (0) | 2025.04.24 |