Android/Seploicy

AOSP에서 sepolicy 빌드 과정

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

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_DIRSSYSTEM_EXT_SEPOLICY_DIRS 변수를 통해 정책이 정의됩니다. 빌드 과정은 다음과 같이 진행됩니다.

  1. MLS 정책 소스 파일 생성: policy.conf 및 관련 파일들을 기반으로 SELinux 정책 소스 코드 생성
  2. 정책 파일 컴파일: checkpolicy 툴을 사용하여 정책을 바이너리 포맷으로 변환
  3. 파일 컨텍스트 매핑 적용: sepolicyfile_contexts를 결합하여 컨텍스트 정보 설정
  4. 부팅 이미지에 포함: 최종 정책 바이너리를 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 정책을 적용할 수 있기를 바랍니다.

728x90
반응형