/**/

안드로이드폰의 기초개념: 앱 보안과 최소권한의 원칙

Posted by 약간의여유
2014. 11. 14. 10:29 IT인터넷/안드로이드폰

저는 안드로이드가 여러 모로 마음에 듭니다. 일단 그 개방성 덕분에 이미 스마트폰의 표준이 된 듯합니다. 지금 시판되는 스마트폰의 70% 이상은 안드로이드를 이용하고 있습니다.

안드로이드폰을 사용하면서 과연 안드로이트폰의 앱은 어떻게 작동하는지에 관해서 궁금한 점이 있었습니다. 구글에서는 안드로이드폰을 개발하는 개발자를 위해서 안드로이드폰 개발자 가이드를 제공하고 있습니다. 저는 가끔 이 개발자 가이드를 읽고 있습니다. 하지만 주로 기술적인 부분이라 사용자의 입장에서는 알 필요가 없는 부분이 많습니다. 개발자 가이드 중에서 사용자의 입장에서 알아두면 좋을 것 같은 안드로이드폰의 보안과 관련해서 가장 기초적인 개념을 알아봤습니다.

앱과 APK

안드로이드 앱은 자바 프로그램 언어로 작성됩니다. 안드로이드 SDK 도구는 프로그램 코드를 APK로 컴파일합니다. APK는 안드로이드 팩기지의 약자로 .apk라는 확장자를 갖는 아카이브 화일입니다. APK 화일은 안드로이드 앱의 모든 구성요소를 포함하면서 안드로이드 디바이스가 앱을 인스톨할 때 사용하는 화일 형식입니다.

디바이스에 일단 인스톨이 되면 각 안드로이드 앱은 자체 보안 샌드박스 안에서만 작동합니다.

앱마다 독립적인 프로세스 처리

  • 안드로이드 OS는 각 앱이 하나의 사용자로 취급되는 다중 사용자 리눅스 시스템입니다.
  • 디폴트로 안드로이드 시스템은 각 앱에 개별적인 리눅스 사용자 ID를 부여 합니다. 그 ID는 오직 시스템에서만 활용될 뿐 다른 앱에서는 관여할 수 없습니다. 시스템에서는 특정한 앱에 부여된 사용자 ID로만 그 앱에 관련된 모든 화일에 접근할 수 있도록 합니다.
  • 앱에서 명령을 처리하는 각 프로세스는 독자적인 가상기기(virtual machine: VM)를 갖고 있기 때문에 각 앱의 코드는 다른 앱과 독립되어 처리됩니다.
  • 디폴트로 각 앱은 각자의 리눅스 프로세스를 처리합니다. 앱의 구성요소가 실행될 필요가 있을 때 안드로이드는 그 프로세스를 실행하고, 그 프로세스가 필요 없게 되거나 다른 앱을 위해 메모리를 복구할 필요가 있을 때에는 해당 프로세스를 정지합니다.

이러한 방식에 따라 안드로이드 시스템은 최소 권한의 원칙(principle of least privilege)에 따라 운영됩니다.  최소 권한의 원칙이란 각 앱는 해당 업무를 처리하는 데 꼭 필요한 구성요소에만 접근할 수 있을 뿐 더 이상의 요소에는 접근할 수 없다는 것입니다. 이렇게 하면 각 앱은 허가받지 않은 시스템의 영역에는 접근할 수 없게 되어 보안상 안전한 환경을 조성할 수 있게 됩니다.

앱의 정보 공유와 시스템 자원 접근

하지만 필요한 경우에는 특정한 앱이 다른 앱과 데이터를 공유하거나 특정한 앱이 시스템의 자원에 접근하도록 하는 방법도 제공하고 있습니다.

  • 두 앱이 동일한 리눅스 사용자 ID를 갖도록 조정하는 것도 가능합니다. 이 경우에는 두 앱이 상대방의 화일에 접근할 수 있습니다. 시스템 자원을 보존하기 위해서 동일한 ID를 사용하는 앱들이 동일한 리눅스 프로세스를 실행하고 동일한 VM을 갖도록 할 수도 있습니다.
  • 앱이 사용자의 연락처, SMS 메시지, 외장 SD 카드, 카메라, 블루투스 등과 같은 디바이스 데이타에 접근하도록 허가권한을 부여할 수 있습니다. 모든 앱은 인스톨 시에 허가권한이 사용자에 의해 부여됩니다.