Android SELinux 정책의 주요 파일 및 디렉터리 구성
SELinux(보안 강화 리눅스)는 Android에서 중요한 보안 메커니즘으로, sepolicy는 SELinux 정책을 정의하는 핵심 요소입니다. Android의 SELinux 정책 파일은 여러 디렉터리에 걸쳐 존재하며, 다양한 구성 요소를 포함합니다. 본 포스팅에서는 Android sepolicy의 주요 파일 및 디렉터리를 설명하고, 각 파일의 역할을 살펴보겠습니다.
1. Android sepolicy 디렉터리 구조
Android 소스 코드에서 SELinux 정책은 system/sepolicy
또는 device/명시된_경로/sepolicy
에 위치합니다. 기본적으로 sepolicy는 다음과 같은 디렉터리 및 파일로 구성됩니다.
sepolicy/
├── file_contexts
├── genfs_contexts
├── property_contexts
├── sepolicy
├── policy.conf
├── selinux_version
├── booleans
├── roles
├── users
├── initial_sid_contexts
├── seapp_contexts
├── mac_permissions.xml
├── domain.te
├── file.te
└── service.te
각 파일 및 디렉터리는 SELinux 정책을 구성하는 데 중요한 역할을 합니다. 이하에서는 주요 파일들에 대해 설명합니다.
2. 주요 파일 설명
2.1 file_contexts
file_contexts
파일은 SELinux가 파일 시스템의 특정 경로에 대해 적절한 보안 컨텍스트를 할당하는 역할을 합니다. 예를 들어, 시스템의 특정 디렉터리나 파일이 특정한 보안 도메인에 속해야 할 때 사용됩니다.
예제
/system/bin/init u:object_r:init_exec:s0
/data/anr u:object_r:anr_data_file:s0
/dev/ashmem u:object_r:ashmem_device:s0
각 줄은 파일 경로, 사용자(user), 오브젝트(object) 및 SELinux 보안 컨텍스트를 정의합니다.
2.2 sepolicy
sepolicy
파일은 Android의 SELinux 정책이 컴파일된 바이너리 정책 파일입니다. 이 파일은 정책을 해석하여 시스템의 보안 규칙을 적용하는 데 사용됩니다. 정책 파일을 변경한 후 sepolicy
파일을 재생성해야 적용됩니다.
2.3 policy.conf
policy.conf
는 컴파일되기 전의 SELinux 정책을 정의하는 중요한 파일입니다. 이 파일은 다양한 *.te
(Type Enforcement) 파일에서 정의된 내용을 포함하며, 정책의 주요 내용을 제공합니다.
예제 (일부 발췌)
allow init shell_exec:file { read execute };
allow zygote app_data_file:file { create read write setattr };
위의 예제는 init
프로세스가 shell_exec
파일을 읽고 실행할 수 있도록 허용하고, zygote
가 app_data_file
을 생성하고 읽고 쓸 수 있도록 설정하는 내용입니다.
2.4 genfs_contexts
genfs_contexts
파일은 특정 가상 파일 시스템(예: proc
, sysfs
, tmpfs
)에 대한 보안 컨텍스트를 정의합니다.
예제
fs proc /proc u:object_r:proc:s0
fs sysfs /sys u:object_r:sysfs:s0
이러한 설정은 /proc
및 /sys
의 파일 시스템이 각각 proc
및 sysfs
유형의 보안 컨텍스트를 가지도록 지정합니다.
2.5 property_contexts
property_contexts
파일은 Android 시스템 속성에 대한 보안 컨텍스트를 정의합니다.
예제
ro.build.fingerprint u:object_r:system_prop:s0
persist.sys.locale u:object_r:system_prop:s0
이 설정은 ro.build.fingerprint
및 persist.sys.locale
속성이 system_prop
도메인의 보안 컨텍스트를 가지도록 설정합니다.
2.6 seapp_contexts
seapp_contexts
는 Android 애플리케이션의 SELinux 보안 컨텍스트를 정의하는 파일입니다. 각 애플리케이션은 UID 또는 패키지 이름을 기반으로 특정한 보안 도메인을 가질 수 있습니다.
예제
user=app seinfo=platform name=com.android.systemui domain=platform_app type=app_data_file levelFrom=user
이 규칙은 com.android.systemui
패키지가 platform_app
도메인을 가지도록 정의합니다.
2.7 booleans
SELinux 정책에서 동적 변경이 가능한 정책을 정의하는 파일입니다.
예제
allowxid 1
2.8 roles 및 users
roles
및 users
파일은 SELinux에서 사용자 및 역할 기반 접근 제어(RBAC, Role-Based Access Control)를 정의하는 파일입니다.
예제
role system_r types system_t;
user u0 roles { r0 };
2.9 initial_sid_contexts
initial_sid_contexts
파일은 초기 보안 컨텍스트를 정의하는 파일입니다.
예제
kernel u:object_r:kernel:s0
init u:object_r:init:s0
2.10 mac_permissions.xml
mac_permissions.xml
파일은 Android 프레임워크에서 MAC(Mandatory Access Control) 정책을 적용하기 위한 XML 기반 설정 파일입니다.
예제
<policy>
<signer signature="123456789ABCDEF">
<package name="com.example.secureapp" seinfo="platform" />
</signer>
</policy>
3. SELinux 정책 적용 및 빌드
SELinux 정책을 변경한 후에는 빌드를 수행해야 합니다.
# 정책 컴파일
m sepolicy
# 빌드 후 적용
adb shell setenforce 1
SELinux 정책 변경이 적용되었는지 확인하려면 다음 명령어를 사용할 수 있습니다.
adb shell dmesg | grep avc
위 명령어를 통해 SELinux에서 접근이 차단되었거나 허용된 로그를 확인할 수 있습니다.
4. 결론
이번 포스팅에서는 Android SELinux 정책의 주요 파일과 디렉터리에 대해 알아보았습니다. 각 파일은 SELinux의 다양한 요소를 구성하는 중요한 역할을 하며, 이를 적절히 설정해야 Android 시스템에서 보안 정책을 올바르게 적용할 수 있습니다.
'Android > Seploicy' 카테고리의 다른 글
Android SELinux 정책 문법과 규칙 (0) | 2025.04.30 |
---|---|
avc: denied 로그 분석 및 이해하기 (0) | 2025.04.29 |
Android SELinux 정책의 기본 파일 구조 (0) | 2025.04.27 |
Android sepolicy 구조 개요 (0) | 2025.04.26 |
Android에서 SELinux의 역할과 필요성 (0) | 2025.04.25 |