2014. 9. 24. 13:47ㆍSecurity ★ Development/안드로이드 모바일 보안
* 틀린 내용이 있을 시 지적 부탁드립니다.
이번부터는 취약점 진단 테스트 환경을 구성하여 모바일 진단을 해보도록 하겠습니다.
우선 AndroidLab 사이트에서 가상 모바일 뱅킹 어플을 다운로드합니다.
http://securitycompass.github.io/AndroidLabs/index.html
github 링크로 이동해서 base를 다운로드합니다.
https://github.com/securitycompass/Labserver 여기서 maseter(서버)를 다운로드합니다.
서버 파일(master)는 파이썬으로 작성되었기 때문에 파이썬이 설치되어 있어야 합니다.
파이썬을 설치하고 서버 파일을 실행하기 위해서는 그에 상응하는 라이브러리를 설치해야합니다.
http://pypi.python.org/pypi/blinker
http://pypi.python.org/pypi/CherryPy/3.2.4
http://pypi.python.org/pypi/Flask/0.10.1
http://pypi.python.org/pypi/Flask-SQLAlchemy/1.0
http://pypi.python.org/pypi/simplejson/3.3.1
에서 다운받아 압축을 해제합니다.
다음 파이썬을 설치한 경로를 환경변수 path에 추가합니다.
그리고 https://pypi.python.org/pypi/setuptools에서 easy_install을 설치합니다.
위에서 설치한 6개의 디렉토리로 이동해서 python setup.py install 명령을 통해 설치합니다. Flask가 들어가는 2개는 마지막에 설치해야 정상적으로 설치됩니다.
이제 서버를 한글명이 포함되지 않는 경로에 놓고 콘솔 창에서 해당 디렉토리로 들어가 python app.py로 실행시킵니다.
그리고 AndroidLabs-Base를 이클립스로 import하고 AVDM을 통해 실행합니다.
여기까지하면 취약점 진단을 위한 환경설정은 모두 끝났습니다.
1. /data/data 디렉토리 확인
/data/data는 안드로이드 어플리케이션이 필요한 데이터를 자체적으로 저장하는 공간입니다.
adbshell을 이용해 avd에 접속하고 /data/data/com.securitycompass.androidlabs.base/shared_prefs로 이동합니다.
preferences.xml이 있는데 이 파일을 보면 아이디와 비밀번호가 그대로 노출되어 있습니다.
sqlite db를 사용하는 경우에도 비슷한 방식으로 접근하여 걊들을 확인할 수 있는데 이러한 평문의 노출은 암호화를 적용하는 것으로 예방할 수 있습니다.
그 외에는 파일을 생성할 때 openFileOutput 함수에서 private mode를 사용하는 것, 루트 권한만이 접근할 수 있는 디렉토리에 파일을 저장하는 것이 있는데 이 두 방법은 디바이스를 루팅했을 때 무용지물이 될 수 있습니다.
일반적으로 복호화해서 사용해야 하는 데이터들은 AES, RSA를 이용하고 아이디와 비밀번호같이 매칭만 해보면 되는 정보들은 SHA를 이용하는 것이 바람직합니다.
sqlite에도 자체 암호화 기능이 있으니 사용하면 좋을 것 같습니다.
2. 프록시를 이용한 취약점 검사
모바일의 프록시를 설정해 변조를 통한 취약점 검사를 해보겠습니다.
우선 프록시 서버 환경을 구축해야 하는데 버프 스위트라는 도구를 사용하겠습니다.
http://www.portswigger.net/burp/download.html 에서 다운받습니다.
jar파일과 같은 위치에 메모장으로 java -jar -Xmx512m burpsuite_free_v1.6.jar를 적고 bat파일을 만들어 실행합니다.
아래 이미지처럼 proxy - options - add 에서 ip 주소와 포트번호를 추가해줍니다.
분석을 하려는 어플리케이션에서는 이 pc를 프록시로 설정해주어야 합니다. 이를 위해 proxydroid라는 어플리케이션을 폰에 설치합니다. (루팅이 필요합니다)
이후 해당 폰으로 인터넷을 하게되면 전송되는 값들이 표시됩니다.
모바일에서 인터넷을 통해 요청하는 값을 변경해보겠습니다. Options 탭에서 Intercept request based on the following rules에 체크하고 daum으로 페이지를 이동하면 Intercept - Raw 탭에서 아래와같은 부분이 보일 때가 있습니다. fname으로 이미지 파일이 등록되는 부분입니다.
fname의 링크부분을 다른 이미지 url로 대체합니다.
웹 페이지의 로딩 상황을 보며 적당히 바꿔주면 아래처럼 원래 이미지가 정상적으로 뜨지 않고 바꿔준 이미지가 뜨는 것을 볼 수 있습니다.
간단하게 이미지 파일을 바꿔주었지만 비슷한 방법으로 응답 url을 변경하여 다른 페이지로 사용자를 유도할 수도 있고 패킷을 저장하였다가 나중에 다시 사용하는 등 악의적인 방법으로 사용 될 수도 있습니다. 요즘 웹사이트나 프로그램들은 위처럼 단순히 문자 몇개 바꿔준다고 큰 사고가 일어날 정도로 보안이 허술하진 않지만 패킷 리플레이가 허용되는 프로그램도 봤었고 사용자의 혼란을 가중시킬 수 있는 만큼 주의해야 하겠습니다.
안드로이드 어플리케이션의 통신간에도 암호화 및 데이터 유형 검사 등을 통해 변조를 통한 공격이 허용되지 않도록 해야 할 것입니다.
'Security ★ Development > 안드로이드 모바일 보안' 카테고리의 다른 글
안드로이드 어플 진단 3 (0) | 2014.09.30 |
---|---|
안드로이드 어플 진단 2 (0) | 2014.09.29 |
단축 URL 체크 (0) | 2014.09.20 |
안드로이드 앱 분석 (산토쿠) (0) | 2014.09.19 |
안드로이드 앱 분석 (ARE 4) (0) | 2014.09.17 |