Android System & AOSP Engineering/Android Security & SELinux

AOSP 커스텀 보드 sepolicy 추가 및 적용 가이드: 단계별 실전 예제

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

안드로이드 기반의 새로운 하드웨어(커스텀 보드)를 설계하고 AOSP 프로젝트에 추가할 때, 가장 먼저 마주하는 거대한 장벽 중 하나가 바로 SELinux(sepolicy) 정책 설정입니다. 기본적으로 안드로이드는 허용되지 않은 모든 접근을 차단하는 '강제 액세스 제어(MAC)' 모델을 따르기 때문에, 새로운 하드웨어나 드라이버를 추가하면 시스템이 이를 거부하여 정상 동작하지 않는 경우가 많습니다.

본 포스팅에서는 커스텀 보드 개발 시 필수적인 sepolicy 디렉터리 구성부터 정책 파일 작성, 그리고 빌드 시스템 적용까지의 전 과정을 단계별로 상세히 다루어 보겠습니다.

Generated by Gemini AI.

📌 핵심 요약 3줄

  1. 구조적 접근: device/ 제조사/ 보드명/ sepolicy 경로에 정책 파일을 집중 관리하여 유지보수성 확보.
  2. 필수 파일 구성: .te 파일로 도메인을 정의하고, file_contexts로 물리적 경로와 보안 라벨을 매핑.
  3. 디버깅 프로세스: avc: denied 로그를 분석하여 최소 권한 원칙에 따른 allow 규칙을 점진적으로 추가.

1. 커스텀 보드의 sepolicy 추가 프로세스

AOSP 빌드 시스템 내에서 새로운 보드에 대한 정책을 수립하는 전체 흐름은 다음과 같습니다.

단계 프로세스 주요 내용 비고
1단계 환경 구성 device/ 경로 내 커스텀 보드 전용 sepolicy 디렉터리 생성 정책 관리의 시작점
2단계 정책 정의 file.te, domain.te 등을 작성하여 새로운 보안 영역 선언 타입(Type)과 도메인 정의
3단계 컨텍스트 매핑 file_contexts 파일로 실제 파일 경로에 보안 타입 부여 라벨링(Labeling) 작업
4단계 빌드 시스템 등록 BoardConfig.mk 내 관련 변수에 정책 경로 추가 빌드 시스템 연동
5단계 검증 및 수정 부팅 후 avc 로그를 확인하여 미비한 권한 보강 audit2allow 활용 단계

2. 주요 정책 파일 작성 및 역할

커스텀 보드 디렉터리(device/custom/vendor_board/sepolicy) 내에 생성해야 할 핵심 파일들의 예시입니다.

파일명 역할 코드 예시
file.te 파일 시스템에 할당될 타입(Type) 정의 type custom_file, file_type;
domain.te 프로세스가 속할 도메인 및 기본 권한 정의 type custom_domain, domain;
file_contexts 실제 파일 시스템 경로에 보안 라벨(타입) 연결 /vendor/bin/custom_exec u:object_r:custom_exec:s0
seapp_contexts **앱(App)**의 서명이나 패키지명에 따른 도메인 설정 user=_app domain=custom_domain

 


3. AOSP 빌드 시스템 반영 (BoardConfig.mk)

작성한 정책이 빌드 과정에 포함되도록 설정 파일을 수정해야 합니다.

(설정 예시) BOARD_SEPOLICY_DIRS += device/custom/vendor_board/sepolicy

이렇게 경로를 추가하면 빌드 시스템이 해당 폴더 내의 모든 .te 파일을 스캔하여 최종 sepolicy 바이너리에 포함시킵니다.


4. 적용 결과 확인 및 실무 로그 분석

정책이 반영된 후에도 권한 부족으로 기능이 동작하지 않을 수 있습니다. 이때는 dmesg 또는 logcat을 통해 거부 로그를 분석해야 합니다.

예제 로그 분석: "avc: denied { read } for pid=1234 scontext=u:r:custom_domain:s0 tcontext=u:object_r:custom_file:s0 tclass=file"

  • 분석: custom_domain(프로세스)이 custom_file(타겟)에 대해 read(동작) 권한이 없어 거부됨.
  • 해결책: 해당 도메인 정책 파일에 allow custom_domain custom_file:file { read open }; 규칙 추가.

💡 개발 꿀팁 및 흔히 하는 실수

구분 항목 상세 내용
개발 꿀팁 최소 권한 원칙 준수 모든 권한을 한꺼번에 허용하기보다, avc: denied 로그를 확인하며 꼭 필요한 권한만 하나씩 추가하세요. 이는 시스템 보안성을 유지하는 가장 확실한 방법입니다.
개발 꿀팁 audit2allow 활용 수많은 거부 로그를 일일이 분석하기 힘들 때는 audit2allow 도구를 사용하세요. 로그를 정책 문법(.te)으로 자동 변환해 주어 개발 시간을 크게 단축할 수 있습니다.
흔한 실수 라벨링 누락 file_contexts에 경로를 등록했음에도 실제 파일에 라벨이 붙지 않을 때가 있습니다. 빌드 후 ls -Z 명령어를 통해 타겟 파일에 의도한 보안 라벨이 정상적으로 적용되었는지 반드시 확인해야 합니다.
흔한 실수 Neverallow 위반 시스템 코어 영역 접근은 Android 기본 보안 규칙(neverallow)에 의해 강제 차단될 수 있습니다. 이를 우회하기 위해 무리하게 정책을 수정하기보다, 설계 단계에서 데이터 전달 방식을 변경하는 것이 바람직합니다.

5. 마무리 (결론)

커스텀 보드의 sepolicy를 적절하게 설정하는 것은 단순히 에러를 없애는 작업을 넘어, 시스템 전체의 보안성과 안정성을 결정짓는 중요한 과정입니다. 특히 임베디드 환경에서는 외부 장치와의 통신이 잦으므로, 보안 구멍을 만들지 않으면서도 기능을 충실히 수행할 수 있는 정교한 정책 수립이 필요합니다.

본 가이드가 새로운 안드로이드 기기를 개발하는 엔지니어분들에게 실질적인 도움이 되길 바랍니다. 추가적인 질문이나 특정 로그 분석이 필요하다면 언제든 댓글로 남겨주세요!

반응형