안드로이드 루팅과 APK의 동작, APK 내부 파일 구조를 확인한다.
1. 안드로이드 루팅
안드로이드에 대한 설명을 하기전 어플리케이션 샌드박스에 대한 설명을 시작한다.
안드로이드 샌드박스는 안드로이드 운영 체제에서 애플리케이션을 격리하고 보호하기 위한 보안 메커니즘이다.
안드로이드 샌드박스는 어플리케이션 격리, 권한 제어, 리소스 관리, 보안 강화 등의 이유로 사용한다.
어플리케이션을 감싸는 하나의 막으로 생각하길 바란다.
고로 진단을 위해 외부에서의 접근을 위해서는 샌드박스를 벗어나기 위해 리눅스 커널을 손상시킨다.
(즉, 루팅을 해야한다.)
1.1 안드로이드 루팅의 단점
1. 디바이스의 보안을 손상시킨다.
- 기본적으로 앱은 샌드박스내에서 실행된다.
- 루팅된 디바이스에서 루트 접근 권한이 있는 악성 앱에는 이 제한이 없어 실행중인 다른 앱에서 데이터 조회가 가능하다.
2. 무효 보증
- 루팅된 디바이스는 보증이 무효화된다.
- 루팅한 후에는 보증기간 중이어도 수리비용을 지불할 수 있다.
2. 안드로이드 앱 진단 환경 이해
2.1 JVM & DVM
자바 가상 머신(Java Virtual Machine, JVM)
- "자바 바이트 코드"를 실행하기 위한 자바 가상머신
- "자바 바이트 코드:는 JVM이 이해할 수 있는 언어로 JVM만 설치되어 있으면 어느 운영체제에서도 동작 가능하다.
달빅 가상 머신(Dalvic Virtual Machine, DVM)
- "안드로이드 어플리케이션"을 실행하기 위한 달빅 가상 머신
2.2 DVM
달빅 가상 머신
안드로이드 애플리케이션을 실행하기 위한 달빅 가상 머신
모바일 디바이스 환경에 최적화되어 개발된 가상 머신으로 낮은 메모리에서 실행되도록 설계
- 배터리 수명
- 성능 문제
DEX 컴파일러가 class 파일을 dex 파일로 변경하여 DVM에서 실행 가능하게 생성한다.
- .class 파일은 자바 바이트 코드
- .java 파일은 자바 소스 코드
2.2 JVM과 DVM 의 비교
스택 기반 과 레지스터 기반의 차이
레지스터 기반이란?
- 연산할 때 레지스터 사용
- CPU 레지스터를 기반으로 피연산자가 저장
- 간단한 명령으로 진행한다.
2.3 ART
안드로이드 런타임(Android Runtime, ART)
퍼포먼스 개선 등을 위해 구글이 DVM에서 ART로 변경
ART 방식에서는 JIT과 AOT 컴파일을 모두 사용한다.
JIT( JUST-In-Time ) 컴파일
- 앱 최초 실행 시에 컴파일을 수행하여, H/W 부하로 부정적인 영향을 미침
- 장점 : 용량이 낮아지고, 설치 속도가 빨라짐
- 단점 : 실행속도가 느려지고 배터리, CPU 사용이 높아짐
AOT( Ahead-of-time) 컴파일
- 앱 설치 시점에서 컴파일을 수행하여, 성능을 2배 향상 시킴
- 장점 : 실행 속도가 높아지고, 배터리와 CPU 사용이 낮아짐
- 단점 : 용량이 높아지고, 설치속도가 느려짐
2.4 JVM & DVM & ART 비교
- 자바와 관련된 컴파일러가 실행되며 ByteCode (.class) 파일로 넘기게 된다.
- 그 후, Android DX tool 을 사용해서 dex파일로 만들게 되며, 이 파일은 소스코드 파일이다.
- dex 파일에 권한과 리소스 파일이 더해져 APK 파일이 생성된다.
- 자바로 된 파일은 JAR 파일로 배포가 된다.
- JAR의 경우 JVM 가상머신에서 동작한다.
- APK는 ART와 DVM 방식으로 나뉘어지며, DVM의 경우 JIT 이며, ART의 경우 AOT와 JIT 두가지로 나뉜다.
3. 안드로이드 앱 구조
안드로이드 앱 확장자는 APK로 다양한 파일과 폴더의 압축이다.
하단의 그림은 압축되지 않은 APK 파일의 폴더 구조이다.
APK 파일 내부에는 위와 파일을 가지고 있다.
3.1 안드로이드 파일 구조
1. AndroidManifest.xml : 앱에 대한 구성 세부 정보가 포함된 파일
( 디코딩을 통해 권한 정보를 확인 할 수 있다.)
2. classes.dex : 개발자가 작성한 소스코드에서 생성된 Dalvik Bytecode 가 포함된다.
( 달빅 바이트 코드를 디컴파일 해서 .class 파일 .java 파일로 역순으로 컴파일 한다. )
3. resource.arsc, res : 앱에 포함되어있는 자원 파일로 그림, 아이콘과 같은 이미지 등을 적재하는 장소다.
4. META-INF : 매니패스트 파일과 인증서 등이 포함되어 있는 파일이다.
5. assets : 음악이나 비디오와 같은 미디어 파일을 적재하는 장소다.
3.2 AndroidManifest.xml 구성요소
1. <manifest> : AndriodManifest.xml 파일의 루트 요소
<application> 요소를 포함해야 하며, xmls:android 및 package 속성을 지정함
2. <application> : 애플리케이션 선언으로, 어플리케이션 각 구성요소를 선언하고 모든 구성요소에 영향을 줄 수 있는 속성을 가진 하위 요소를 포함
3. <uses-permission> : 민감한 사용자 데이터 ( 연락처, SMS 등등) 또는 특정 시스템 기능( 카메라, 주소록 액세스 등등)에 엑세스하기 위한 권한을 선언
4. <activity> <service> <provider> <receiver> : 앱 컴포넌트에 대한 선언
[출처] 인프런 보안프로젝트 안드로이드 모바일 앱 모의해킹과 시큐어코딩
'앱 모의해킹 > 안드로이드' 카테고리의 다른 글
Frida(1) - 문법, 개념 이해 (0) | 2024.06.13 |
---|---|
InsecureBank 취약점 분석 (0) | 2024.06.04 |
Drozer 프레임워크 (0) | 2024.05.30 |
안드로이드 기본개념(3) (0) | 2024.05.29 |
안드로이드 기본개념(1) (0) | 2024.03.26 |