Android/Seploicy

Android SELinux 정책의 주요 파일 및 디렉터리 구성

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

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 파일을 읽고 실행할 수 있도록 허용하고, zygoteapp_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의 파일 시스템이 각각 procsysfs 유형의 보안 컨텍스트를 가지도록 지정합니다.

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.fingerprintpersist.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

rolesusers 파일은 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 시스템에서 보안 정책을 올바르게 적용할 수 있습니다.

728x90
반응형