SELinux 정책 최소화 및 최적화 기법
SELinux(Security-Enhanced Linux)는 강력한 보안 정책을 제공하지만, 과도한 정책은 시스템 성능 저하를 초래하고 유지보수의 복잡성을 증가시킬 수 있습니다. 따라서 최소한의 정책을 유지하면서도 보안을 강화하는 것이 중요합니다. 이번 포스팅에서는 SELinux 정책을 최소화하고 최적화하는 방법에 대해 설명하겠습니다.
1. SELinux 정책 최소화 원칙
SELinux 정책을 최소화하기 위해서는 다음과 같은 원칙을 따르는 것이 좋습니다.
최소 권한 원칙(Principle of Least Privilege, POLP)
- 프로세스가 필요한 최소한의 권한만 가지도록 정책을 작성해야 합니다.
불필요한 도메인 및 규칙 제거
- 사용하지 않는 도메인이나 파일 컨텍스트를 제거하여 정책을 단순화합니다.
거부 규칙 최소화
neverallow
규칙을 신중하게 사용하고, 불필요한deny
로그가 발생하지 않도록 조정합니다.
도메인 격리 및 분리
- 하나의 도메인이 과도한 권한을 가지지 않도록 여러 개의 도메인으로 분리합니다.
정책 레이어링
base
정책과vendor
또는product
정책을 구분하여, 필요한 정책만 로드되도록 구성합니다.
2. SELinux 정책 최적화 기법
SELinux 정책을 최적화하려면 몇 가지 기법을 적용할 수 있습니다.
2.1. 불필요한 정책 제거
불필요한 정책을 제거하는 것은 최적화의 핵심입니다. 먼저 현재 로드된 정책을 확인한 후, 사용되지 않는 규칙을 제거해야 합니다.
현재 로드된 정책 확인
seinfo -r
이 명령어를 사용하면 현재 로드된 정책을 확인할 수 있으며, 불필요한 정책이 있는지 점검할 수 있습니다.
특정 도메인 제거 예제
예를 들어, my_unused_domain
이 필요 없는 경우 다음과 같이 제거할 수 있습니다.
rm -rf device/vendor/sepolicy/private/my_unused_domain.te
rm -rf device/vendor/sepolicy/private/my_unused_domain.fc
이후, 정책을 다시 빌드하여 반영합니다.
mmma system/sepolicy
2.2. 도메인 및 파일 컨텍스트 최소화
파일 컨텍스트와 도메인을 최소화하는 것이 성능 최적화의 핵심입니다. file_contexts
에서 불필요한 설정을 정리합니다.
예를 들어, 특정 바이너리(/vendor/bin/my_binary
)의 보안 컨텍스트를 줄이고자 할 때 다음과 같이 설정할 수 있습니다.
/vendor/bin/my_binary u:object_r:system_exec:s0
이렇게 하면 필요 이상으로 많은 도메인을 생성하지 않고도 실행할 수 있도록 제한할 수 있습니다.
2.3. allow
규칙 최적화
allow
규칙을 최소화하여 정책을 최적화할 수 있습니다. 예를 들어, 필요하지 않은 도메인 간의 권한을 제거할 수 있습니다.
기존 정책에서 다음과 같은 코드가 있다고 가정합니다.
allow my_app_domain system_server:service_manager find;
allow my_app_domain system_server:service_manager call;
이 경우 call
권한이 불필요하다면 다음과 같이 수정할 수 있습니다.
allow my_app_domain system_server:service_manager find;
이처럼 allow
규칙을 줄이면, 필요 이상으로 많은 권한을 부여하지 않으면서 정책을 단순화할 수 있습니다.
2.4. neverallow
규칙을 신중하게 사용
neverallow
규칙은 보안 정책을 강화하는 데 유용하지만, 과도한 사용은 정책 충돌을 유발할 수 있습니다. 불필요한 neverallow
규칙을 줄이면서 보안성을 유지해야 합니다.
예를 들어, 다음과 같은 neverallow
규칙이 있다면:
neverallow my_app_domain self:process execmem;
이 규칙이 정말 필요한지 확인하고, 실행 메모리 변경이 필요한 경우 execmem
을 허용하는 방향으로 조정해야 합니다.
2.5. audit2allow
를 활용한 불필요한 허용 방지
audit2allow
도구를 사용하여 실제 시스템에서 불필요한 허용을 줄일 수 있습니다.
다음 명령을 실행하면 SELinux 로그를 분석하고 최적화된 정책을 생성할 수 있습니다.
adb logcat -d | grep "avc: denied" | audit2allow -p policy
이렇게 하면 필요하지 않은 정책을 제거하고, 적절한 최소한의 정책을 유지할 수 있습니다.
3. SELinux 정책 최적화 실습 예제
3.1. 불필요한 정책 줄이기
다음은 기존의 불필요한 정책을 제거하고 최적화하는 예제입니다.
기존 정책 (최적화 전)
type my_app_data, file_type;
allow my_app_domain my_app_data:file read;
allow my_app_domain my_app_data:file write;
allow my_app_domain my_app_data:file create;
allow my_app_domain my_app_data:file unlink;
최적화 후 정책
type my_app_data, file_type;
allow my_app_domain my_app_data:file { read write };
이처럼 create
, unlink
가 필요하지 않은 경우 제거하면 정책이 더 단순해지고 유지보수가 쉬워집니다.
4. 결론
SELinux 정책 최적화는 보안을 유지하면서도 시스템 성능을 향상시키는 중요한 과정입니다. 이를 위해 최소 권한 원칙을 준수하고, 불필요한 정책을 제거하며, 도메인과 파일 컨텍스트를 최소화하는 것이 중요합니다.
이번 포스팅에서 소개한 기법을 활용하면 보다 가볍고 효율적인 SELinux 정책을 구성할 수 있습니다. SELinux 정책을 지속적으로 모니터링하고 개선하여, 보안성과 성능을 동시에 확보하시길 바랍니다.
'Android > Seploicy' 카테고리의 다른 글
Android 10~14 버전별 SELinux 정책 변화 분석 (0) | 2025.05.16 |
---|---|
사용자 정의 SELinux 정책이 AOSP 보안 가이드라인을 준수하는지 검토하는 방법 (0) | 2025.05.15 |
Sepolicy neverallow 정책을 활용한 보안 강화 (0) | 2025.05.13 |
dmesg와 logcat을 활용한 SELinux 디버깅 (0) | 2025.05.12 |
audit2allow를 활용한 SELinux 정책 생성 및 검증 (0) | 2025.05.11 |