AOSP에서 sepolicy 빌드 과정
Android Open Source Project(AOSP)에서는 SELinux(sepolicy) 정책을 빌드하고 적용하는 과정이 중요합니다. SELinux는 Android 보안 모델의 핵심 요소로, 시스템 전반에 걸쳐 강력한 액세스 제어를 수행합니다. 이번 포스팅에서는 AOSP에서 sepolicy를 빌드하는 과정을 단계별로 설명하겠습니다.
1. AOSP 환경 설정 및 빌드 준비
1.1 AOSP 소스 코드 다운로드
AOSP에서 sepolicy를 빌드하려면 전체 소스 코드가 필요합니다. Google의 AOSP 저장소에서 소스를 클론해야 합니다.
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r1
repo sync -j$(nproc)
위 명령어를 실행하면 AOSP 소스가 다운로드됩니다. 소스 코드 다운로드가 완료되면 환경을 설정해야 합니다.
1.2 빌드 환경 설정
AOSP 빌드를 위해 필요한 패키지를 설치하고 환경을 설정합니다.
source build/envsetup.sh
lunch aosp_arm64-userdebug
이 명령어를 실행하면 AOSP 빌드 환경이 설정됩니다.
2. sepolicy 빌드 과정 이해
AOSP에서 SELinux 정책은 system/sepolicy
디렉터리에 위치하며, BOARD_SEPOLICY_DIRS
및 SYSTEM_EXT_SEPOLICY_DIRS
변수를 통해 정책이 정의됩니다. 빌드 과정은 다음과 같이 진행됩니다.
- MLS 정책 소스 파일 생성: policy.conf 및 관련 파일들을 기반으로 SELinux 정책 소스 코드 생성
- 정책 파일 컴파일:
checkpolicy
툴을 사용하여 정책을 바이너리 포맷으로 변환 - 파일 컨텍스트 매핑 적용:
sepolicy
와file_contexts
를 결합하여 컨텍스트 정보 설정 - 부팅 이미지에 포함: 최종 정책 바이너리를 Android 부팅 이미지에 포함하여 적용
3. AOSP에서 sepolicy 빌드하기
3.1 정책 수정 및 적용
AOSP에서 SELinux 정책을 수정하려면 system/sepolicy/private/
디렉터리에 새로운 정책 파일을 추가하거나 기존 정책을 수정해야 합니다. 예를 들어 새로운 도메인을 추가하려면 다음과 같이 진행합니다.
3.1.1 새로운 도메인 생성
예를 들어 mydomain.te
파일을 생성하고 다음 내용을 추가합니다.
# mydomain.te
# 새로운 도메인 정의
type mydomain, domain;
type mydomain_exec, exec_type, file_type;
# 도메인 전환 규칙
init_daemon_domain(mydomain)
3.1.2 파일 컨텍스트 추가
file_contexts
파일에서 새로운 도메인을 정의한 파일 경로를 추가해야 합니다.
/vendor/bin/mydomain_exec u:object_r:mydomain_exec:s0
3.2 정책 컴파일 및 빌드 실행
수정한 정책을 반영하려면 sepolicy
를 다시 빌드해야 합니다.
mmm system/sepolicy
정책이 정상적으로 빌드되면 out/target/product/<device>/root/sepolicy
파일이 생성됩니다.
4. 빌드된 sepolicy 적용 및 테스트
4.1 부팅 이미지에 정책 포함
정책을 적용하려면 새로운 부팅 이미지를 빌드해야 합니다.
make -j$(nproc) bootimage
이후 생성된 부팅 이미지를 디바이스에 플래싱합니다.
fastboot flash boot out/target/product/<device>/boot.img
4.2 적용된 정책 확인
디바이스 부팅 후, SELinux 정책이 정상적으로 적용되었는지 확인합니다.
adb shell dmesg | grep avc
adb shell getenforce
정책 적용 후 getenforce
명령어 실행 결과가 Enforcing
이면 정상적으로 적용된 것입니다.
5. 문제 해결
5.1 avc: denied
로그 분석
SELinux 정책 적용 중 avc: denied
오류가 발생할 수 있습니다. 이를 해결하려면 로그를 분석해야 합니다.
adb logcat -b all | grep 'avc: denied'
로그를 확인하여 허용되지 않은 액세스를 분석하고, 정책을 수정해야 합니다.
5.2 정책 수정 후 재적용
avc: denied
오류를 해결하기 위해 정책을 수정한 후, 다시 빌드하고 적용해야 합니다.
mmm system/sepolicy
make -j$(nproc) bootimage
fastboot flash boot out/target/product/<device>/boot.img
6. 마무리
AOSP에서 sepolicy를 빌드하고 적용하는 과정은 SELinux 기반의 보안 모델을 강화하는 중요한 작업입니다. 정책을 수정하고 적용하는 과정에서 avc: denied
로그를 적극적으로 분석하며 문제를 해결하는 것이 중요합니다. 본 가이드를 참고하여 AOSP에서 효과적으로 SELinux 정책을 적용할 수 있기를 바랍니다.
'Android > Seploicy' 카테고리의 다른 글
Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법 (0) | 2025.05.06 |
---|---|
BOARD_SEPOLICY_DIRS와 PRODUCT_PRIVATE_SEPOLICY_DIRS 차이 (0) | 2025.05.05 |
Android SELinux 정책에서 서비스, 바이너리, 파일 시스템 정의하기 (0) | 2025.05.02 |
Android SELinux 정책 설정: domain, file_contexts, genfs_contexts 설정 방법 (0) | 2025.05.01 |
Android SELinux 정책 문법과 규칙 (0) | 2025.04.30 |