본문 바로가기

4-7. 2021-2 심화 스터디/안드로이드 앱 모의해킹 분석

[2021.09.04]안드로이드 조사 및 커리큘럼 정하기

안드로이드 강의 인프런 미리보기

안드로이드 시대 별 버전 (디저트 이름)

4.1 정도부터 보안안에 다룸. JellyBean인데, 이건 갤럭시 노트 2랑 맞는

현재는 Android 11.0

하지만 최신만 맞출 수 없고, 노트 2 아직도 쓰는 사람 있어서 여기부터 일단..

안드로이드 운영체제 소개

  • 구글에서 개발한 리눅스 (커널) 기반 오픈 소스 플랫폼으로, 모바일 운영체제 역할

환경 구축할 때 녹스 에뮬레이터 사용

  • 구글 플레이 스토어 및 기타 마켓 플레이스를 통한 타사 앱 설치를 지원함
  • 오늘날 플랫폼은 휴대전화, 태블릿, 웨어러블 기술, TV 및 기타 스마트 디바이스와 같은 다양한 최신 기술의 토대

안드로이드 운영체제 구조

  • Linux Kernel

Drivers(Audio, Keypad, Shared Memory, Binder(IPC), Bluetooth, USB, Display, Camera, WIFI) + Power Management

  • HAL(하드웨어 추상화 계층)

Audio + Bluetooth + Camera + Sensors

  • Android 런타임

Android Runtime(ART) + Core Libraries

  • 네이티브 C/C++ 라이브러리

Webkit + OpenMAX AL + Libc + Media Framework + OpenGL ES

  • Java API 프레임워크

Content Providers + View System + Managers(Activity, Location, Package, Notification, Resource, Telephony, Window)

  • 시스템 앱

자바 개발 관점에서 보는 것도 중요,,, ㅎㅎ 난 자바 모르는데 ><

안드로이드 앱 컴포넌트 (구성요소)

  • Activity, Service, Broadcast Receiver, Content Provider
  • 앱 컴포넌트는 안드로이드 앱의 필수적인 구성 요소각 독립된 형태로 존재하며 정해진 역할을 수행
  • 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점
  • "인텐트(Intent)"는 다른 앱 컴포넌트로부터 작업을 요청하는 데 사용할 수 있는 메시징 객체 (메세지 연결자..?)
  1. 액티비티 (Activity)
  2. 서비스 (Service)
  3. Broadcast Receiver
  4. 콘텐츠 프로바이더 (Content Provider)

안드로이드 앱 취약점 분석 유튜브

https://www.youtube.com/watch?v=VCXMCWQLqCE&list=PL1jdJcP6uQtvSGi1tH0Nekww8JTmgbdjh&index=2

보니까 바로 녹스 연결해서 실전으로 들어가는 느낌?

본격적으로 하면서 하면 학습 효과가 증대되므로 책과 더불어서 해도 좋을 듯 함.

 

APK 파일이란?

APK 또는 Android Package Kit

: Google의 Android OS에 애플리케이션을 배포하는 데 사용되는 Android 패키지 파일의 확장

APK 파일에는 리소스 및 매니페스트에서 앱의 컴파일 된 애플리케이션 코드에 이르기까지 애플리케이션의 모든 데이터가 포함됩니다.

 

안드로이드 앱 구조

애플리케이션의 구성

JAVA/Kotlin 파일 (소스코드) + XML 파일(리소스) = .apk

안드로이드 앱 apk (Android Package)의 구조 분석

  • 안드로이드 앱은 기본적으로 .apk 라는 파일 확장자 명을 가짐
  • 매직 넘버는 PK
  • apk 파일의 압축 해제시 간단하게 3가지로 구분됨
  1. AndroidManifest.xml (attack vector)

    안드로이드 앱의 속성들을 주로 다루게 되는데, Activity, Service, Receiver, Permission 등의 속성은 이 파일에서 정의

    패키지명, 버전정보, 권한정보 등 설치된 앱 정보가 저장된 파일

    이중에 유일하게 폴더가 아닌 파일이다

    디컴파일 할때랑 안할때랑 차이가 크다

    처음 압축 해제 시 바이너리 형태의 xml로 인코딩 되어 형태를 알아보기 어렵지만, 이를 apktool과 같은 디컴파일러를 통하여 확인하면 디코딩된 xml 정보를 얻을 수 있음.

  1. Resource

    안드로이드의 Image, Style 등과 같은 정보 관리

    이것 또한 apktool로 확인 가능

  2. DEX (Dalvik Executable)

    안드로이드에서 앱이 구동하기 위한 핵심적인 파일 포맷

    Kotlin 및 Java로 이루어진 class를 달빅(vm)에서 인식할 수 있도록 바이트 코드로 변환시킨 실행파일

    해당 파일은 low 언어이기에 IF-eqz, if-nez 등 분기문으로 작동시키는것을 볼수 있다

    low언어를 읽기위해 dex2jar와 같은 방식의 해석가능한 수준으로 만드는 것이 필요

META-INF

앱 인증 및 서명 관련 데이터가 저장되는 폴더

SHA를 보관하여 무결성 검증함

즉, 이 폴더에는 앱 무결성 검증과 서명을 담당하고 있는 부분이 있음.

권한과 관련한 고찰 블로그 : https://chanztudio.tistory.com/93

패키지 폴더의 설명

java : 자바 소스 파일들이 들어있는 폴더.

Gradle Scripts : Gradle은 빌드 시 필요한 스크립트

res : 각종 리소스들이 저장되는 폴더.

→ drawable : 해상도 별로 아이콘 파일들이 저장, 프로젝트에 활용될 이미지들

→ layout : 화면의 구성을 정의

→ values : 문자열과 같은 리소스

  • dimens.xml : 크기에 관련된 설정 파일로 텍스트 크기, 도형 크기 등을 정의
  • string.xml : 문자열에 관련된 설정 파일
  • styles.xml : 화면 디자인 관련 설정을 정의, 색상, 액션바 유무, 배경 색 등등

→ menu : 메뉴 리소스

manifest : XML 파일로 앱의 전반적인 정보 즉 앱의 이름이나 컴포넌트 구성과 같은 정보를 가지고 있다.

안드로이드 앱 프로젝트 구조 결론

안드로이드 앱 프로젝트는 복잡해 보이지만,

사실상 아래의 3가지로 구성되어 있음을 알 수 있다.

1. 소스코드: java/kotlin

2. 리소스: 레이아웃/문자열(xml), 이미지(png) 등

3. 환경설정: manifest.xml, gradle Scripts(build.gradle)

출처:

https://curryyou.tistory.com/366

안드로이드 앱 분석

  • 정적분석

    APK 파일 실행시키기 전 리버싱으로 분석

    이는 난독화 기법이 적용된 악성코드일 때는 분석하기 어려움

  • 동적분석

    APK를 실행시킨 후 앱 설치 및 실행되는 과정 분석

    분석 시 에뮬레이터 사용

    안티 에뮬레이션을 적용한 고도화된 악성코드일 때 분석하기 어려움.

  • Androidmanifest.xml 파일 분석

다음 해야할 일?

    • 무작정 하나 구현해오기?

      단.. 개발 환경이나 뭘 할건지는 통일해서.. 그냥하면 막연하니깐..

    • 안드로이드 앱 Androidmanifest.xml 파일을 디컴파일 하는 과정을 해봐야 함

    • 개념적인 이해 추가 필요, 생각보다 복잡


    •  

    •  

    •  

    •  

    •  

    •  

    •