시스템 및 커널 보안

운영체제 수준에서 Android 플랫폼은 다른 프로세스에서 실행되는 애플리케이션 간의 보안 통신을 가능하게 하는 안전한 프로세스 간 통신(IPC) 기능과 Linux 커널의 보안을 제공합니다. 이러한 OS 수준 보안 기능은 네이티브 코드까지도 애플리케이션 샌드박스에서 제한하게 합니다. 이 코드가 포함된 애플리케이션 동작의 결과인지, 아니면 애플리케이션 취약점의 악용인지에 관계없이 시스템은 악성 애플리케이션이 다른 애플리케이션, Android 시스템 또는 기기 자체를 손상시키지 못하도록 설계되었습니다. 기기에서 커널을 강화하기 위해 취할 수 있는 조치는 커널 구성을 참조하세요. 필수 설정에 관해서는 Android 호환성 정의 문서(CDD)를 참조하세요.

Linux 보안

Android 플랫폼의 기초는 Linux 커널입니다. Linux 커널은 수년간 널리 사용되어 왔으며 보안에 민감한 수백만 개의 환경에서 사용되고 있습니다. Linux는 수천 명의 개발자가 끊임없이 연구하고 공격받고 문제를 해결한 역사를 통해 많은 기업과 보안 전문가들이 신뢰하는 안정적이고 안전한 커널이 되었습니다.

Linux 커널은 모바일 컴퓨팅 환경의 기반으로서 Android에 다음과 같은 몇 가지 핵심 보안 기능을 제공합니다.

  • 사용자 기반 권한 모델
  • 프로세스 분리
  • 보안 IPC를 위한 확장 가능 메커니즘
  • 커널에서 불필요하고 안전하지 않을 가능성이 있는 부분을 삭제하는 기능

다중 사용자 운영체제인 Linux 커널의 기본적인 보안 목표는 사용자 리소스를 서로 분리하는 것입니다. Linux 보안 철학은 사용자 리소스를 서로에게서 보호하는 것입니다. 따라서 Linux는

  • 사용자 A가 사용자 B의 파일을 읽지 못하게 합니다.
  • 사용자 A가 사용자 B의 메모리를 소진하지 못하게 합니다.
  • 사용자 A가 사용자 B의 CPU 리소스를 소진하지 못하게 합니다.
  • 사용자 A가 사용자 B의 기기(예: 전화, GPS, 블루투스)를 소진하지 못하게 합니다.

애플리케이션 샌드박스

Android의 애플리케이션 보안은 앱을 서로 분리하고 앱과 시스템을 악성 앱에서 보호하는 애플리케이션 샌드박스에서 시행합니다. 자세한 내용은 애플리케이션 샌드박스를 참조하세요.

시스템 파티션 및 안전 모드

시스템 파티션은 Android의 커널뿐 아니라 운영체제 라이브러리, 애플리케이션 런타임, 애플리케이션 프레임워크, 애플리케이션도 포함합니다. 이 파티션은 읽기 전용으로 설정됩니다. 사용자가 기기를 안전 모드로 부팅하면 기기 소유자가 타사 애플리케이션을 수동으로 시작할 수 있습니다(기본적으로 실행되지는 않음).

파일 시스템 권한

UNIX 스타일 환경에서는 파일 시스템 권한을 통해 한 사용자가 다른 사용자의 파일을 변경하거나 읽을 수 없게 합니다. Android의 경우 각 애플리케이션은 자체 사용자로 실행됩니다. 개발자가 파일을 다른 애플리케이션과 명시적으로 공유하지 않으면 한 애플리케이션에서 만든 파일을 다른 애플리케이션에서 읽거나 변경할 수 없습니다.

보안 강화 Linux

Android에서는 보안 강화 Linux(SELinux)를 사용하여 액세스 제어 정책을 적용하고 프로세스에 강제 액세스 제어(mac)를 설정합니다. 자세한 내용은 Android의 보안 강화 Linux를 참조하세요.

자체 검사 부팅

Android 6.0 이상에서는 자체 검사 부팅 및 device-mapper-verity를 지원합니다. 자체 검사 부팅을 통해 신뢰할 수 있는 하드웨어 루트에서 시스템 파티션에 이르는 기기 소프트웨어의 무결성을 보장합니다. 부팅하는 동안 각 단계에서는 암호를 실행하기 전에 다음 단계의 무결성과 진정성을 암호화 방식으로 확인합니다.

Android 7.0 이상에서는 엄격하게 시행되는 자체 검사 부팅을 지원하므로 보안 침해된 기기는 부팅되지 않습니다.

자세한 내용은 자체 검사 부팅을 참조하세요.

암호화

Android에서는 애플리케이션이 사용할 수 있는 일련의 암호화 API를 제공합니다. 이 API에는 AES, RSA, DSA, SHA와 같이 표준 및 일반적으로 사용되는 암호화 프리미티브의 구현이 포함됩니다. 또한 API는 SSL 및 HTTPS와 같은 더 높은 수준의 프로토콜에 제공됩니다.

Android 4.0에는 애플리케이션이 비공개 키 및 인증서 체인을 위해 시스템 사용자 인증 정보 저장소를 사용할 수 있는 KeyChain 클래스가 도입되었습니다.

기기 루팅

