| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 아티팩트
- 포트스캔
- 9012
- 포렌식
- follina
- artifact
- CTF
- ReverseEngineering
- 자바입문
- 와이어샤크
- 소프트스퀘어드
- Burpsuite
- 버프스위트
- 백준
- 볼라틸리티
- baekjoon online judge
- 메모리포렌식
- 안드로이드리버싱
- 칼리리눅스
- 3wayhandshaking
- picoCTF
- 혼자공부하는자바
- 앱
- pico
- suninatas
- 문제풀이
- Forensic
- KaliLinux
- 자바복습
- 컴공
- Today
- Total
컴퓨터공학 전공생의 보안 도전기✌
[안드로이드 리버싱] Week 3 본문
안드로이드 보안 모델
애플리케이션 격리: sandbox, permission, trustzone
플랫폼 강화: selinux, aslr, exploit mitigation
디바이스 무결성: data encryption
업무를 위한 기능: 프로세스 기업 서비스

- OS 보안
리눅스 커널이 제공하는 사용자 기반 보호 기능을 활용하여 앱 리소스를 식별하고 서로 분리.
SELinux
최근에는 강제 접근 제어 등을 포함하는 접근 제어 보안 정책을 지원하는 이눅스 커널 보안 모듈이 적용됙 있다.
앱 샌드박스 (격리)
미국에서 어린아이를 보호하기 위해 모래통(Sandbox)에서만 놀도록 하는데서 유래한 보안 모델을 말한다.
악의적인 외부 프로그램으로부터 보호된 앱에 접근을 방지하기 위해서.
그리고 내부 os 컴포넌트들도 보호하기 위해서.
앱 설치 시 각 앱마다 고유한 UID(user id)를 할당하고 자체 프로세스 내에서 앱을 실행
각 앱은 자신만이 읽고 쓸 수 있는 전용 디렉터리를 부여받음.
uid를 통해 앱에 대한 접근을 통제한다. 다른 앱의 데이터나 시스템에 권한없이는 접근이 불가능.

Verified Boot
부팅 시 커널의 무결성을 검증.
실행된 코드가 신뢰할 수 있는 소스인지를 보장해주기 위한 것.
신뢰의 체인...? 이라는 것을 만들어서 각 구간별로 악의적인 변경이 있는지를 검사해서 하나라도 다르면, invaild하다고 판결.
디바이스에 변경 불가능한 하드웨어 고유의 키를 저장해 구현한다고 함.
2. 앱 보안
permission
앱은 androidmanifest.xml 에 이 앱에 대한 권한정보를 명시한다. 앱이 요청하고 있는 권한을 검사하고 허용 여부를 결절한 후 설치된다.
다른 앱이 권한을 부여받기 위해서는 허가가 필요.
개발자 서명을 통해 앱 배포 및 업데이트에서 보안을 강화
data storage
내부 저장, 외부 저장, content provider 3가지를 지원
대칭키를 이용해 데이터를 암호화하여 저장한다.
그리고 사용자가 boot up을 하거나 unlock을 할때 복호화
개발자 서명, 키스토어 구조
앱 개발자가 앱을 생성하여 배포할 때, 이 앱의 개발자가 누구인지를 나타내기 위해 자신의 코드 서명인증서로 서명을 해야 한다. 누가 패키징 했는지를 기록하여 이후 악의적인 목적으로 리패키징하는 것을 구별할 수 있게한다.
안드로이드 기기가 앱 업데이트할 때 검증용도로도 사용. 서명 사용 시 업로드 키를 분실하거나 키가 도용된 경우 이를 다시 생성해야 한다.
모든 앱은 보안키(공개키, 비공개키 한쌍) 으로 서명된다. 공개 키+비공개키 소유자 식별 메타데이터가 포함된 공개키 인증서를 업데이트 시 그 업데이트 인증서와 일치하는 경우에만 수락.
이 서명은 key를 통해 할 수 있고 이 key들을 담을 수 있는 파일을 keystore라고 한다. 인증서와 비공개 키의 저장소 역할을 하는 바이너리 파일.
Keystore는 비공개키를 안전하게 보관하고 암복호화 및 인증과정에서만 정상적으로 키를 사용할 수 있도록 해주는 매커니즘이다. android system TEE(자원을 보호하는 영역) 영역에 존재 (apk가 아니라) 외부로의 키 추출 과정을 방어.
안드로이드 앱 빌드 프로세스 (컴파일, 패키징, 서명)

빌드 되기 전 : 소스코드, 리소스파일들, AIDL(service ipc definition) 파일들이 함께 있다.
컴파일
AAPT(android asset packaging tool) : androidmanifest.xml이나 activity를 위한 xml 파일들과 같은 리소스 파일들을 컴파일하여 R.java라는 클래스를 생성하고 특정 resource id로 매핑.
aidl tool : 프로세스 간 통신(IPC)으로 서로 통신을 위해 클라이언트와 서비스가 모두 동의한 프로그래밍 인터페이스인 .aidl 인터페이스를 자바 인터페이스로 만들어준다
소스 코드, R.java, java interface는 컴파일러를 이용해 자바 바이트코드(.class)로 변환된다.
DEX : .class 파일들을 모두 .dex 파일로 변환
패키징
apkbuilder: dex 파일과 컴파일된 리소스 파일들 등을 모두 합쳐 .apk로 패키징
서명
패키징 과정에서 keystore를 통해 서명도 함께.
.apk 파일이란? (dex, manifest, 구조 분석)
안드로이드 앱 확장자로 android package의 줄임말이다. 앱을 설치하는 역할을 하며 zip과 동일한 형식으로 압축되어 있다.
인증을 위해 서명도 포함됨.
- androidmanifest.xml
- resource
- dex
1번은 안드로이드 앱의 속성들을 정의하는 파일. 패키지명, 버전, 권한 등의 정보 기록. activity, service 등 앱 컴포넌트 등을 포함한다.
2번은 안드로이드의 이미지, 스타일(layout, 도형, 값 등)을 관리하는 파일
3번 dex는 달빅 실행 파일. 즉 *안드로이드 런타임에서 궁극적으로 실행되는 코드. 앱의 실질적인 실행 파일이다.
이밖에도 외부 라이브러리 저장되는 폴더, 앱 인증 및 서명 관련 데이터 저장되는 META-INF 폴더 등이 있다.
*안드로이드 런타임(ART) - 장치에 앱이 설치될 때 ART이 AOT파일 컴파일을 수행하여 바이트 코드를 장치의 프로세서가 필요로 하는 기계어로 변환
'Security > Mobile' 카테고리의 다른 글
| [안드로이드 리버싱] Week 7: Android Hooking (0) | 2022.02.23 |
|---|---|
| [안드로이드 리버싱] Week 5 (0) | 2022.02.10 |