안드로이드 아키텍처
# 01. 안드로이드
안드로이드는 리눅스 기반의 운영체제로 Google(구글) 사에서 인수하여 다양한 device에서 사용된다.
2023년 12월 기준 글로벌 스마트폰 OS 중 구글의 안드로이드 점유율은 약 70%가량이며, 한국에서의 점유율은 69%에 달한다. 많이 사용되는 만큼 보안의 관점에서 안드로이드를 공부하고자 한다.
+) IOS와 안드로이드의 보안
보통 안드로이드가 IOS에 비해 보안에 취약할 것으로 생각된다.
이유1) 안드로이드의 오픈소스, IOS의 독점적 소유
이유2) 안드로이드를 사용하는 사용자가 많음.
-> 공격자의 입장에서 사용자도 많고, 오픈소스를 통해 면밀히 구조를 알 수 있다는 점에서 보안상 안드로이드가 더 취약할 수 있음.
# 02. 안드로이드 플랫폼 아키텍처
아래의 그림은 안드로이드 플랫폼의 주요 구성 요소들의 이미지이며 크게 리눅스 커널, 하드웨어 추상 레이어(HAL), 안드로이드 런타임, 네이티브 C/C++ 라이브러리, 자바 API 프레임워크, 애플리케이션이 있다.
1. 리눅스 커널(Linux Kernel)
안드로이드 플랫폼의 기반으로 보안상 이점을 가져다주고, 이외에도 메모리 관리, 프로세스 관리 등에 사용된다. 오디오, USB 등의 드라이버가 리눅스 커널에 구성되어 해당 드라이버들을 지원해 준다.
주의해야 하는 지점은 안드로이드 리눅스 커널은 유닉스 스타일의 사용자 권한 모델을 따르고 안드로이드에서는 각 애플리케이션이 사용자의 권한으로 실행되어 악의적으로 설계된 애플리케이션의 경우 이 권한을 이용하여 보안 위협이 발생할 수 있다고 한다.
2. Hardware Abstraction Layer(HAL)
안드로이드 프레임워크와 하드웨어 드라이버 사이의 중간 계층으로, Java API 프레임워크에 하드웨어 기능을 노출하는 표준화 인터페이스를 제공한다. 쉽게 안드로이드 프레임워크에서는 다양한 하드웨어(카메라, 블루투스 등) 버전, 제조사 등의 시스템을 지원해야 하는데 이를 위해 애초에 다양한 하드웨어의 표준화된 인터페이스를 제공할 수 있게 해준다.
또한 프레임워크 API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 안드로이드 시스템은 해당 하드웨어 구성요소에 대한 라이브러리 모듈을 로드한다. 즉 카메라, 블루투스 등의 하드웨어에 대해 드라이버를 포함하는 라이브러리 모듈을 로드하여 하드웨어와 통신하여 해당 기능을 사용하는 등의 프레임워크 API와 상호 작용을 수행한다.
3. 안드로이드 런타임
각 애플리케이션은 자체 프로세스 내에서 자체 Android 런타임(ART) 인스턴스로 실행된다. ART는 DEX(Dalvik Executable) 형식의 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성되었다. 가상머신을 통해 각 애플리케이션이 자신의 프로세스로 실행될 수 있다. 따라서 각 애플리케이션은 고유 사용자 ID가 부여되며 설치 시 할당받아 동작하게 된다.
4. 네이티브 C/C++ 라이브러리
안드로이드 시스템의 구성요소 및 서비스는 C, C++로 작성된 네이티브 라이브러리가 필요한 네이티브 코드에서 빌드된다. 또한 java 프레임워크 API를 통해 라이브러리의 기능을 앱에 노출하기도 한다. (주로 개발자들이 활용하는) 이러한 라이브러리들은 리눅스 커널 내에서 프로세스로 동작하는데 라이브러리에는 단지 장치에 여러 종류의 데이터를 처리하도록 하는 명령어들의 집합이다.
5. 자바 API 프레임워크
안드로이드 OS의 전체 기능의 묶음은 해당 API를 통해 접근이 가능하다. 이러한 API는 안드로이드 앱 제작에 필요한 기본 요소를 구성하며 기본 요소에는 다음 아래가 포함된다. (더 많다.)
뷰 시스템 | 목록, 그리드, 텍스트 상자, 버튼 등 앱의 UI 빌드에 사용 |
리소스 관리자 | 그래픽 및 레이아웃 파일과 같은 리소스에 대한 접근 |
활동 관리자 | 앱의 수명 주기 관리 및 공통 *작업 백 스택 제공 |
*작업 및 백스택
사용자가 앱에서 어떤 작업을 하려고 할 때 상호작용하는 활동의 모음으로 백 스택이라는 스택에 정렬이 됨.
ex) 사용자가 이메일 앱을 통해 메시지를 선택하면 해당 메시지를 볼 수 있는 새 활동이 열리는데 이 때의 새로운 활동이 백 스택에 추가된다. 이후 사용자가 '뒤로' 동작을 취하면 새 활동이 종료되고 스택에서 사라진다.
출처: https://developer.android.com/guide/components/activities/tasks-and-back-stack?hl=ko&_gl=1*4fjdth*_up*MQ..*_ga*MTY3OTcxNTcyNy4xNzExNTMyMTkx*_ga_6HH9YJMN9M*MTcxMTUzMjE5MC4xLjAuMTcxMTUzMjE5MC4wLjAuMA..
# 참고문헌 및 출처
글로벌 스마트폰 OS 점유율 그래픽: https://biz.chosun.com/itscience/ict/2023/12/28/KDY6QFRQRBDNDIQRSSAM5KZKUM/
안드로이드 플랫폼 아키텍처 이미지 및 내용:
https://developer.android.com/guide/platform?hl=ko
공부 교재:
안드로이드 모바일 앱 모의해킹