기본적으로 Android에서는 커널과 핵심 애플리케이션의 소규모 하위 집합만 루트 권한으로 실행됩니다. Android는 루트 권한을 지닌 사용자나 애플리케이션이 운영체제, 커널 또는 기타 애플리케이션을 수정하는 것을 막지 않습니다. 일반적으로 루트에는 모든 애플리케이션과 모든 애플리케이션 데이터에 대한 전체 액세스 권한이 있습니다. Android 기기의 권한을 변경하여 애플리케이션에 루트 액세스 권한을 부여하면 악성 애플리케이션에 대한 보안 노출 가능성과 애플리케이션의 잠재적 결함이 증가합니다.

Android 플랫폼을 사용하는 개발자에게는 자신이 소유한 Android 기기를 수정할 수 있는 권한이 중요합니다. 다수의 Android 기기 사용자에게는 대체 운영체제 설치를 허용하기 위해 부트로더를 잠금 해제할 수 있는 권한이 있습니다. 이러한 대체 운영체제에서는 소유자가 애플리케이션 및 시스템 구성요소를 디버깅할 목적으로 루트에 액세스하거나 Android API가 애플리케이션에 제공하지 않는 기능에 액세스하도록 허용할 수 있습니다.

어떤 기기에서는 기기 및 USB 케이블을 물리적으로 제어할 권한이 있는 사람은 사용자에게 루트 권한을 부여하는 새 운영체제를 설치할 수 있습니다. 기존 사용자 데이터를 보안 침해에서 보호하기 위해 부트로더 잠금 해제 메커니즘에서는 잠금 해제 단계의 일부로 부트로더가 기존 사용자 데이터를 삭제할 것을 요구합니다. 커널 버그 또는 보안 허점을 악용하여 얻은 루트 액세스는 이러한 보호를 우회할 수 있습니다.

기기에 저장된 키로 데이터를 암호화해도 애플리케이션 데이터를 루트 사용자로부터 보호할 수 없습니다. 애플리케이션은 서버나 사용자 비밀번호와 같이 기기 외부에 저장된 키를 이용한 암호화를 통해 데이터 보호 레이어를 추가할 수 있습니다. 이 방법으로 키가 없을 때 임시 보호를 제공할 수 있지만 어느 시점에는 키를 애플리케이션에 제공해야 하고, 그러면 루트 사용자가 애플리케이션에 액세스할 수 있게 됩니다.

루트 사용자로부터 데이터를 보호하기 위한 더 강력한 접근 방법은 하드웨어 솔루션을 사용하는 것입니다. OEM에서는 특정 유형의 콘텐츠(예: 동영상 재생을 위한 DRM 또는 Google 월렛을 위한 NFC 관련 신뢰할 수 있는 저장소)에 대한 액세스 권한을 제한하는 하드웨어 솔루션 구현을 선택할 수 있습니다.

분실하거나 도난당한 기기의 경우 Android 기기의 전체 파일 시스템 암호화 기능에서는 기기 비밀번호를 사용하여 암호화 키를 보호합니다. 따라서 사용자의 기기 비밀번호 없이 사용자 데이터에 액세스하기 위해 부트로더나 운영체제를 수정하는 것만으로는 불충분합니다.

사용자 보안 기능

파일 시스템 암호화

Android 3.0 이상에서는 전체 파일 시스템 암호화를 제공하므로 모든 사용자 데이터를 커널에서 암호화할 수 있습니다.

Android 5.0 이상에서는 전체 디스크 암호화를 지원합니다. 전체 디스크 암호화는 사용자 기기의 비밀번호로 보호되는 단일 키를 사용하여 기기의 사용자 데이터 파티션 전체를 보호합니다. 부팅 시 사용자는 디스크의 어느 부분이든 사용자 인증 정보를 제공해야 액세스할 수 있습니다.

Android 7.0 이상에서는 파일 기반 암호화를 지원합니다. 파일 기반 암호화를 사용하면 개별적으로 잠금 해제 가능한 여러 키를 사용하여 여러 파일을 암호화할 수 있습니다.

파일 시스템 암호화 구현에 관한 자세한 내용은 암호화 섹션을 참조하세요.

비밀번호 보호

기기에 액세스 권한을 제공하기 전에 Android에서 사용자가 제공한 비밀번호를 확인하도록 설정할 수 있습니다. 이 비밀번호는 기기의 무단 사용을 방지하는 것 외에도 전체 파일 시스템 암호화용 암호화 키를 보호합니다.

기기 관리자는 비밀번호나 비밀번호 복잡성 규칙 사용을 요구할 수 있습니다.

기기 관리

Android 2.2 이상의 경우 시스템 수준에서 기기를 관리할 수 있는 Android Device Administration API를 제공합니다. 예를 들어 내장 Android 이메일 애플리케이션에서는 API를 사용하여 Exchange 지원을 강화합니다. Exchange 관리자는 이메일 애플리케이션을 통해 기기 전반에 영숫자 비밀번호 또는 숫자 PIN 등의 비밀번호 정책을 시행할 수 있습니다. 관리자는 분실하거나 도난당한 휴대전화를 원격 초기화(즉 출고 시 기본값으로 복원)할 수도 있습니다.

이러한 API는 Android 시스템에 포함된 애플리케이션 외에도 기기 관리 솔루션의 타사 제공업체에서 사용할 수 있습니다. API에 관한 자세한 내용은 기기 관리에서 확인할 수 있습니다.