[안드로이드 모의해킹] 안드로이드 운영체제 개요

직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)

개요

취약점 진단가의 입장에서 안드로이드 운영체제를 정리한다. 취약점을 발굴하기 위한 위협모델링부터, 안드로이드 OS에서 발생할 수 있는 취약점에 대한 내용이다.

위협 모델링(Threat Modeling)

중요 자산을 보호하기 위해서 기업들은 위협과 위험을 최소화하기 위해 사전에 점검한다. 그 단계중 하나로 위협 모델링을 실시하는데 이를 위해 가장 먼저 살펴보아야할 것은 무엇일까, 평가 요소는 다음과 같다.

  • 시스템의 구조(Architecture)
  • 시스템의 보안 상태
  • 보호해야할 자산
  • 가능한 공격자 후보군

안드로이드의 경우 관리 주체에 따라 그림과 같이 세 단계로 나눠진다.

  • Android는 최종 사용자(End user)에게 집중되어 있음
  • 사용자는 아래의 두 단계가 보안에 안전하다고 생각하고 사용
  • 각 단계의 사이에서 발생할 수 있는 보안 위협
  • 취약점 진단은 주로 Application Level 진단
  • 다만, Operating System과 연계하여 발생하는 경우도 있음

PC 환경에서의 취약점 진단과 다른 양상을 보이는데 그 이유는 단말기 내에 데이터를 저장할 수 있기 때문이다. 데이터를 보관해야하는 이유로는 두 가지가 있다.

  1. OS에서 리소스를 확보하기 위해 앱을 제거하거나 종료해도 사용자 데이터는 삭제되지 않는다.
  2. 네트워크 연결이 취약하거나 끊겨도 앱은 계속 동작한다.

또한 PC환경보다 모바일 환경에서 다룰 수 있는 데이터가 더 많다.

1. PC(브라우저)보다 다루는 민감데이터가 더 많다.

  • SMS, 연락처, 일정, 클립보드, 결제정보, 인증서 등

2. 권한이 더 많다.

  • 과금(전화, SMS) / 위치정보 / 카메라 / 블루투스 등

이러한 점에 유의하여 개발자는 더욱 견고하고 안전한 앱을 개발하고, 취약점 진단가는 놓칠수 있는 부분을 최소화 해야 한다.

Android - OS

내용의 경우 구글에서 제공하는 안드로이드 공식 문서를 참고하였다.

Android 아키텍처

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

출처

 

반응형