[목차]

 

 

1. 안드로이드란

2. 안드로이드 구조

3. 안드로이드 파일 시스템

4. 안드로이드 데이터 저장 방식

5. 샌드박스

6. 루팅

 

 

출처: 안랩 (AhnLab) 솔루션서비스팀 오정훈 연구원

https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?curPage=1&menu_dist=2&seq=20640&dir_group_dist=0

 

 

 

 

 

1. 안드로이드란

 

 

안드로이드는

Open Handset Alliance에서 개발한

모바일 기기용 OS로, 구글을 비롯한 48+a 개의 하드웨어와 소프트웨어,

통신회사가 모바일 기기 공개표준개발을 목표로 결성한 단체이다.

 

안드로이드의 모든 소스코드는

오픈 소스 라이선스인 ‘아파치 라이선스(Apache License)’로

배포된다.

 

안드로이드는 모바일 기기를 위한 운영체제와 미들웨어,

핵심 애플리케이션들을 포함한 소프트웨어 스택(Stack)으로

정리할 수 있으며

 

현재까지 최신 버전인

Android 13 ‘티라미슈’가 나온 상태이다.

 

 

 

 

 

 

2. 안드로이드 구조

 

 

안드로이드는 크게 C 및 C++ 기반의 커널 영역

Java 기반의 애플리케이션 영역 등 두 가지로 나뉜다.

 

커널 영역은 Linux 2.6 커널 기반으로 작성돼 있으며,

애플리케이션 영역은 SDK(Software Development Kit) 형태로

개발용 도구와 API를 무상 제공하고 있다.

 

이미지 출처 : AhnLab

 

 

 

 

 

3. 안드로이드 파일 시스템

 

 

(1) DEX 파일과 Dalvik 가상머신

 

Windows에 실행 파일인 PE(Portable Executable) 파일이 있듯,

안드로이드 환경에서는 실행 파일인 DEX(Dalvik Executable)

파일이 있다.

 

DEX 파일은 Java 코드로 작성돼 컴파일된 클래스 파일을

DX(Android dx tool) 도구를 사용해 변환한 파일인데

 

이 과정에서 Java 바이트 코드가 달빅 바이트 코드로 변환되며

여러 클래스 파일에 들어있는 중복된 코드들을 재사용하기 때문에

JAR(Java archive) 파일에 비해 필요한 공간이 절반 정도로 크게 줄어든다.

 

안드로이드는 이 DEX 파일을 달빅 가상머신 (Dalvik VM)에서 구동시킨다.

 

달빅 가상머신은 모바일 기기에서 용량이 작은 메모리를 사용해

실행 파일을 구동할 수 있게 최적화된 가상머신이며

동시에 여러 가상머신을 실행할 수 있도록 설계되어 있고

 

달빅 가상머신 상에서 수행되는 애플리케이션들은 각각

분리된 프로세스와 ID를 갖고 있으며 분리된 VM 영역에서 실행된다.

(안드로이드 OS는 실행되는 애플리케이션마다 각각의 가상머신을

생성해 구동)

 

아래 기술하겠지만 데이터 저장은

경량 관계형 데이터베이스 엔진인 SQLite를 사용해

애플리케이션의 데이터를 저장한다.

 

결국 안드로이드 OS는 실행되는 애플리케이션마다

각각의 가상머신을 생성해 구동시키게 된다.

 

 

 

 

 

(2) APK 파일

 

APK(Android Package File)는

안드로이드 애플리케이션의 설치 파일이다.

 

JAR 포맷의 변형된 형태이며

표준 ZIP 압축 포맷으로 돼 있어

압축 프로그램으로 내용을 확인할 수 있다.

 

기본 구조 크게

AndroidManifest.XML과

Classes.dex로 나뉘는데

이미지 출처 : AhnLab

 

 

AndroidManifest.xml 파일은

APK 내 최상위 폴더에 위치해 있으며

애플리케이션에 필요한 퍼미션(Permission)

설정 정보를 담고 있는데

 

주요 컴포넌트(Component) 즉,

Activity, Service, Broadcast Receiver, Content Provider

에 대한 동작 설정 정보도 포함하고 있다.

 

Classes.dex 파일은 앞서 언급한 DEX 파일로

