Android/Seploicy

Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기

임베디드 친구 2025. 5. 2. 16:48
728x90
반응형

Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기

1. 개요

SELinux(Security-Enhanced Linux)는 Android에서 강력한 보안 정책을 적용하는 핵심 기술입니다. SELinux 정책을 설정하면 서비스, 바이너리, 파일 시스템에 대한 접근 권한을 명확하게 정의할 수 있습니다. 본 글에서는 SELinux 정책에서 서비스, 바이너리, 파일 시스템을 정의하는 방법을 설명하고, 주요 규칙을 예제와 함께 소개하겠습니다.

2. 서비스에 대한 SELinux 정책 정의

Android의 System Service 또는 HAL 서비스를 SELinux 정책으로 정의할 때는 해당 서비스의 도메인과 그에 대한 적절한 규칙을 추가해야 합니다.

2.1 서비스 도메인 생성

SELinux 정책에서 서비스를 정의하려면 te 파일에서 도메인을 생성해야 합니다.

# my_service.te

# 새로운 도메인 정의
type my_service, domain;
type my_service_exec, exec_type, file_type;

# 서비스 실행 파일이 실행될 수 있도록 허용
init_daemon_domain(my_service)

2.2 서비스에 대한 정책 정의

서비스가 다른 프로세스나 파일에 접근할 수 있도록 정책을 추가해야 합니다. 예를 들어, system_servermy_service를 호출할 수 있도록 하려면 다음과 같이 정의할 수 있습니다.

allow system_server my_service:process { transition sigchld sigkill sigstop signull };

2.3 file_contexts 설정

SELinux는 파일이 특정 도메인에서 실행될 수 있도록 file_contexts를 활용합니다.

/vendor/bin/my_service    u:object_r:my_service_exec:s0

3. 바이너리에 대한 SELinux 정책 정의

Android에서 특정 바이너리를 실행할 때 SELinux 정책을 설정하여 실행 권한을 제어할 수 있습니다.

3.1 바이너리 도메인 정의

# my_binary.te

type my_binary, domain;
type my_binary_exec, exec_type, file_type;

# 바이너리 실행을 허용
init_daemon_domain(my_binary)

3.2 실행 파일에 대한 권한 부여

allow my_binary self:process { fork execmem };  
allow my_binary self:capability { net_bind_service };  

3.3 바이너리의 실행 파일 매핑

file_contexts에서 바이너리의 실행 위치를 정의합니다.

/system/bin/my_binary   u:object_r:my_binary_exec:s0

4. 파일 시스템에 대한 SELinux 정책 정의

파일 시스템 내 특정 디렉토리나 파일에 대해 SELinux 정책을 적용할 수 있습니다.

4.1 파일 타입 정의

파일이나 디렉토리를 특정 도메인과 연결해야 합니다.

# my_data.te

type my_data_file, file_type;

4.2 파일에 대한 접근 권한 부여

allow my_service my_data_file:dir { read write execute };  
allow my_service my_data_file:file { read write open };  

4.3 파일 컨텍스트 설정

SELinux가 파일을 올바르게 매핑할 수 있도록 file_contexts를 설정합니다.

/data/my_app/.*   u:object_r:my_data_file:s0

5. SELinux 정책 빌드 및 적용

SELinux 정책을 작성한 후 적용하려면 다음 절차를 따르면 됩니다.

5.1 정책 컴파일

SELinux 정책이 포함된 디렉토리에서 다음 명령을 실행하여 정책을 빌드합니다.

mm -j$(nproc)

5.2 정책 적용 및 확인

디바이스에 새로운 SELinux 정책을 적용한 후, 다음 명령으로 정상적으로 동작하는지 확인할 수 있습니다.

adb shell dmesg | grep avc
adb shell getenforce
adb shell ls -Z /data/my_app/

6. 결론

SELinux 정책을 활용하면 Android에서 서비스, 바이너리, 파일 시스템을 안전하게 제어할 수 있습니다. 본 글에서는 기본적인 SELinux 정책 정의 방법과 설정 예제를 소개하였습니다. 각 환경에 맞게 적절한 권한을 설정하고 적용하는 것이 중요합니다.

반응형