1.1. 안드로이드 아키텍처 이해
1.1.1. 리눅스 커널
-
안드로이드 운영체제는 일부를 구조적으로 변경한 리눅스 커널 2.6으로 구현되어 있다.
이 레이어는 카메라, 오디오, 무선 와이파이, 키패드 드라이브 등과 같은 다양한 드라이버로 구성되어 있다.
-
안드로이드는 보안, 메모리 관리, 프로세스 관리, 네트워크 스택 그리고 드라이버 모델과 같은 주요 시스템 서비스를 리눅스에 의존한다.
또한 커널은 하드웨어와 소프트웨어 스택의 나머지 부분 사이에서 추상화 레이어 역할을 한다.
1.1.2. 라이브러리
-
리눅스 커널 위에 있는 레이어는 안드로이드의 네이티브 라이브러리다.
이 라이브러리는 C/C++ 언어로 작성되었다.
-
라이브러리들은 리눅스 커널 내에서 프로세스로 동작한다.
라이브러리는 단지 장치에 여러 종류의 데이터를 처리하는 방법을 알려주는 명령어들의 집합일 뿐이다.
1.1.3. 안드로이드 런타임
-
핵심 자바 라이브러리와 달빅(Dalvik) 가상 머신으로 구성된다.
JVM 과 빌드되는 프로세스는 비슷해 보이지만 달빅 가상 머신은 덱스 컴파일러(Dex compiler)로 변환한 후 달빅 바이트 코드를 생성하여 동작한다.
-
달빅 가상 머신은 메모리 관리가 개선되었고, 각 앱이 권한 없이 다른 앱을 제어할 수 없도록 권한을 설정할 수 있으며, 스레딩을 지원한다.
-
각 안드로이드 앱은 별도의 가상 인스턴스에서 실행되고, 각 앱에는 할당된 고유 사용자 ID 가 부여된다. (apk 마다 user, UID, GID, home 이 부여된다.)
안드로이드에 설치된 모든 앱은 일반 사용자 권한으로 실행된다.
앱이 사용자의 데이터에 접근하려면 모든 사항을 manifest 에 명시해야 한다.
데이터에 접근할 때는 사용자의 동의를 받아야 한다. 이는 앱 설치 시 동의 절차도 포함된다.
1.1.4. 안드로이드 필수 구성 요소
-
액티비티, 서비스 콘텐츠 프로바이더, 브라드캐스트 리시버
1.2. 인시큐어뱅크 가상 금융 앱 소개
-
인시큐어뱅크는 다음과 같은 취약점을 가지고 있다.
01. 취약한 브로드캐스트 리시버 (Flawed Broadcast Receivers)
02. 취약한 인증 매커니즘 (Weak Authorization mechanism)
03. 로컬 암호화 취약점 (Local Encryption issues)
04. 취약한 액티비티 컴포넌트 (Vulnerable Activity Components)
05. 루트 노출 및 우회 취약점 (Root Detection and Bypass)
06. 취약한 콘텐츠 프로바이더 (Insecure Content Provider access)
07. 취약한 웹 뷰 구현 (Insecure Webview implementation)
08. 취약한 암호화 구현 (Weak Cryptography implementation)
09. 앱 패칭 취약점 (Application Patching)
10. 중요 정보 메모리 노출 취약점 (Sensitive Information in Memory)
11. 취약한 로깅 메카니즘 (Insecure Logging mechanism)
12. 페이스트보드 취약점 (Android Pasteboard vulnerability)
13. 앱 디버깅 취약점 (Application Debuggable)
14. 안드로이드 키보드 캐시 취약점 (Android keyboard cache issues)
15. 안드로이드 백업 취약점 (Android Backup vulnerability)
16. 런타임 조작 (Runtime Manipulation)
17. 취약한 SD 카드 스토리지 (Insecure SD Card storage)
18. 취약한 HTTP 전송 (Insecure HTTP connections)
19. 파라미터 조작 (Parameter Manipulation)
20. 하드코드된 중요 정보 (Hardcoded secrets)
21. 사용자 계정 목록화 (Username Enumeration issue)
22. 개발 백도어 취약점 (Developer Backdoors)
23. 취약한 비밀번호 변경 로직 (Weak change password implementation)
-
실무에서는 모바일 앱 서비스를 진단할 때나 보안 솔루션을 진단할 때 금융권이 제일 먼저 법적 규제 대상이 되는 경우가 많기 때문에 전자 금융 서비스 규정에 따른 가이드를 참고한다.
금융권에서는 다음과 같은 점검 체크리스트 및 가이드를 참고한다.
1. 스마트폰 전자 금융 서비스 보안 가이드
2. 스마트폰 안전 대책 자체 점검
3. 스마트폰 전자 금융 앱 위,변조 방지 대책
4. 스마트폰 금융 안전 대책 이행 실태 점검 결과
-
공공 기관을 비롯한 다른 기관에서는 한국인터넷진흥원에서 배포하는 다음 가이드를 참고한다.
1. 모바일 앱 소스 코드 검증 가이드라인
2. 모바일 대민 서비스 구축 가이드
3. 모바일 대민 서비스 보안 취약점 점검 가이드
4. 대민 모바일 보안 공통 기반 활용 가이드
1.3. 안드로이드 앱 진단 환경 구성
1.3.1. 자바 설치 및 환경 구성
1.3.2. 안드로이드 스튜디오 설치
1.3.3. 가상 디바이스 소개 및 설치
1.3.4. ADB 환경 변수 설정
1.4. 지니모션 소개 및 앱 설치
1.5. 인시큐어뱅크 설치 및 코드 수정 방법
-
https://github.com/dineshshetty/Android-InsecureBankv2
-
인시큐어뱅크 백엔드 서버는 AndroLabServer 폴더에 위치하고 있으며, 서버를 구동하기 위해서는 몇 가지 라이브러리가 필요하다.
Flask
Flask-sqlalchemy
Simplejson
Cherrypy
라이브러리는 easy_install 프로그램을 통해 설치할 수 있으며, easy_install 은 파이썬이 설치된 폴더의 scripts 폴더 안에 포함되어 있다.
> easy_install flask sqlalchemy simplejson cherrypy
-
파이썬 라이브러리 설치 중 인코딩 에러가 나면...
python lib/site-packages/site-packages/sitecustomize.py 파일을 추가한다.
자신의 시스템에 맞게 encoding 을 설정하면 된다. (cp949, mbcs, UTF-8 등)
import sys
sys.setdefaultencoding(“cp949”)
-
서버 실행은 다음과 같이 한다.
8888 포트로 자동 실행된다.
> Python app.py
-
인시큐어 뱅크 로그인을 위한 디폴트 계정 정보는 아래와 같다.
dinesh / Dinesh@123$
jack / Jack@123$
1.6. 모바일 앱 디컴파일 방법
1.6.1. apktool, JD-GUI 를 이용한 APK 파일 분석
1.6.2. BytecodeViewer 를 이용한 APK 파일 분석
-
BytecodeViewer(http://bytecodeviewer.com) 는 디컴파일할 때 사용할 수 있을 뿐만 아니라 악성코드 앱을 분석할 때도 사용할 수 있다.
이는 자바, 안드로이드, DEX, jars 파일 등과 같은 소스 코드 리버싱 분석 도구다.
안드로이드 APK 파일을 디컴파일하여 바이트코드 형태와 클래스 파일을 자바 파일로 변환한 후 소스파일로 복원하여 함께 보여준다.
-
기본적으로 설치되어 있는 플로그인은 코드 다이어그램, 안정코드 여부 판단, 메서드 정보 확인, 문자열 정보 확인 등이다.
그 밖에 자신이 플러그인을 제작하여 반영할 수 있다.
1.7. 마무리하며
-
안드로이드 개발 및 진단 환경 구성과 인시큐어뱅크 앱 설치, 기본적인 디컴파일 및 코드 수정 방법을 다루었다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
#2 취약점 진단 및 분석 도구 part 2. - 안드로이드 모바일 앱 모의해킹 (0) | 2020.11.19 |
---|---|
#2 취약점 진단 및 분석 도구 part 1. - 안드로이드 모바일 앱 모의해킹 (0) | 2020.11.18 |
[android] AsyncLayoutInflater tutorial (0) | 2020.08.22 |
[android] WorkManager 를 사용해보자 (0) | 2020.08.21 |
[android] MultiDex 에 대한 이야기 (0) | 2020.08.20 |
댓글