Android/Seploicy

최신 Android에서 추가된 보안 정책 및 변경 사항

임베디드 친구 2025. 5. 18. 12:41
728x90
반응형

최신 Android에서 추가된 보안 정책 및 변경 사항

개요

Android의 SELinux(sepolicy)는 보안 강화를 위해 지속적으로 발전하고 있습니다. 최신 Android 버전에서도 새로운 보안 정책이 추가되었으며, 기존 정책의 변경 사항이 적용되었습니다. 이번 글에서는 최신 Android에서 추가된 SELinux 정책과 주요 변경 사항을 분석하고, 실제 적용된 코드 예시를 포함하여 설명하겠습니다.

1. SELinux 정책의 주요 변경 사항

1.1 새로운 도메인 추가

최신 Android에서는 보안 강화를 위해 새로운 도메인이 추가되었습니다. 이는 특정 시스템 서비스와 프로세스를 더욱 정밀하게 관리하기 위한 조치입니다. 예를 들어, system_server와 상호작용하는 특정 서비스에 대해 별도의 도메인이 추가될 수 있습니다.

새로운 도메인 정의 예시:

# 새로운 서비스의 도메인 정의
(type my_new_service)
(typeattribute my_new_service)

# system_server에서 해당 서비스를 실행할 수 있도록 허용
allow system_server my_new_service:process { transition sigchld };

1.2 기존 도메인의 권한 강화 또는 제한

기존 도메인의 경우 일부 서비스에 대한 권한이 강화되거나 제한되었습니다. 예를 들어, vendor_init 프로세스가 특정 sysfs 디렉터리에 접근할 수 있도록 변경되었을 수 있습니다.

기존 도메인 권한 수정 예시:

# vendor_init 프로세스의 sysfs 접근 허용
allow vendor_init sysfs:file { read open getattr };

1.3 새로운 정책 유형 및 속성 추가

특정 기능을 더욱 세밀하게 제어하기 위해 새로운 정책 속성이 추가될 수 있습니다. 예를 들어, 특정 네트워크 관련 작업을 허용하는 새로운 속성이 정의될 수 있습니다.

예시:

# 새로운 네트워크 관련 속성
(type network_control)
(typeattribute network_control net_admin)

2. Vendor 영역의 SELinux 정책 변경

2.1 vendor_sepolicy의 강화

Vendor 영역에서는 제조사별 기능이 포함되며, SELinux 정책도 이를 반영하여 업데이트됩니다. 최신 Android에서는 vendor_sepolicy의 관리가 더욱 엄격해졌으며, 특정 시스템 API 호출이 제한될 수 있습니다.

예를 들어, vendor_initsystem_server와의 특정 IPC 호출을 수행하려면 새로운 정책이 필요할 수 있습니다.

# vendor_init가 system_server와 IPC 통신 허용
allow vendor_init system_server:binder { call transfer };

2.2 BOARD_SEPOLICY_DIRSPRODUCT_PRIVATE_SEPOLICY_DIRS 차이

최근 AOSP에서는 BOARD_SEPOLICY_DIRSPRODUCT_PRIVATE_SEPOLICY_DIRS의 차이가 더욱 명확해졌습니다. PRODUCT_PRIVATE_SEPOLICY_DIRS는 제품별 사설 정책을 정의하는 데 사용되며, BOARD_SEPOLICY_DIRS는 SoC 및 보드 수준에서 필요한 정책을 정의합니다.

3. 최신 SELinux 정책 적용 방법

3.1 정책 변경 후 빌드 및 적용

SELinux 정책을 변경한 후에는 반드시 정책을 빌드하고 적용해야 합니다. 이를 위해 다음 명령어를 실행합니다.

# SELinux 정책 빌드
mm -j$(nproc) sepolicy

# 빌드된 정책 적용 (예: ADB 사용)
adb push out/target/product/<device>/sepolicy /sys/fs/selinux/

3.2 avc: denied 로그 확인 및 디버깅

SELinux 정책이 정상적으로 적용되지 않았을 경우 adb logcat에서 avc: denied 로그를 확인하여 문제를 해결해야 합니다.

adb logcat -b all | grep 'avc: denied'

로그 예시:

avc: denied { read } for pid=1234 comm="my_service" name="/data/vendor" dev="mmcblk0p42" ino=5678 scontext=u:r:my_service:s0 tcontext=u:object_r:vendor_data_file:s0 tclass=dir

이러한 로그를 기반으로 allow 규칙을 추가하여 문제를 해결할 수 있습니다.

allow my_service vendor_data_file:dir { read open getattr };

4. 결론

최신 Android에서는 SELinux 정책이 지속적으로 강화되고 있으며, 새로운 도메인 추가, 기존 도메인의 권한 변경, vendor 영역의 정책 강화 등이 이루어지고 있습니다. 또한, vendor_sepolicyBOARD_SEPOLICY_DIRS의 차이가 더욱 명확해졌으며, SELinux 정책을 적용하는 과정에서 avc: denied 로그를 확인하여 디버깅하는 것이 중요합니다.

이 글에서는 최신 SELinux 정책의 주요 변경 사항을 살펴보았으며, 이를 실무에 적용하는 방법에 대해 설명하였습니다. 향후 Android 버전이 업데이트될 때마다 SELinux 정책 변경 사항을 주의 깊게 확인하고, 적절한 대응이 필요합니다.

728x90
반응형