Android/Seploicy

Sepolicy neverallow 정책을 활용한 보안 강화

임베디드 친구 2025. 5. 13. 17:36
728x90
반응형

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 정책 적용 과정

  1. sepolicy 디렉터리에서 정책 파일을 수정하거나 추가
  2. 변경된 정책을 포함하여 전체 AOSP 빌드 수행
  3. 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 정책을 적극적으로 활용하고, 주기적으로 보안 정책을 점검하여 취약점을 최소화하는 것이 중요합니다.

728x90
반응형