Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법
1. 서론
Android의 보안 정책을 담당하는 SELinux(sepolicy)는 시스템의 보안성을 유지하는 핵심 요소입니다. 제조사나 개발자가 새로운 커스텀 보드를 추가할 경우, sepolicy를 수정하여 보드에 맞는 SELinux 정책을 설정해야 합니다. 본 포스팅에서는 커스텀 보드의 sepolicy를 추가하고 적용하는 방법을 설명하겠습니다.
2. 커스텀 보드의 sepolicy 추가 개요
Android Open Source Project(AOSP)에서 커스텀 보드를 추가하려면 다음 단계가 필요합니다.
- 커스텀 보드 디렉터리 생성 및 설정
- sepolicy 디렉터리 및 정책 파일 생성
- 파일 컨텍스트 및 권한 정의
- AOSP 빌드 시스템에 적용 및 빌드
- 적용 결과 확인 및 로그 분석
각 단계별로 자세한 내용을 살펴보겠습니다.
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를 적절하게 설정하면 시스템의 보안성과 안정성을 높일 수 있습니다.
'Android > Seploicy' 카테고리의 다른 글
Vendor 영역에서 추가한 바이너리에 대한 정책 적용 (vendor_sepolicy) (0) | 2025.05.08 |
---|---|
Android 사용자 정의 System Service를 위한 SELinux 정책 작성 (0) | 2025.05.08 |
BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS 차이 (0) | 2025.05.05 |
AOSP에서 sepolicy 빌드 과정 (0) | 2025.05.04 |
Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기 (0) | 2025.05.02 |