안드로이드란?(Android)
■ 안드로이드란
Android는 주로 스마트폰 및 태블릿과 같은 터치스크린 모바일 장치용으로 설계된 Linux 커널 및 기타 오픈 소스 소프트웨어의 수정된 버전을 기반으로 하는 모바일 운영체제이며, Open Handset Alliance로 알려진 개발자 컨소시엄에서 개발하고 구글에서 상업적으로 후원중. 안드로이드 기기의 아키텍처, 애플리케이션이 어떻게 컴파일되는지, 가장 중요한 것은 안드로이드 애플리케이션의 구성을 이해하는 것
■ 안드로이드의 구성
하드웨어
Android의 주요 하드웨어 플랫폼은 이후 릴리스에서도 지원되는 x86 및 x86-64 아키텍처가 있는 ARM Android 5.0 Lollipop부터 32비트 변형 외에도 모든 플랫폼의 64비트 변형이 지원됨
커널
Android 커널은 Linux 커널의 LTS 분기를 기반으로 사용
파일 시스템
Android 출시 이후로 YAFFS2를 사용 중이나, Android 2.3 이후에는 EXT4 파일 시스템을 사용.
안드로이드 파일 시스템은 파일 브라우저를 통해 탐색이 가능하며, 공장 초기화를 누르면 지워짐.
다음 디렉토리는 모든 Android에 기본적으로 있음
- 부팅: 파티션에는 전원이 켜질 때 전화가 부팅되는 데 필요한 커널, 램디스크 등이 포함
- 시스템: Android UI 및 사전 설치된 앱을 포함하는 OS 파일 포함
- 복구: OS로 부팅하는 대체 옵션으로 파티션을 복구하고 백업할 수 있음
- 데이터: 사용자 데이터, 앱 데이터, 메시징, 음악 등을 저장
하위 폴더는 아래로 구성되어 있음
- Android: 앱 캐시 및 저장된 데이터의 기본값
- 알람: 알람에 대한 사용자 지정 오디오 파일
- Cardboard: VR 파일에 대한 데이터를 포함
- DCIM: 카메라 앱으로 찍은 사진과 비디오를 저장
- 다운로드: 인터넷에서 다운로드한 파일을 저장
- 알림: 일부 앱의 알림에 대한 사용자 지정 톤
- 음악, 영화: 타사 앱의 노래와 비디오를 저장하는 기본 폴더
- 사진: 타사 앱에서 찍은 사진을 저장하는 기본 폴더
- 캐시: 자주 사용하는 데이터 및 앱 구성 요소의 저장
안드로이드 아키텍쳐
- 커널
커널은 사용자가 하드웨어와 통신할 수 있는 인터페이스를 제공하는 Android OS의 가장 중요한 부분. 하드웨어 구성 요소가 특정 기능을 지시하기 위해 프로그램에서 사용하는 필수 드라이버가 포함되어 있음. 오디오, 디스플레이, 블루투스 등이 해당됨
- 하드웨어 추상화 계층 (Hard Abstraction Layer)
컴퓨터의 물리적인 하드웨어와 소프트웨어 사이의 추상화 계층 역할을 하는 논리적 코드 분할
프로그램이 하드웨어와 통신할 수 있는 장치 드라이버 인터페이스를 제공
- 라이브러리
어플리케이션, 리소스 파일 및 매니페스트 개발을 위한 개발자 지원을 제공
네이티브 라이브러리는 네이티브 코드에서 작업을 효과적으로 수행하기 위해 필요함
- 안드로이드 런타임 (Android Run Time)
안드로이드 OS에서 사용하는 애플리케이션 런타임 환경
프로그램이 프로세서에 명령을 보내고 컴퓨터의 RAM에 액세스할 수 있는 상태
자바로 프로그래밍된 안드로이드앱은 컴파일 중에 APK 및 실행 런타임으로 패키징되는 동안 먼저 바이트 코드로 변환됨
안드로이드는 가상 머신을 사용해 모든 응용 프로그램을 실행하여 OS에서 프로그램 실행을 격리하고 영향을 받는 시스템을 악성 코드로부터 보호함
Android 4.4 이전에는 DVM(Dalvik Virtual Machine) 이었다가 이후 ART로 대체됨
DVM은 JIT(Just in time) 컴파일을 사용하여 어플리케이션 코드를 가져와 분석하고 런타임으로 컴파일함
ART는 .dex파일이 필요하기도 전에 컴파일을 하는 AOT(ahead of time) 컴파일을 사용
인시큐어뱅크 소개
■ 인시큐어뱅크란?
인시큐어뱅크 버전2(insecurebankv2)
모바일 뱅킹 취약점 진단을 위해 테스트 용도로 제작된 어플리케이션. 백엔드 서버는 파이썬으로 제작되었으며, 깃허브에서 다운로드 가능
https://github.com/dineshshetty/Android-InsecureBankv2
금융권 앱을 모델로 하고 있어, 모바일 취약점 진단 입문자(안드로이드 앱 취약점 분석)가 취약점 진단을 학습하기 좋은 앱
각 파일들에 대한 간략한 설명을 하자면 이렇다.
AndroLabServer : 인시큐어뱅크 백엔드 서버
InsecureBankv2 : 인시큐어뱅크 안드로이드 어플리케이션 소스
InsecureBankv2.apk : 인시큐어뱅크 안드로이드 어플리케이션
Usage Guide.pdf : 유저 가이드
환경 구성 및 설정(JDK, 안드로이드 스튜디오, 파이썬)
■ JDK, 안드로이드 스튜디오, 파이썬 설치
소스코드를 이용하기 위하여, 안드로이드 어플리케이션 개발 환경 구성
- JDK(64bit) 설치하기
https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
1. 설치 시, 모두 디폴트 값(설치 경로 등)으로 진행
2. [윈도우 키] - [고급 시스템 설정 보기] - [고급 탭] - [환경변수]
3. [시스템 변수] - [새로만들기] - jdk 설치 경로 입력 후 "확인"
4. [시스템 변수] - [path 변수] 클릭 후, %JAVA_HOME%\bin; 입력 후 cmd에서 "java -version"으로 설정 확인
- 안드로이드 스튜디오 설치하기
https://developer.android.com/studio?hl=ko
1. 설치 시, 모두 디폴트 값(설치 경로 등)으로 진행
2. 스튜디오 설치 완료 후, [setup wizard] - sdk license 모두 Accept, [Finish] 버튼 클릭 후, 설치 진행(※중요!)
3. [More Actions] - [SDK Manager] 클릭
4. Status에서 설치 유무를 확인 가능하며, 테스트 할 안드로이드 버전을 선택 후 [Apply] 클릭 후 설치
5. [More Actions] - [Virtual Device Manager] 클릭
6. 좌측 상단 [Create device] 클릭 - 카테고리(Phone) [Nexus 5] 클릭 후 이미지 다운로드
7. AVD Name 변경 후 설정 완료(설정이 잘못되거나, 정상적으로 실행 안된다면, 옵션 변경 필요)
8. Actions 에서 재생 버튼을 누르면 디바이스 실행 가능
9. ADB(Android Debug Bridge) 환경 변수 설정
- ADB는 안드로이드 개발용으로 만들어진 디버그 테스팅 도구이기에, 개발과 취약점 진단에 반드시 필요
기본 설치 경로 : C:\Users\사용자\AppData\Local\Android\Sdk\platform-tools
[윈도우 키] - [고급 시스템 설정 보기] - [고급 탭] - [환경변수] - [시스템 변수] - [path 변수] 클릭 후, 위의 설치 경로 입력 후 cmd에서 결과 확인(커맨드라인에 "adb version" 입력)
- 파이썬(python) 설치하기
https://www.python.org/downloads/release/python-2717/
※주의사항
파이썬 구버전이나, 위에 있는 버전으로 진행해야 오류 없이 빠르게 진행 가능함!
디폴트로 설치 진행했다면, 파이썬 설치 기본경로는 "C:\Python27"
1. 파이썬을 위에 있는 버전으로 설치 후, 서버 구동을 위한 라이브러리를 설치함(목록은 하기와 같음)
- simplejson
- flask
- sqlalchemy
- cherrypy
- web.py
2. 위에 있는 라이브러리를 설치하기 위해 easy_install을 이용해야하는데, easy_install은 "C:\Python27\Scripts" 해당 경로에 존재함.
▲위 명령어 입력하여 설치 진행
▲정상적으로 설치되면 다음과 같은 메시지 출력
※easy_install 명령어를 이용하여 설치 불가 및 에러 발생 시, 다음과 같은 방법 사용
1) 환경변수 설정
[윈도우 키] - [고급 시스템 설정 보기] - [고급 탭] - [환경변수] - [시스템 변수] - [path 변수] 클릭 후, C:\Python27\Scripts\ 추가
2) 관리자 권한으로 명령 프롬프트(CMD) 실행 후, pip install --uprade pip 입력
3) 아래 명령어 차례대로 입력
- pip install flask
- pip install sqlalchemy
- pip install simplejson
- pip install cherrypy
- pip install web.py
(아래 화면은 명령어 입력 시, 정상 설치 예시 화면)
3. 다운로드 받은 인시큐어뱅크 서버 설치 경로에 AndroLabServer 디렉터리에서 app.py 실행
▲ 서버 정상 작동 시, 위와 같은 문구 출력
인시큐어뱅크 어플리케이션 설치
■ 어플리케이션 설치
안드로이드 스튜디오에서 가상 장치 설정과 인큐어뱅크 백엔드 서버를 정상적으로 구동시켰으므로, 가상장치에 어플리케이션 설치 진행(인시큐어뱅크 어플리케이션은 다운받은 폴더 내에 포함되어 있음)
1. 인시큐어뱅크 폴더로 이동 후, 명령어 입력 adb install InsecureBankv2.apk
2. 안드로이드 가상 장치(AVD) 앱 메뉴에서 설치된 인시큐어뱅크 어플 확인
3. 서버 IP 주소(Server IP)는 우측 메뉴 "Preferences" 에서 확인 및 변경 가능. 위의 과정대로 설치했다면 기본 포트 번호는 8888로 설정되어 있음. "Submit" 버튼 클릭
4. 인시큐어뱅크 계정 정보(ID : dinesh, PW : Dinesh@123$ / ID : jack, PW : Jack@123$)로 로그인
또는, "Autofill Credentials" 버튼을 클릭하면 자동으로 계정 정보가 입력됨.
이것으로 인시큐어뱅크 설치 과정을 마친다.