안드로이드 취약점 진단/모의해킹 전 알아야 할 이론
안드로이드는 리눅스 기반 OS로 동작하며, 빠른 업데이트를 지원하는 ios에 비해 구조적인 문제로 인해 업데이트가 오래 걸린다는 단점이 있다.
루팅(Rooting):
루팅이란 안드로이드 해킹을 통해 관리자(Root) 권한을 얻는 행위를 말한다.
ios는 탈옥이라고 한다.
안드로이드 4대 구성 요소
- Activity
사용자가 앱을 실행할 때 사용되는 컴포넌트. 즉 화면을 의미한다.
- Service
Activity와 달리 사용자와 상호작용이 없으며, 백그라운드에서 어떠한 작업을 수행하기 위해 사용된다.
- Broadcast Receiver
안드로이드에서 발생하는 이벤트를 말한다. ex) 배터리 알림 etc..
- Content Provider
다른 어플의 데이터에 접근이 필요할 때 사용하는 컴포넌트이다.
이 4대 구성 요소에서 취약점을 진단한다.
APK 구조
APK란 안드로이드 앱을 말하며(.apk 확장자) 인증을 위한 서명이 포함되어 있다.
assets: 앱 실행에 필요한 자원들이 저장되는 디렉토리(용량이 큰 파일 위주)
META-INF: 인증 서명과 관련한 정보가 담겨 있는 디렉토리
res: 앱 실행에 필요한 자원(리소스)들이 저장되는 디렉토리
lib: 라이브러리 파일(*.so)이 저장되는 디렉토리
AndroidManifest.xml: 설치된 앱의 정보가 저장된 파일, 패키지명, 버전과 같은 정보가 기록되어 있다.
Class.dex: *.dex 파일은 안드로이드 가상 머신인 달빅(Dalvik)이 인식할 수 있도록 *.class 파일을 바이트 코드로 변환시킨 소스 파일이다.
Resources.arsc: res의 정보가 기록되어 있다.
아래는 안드로이드 취약점 진단 도구이다.
apktool | 안드로이드 apk 파일 리버스 엔지니어링 도구. 압축 파일을 디컴파일한다. 원본 코드를 볼 수 있다. |
signapk | 재압축 후 apk 파일에 서명, 안드로이드 테스트 인증서로 apk에 자동으로 서명하기 위한 도구. 만약 악성 파일을 심어 다시 압축하여 배포하는 상황이라면 서명을 확인하여 방지할 수 있다. |
dex2jar | .dex 파일을 jar 파일로 변환할 때 사용하는 도구. class 파일을 바이너리 형태로 저장하고 있어서 jar 파일로 변환해서 봐야 한다. |
jd-gui | 변환된 .jar 파일의 코드를 볼 수 있게 해주는 도구 |
JEB | 안드로이드 디컴파일러 도구. 난독화 된 apk를 디컴파일 및 자바 코드를 검사, 비공개 소스 앱을 디버깅할 수 있는 리버스 엔지니어링 도구(유료) |
jadx | dex to java 디컴파일러(jd-gui보다 지원하는 기능이 많음) |
AXMLPrinter2.jar | 컴파일되어 읽기 어려운 xml 파일을 디컴파일하여 text 형식으로 읽을 수 있게 해주는 도구 |
Burpsuite/fiddler | 웹 프록시 도구. 버프스위트로만 프록시를 잡으면 통신이 많이 느려지는 경우가 발생함. ⇒ 단말기 - 피들러 - 버프 - 웹 |
adb | 안드로이드 장치와 통신하여 디버깅 등의 작업을 진행할 수 있는 command line tool |
Nox Player | 안드로이드 앱을 pc에서 안전하게 사용할 수 있는 무료 애뮬레이터 |
SQLite | 오픈소스 관계형 데이터베이스 관리 시스템. 작고 경량화된 라이브러리 형태의 데이터베이스 엔진 |
APK easy tool | 디컴파일, 샤이닝, 리패킹징 도구 |
Frida | 바이너리를 동적으로 실행하면서 분석하기 위한 도구(dbi). 파이썬 기반 |