인시큐어뱅크는 안드로이드 단말기에서 동작하는 모바일 앱으로 OWASP TOP 10 의 세분화된 기준으로 취약점을 진단할 수 있게 개발된 앱이다.
보안 전문가는 취약하게 설정된 앱을 대상으로 테스트를 해봄으로써 다양한 이점이 있다. 안드로이드 앱에서 발생한 취약점을을 인시큐어뱅크 앱에서 테스트를 해보면 다양한 취약점을 이해할 수 있다.
또한, 클라이언트 앱과 서버 간의 통신 과정을 이해함으로써 안드로이드 앱 개발 시 어떤 구간에 시큐어 코딩을 적용하는지 알 수 있다.
인시큐어뱅크 개발자가 오픈소스로 누구나 다운로드 및 이용할 수 있게 깃허브 사이트에 제공한다. 깃허브 사이트에 접속하면 취약점을 테스트해볼 수 있는 항목, 소스코드, APK 파일, 설치 가이드라인을 확인할 수 있다.
블로그에서 소개한 안드로이드 관련 취약점 분석은 대부분 인시큐어뱅크에서 테스트를 한 것이므로 따라 하기를 원한다면 동일한 환경으로 설치하기 바란다.
이번 포스팅은 깃허브 사이트에서 다운로드 받은 소스코드를 안드로이드 스튜디오로 빌드하는 방법, 인시큐어뱅크 서버 실행, 안드로이드 스튜디오에서 가상 단말기를 실행하고 인시큐어뱅크 실행하는 방법을 다룬다.
안드로이드 스튜디오에서 소스코드 빌드
안드로이드 스튜디오를 실행하면 새로운 안드로이드 스튜디오 프로젝트로 시작, 기존의 안드로이드 스튜디오 프로젝트 열기 등 안드로이드 스튜디오를 실행할 수 있는 다양한 방법이 나열되어 있다.
깃허브에서 다운로드 받은 인시큐어뱅크 소스코드를 빌드할 것이므로 Open an existing Android Studio project를 클릭하고, 안드로이드 스튜디오에서 인식 가능한 인시큐어뱅크 소스코드가 존재한 디렉토리를 선택한다.
안드로이드 스튜디오에서 인식 가능한 소스코드는 Android-InsecureBankv2-master\InsecureBankv2 디렉토리이다.
인시큐어뱅크 소스코드가 존재한 디렉토리(프로젝트)를 선택하면 빌드가 완료된다.
하지만, 하단의 Gradle 2.2 버전 요구 에러 메시지가 출력되는데, 링크 되어 있는 문자열을 클릭하면 Gradle 2.2 버전을 설치한다.
설치가 완료되면 Build Tools 22.0.1 버전을 요구하는 에러 메시지가 출력되는데, 동일하게 링크 되어 있는 문자열을 클릭하여 설치를 완료한다.
Gradle 2.2 버전 요구 에러 메시지
Failed to sync Gradle project 'InsecureBankv2'
Gradle version 2.2 is required. Current version is 2.1x
Error: Please fix the project's Gradle settings.
Fix Gradle wrapper and re-import project
Gradle settings
Build Tools 22.0.1 버전 요구 에러 메시지
Failed to sync Gradle project 'InsecureBankv2'
failed to find Build Tools revision 22.0.1x
Error:
Install Build Tools 22.0.1 and sync project
최초 인시큐어뱅크 앱을 개발한 사람의 환경과 본인의 환경이 다르므로 최초 프로젝트를 빌드할 때 다양한 에러 메시지가 출력된다. 에러 메시지가 출력되면 보통 에러를 해결할 수 있도록 링크가 생성되므로 링크를 클릭하면 빌드가 완료된다.
인시큐어뱅크 서버 실행
깃허브에서 다운로드한 소스코드를 보면 Android-InsecureBankv2-master\AndroidLabServer 디렉토리가 파이썬(Python27)으로 작성한 서버 소스코드이다.
안드로이드 단말기에 인시큐어뱅크 앱(APK)을 설치하고, 서버를 구동하면 사용자가 입력한 데이터가 서버가 받아서 처리한 결과를 사용자에게 전달한다.
안드로이드 단말기에 인시큐어뱅크 앱을 설치하기 전 로컬 컴퓨터에 서버를 구동하는 방법부터 알아보자.
서버는 파이썬으로 개발되었으므로 파이썬 2.7 버전을 설치하고 시스템 환경 변수에 파이썬 바이너리 파일이 존재한 경로를 등록한다.
○ Path : C:\Python27;C:\Python27\Scripts
cmd 창을 열어 서버 구동에 필요한 패키지를 설치한다. 설치가 완료되면 C:\Python27\Lib\site-packages 디렉토리에 설치된다.
○ pip install Flask sqlalchemy simplejson CherryPy
서버가 존재하는 경로(Android-InsecureBankv2-master\AndroLabServer)로 이동하여 서버를 구동하면 서버에서 8888 포트가 리스닝 중이라고 출력된다.
○ python app.py
- 기본 포트 : 8888
- 포트 변경 : python app.py --port 포트
서버 구동 시 에러 발생 원인
○ 스크립트 실행 경로에 한글이 포함되어 있을 경우
○ wsgiserver 모듈 로드를 하지 못할 경우
wsgiserver 모듈을 로드하지 못할 경우 CherryPy를 삭제 후 재 설치하고, 다시 서버를 구동한다.
만약 에러가 발생하면 wsgiserver2.py 파일을 C:\Python27\Lib\site-packages\cherrypy\ 디렉토리에 복사하고, 서버 구동 스크립트(app.py)의 4행 부분을 from cherrypy import wsgiserver2 as wsgiserver로 변경한다.
app.py는 wsgiserver.함수이름() 형식으로 사용하는데, wsgiserver2 대신 wsgiserver로 사용하게끔 해준다.
가상 단말기에 인시큐어뱅크 앱 설치 및 실행
안드로이드 스튜디오는 자체적으로 여러 개의 가상 단말기를 생성하고 실행할 수 있다. 또한, 물리적인 실제 단말기를 선택해서 실행할 수 있다.
자체적으로 지원하는 가상 단말기를 생성하고, 생성된 가상 단말기에 인시큐어뱅크 앱을 설치 및 실행하는 방법을 알아보자.
안드로이드 스튜디오 상단의 AVD Manager 아이콘을 클릭하면 가상 단말기 생성, 삭제, 수정할 수 있는 창이 출력된다. 하단의 Create Virtual Device 버튼을 클릭하여 가상 단말기를 다음과 같은 사양으로 생성한다.
○ Select Hardware : Phone(Nexus S)
○ System Image : Jelly Bean(API 16, armeabi-v6a, Android 4.1)
○ Android Virtual Device(AVD) : 디폴트 > Finish
가상 단말기가 생성되면 해당 단말기를 선택하고, 우측의 Actions 필드 항목의 재생 버튼을 클릭해 가상 단말기를 실행한다. 만약, 실행 시 에러가 발생하면 연필 버튼(수정 버튼)을 눌러 Use Host GPU 버튼을 체크 해제하면 된다.
재생 버튼을 클릭하면 안드로이드 스튜디오의 인시큐어뱅크 앱의 소스코드를 빌드하여 가상 단말기에 설치된다.
이후 자동으로 가상 단말기에 인시큐어 뱅크 앱이 실행되는데, 아이디와 비밀번호를 입력 후 로그인 버튼을 클릭하면 서버의 아이피와 포트가 일치하지 않아 로그인이 실패된다.
○ 아이디 : jack
○ 패스워드 : Jack@123$
인시큐어뱅크 앱의 속성으로 들어가 서버의 아이피를 로컬 컴퓨터의 아이피 주소로 변경하고, 서버의 포트는 기본 포트인 8888을 지정하여 Submit 버튼을 클릭하면 서버의 아이피와 포트가 성공적으로 설정되었다는 메시지가 출력된다.
아이디와 비밀번호를 입력하여 로그인을 시도하면 계좌 이체, 계좌 내역, 비밀번호 변경, 루팅 탐지 등 화면이 출력되고, 서버의 로그를 보면 해당 사용자로 로그인이 되었다는 메시지가 나타난다.
▶ 안드로이드 컴포넌트 취약점 (Android Activity)
▶ 안드로이드 컴포넌트 취약점 (Android Broadcast Receiver)
▶ 안드로이드 컴포넌트 취약점 (Android Content Provider)
▶ 안드로이드 백업 취약점 (Android Backup)
▶ 안드로이드 루팅 탐지 우회 (Frida Hooking)
▶ 안드로이드 로컬 암호화 취약점 (Android Local Encryption)
▶ 안드로이드 웹뷰 취약점 (Android Webview)