애플리케이션 안의 모든 소스 코드를 내포하고 있다.

 

 


 

 

(3) 주요 시스템 마운트 포인트

 

안드로이드 표준 파티션은 7개로 구성되며

이미지 출처 : AhnLab

 

진단 및 포렌식 입장에서 중요한 파티션은

Userdata와 Sdcard 두 가지이다.

 

Userdata 파티션은

애플리케이션들이 생성하는 모든 데이터가 저장되는 파티션으로

연락처와 통화 기록, 문자메시지 정보뿐만 아니라,

일정, 메일, 인터넷 출입 기록, 다운로드 정보 등 다양한 정보가

들어있고

 

Sdcard 파티션은 외장 파티션으로

사진이나 음악 등 멀티미디어 데이터들이 저장되는 파티션이다.

 

 

 

 

 

4. 안드로이드 데이터 저장 방식

 

안드로이드 애플리케이션은 일반적으로

[/data/data/패키지명] 경로 아래에 데이터를 저장하는데

 

저장 방식은 크게 SQLite와 Preference, Local File

세 가지로 나뉘며 대부분 SQLite 데이터베이스를 사용한다.

 

SQLite는 소형 데이터베이스 엔진으로써,

일반적인 질의어 언어인 SQL을 사용해

테이블 정의와 데이터 접근을 수행하며

 

클라이언트 서버형이 아닌 애플리케이션이 직접

데이터베이스의 파일로 접근하는 방식을 택하기 때문에

데이터베이스로 접근하기 위한 관리자 아이디나

패스워드를 설정하지 않아도 되는 편의성이 있다.

 

보통 [/data/data/패키 지명’databases’] 아래에 저장된다.

이미지 출처 : AhnLab

 

 

Preference 저장 방식은

키와 값의 조합으로 데이터를 저장하는 구조다.

 

하나의 키에 하나의 값을 저장할 수 있다.

값으로 사용하는 유형에는 Boolean, Float, Int, Long, String

등이 있다.

 

Preference엔 이름을 붙일 수도 있으며

한 개의 애플리케이션은 여러 개의 Preference를 가질 수 있고

일반적으로 ‘shared_pref’ 폴더 아래에 XML 포맷으로 저장된다.

이미지 출처 : AhnLab

 

 

Local File

임의의 포맷에 문자열이나 이미지를 저장하는 방식이다.

SQLite, Preference 이외의 모든 데이터 저장 방식이 여기에 속하며

Cache나 files 폴더에 저장된다.

 

 

 


 

5. 샌드박스(Sandbox)

 

샌드박스는 애플리케이션이 설치되는 시점에

고유의 UID(User Indentifer), GID(Group Identifer)를 부여받아

각각의 권한으로 실행되는 영역을 뜻한다.

 

안드로이드에 설치된 App들은

자신이 생성한 데이터를 앞서 언급한 세 가지 방식을 통해 저장하는데

해당 데이터들은 샌드박스(Sandbox) 영역에서 관리되며

각 앱들은 서로의 샌드박스 영역을 침범할 수 없고

해당 데이터베이스 영역에는 해당 응용프로그램과

그 응용프로그램에 대한 관리자만 접근이 가능하다.

이미지 출처 : AhnLab

 

 

 

 

6. 루팅 (Rooting)

 

안드로이드 환경에서

최고 관리자 권한을 획득하는 단어이다.

 

안드로이드의 OS는

리눅스를 기반으로 만들어져 있기 때문에

권한 체계 역시 리눅스를 따르고 있으며

 

리눅스에서 root 권한은 곧 최상위

권한을 뜻하고 있기 때문에 해당 단어를

사용하고 있다.

 

루팅 된 단말기를 사용하는 경우

외장 메모리에 App 설치가 가능하며

멀치터치 제한을 해제할 수 있고,

오버클럭을 통한 기능 향상 등을

꾀할 수 있는데

 

진단하는 입장에서는

루팅을 통해 접근할 수 없는

주요 시스템 폴더에 접근할 수 있고

 

이를 통해 파일 추출 및

파일 시스템의 이미지 생성 등을

할 수 있게 된다.

 

 

 

 

 

728x90

+ Recent posts