운영체제 수준에서 Android 플랫폼은 다른 프로세스에서 실행되는 앱 간의 보안 통신을 가능하게 하는 안전한 프로세스 간 통신 (IPC) 기능과 Linux 커널의 보안을 제공합니다. 이러한 OS 수준 보안 기능으로 인해 애플리케이션 샌드박스가 네이티브 코드까지 제한할 수 있습니다. 포함된 앱 동작으로 인해 코드가 발생하든 아니면 앱 취약점 악용으로 인해 발생하든, 시스템은 악성 앱이 다른 앱, Android 시스템 또는 기기 자체를 손상시키지 못하도록 설계되었습니다. 필수 설정에 관해서는 Android 호환성 정의 문서 (CDD)를 참고하세요.
Linux 보안
Android 플랫폼의 기초는 Linux 커널입니다. Linux 커널은 수년간 널리 사용되어 왔으며 보안에 민감한 수백만 개의 환경에서 사용되고 있습니다. Linux는 수천 명의 개발자가 끊임없이 연구하고 공격받고 문제를 해결한 역사를 통해 많은 기업과 보안 전문가들이 신뢰하는 안정적이고 안전한 커널이 되었습니다.
Linux 커널은 모바일 컴퓨팅 환경의 기반으로서 Android에 다음과 같은 몇 가지 핵심 보안 기능을 제공합니다.
- 사용자 기반 권한 모델
- 프로세스 분리
- 보안 IPC를 위한 확장 가능 메커니즘
- 커널에서 불필요하고 안전하지 않을 가능성이 있는 부분을 삭제하는 기능
다중 사용자 운영체제인 Linux 커널의 기본적인 보안 목표는 사용자 리소스를 서로 분리하는 것입니다. Linux의 보안 철학은 사용자 리소스를 서로에게서 보호하는 것입니다.
- 사용자 A가 사용자 B의 파일을 읽지 못하게 합니다.
- 사용자 A가 사용자 B의 메모리를 소진하지 못하게 합니다.
- 사용자 A가 사용자 B의 CPU 리소스를 소진하지 못하게 합니다.
- 사용자 A가 사용자 B의 기기 (예: 전화, GPS, 블루투스)를 소진하지 못하게 합니다.
애플리케이션 샌드박스
Android의 앱 보안은 앱을 서로 분리하고 앱과 시스템을 악성 앱으로부터 보호하는 애플리케이션 샌드박스에서 시행합니다. 자세한 내용은 애플리케이션 샌드박스를 참고하세요.
시스템 파티션 및 안전 모드
다양한 무결성 보호 파티션에는 Android의 커널은 물론 운영체제 라이브러리, 앱 런타임, 앱 프레임워크, 앱이 포함됩니다. 이 파티션은 읽기 전용으로 설정됩니다. 사용자가 기기를 안전 모드로 부팅하면 기기 소유자가 서드 파티 앱을 수동으로 시작할 수 있습니다(기본적으로 실행되지는 않음).
파일 시스템 권한
UNIX 스타일 환경에서는 파일 시스템 권한을 통해 한 사용자가 다른 사용자의 파일을 변경하거나 읽을 수 없게 합니다. Android의 경우 각 앱은 자체 사용자로 실행됩니다. 개발자가 파일을 다른 앱과 명시적으로 공유하지 않는 한 한 앱에서 만든 파일을 다른 앱에서 읽거나 변경할 수 없습니다.
보안 강화 Linux
Android에서는 보안 강화 Linux(SELinux)를 사용하여 액세스 제어 정책을 적용하고 프로세스에 강제 액세스 제어(mac)를 설정합니다. 자세한 내용은 Android의 보안 강화 Linux를 참고하세요.
자체 검사 부팅
Android 7.0 및 이후 버전에서는 엄격하게 시행되는 자체 검사 부팅을 지원하므로 보안 침해된 기기는 부팅되지 않습니다. 자체 검사 부팅을 통해 신뢰할 수 있는 하드웨어 루트에서 시스템 파티션에 이르는 기기 소프트웨어의 무결성을 보장합니다. 부팅하는 동안 각 단계에서는 암호를 실행하기 전에 다음 단계의 무결성과 진정성을 암호화 방식으로 확인합니다.
자세한 내용은 자체 검사 부팅을 참고하세요.
암호화
Android에서는 앱이 사용할 수 있는 일련의 암호화 API를 제공합니다. 이 API에는 AES, RSA, DSA, SHA와 같이 표준 및 일반적으로 사용되는 암호화 프리미티브의 구현이 포함됩니다. 또한 API는 SSL 및 HTTPS와 같은 더 높은 수준의 프로토콜에 제공됩니다.
Android 4.0에는 앱이 비공개 키 및 인증서 체인을 위해 시스템 사용자 인증 정보 저장소를 사용할 수 있는 KeyChain 클래스가 도입되었습니다.
기기 루팅
기본적으로 Android에서는 커널과 핵심 서비스의 소규모 하위 집합만 루트 권한으로 실행됩니다. SELinux는 루트로 실행되는 사용자 공간 프로세스에 여전히 제약을 적용합니다. 자체 검사 부팅을 실행하면 루트 권한이 있는 사용자나 서비스가 운영체제를 영구적으로 수정하지 못하도록 예방할 수 있습니다.
Android 플랫폼을 사용하는 개발자에게는 자신이 소유한 Android 기기를 수정할 수 있는 권한이 중요합니다. 다수의 Android 기기 사용자에게는 대체 운영체제 설치를 허용하기 위해 부트로더를 잠금 해제할 수 있는 권한이 있습니다. 이러한 대체 운영체제에서는 소유자가 앱 및 시스템 구성요소를 디버깅할 목적으로 루트에 액세스하거나 Android API가 앱에 제공하지 않는 기능에 액세스하도록 허용할 수 있습니다.
어떤 기기에서는 기기 및 USB 케이블을 물리적으로 제어할 권한이 있는 사람이 사용자에게 루트 권한을 부여하는 새 운영체제를 설치할 수 있습니다. 기존 사용자 데이터를 보안 침해에서 보호하기 위해 부트로더 잠금 해제 메커니즘에서는 잠금 해제 단계의 일부로 부트로더가 기존 사용자 데이터를 삭제할 것을 요구합니다. 커널 버그 또는 보안 허점을 악용하여 얻은 루트 액세스는 이러한 보호를 우회할 수 있습니다.
기기에 저장된 키로 데이터를 암호화해도 루팅된 기기의 루트 사용자로부터 앱 데이터를 보호할 수 없습니다. 앱은 서버나 사용자 비밀번호와 같이 기기 외부에 저장된 키를 이용한 암호화를 통해 데이터 보호 레이어를 추가할 수 있습니다. 이 방법으로 키가 없을 때 임시 보호를 제공할 수 있지만 어느 시점에는 키를 앱에 제공해야 하고, 그러면 루트 사용자가 앱에 액세스할 수 있게 됩니다.
루트 사용자로부터 데이터를 보호하기 위한 더 강력한 접근 방법은 하드웨어 솔루션을 사용하는 것입니다. OEM에서는 특정 유형의 콘텐츠(예: 동영상 재생을 위한 DRM 또는 Google 월렛을 위한 NFC 관련 신뢰할 수 있는 저장소)에 대한 액세스 권한을 제한하는 하드웨어 솔루션 구현을 선택할 수 있습니다. 기기를 분실 또는 도난당한 경우 저장소 암호화를 사용하면 사용자의 잠금 화면 사용자 인증 정보를 알지 못하는 경우 사용자 데이터에 액세스할 수 없습니다.
사용자 보안 기능
저장소 암호화
CDD에서는 Android 10 및 이후 버전으로 출시되는 모든 기기 및 Android 6.0 및 이후 버전으로 출시되는 대부분의 기기에 저장소 암호화를 기본적으로 탑재할 것을 요구합니다.
Android에서는 현재 파일 기반의 암호화와 메타데이터 암호화를 결합하여 저장소 암호화를 구현합니다. 파일 기반의 암호화는 디렉터리마다 서로 다른 키를 사용하여 사용자 데이터 파티션의 파일 내용과 이름을 투명한 방식으로 암호화합니다. 사용자 인증 정보 암호화 및 기기 암호화가 이루어진 저장소 디렉터리를 직장 프로필을 비롯한 모든 사용자에게 제공합니다.
메타데이터 암호화는 파일 기반 암호화를 보완합니다. 메타데이터 암호화는 사용자 데이터 파티션에서 파일 기반 암호화로 암호화되지 않은 모든 블록을 암호화하며, 이때 사용되는 키는 사용자 잠금 화면 사용자 인증 정보에는 바인딩되지 않지만 자체 검사 부팅에 의해 보호됩니다.
잠금 화면 사용자 인증 정보 보호
기기에 액세스 권한을 제공하기 전에 Android에서 사용자가 제공한 잠금 화면 사용자 인증 정보(PIN, 비밀번호, 패턴)를 확인하도록 구성할 수 있습니다. 이 잠금 화면 사용자 인증 정보는 기기의 무단 사용을 방지하는 것 외에도 사용자 인증 정보로 암호화된 데이터의 암호화 키를 보호합니다. 기기 관리자가 잠금 화면 사용자 인증 정보나 사용자 인증 정보 복잡성 규칙을 사용하도록 요구할 수 있습니다.
기기 관리
Android 2.2 이상의 경우 시스템 수준에서 기기를 관리할 수 있는 Android Device Administration API를 제공합니다. 예를 들어 내장 Android 이메일 앱은 API를 사용하여 Exchange 지원을 개선합니다. Exchange 관리자는 이메일 앱을 통해 기기 전반에 영숫자 비밀번호 또는 숫자 PIN 등의 잠금 화면 사용자 인증 정보 정책을 시행할 수 있습니다. 관리자는 분실하거나 도난당한 핸드셋을 원격 초기화(즉, 출고 시 기본값으로 복원)할 수도 있습니다.
이러한 API는 Android 시스템에 포함된 앱 외에도 서드 파티 기기 관리 솔루션 제공업체에서 사용할 수 있습니다. API에 관한 자세한 내용은 기기 관리에서 확인할 수 있습니다.