사용자 정의 SELinux 정책이 AOSP 보안 가이드라인을 준수하는지 검토하는 방법
SELinux는 Android 보안 모델의 핵심 요소 중 하나로, 강력한 보안 정책을 통해 시스템의 무결성을 유지합니다. AOSP(Android Open Source Project)에서는 SELinux 정책을 정의할 때 준수해야 할 다양한 가이드라인을 제공하고 있으며, 사용자 정의 정책을 추가할 때 이러한 가이드라인을 위반하지 않도록 철저한 검토가 필요합니다. 본 포스팅에서는 사용자 정의 SELinux 정책이 AOSP 보안 가이드라인을 준수하는지 검토하는 방법을 설명하겠습니다.
1. AOSP SELinux 보안 가이드라인 이해하기
AOSP에서 제공하는 SELinux 보안 가이드라인은 크게 다음과 같은 원칙을 따릅니다.
- 최소 권한 원칙(Principle of Least Privilege): 각 도메인은 최소한의 권한만 가져야 하며, 불필요한 권한을 부여해서는 안 됩니다.
- 정확한 유형(type) 및 속성(attribute) 지정: 파일 및 프로세스에 대해 적절한 type과 attribute를 지정하여 불필요한 상속을 방지해야 합니다.
- neverallow 규칙 준수: 보안상 중요한 리소스에 대해 강력한 neverallow 규칙이 적용되어 있으며, 이를 위반하는 정책은 빌드 과정에서 오류를 발생시킵니다.
- 벤더 정책과 AOSP 정책의 명확한 분리: vendor 영역에서 정의한 정책이 AOSP 정책을 직접 수정하지 않도록 주의해야 합니다.
2. SELinux 정책 검토 및 분석 절차
SELinux 정책이 AOSP 보안 가이드라인을 준수하는지 검토하는 과정은 다음과 같은 단계로 진행됩니다.
2.1 checkpolicy
및 audit2allow
활용
SELinux 정책 파일(.te
)을 작성한 후, checkpolicy
를 사용하여 정책의 문법과 논리적 오류를 점검할 수 있습니다.
checkpolicy -M -c 30 policy.conf
또한, audit2allow
를 사용하여 SELinux 거부 로그(avc: denied
)를 분석하고 필요 이상의 권한이 허용되는지 확인할 수 있습니다.
dmesg | grep "avc: denied" | audit2allow -p policy.conf
2.2 neverallow
규칙 위반 여부 확인
AOSP에서는 보안상의 이유로 특정 정책을 강제 차단하는 neverallow
규칙을 정의하고 있습니다.
예를 들어, system_app
도메인이 init
도메인과 직접 통신하는 것을 금지하는 정책은 다음과 같습니다.
neverallow system_app init:process transition;
사용자 정의 정책이 neverallow
규칙을 위반하지 않는지 확인하려면, 다음 명령어를 실행합니다.
sepolicy-analyze policy.conf neverallow
해당 명령어의 출력 결과를 분석하여 neverallow
규칙을 위반하는지 확인해야 합니다.
2.3 파일 컨텍스트(file_contexts
) 검토
정책을 정의할 때 올바른 파일 컨텍스트가 설정되어 있는지 확인해야 합니다. 예를 들어, /data/vendor/app_data
에 저장된 데이터 파일이 적절한 SELinux 보안 컨텍스트를 가지도록 설정해야 합니다.
파일 컨텍스트를 확인하는 명령어는 다음과 같습니다.
ls -Z /data/vendor/app_data
출력 결과에서 파일이 올바른 보안 컨텍스트를 가지고 있는지 검토합니다. 만약 정책이 잘못되어 있다면, 적절한 file_contexts
규칙을 정의해야 합니다.
예시:
/data/vendor/app_data(/.*)? u:object_r:vendor_app_data_file:s0
2.4 audit2why
를 활용한 보안 위반 원인 분석
SELinux 거부 로그(avc: denied
)가 발생했을 때, audit2why
를 사용하여 거부된 원인을 분석할 수 있습니다.
dmesg | grep "avc: denied" | audit2why
이를 통해 정책이 불필요한 권한을 허용하지 않으면서도 올바르게 동작하는지 점검할 수 있습니다.
2.5 seinfo
를 활용한 정책 구조 검토
seinfo
도구를 사용하면 현재 정의된 SELinux 정책 구조를 확인할 수 있습니다.
예를 들어, 특정 도메인(system_app)이 어떤 권한을 가지고 있는지 확인하려면 다음 명령어를 실행합니다.
seinfo -d | grep system_app
또한, 특정 유형(type)에 대한 정보도 조회할 수 있습니다.
seinfo -t | grep my_custom_type
이렇게 조회된 결과를 기반으로 불필요한 권한이 추가되지 않았는지 점검해야 합니다.
3. 사용자 정의 SELinux 정책을 AOSP 빌드 환경에서 검토하기
SELinux 정책을 추가한 후, AOSP 빌드 환경에서 정상적으로 동작하는지 확인해야 합니다.
빌드 과정에서 정책 오류를 확인하려면 다음과 같이 실행합니다.
mmm system/sepolicy
또한, BOARD_SEPOLICY_DIRS
및 PRODUCT_PRIVATE_SEPOLICY_DIRS
에 추가된 정책이 올바르게 적용되었는지 점검해야 합니다.
find device/ -name "*.te"
이러한 방법을 통해 사용자 정의 정책이 AOSP 보안 가이드라인을 위반하지 않는지 확인할 수 있습니다.
4. 결론
SELinux 정책을 정의할 때는 AOSP의 보안 가이드라인을 철저히 준수해야 하며, 불필요한 권한을 부여하지 않도록 주의해야 합니다. 본 포스팅에서 소개한 다양한 검토 방법(checkpolicy
, sepolicy-analyze
, audit2allow
등)을 활용하여 사용자 정의 정책을 면밀히 점검하고, neverallow
규칙을 위반하지 않는지 확인하는 것이 중요합니다.
SELinux는 보안을 강화하는 강력한 도구이지만, 올바르게 설정되지 않으면 보안 취약점을 유발할 수 있습니다. 따라서 정책을 신중하게 설계하고 검토하여 안전한 Android 시스템을 구축하는 것이 필요합니다.
'Android > Seploicy' 카테고리의 다른 글
최신 Android에서 추가된 보안 정책 및 변경 사항 (0) | 2025.05.18 |
---|---|
Android 10~14 버전별 SELinux 정책 변화 분석 (0) | 2025.05.16 |
SELinux 정책 최소화 및 최적화 기법 (0) | 2025.05.14 |
Sepolicy neverallow 정책을 활용한 보안 강화 (0) | 2025.05.13 |
dmesg와 logcat을 활용한 SELinux 디버깅 (0) | 2025.05.12 |