Sepolicy neverallow 정책을 활용한 보안 강화
1. 개요
Android의 SELinux(SeLinux)는 보안 정책을 적용하여 시스템의 무결성을 보호하는 중요한 역할을 합니다. 그중에서도 neverallow
정책은 특정 보안 규칙을 강제하여 허용되지 않는 동작을 사전에 차단하는 역할을 합니다. 본 글에서는 neverallow
정책의 개념과 이를 활용하여 Android 보안을 강화하는 방법을 설명합니다.
2. neverallow 정책이란?
neverallow
는 SELinux 정책에서 사용되는 특별한 규칙으로, 특정 도메인(domain)이나 속성(attribute)이 특정한 작업을 수행하지 못하도록 강제하는 역할을 합니다. 일반적인 allow
규칙과 달리, neverallow
는 상위 정책에서라도 해당 권한을 부여할 수 없도록 막는 강력한 보안 기능을 제공합니다.
2.1 neverallow 정책의 역할
- 보안 강제: 특정 유형의 접근을 절대적으로 금지하여 보안 취약점을 예방
- 정책 일관성 유지: 개발 중 의도치 않은
allow
정책이 추가되는 것을 방지 - 정책 오류 감지: 보안 정책을 위반하는 변경 사항을 빌드 시 감지하여 예방
3. neverallow 정책의 기본 문법
neverallow
정책은 SELinux 정책 파일(.te
파일)에 다음과 같이 정의됩니다.
neverallow <source_types> <target_types>:<class> <permissions>;
<source_types>
: 접근을 시도하는 도메인<target_types>
: 접근 대상<class>
: 객체 클래스(예:file
,dir
,socket
등)<permissions>
: 금지할 권한(예:read
,write
,execute
등)
3.1 예제: 시스템 바이너리가 data
디렉터리에 접근하지 못하도록 설정
다음 예제는 system_server
가 /data
디렉터리에 직접 접근하지 못하도록 neverallow
정책을 적용하는 코드입니다.
neverallow system_server data_file_type:file { read write execute };
위 정책은 system_server
프로세스가 /data
디렉터리 내 파일에 대해 읽기, 쓰기, 실행을 수행하는 것을 금지합니다. 만약 정책을 위반하는 allow
규칙이 추가되면, 빌드 시 오류가 발생하게 됩니다.
4. neverallow 정책을 활용한 보안 강화
4.1 neverallow
를 활용한 중요 시스템 보호
(1) Vendor 바이너리가 시스템 영역에 접근하지 못하도록 설정
Vendor 파티션에 위치한 바이너리(vendor_exec
)가 /system
디렉터리에 직접 접근하는 것을 방지하려면 다음과 같은 neverallow
규칙을 적용할 수 있습니다.
neverallow vendor_exec system_file_type:file { read write execute };
(2) 일반 앱이 sysfs
에 직접 접근하지 못하도록 설정
일반 애플리케이션(untrusted_app
)이 sysfs
를 수정하는 것을 방지하는 정책은 다음과 같이 작성할 수 있습니다.
neverallow untrusted_app sysfs:file { write append };
위 정책은 untrusted_app
이 /sys
디렉터리 내 파일을 수정하거나 내용을 추가하는 것을 금지합니다.
4.2 SELinux 정책 강제 적용
neverallow
정책을 적용하면, SELinux 정책을 빌드할 때 강제 검사가 수행됩니다. 정책 위반이 감지되면 빌드 과정에서 다음과 같은 오류가 발생합니다.
Error: neverallow violated: allow system_server data_file_type:file { read write execute };
이 오류가 발생하면, 정책을 재검토하여 적절한 접근이 필요할 경우 다른 방식으로 권한을 조정해야 합니다.
5. neverallow 정책 적용 및 테스트
5.1 정책 적용 과정
sepolicy
디렉터리에서 정책 파일을 수정하거나 추가- 변경된 정책을 포함하여 전체 AOSP 빌드 수행
adb logcat
에서 SELinux 관련 로그 확인
5.2 neverallow 정책 위반 확인
만약 기존 정책이 neverallow
규칙을 위반하는 경우, sepolicy_tests
를 실행하여 확인할 수 있습니다.
mmm system/sepolicy
빌드 완료 후 다음 명령어를 실행하여 neverallow
검사를 수행할 수 있습니다.
out/host/linux-x86/bin/checkpolicy -M -c 30 out/target/product/generic/obj/ETC/sepolicy_intermediates/sepolicy
위 과정에서 neverallow
위반이 발생하면 관련 내용을 확인하고 수정해야 합니다.
6. 결론
neverallow
정책은 Android SELinux 보안을 강화하는 핵심 요소로, 중요한 리소스에 대한 불필요한 접근을 제한하여 보안 취약점을 사전에 방지할 수 있습니다. 특히 시스템 바이너리, vendor 바이너리, 일반 앱 등의 접근을 제한하여, 악성 코드나 권한 상승 공격을 예방하는 데 중요한 역할을 합니다.
Android 시스템을 보다 안전하게 보호하기 위해 neverallow
정책을 적극적으로 활용하고, 주기적으로 보안 정책을 점검하여 취약점을 최소화하는 것이 중요합니다.
'Android > Seploicy' 카테고리의 다른 글
사용자 정의 SELinux 정책이 AOSP 보안 가이드라인을 준수하는지 검토하는 방법 (0) | 2025.05.15 |
---|---|
SELinux 정책 최소화 및 최적화 기법 (0) | 2025.05.14 |
dmesg와 logcat을 활용한 SELinux 디버깅 (0) | 2025.05.12 |
audit2allow를 활용한 SELinux 정책 생성 및 검증 (0) | 2025.05.11 |
adb logcat에서 avc: denied 로그 분석 및 해결 방법 (0) | 2025.05.10 |