Third-party 앱을 위한 SELinux 정책 설정 (untrusted_app, isolated_app)
Android에서는 보안 강화를 위해 SELinux(SeLinux Enforcing Linux)를 활용하여 앱 및 시스템 컴포넌트의 권한을 제어합니다. 특히, Third-party 앱(서드파티 앱)은 기본적으로 untrusted_app
또는 isolated_app
도메인에 속하며, 이 정책을 적절히 구성해야 보안과 기능을 모두 만족하는 환경을 구축할 수 있습니다.
이번 글에서는 Third-party 앱을 위한 SELinux 정책을 설정하는 방법을 설명하고, untrusted_app
및 isolated_app
도메인의 차이점과 함께 예제 코드를 제공합니다.
1. Android SELinux에서 Third-party 앱의 도메인
Android에서 Third-party 앱은 기본적으로 다음 두 가지 SELinux 도메인 중 하나에 속합니다.
- untrusted_app: 일반적으로 Google Play 또는 외부 마켓에서 설치된 앱이 속하는 기본 도메인
- isolated_app: 일부 앱이
isolatedProcess=true
플래그를 설정했을 때 적용되는 도메인
이 두 도메인은 시스템의 보안을 위해 엄격하게 제한되며, 특정 파일 또는 시스템 리소스에 접근이 필요할 경우 추가적인 SELinux 정책을 설정해야 합니다.
2. 기본 SELinux 정책 파일 구조
Third-party 앱의 SELinux 정책은 sepolicy
디렉터리에 정의됩니다. 주요 정책 파일들은 다음과 같습니다.
sepolicy/public/untrusted_app.te
-untrusted_app
도메인에 대한 정책 정의sepolicy/public/isolated_app.te
-isolated_app
도메인에 대한 정책 정의sepolicy/private/app.te
- 일반 앱 정책 정의
각 파일에서 type
, attribute
, allow
, neverallow
등의 규칙을 설정하여 앱의 권한을 제한합니다.
3. untrusted_app 도메인에 대한 정책 설정
untrusted_app
도메인에 속한 앱은 기본적으로 /data/data/<패키지명>
디렉터리에 대한 읽기/쓰기 권한을 가지며, 일부 제한된 시스템 리소스에 접근할 수 있습니다. 특정 기능을 사용하기 위해 추가적인 SELinux 정책을 적용해야 할 수도 있습니다.
예를 들어, 앱이 /data/vendor
디렉터리 내 특정 파일을 읽어야 한다고 가정하면, untrusted_app.te
파일에 다음과 같은 정책을 추가할 수 있습니다.
allow untrusted_app vendor_data_file:dir r_dir_perms;
allow untrusted_app vendor_data_file:file r_file_perms;
위 정책은 untrusted_app
도메인의 앱이 vendor_data_file
에 대해 디렉터리 조회(r_dir_perms
), 파일 읽기(r_file_perms
) 권한을 가지도록 허용합니다.
그러나 일반적으로 vendor
영역은 Third-party 앱이 접근할 수 없도록 보호됩니다. 따라서 이러한 정책 추가는 신중히 고려해야 합니다.
4. isolated_app 도메인에 대한 정책 설정
isolated_app
도메인은 보안이 더욱 강화된 앱 환경을 위해 사용됩니다. 이 도메인은 Android 8.0(Oreo) 이후로 더욱 엄격하게 적용되며, 주요 특징은 다음과 같습니다.
- 기본적으로 파일 시스템에 대한 접근이 거의 불가능함
/data/data/<패키지명>
디렉터리에 대한 접근도 제한됨binder
IPC 통신이 제한적임
만약 isolated_app
도메인의 앱이 특정 서비스와 통신해야 한다면, 다음과 같은 정책을 추가할 수 있습니다.
allow isolated_app some_service:service_manager find;
allow isolated_app some_service:binder call;
위 정책은 isolated_app
도메인의 앱이 some_service
와 binder
통신을 할 수 있도록 허용하는 설정입니다.
또한, 네트워크 접근을 허용하려면 다음과 같은 규칙을 추가할 수 있습니다.
allow isolated_app net_radio_prop:file r_file_perms;
allow isolated_app net_radio_prop:dir r_dir_perms;
5. Third-party 앱의 SELinux 정책 추가 방법
정책 파일 수정:
untrusted_app.te
또는isolated_app.te
에 필요한 정책을 추가합니다.
파일 컨텍스트 설정:
file_contexts
파일을 수정하여 새로운 정책이 적용될 파일 경로를 지정합니다.
/data/vendor(/.*)? u:object_r:vendor_data_file:s0
Android.bp 수정:
- AOSP 빌드 시스템에서 새로 추가한 정책을 적용하도록
Android.bp
파일을 수정합니다.
sepolicy_private { name: "custom_app_policy", policy_files: [ "untrusted_app.te", "isolated_app.te", ], }
- AOSP 빌드 시스템에서 새로 추가한 정책을 적용하도록
sepolicy 빌드 및 테스트:
BOARD_SEPOLICY_DIRS
에 정책이 포함되었는지 확인한 후,mm
또는m
명령어를 사용하여 sepolicy를 빌드합니다.- 빌드 후
adb shell dmesg | grep avc
명령어를 이용하여 SELinux 오류 로그를 확인하고, 필요한 정책을 추가하거나 수정합니다.
6. SELinux 정책 적용 및 검증
SELinux 정책 적용 후, 정상적으로 동작하는지 확인하려면 다음 명령어를 사용할 수 있습니다.
adb shell getenforce
위 명령어가 Enforcing
을 반환하면 SELinux가 강제 적용되고 있는 상태입니다. 추가로 logcat
및 dmesg
를 활용하여 정책 충돌 여부를 확인할 수 있습니다.
adb shell dmesg | grep 'avc: denied'
adb logcat | grep 'avc: denied'
만약 특정 액세스가 차단되었다면, 해당 로그를 분석하여 필요한 정책을 추가해야 합니다.
7. 결론
Third-party 앱을 위한 SELinux 정책을 설정할 때는 untrusted_app
과 isolated_app
의 차이를 이해하고, 필요한 최소한의 권한만 부여하는 것이 중요합니다. SELinux 정책을 적절히 적용하면 보안성을 유지하면서도 앱이 정상적으로 동작할 수 있도록 설정할 수 있습니다.
Android의 보안 모델이 지속적으로 강화됨에 따라, SELinux 정책을 설정할 때 최신 AOSP 소스를 참고하고, 보안 정책을 신중하게 구성하는 것이 중요합니다.
'Android > Seploicy' 카테고리의 다른 글
audit2allow를 활용한 SELinux 정책 생성 및 검증 (0) | 2025.05.11 |
---|---|
adb logcat에서 avc: denied 로그 분석 및 해결 방법 (0) | 2025.05.10 |
Vendor 영역에서 추가한 바이너리에 대한 정책 적용 (vendor_sepolicy) (0) | 2025.05.08 |
Android 사용자 정의 System Service를 위한 SELinux 정책 작성 (0) | 2025.05.08 |
Android sepolicy: 커스텀 보드(sepolicy) 추가 및 적용 방법 (0) | 2025.05.06 |