[안드로이드 모의해킹] Activity Lifecycle 분석

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

개요

안드로이드에서 앱의 구성 단위인 Activity에 대해 알아보고, 액티비티의 생명주기(Lifecycle)에 대해서도 알아본다.

1. Activity

main() 함수를 실행시켜 프로그램을 시작하는 기존 바이너리와 달리 안드로이드에서는 Activity의 특정 콜백 함수를 실행시켜 Activity 인스턴스의 코드를 실행한다. 

앱의 시작 지점이 다를 수 있기 때문인데, 설치된 앱을 사용자가 터치하여 실행하는 경우도 있지만, 다른 앱으로부터의 호출, 전화가 오는 경우 전화앱이 실행되지만 다이얼러를 띄우지 않고 발신자의 정보를 보여주는 기능이 그것이다. 또는 앱은 앱 위에서 동작할 수도 있고, 백그라운드에서 동작할 수도 있기 때문에 이러한 동작들을 AndroidManifest.xml에 Activity 단위로 등록한 다음 수명주기를 관리하여 느슨하게 결합한 상태에서 실행한다.

2. Activity Lifecycle

Activity Lifecycle

  • 사용자가 앱으로 이동, 사용, 종료하는 전 과정을 생명주기를 관리한다.
    • ex> 앱을 사용하다가 전화를 받는 경우, 충돌 방지
  • 각 생명주기마다 콜백 함수를 지정할 수 있음 (*콜백함수: 작성된 코드 순서대로 실행되지 않고 이벤트, 요청 발생시 동작하는 함수)
  • 가장 먼저 실행 되는 Activity = Main Activity
  • 가장 먼저 실행되는 메소드 = onCreate()
  • 일반 앱 실행 시 가장 먼저 실행되는 기능?
    • Main Activity의 onCreate()

3. 기타 정적분석 시 진단가능한 취약점

유눅스 커널을 기반으로 동작하는 안드로이드 운영체제는 유닉스에서 발생할 수 있는 취약점도 일부 발생한다. 취약한 함수를 검증 없이 실행하는 경우라거나, Class 로드 시 경로를 검증하지 않고 로드하는 경우가 해당된다.

1. 시스템 명령의 실행이 가능한 경우

- exec() 함수를 사용하여 변수가 사용자 입력 값을 직접 참조하여 시스템 명령의 실행이 가능한 경우

2. DexClassLoader

- DexClassLoader 함수를 사용하여 로드 시, 상대 경로를 사용하거나 외부에서 경로 조작이 가능한 경우

  - Dex: 애플리케이션 런타임에 필요한 dex 파일을 동적으로 로딩하는 방식으로 애플리케이션 구성

  - 최근 안드로이드 버전에서는 intent로 대체하여 사용하도록 권장

3. NDK에서 취약한 함수를 사용하는 경우

  • BufferOverflow : strcpy, strcat, strncpy, memcpy, memset, scanf, strcat, spintf, strncat, gets, fgets
  • FormatString : printf, sprintf, fprintf, snprintf, vfprintf, vsprintf, vsnprintf, syslog
  • RaceCondition : tmpfile

4. 운영상 민감정보가 하드코딩되어 있는 경우

앱 소스코드 내 서버 또는 DB에 원격 접속하기 위한 접속 정보가 평문으로 노출되는 경우, 해당 정보를 이용하여 원격지의 자원 노출, 조작이 가능한 경우

출처

[Android Activity] https://developer.android.com/guide/components/activities/intro-activities?hl=ko 

[Android Activity Lifecycle] https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko 

 

반응형