Android/Seploicy

Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법

임베디드 친구 2025. 5. 6. 08:45
728x90
반응형

Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법

1. 서론

Android의 보안 정책을 담당하는 SELinux(sepolicy)는 시스템의 보안성을 유지하는 핵심 요소입니다. 제조사나 개발자가 새로운 커스텀 보드를 추가할 경우, sepolicy를 수정하여 보드에 맞는 SELinux 정책을 설정해야 합니다. 본 포스팅에서는 커스텀 보드의 sepolicy를 추가하고 적용하는 방법을 설명하겠습니다.

2. 커스텀 보드의 sepolicy 추가 개요

Android Open Source Project(AOSP)에서 커스텀 보드를 추가하려면 다음 단계가 필요합니다.

  1. 커스텀 보드 디렉터리 생성 및 설정
  2. sepolicy 디렉터리 및 정책 파일 생성
  3. 파일 컨텍스트 및 권한 정의
  4. AOSP 빌드 시스템에 적용 및 빌드
  5. 적용 결과 확인 및 로그 분석

각 단계별로 자세한 내용을 살펴보겠습니다.

3. 커스텀 보드 디렉터리 생성 및 설정

AOSP에서는 커스텀 보드의 설정을 device 디렉터리에서 관리합니다. 예를 들어, custom_board라는 새로운 보드를 추가한다고 가정하면 다음과 같이 디렉터리를 생성합니다.

cd $AOSP_ROOT/device/
mkdir -p custom/vendor_board/sepolicy

이제 sepolicy 폴더를 생성했으므로, 해당 폴더에 정책 파일을 추가할 수 있습니다.

4. sepolicy 디렉터리 및 정책 파일 생성

커스텀 보드의 SELinux 정책을 정의하기 위해 필요한 기본적인 파일을 생성합니다.

4.1. file.te - 파일 타입 정의

파일 및 디렉터리의 SELinux 타입을 정의합니다.

type custom_file, file_type;

4.2. domain.te - 프로세스 도메인 정의

프로세스가 동작하는 도메인을 정의합니다.

type custom_exec, exec_type, file_type;
type custom_domain;

init_daemon_domain(custom_domain)

4.3. file_contexts - 파일 경로와 SELinux 타입 매핑

각 파일이 어떤 SELinux 타입을 가질 것인지 정의합니다.

/vendor/bin/custom_exec    u:object_r:custom_exec:s0
/data/vendor/custom_data   u:object_r:custom_file:s0

4.4. seapp_contexts - 앱의 SELinux 컨텍스트 매핑

앱별 SELinux 정책을 정의할 경우 seapp_contexts 파일을 수정합니다.

user=_app domain=custom_domain type=custom_exec level=s0

5. AOSP 빌드 시스템에 적용 및 빌드

sepolicy를 적용하기 위해 BoardConfig.mk 또는 device.mk 파일을 수정합니다.

5.1. BoardConfig.mk에 SEPolicy 디렉터리 추가

BOARD_SEPOLICY_DIRS += device/custom/vendor_board/sepolicy

5.2. PRODUCT_PRIVATE_SEPOLICY_DIRS 설정

PRODUCT_PRIVATE_SEPOLICY_DIRS += \
    $(LOCAL_PATH)/sepolicy

5.3. 빌드 실행

source build/envsetup.sh
lunch custom_board-userdebug
make -j$(nproc)

이 과정에서 에러가 발생하면 로그를 분석하여 정책을 수정해야 합니다.

6. 적용 결과 확인 및 로그 분석

정책이 정상적으로 적용되었는지 확인하려면 부팅 후 dmesg 또는 logcat을 확인해야 합니다.

dmesg | grep -i "avc: denied"

만약 avc: denied 메시지가 발생하면 해당 정책을 조정해야 합니다.

예제 로그:

avc: denied { read } for pid=1234 comm="custom_exec" name="custom_data" dev="sda1" ino=1234
scontext=u:r:custom_domain:s0 tcontext=u:object_r:custom_file:s0 tclass=file permissive=0

위 로그에서 custom_exec 프로세스가 custom_file을 읽으려다 실패했음을 알 수 있습니다. 이를 해결하려면 allow 규칙을 추가해야 합니다.

allow custom_domain custom_file:file { read open };

이후 다시 빌드하여 적용합니다.

7. 결론

본 포스팅에서는 커스텀 보드의 sepolicy를 추가하고 적용하는 방법을 설명했습니다. sepolicy를 작성할 때는 다음 사항을 유념해야 합니다.

  • avc: denied 로그를 주의 깊게 분석할 것
  • 보안 규칙을 최소한으로 허용하여 보안을 강화할 것
  • 정책 변경 후 항상 빌드 및 테스트를 수행할 것

AOSP에 새로운 커스텀 보드를 추가할 때 sepolicy를 적절하게 설정하면 시스템의 보안성과 안정성을 높일 수 있습니다.

728x90
반응형