Android/Seploicy

Android 10~14 버전별 SELinux 정책 변화 분석

임베디드 친구 2025. 5. 16. 20:48
728x90
반응형

Android 10~14 버전별 SELinux 정책 변화 분석

Android는 보안을 강화하기 위해 SELinux(보안 강화 리눅스)를 도입하였으며, 각 버전이 업데이트될 때마다 정책이 지속적으로 개선되고 있습니다. 본 글에서는 Android 10부터 Android 14까지의 SELinux 정책 변화를 비교 분석하고, 주요 변경 사항과 그 영향을 설명드리겠습니다.


1. Android 10 (Q)의 SELinux 정책 변화

Android 10에서는 보안 강화를 위한 SELinux 정책 변경이 대폭 이루어졌습니다. 주요 사항은 다음과 같습니다.

1.1 APEX 모듈 도입으로 인한 SELinux 변경

Android 10에서는 APEX(Application Package Extension) 모듈이 도입되면서, 시스템 파일 및 라이브러리의 배포 방식이 변경되었습니다. 이에 따라 SELinux 정책도 다음과 같이 변경되었습니다.

  • APEX 관련 보안 컨텍스트 추가
    • /apex/ 디렉토리에 대한 새로운 file_contexts 정의
    • system_apexvendor_apex 타입 도입
    • APEX 내 바이너리에 대한 실행 권한 명확화
/apex(/.*)?       u:object_r:system_apex_file:s0

1.2 neverallow 규칙 강화

보안 강화를 위해 새로운 neverallow 규칙이 추가되었습니다. 주요 사항은 다음과 같습니다.

  • init 프로세스가 특정 디렉토리의 파일을 직접 수정하는 것을 차단
  • system_appvendor 영역을 직접 접근하지 못하도록 제한
  • untrusted_app 도메인의 권한 축소
neverallow { system_server system_app } vendor_file:dir write;
neverallow untrusted_app devpts:chr_file { read write };

1.3 vendorsystem 간의 보안 경계 강화

Android 10부터 systemvendor의 분리가 더욱 엄격하게 적용되었습니다. vendor 영역에서 실행되는 바이너리는 system 영역의 리소스에 접근할 수 없도록 정책이 변경되었습니다.


2. Android 11 (R)의 SELinux 정책 변화

Android 11에서는 Scoped StorageBackground Location 보안 정책 강화에 따라 SELinux 정책도 업데이트되었습니다.

2.1 Scoped Storage와 SELinux

Scoped Storage 정책이 적용되면서 파일 접근 권한이 더욱 제한되었습니다. 이에 따라 SELinux 정책이 다음과 같이 변경되었습니다.

  • untrusted_app 도메인의 파일 접근 규칙 변경
  • 미디어 저장소(/storage/emulated/)에 대한 SELinux 보안 컨텍스트 강화
  • system_serverread 권한 제한 강화
/storage/emulated(/.*)?   u:object_r:media_rw_data_file:s0

2.2 Background Location 정책 강화

백그라운드에서 위치 정보를 요청하는 앱에 대한 SELinux 규칙이 강화되었습니다.

  • location_service 역할을 수행하는 프로세스에 대한 allow 정책 변경
  • untrusted_app이 위치 정보에 접근하는 것을 더욱 제한
allow location_service self:capability net_bind_service;
neverallow untrusted_app self:capability net_bind_service;

3. Android 12 (S)의 SELinux 정책 변화

Android 12에서는 privileged 앱과 system_server의 보안이 더욱 강화되었습니다.

3.1 privileged 앱의 SELinux 정책 변경

privileged 앱(시스템 앱)은 보안상의 이유로 일부 API 및 리소스에 대한 접근이 제한되었습니다.

  • privileged_app 도메인의 네트워크 접근 제한 강화
  • 시스템 서비스 호출 시 audit 로그를 기록하도록 변경
neverallow privileged_app self:socket { create bind connect }; 

3.2 system_server의 SELinux 정책 강화

system_server가 실행하는 서비스와 관련된 정책이 강화되었습니다.

  • system_server의 특정 디렉토리 접근 제한
  • neverallow 규칙 추가로 인해 일부 IPC 통신 차단
neverallow system_server vendor_file:dir write;

4. Android 13 (T)의 SELinux 정책 변화

Android 13에서는 BluetoothMedia Provider 관련 SELinux 정책이 크게 변경되었습니다.

4.1 Bluetooth 보안 정책 강화

Bluetooth 관련 공격을 방지하기 위해 bluetooth_service의 권한이 변경되었습니다.

  • untrusted_app이 Bluetooth 프로세스와 직접 통신하는 것을 차단
  • bluetooth_service의 IPC 권한 제한
neverallow untrusted_app bluetooth_service:service_manager find;

4.2 Media Provider SELinux 정책 변경

미디어 저장소(/data/media/)에 대한 접근 정책이 강화되었습니다.

  • untrusted_app/data/media/에 직접 접근하지 못하도록 제한
  • 특정 미디어 파일에 대한 접근이 mediaprovider_service를 통해서만 가능하도록 변경
/data/media(/.*)?  u:object_r:media_provider_data_file:s0

5. Android 14 (U)의 SELinux 정책 변화

Android 14에서는 AdServices, Health Connect, User ID Isolation 등의 새로운 보안 기능이 추가됨에 따라 SELinux 정책도 대폭 변경되었습니다.

5.1 AdServices 관련 SELinux 정책 추가

광고 추적 방지를 위한 AdServices 프로세스가 추가되면서, 이에 대한 SELinux 정책도 추가되었습니다.

  • adservices 도메인 추가
  • untrusted_appadservices 접근 제한
allow adservices self:capability net_bind_service;
neverallow untrusted_app adservices:service_manager find;

5.2 Health Connect 관련 SELinux 정책 추가

  • healthconnect_service가 처리하는 파일 및 데이터의 보안 컨텍스트 추가
  • untrusted_apphealthconnect_service 접근 제한
/data/healthconnect(/.*)?  u:object_r:healthconnect_data_file:s0

5.3 User ID Isolation 정책 강화

Android 14에서는 UID 기반의 프로세스 격리를 더욱 강화하여, 각 앱이 다른 UID의 데이터를 직접 읽지 못하도록 SELinux 정책이 변경되었습니다.

neverallow untrusted_app other_apps:dir read;

결론

Android 10부터 Android 14까지 SELinux 정책은 지속적으로 강화되었으며, 특히 APEX, Scoped Storage, Bluetooth, Media Provider, AdServices 등의 변화에 맞추어 다양한 정책이 적용되었습니다. 각 버전별 변경 사항을 잘 파악하고 SELinux 정책을 적용해야 하며, 새로운 버전의 SELinux 변경 사항을 주기적으로 점검하는 것이 중요합니다.

반응형