직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)
개요
취약점 진단가의 입장에서 안드로이드 운영체제를 정리한다. 취약점을 발굴하기 위한 위협모델링부터, 안드로이드 OS에서 발생할 수 있는 취약점에 대한 내용이다.
위협 모델링(Threat Modeling)
중요 자산을 보호하기 위해서 기업들은 위협과 위험을 최소화하기 위해 사전에 점검한다. 그 단계중 하나로 위협 모델링을 실시하는데 이를 위해 가장 먼저 살펴보아야할 것은 무엇일까, 평가 요소는 다음과 같다.
- 시스템의 구조(Architecture)
- 시스템의 보안 상태
- 보호해야할 자산
- 가능한 공격자 후보군
안드로이드의 경우 관리 주체에 따라 그림과 같이 세 단계로 나눠진다.
- Android는 최종 사용자(End user)에게 집중되어 있음
- 사용자는 아래의 두 단계가 보안에 안전하다고 생각하고 사용
- 각 단계의 사이에서 발생할 수 있는 보안 위협
- 취약점 진단은 주로 Application Level 진단
- 다만, Operating System과 연계하여 발생하는 경우도 있음
PC 환경에서의 취약점 진단과 다른 양상을 보이는데 그 이유는 단말기 내에 데이터를 저장할 수 있기 때문이다. 데이터를 보관해야하는 이유로는 두 가지가 있다.
- OS에서 리소스를 확보하기 위해 앱을 제거하거나 종료해도 사용자 데이터는 삭제되지 않는다.
- 네트워크 연결이 취약하거나 끊겨도 앱은 계속 동작한다.
또한 PC환경보다 모바일 환경에서 다룰 수 있는 데이터가 더 많다.
1. PC(브라우저)보다 다루는 민감데이터가 더 많다.
- SMS, 연락처, 일정, 클립보드, 결제정보, 인증서 등
2. 권한이 더 많다.
- 과금(전화, SMS) / 위치정보 / 카메라 / 블루투스 등
이러한 점에 유의하여 개발자는 더욱 견고하고 안전한 앱을 개발하고, 취약점 진단가는 놓칠수 있는 부분을 최소화 해야 한다.
Android - OS
내용의 경우 구글에서 제공하는 안드로이드 공식 문서를 참고하였다.
Kernel
- Linux 커널로 동작
- 프로세스, 스레딩 관리, 메모리 관리 기법 등은 리눅스 동작 원리를 따라감
HAL(하드웨어 추상화 계층)
- JAVA API와 하드웨어를 연결하기 위한 인터페이스
- 카메라나 블루투스 등 하드웨어 구성요소를 위한 인터페이스 구현
- 개발자가 하드웨어 동작까지 구현할 필요 없음
ART(Android RunTime)
- 런타임 구성요소, Android 5.0(API 21) 이상의 경우 앱이 자체 프로세스에서 구동
- AOT(Ahead-Of-Time), JIT(Just-In-Time)
- 최적화된 GC(가비지 콜렉션)
Native C/C++ 라이브러리
- ART나 HAL 등 많은 핵심 라이브러리는 네이티브 언어(C/C++)로 구성
- C/C++ 코드가 필요한 앱 개발시 Android NDK를 이용 네이티브 플랫폼 개발
JAVA API
- Android OS구성은 JAVA 언어로 작성
- 모듈식 시스템 구성요소 및 시스템 재활용 단순화
- Resource Manager, Notification Manager, Activity Manager
System Apps
- 이메일, 전화, SMS, 캘린더, 키보드 등 OS 설치 시 기본 제공 앱
- 표준으로 구현, 서드파티 앱을 개발하더라도 시스템앱을 호출하여 사용 가능
Android OS 중요 기술
Sandbox
- Linux 사용자 기반 권한 모델을 사용하여 고립된 가상환경에서 리소스사용(isolated application resources)
- 악성 외부 앱과 다른 앱이 상호작용 불가
- 응용프로그램은 기본적으로 운영 체제에 대한 접근이 제한
실행되고 있는 다른 앱에 접근을 한다거나 자원을 탈취하는 행위를 막을 수 있다.
UID의 경우 1000번 이하는 시스템에서 예약해서 사용하며, 사용자가 설치한 앱은 1000번 부터 사용한다.
Rooting
- 샌드박스 모델의 한계를 극복하기 위해 단말기를 “루팅”할 수 있음
- Linux에서 root는 모든 파일 및 명령 실행의 권한을 가진 최고 사용자
- 보안상 설계단계에서 기기의 소유자의 권한은 root 권한이 아님
- Rooting, 기기의 최고 사용자 권한을 얻는 행위 (다른 앱의 샌드박스 데이터에도 접근 가능)
- 루팅 시, 제조사의 기기보증을 받을 수 없음
- 갤럭시 단말기의 경우 nox(삼성페이, 패스워드 관리) 사용 불가
- Android 버전, 단말기 제조사별로 다양한 루팅 방법 존재
Permission(권한)
- 안드로이드에서 사용자의 개인정보를 보호하는 방법
- 앱의 설치 전, 앱에서 필요로 인해 요청할 때 리소스 접근 권한을 확인
- Install-time permissions(Android 5.1.1 이하)
- Runtime permissions(Android 6.0 이상)
- Google에서는 민감정보 유출 우려가 있는 위험권한을 별도로 관리하고 있음
저장소(Data Storage)
- 안드로이드 정책 중 자주 바뀌는 요소
- 컨텐츠 유형, 액세스 방법, 권한, 다른 앱 접근 가능여부, 앱 제거 시 파일 제거 여부 등에 따라 개발자가 선택
- 내부 저장소(Internal Storage) - 실행한 앱에서만 접근 가능
- 외부 저장소(External Storage) - 실행한 앱 외부에서도 접근 가능
- Contents Provider - 앱 간 데이터 공유가 필요할 때
- 데이터를 저장하는 방법
- SharedPreferences, SQL, 파일, Encrypted File, KeyStore
출처
- https://proandroiddev.com/the-layers-of-the-android-security-model-90f471015ae6)
- https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html
- https://promon.co/security-news/root-detection-android/
반응형
'Security > Mobile' 카테고리의 다른 글
[안드로이드 모의해킹] AndroidManifest.xml 분석하기 (0) | 2023.03.22 |
---|---|
[안드로이드 모의해킹] APK 파일 정적분석 및 APK Studio 설정 (2) | 2023.03.18 |
[안드로이드 모의해킹 실습] 개요 (0) | 2023.02.18 |
[iOS] frida 16 설치 오류 해결 (0) | 2022.12.31 |
[모바일 모의해킹] NoPE로 TCP 패킷 조작하기 (1) | 2022.12.24 |