Android는 Android 보안 모델의 일부로 보안 강화 Linux(SELinux)를 사용하여 루트 및 수퍼유저 권한으로 실행되는 프로세스(Linux 기능)를 포함한 모든 프로세스에 강제 액세스 제어(MAC)를 적용합니다. 많은 회사와 조직이 Android의 SELinux 구현에 기여했습니다. SELinux를 통해 Android는 시스템 서비스를 더 안전하게 보호하고 제한하며 애플리케이션 데이터 및 시스템 로그 액세스를 제어하고 악성 소프트웨어의 영향을 줄이며 휴대기기의 잠재적인 코드 결함을 방지할 수 있습니다.
SELinux는 기본 거부 원칙에 따라 작동합니다. 명시적으로 허용되지 않은 것은 거부됩니다. SELinux는 다음과 같이 두 가지 전체 모드로 작동할 수 있습니다.
- 허용 모드로, 허용 거부가 로깅되지만 적용되지 않습니다.
- 강제 적용 모드로, 허용 거부가 모두 로깅 및 강제 적용됩니다.
Android에는 강제 적용 모드의 SELinux와 AOSP에서 기본적으로 작동하며 상응하는 보안 정책이 포함됩니다. 강제 적용 모드에서는 허용되지 않는 작업이 방지되고 모든 위반 시도를 커널이 dmesg
및 logcat
에 로깅합니다. 개발할 때 이러한 오류를 사용하여 소프트웨어 및 SELinux 정책을 구체화한 후에 적용해야 합니다. 자세한 내용은 SELinux 구현을 참조하세요.
또한 SELinux는 도메인별 허용 모드를 지원합니다. 이 모드에서는 특정 도메인(프로세스)을 허용으로 설정하고 시스템의 나머지 부분을 전체 적용 모드로 설정할 수 있습니다. 도메인은 단순히 보안 정책의 프로세스를 알려 주는 라벨로서 동일한 도메인으로 라벨이 지정된 모든 프로세스는 보안 정책에 따라 동일하게 처리됩니다. 도메인별 허용 모드에서는 새 서비스를 위해 점차 증가하는 시스템 및 정책 개발에 SELinux를 점진적으로 적용하면서 시스템의 나머지 부분을 적용 상태로 유지할 수 있습니다.
백그라운드
Android 보안 모델은 애플리케이션 샌드박스 개념에 부분적으로 기반합니다. 각 애플리케이션은 자체 샌드박스에서 실행됩니다. Android 4.3 이전에는 설치 시 각 애플리케이션의 고유한 Linux UID를 생성하여 샌드박스를 정의했습니다. Android 4.3 이상은 SELinux를 사용하여 Android 애플리케이션 샌드박스의 경계를 더욱 자세히 정의합니다.
Android 5.0 이상에서 SELinux는 Android 4.3의 허용 버전 및 Android 4.4의 부분 적용을 바탕으로 완전히 적용됩니다.
이번 변경에 따라 Android에서 중요한 도메인 몇 개(installd
, netd
, vold
, zygote
)에서 전체 도메인(60개 이상)으로 적용 범위가 확대되었습니다. 구체적인 사항은 다음과 같습니다.
- Android 5.x 이상에서는 모든 도메인이 강제 적용 모드로 설정됩니다.
init
이외의 프로세스는init
도메인에서 실행될 수 없습니다.- 모든 제네릭 거부(
block_device
,socket_device
,default_service
)는 기기에 특수 도메인이 필요하다는 것을 나타냅니다.
Android 6.0에서는 정책 허용 범위를 줄이는 방식으로 시스템을 강화하여 보다 효과적인 사용자 간 격리, IOCTL 필터링, 노출된 서비스의 위협 감소, SELinux 도메인의 더 긴밀한 연결, 매우 제한된 /proc
액세스를 포함했습니다.
Android 7.0에서는 SELinux 구성을 업데이트하여 애플리케이션 샌드박스에 추가적인 잠금 기능을 제공하고 공격 표면을 줄였습니다. 또한 이 버전은 모놀리식 미디어 서버 스택을 작은 프로세스로 분할하여 권한 범위를 줄였습니다. 자세한 내용은 추가 Linux 커널 방어 조치를 통한 Android 보호 및 미디어 스택 강화를 참조하세요.
Android 8.0에서는 하위 시스템 공급업체 코드와 Android 시스템 프레임워크를 구분하는 Treble과 호환되도록 SELinux를 업데이트했습니다. 이 버전은 SELinux 정책을 업데이트하여 기기 제조업체와 SOC 공급업체가 정책 일부를 업데이트하고 이미지(vendor.img
, boot.img
등)를 빌드하여 플랫폼과 독립적으로 이미지를 업데이트하거나 이미지와 독립적으로 플랫폼을 업데이트하도록 허용합니다.
더 높은 버전 또는 최신 버전의 플랫폼이나 프레임워크가
기기에서 실행될 수 있지만 반대의 경우는 지원되지 않습니다.
공급업체 이미지(vendor.img/odm.img
)는 플랫폼(system.img
)보다
최신 버전일 수 없습니다. 따라서 최신 플랫폼 버전에서 플랫폼 SELinux
정책이 공급업체 SELinux 정책보다 최신 버전이기 때문에
SELinux 호환성 문제가 발생할 수 있습니다. Android 8.0 모델은 불필요한 동시 OTA를 방지하기 위해 호환성 유지 메서드를 제공합니다.
추가 리소스
유용한 SELinux 정책을 구성하는 방법은 다음 리소스를 참고하세요.
- SELinux 노트, SELinux에 대한 최신 참조입니다. 이 문서에는 정책 언어, 각 키워드의 의미, 보안 컨텍스트 계산 방법이 자세히 설명되어 있습니다.
- SELinux 정책 시행을 위한 시각적 안내 가이드
- Linux 보안 향상 사항
- 보안이 강화된(SE) Android: Android에 유연한 MAC 사용
- Linux 보안 모듈로 SELinux 구현
- SELinux 정책 구성