'Security/Android' 카테고리의 글 목록 :: YPrefer's Develop&Security

2016/05/31 -  [Security/Android] - [Android APK 진단] 1. 툴 소개 - 추가 16.06.07

2016/06/07 - [Security/Android] - [Android APK 진단] 2. DIVA. 앱 로그 확인하기 1, 하드코딩된 중요정보 확인하기 1

2016/06/07 - [Security/Android] - [Android APK 진단] 3. DIVA. 안전하지 않은 데이터 저장 확인하기 1

2016/06/07 - [Security/Android] - [Android APK 진단] 4. DIVA. 안전하지 않은 데이터 저장 확인하기 2

 

7. Input Validation Issues - Part 1

유저이름으로 정보를 검색하는 화면이다.

Hint 를 보면 세유저의 정보가 데이터베이스에 있고 그중에 하나는 admin으로 주어져 있다.

 

처음에 어떤 화면이 저 소스코드인지 몰라서 메인 화면을 보니까 SQL injection 액티비티인것을 확인했다.

 

소스를 확인하니까 database를 만들고 세 유저의 정보를 넣는 부분을 확인할 수 있다.

 

보통 SQL injection은 웹해킹시에 쓰이지만, android에서도 db를 만들수 있으니 sql injection공격도 가능하다.

아래와 같이 조건문이 무조건 참이 되도록 만들어주면, 모든 정보를 긁어 올 수 있도록 할 수 있다.

 

※ 필자의 경험공유 - 필자는 SQL injection 의 경우는 웹 해킹에서만 경험해 보았다.

웹 해킹에서는 sqlmap이라는 sqlinjection 점검 도구를 사용할 수 있는데, 이 Tool이 문제를 종종 일으켜서 같은 url에

같은 파라미터를 대상으로 시도했어도 결과가 다른 결과가 나오기도 해서 python으로 간단한 sqlinjection을 시도하는 스크립트를 만들기도 했었다.

 

8. Input Validation Issues - Part 2

하단에 URL을 입력하는 화면이 나온다.

 

소스코드를 확인해보면 입력한 구문이 webview의 url로 들어가는 것을 확인할 수 있다.

 

file:// 프로토콜을 이용해 단말의 데이터에 접근할 수 있는데, 현재는 nox 에뮬레이터(ROOT권한을 가짐)으로 shell로 확인할 수 있지만,

루팅되지 않은 단말의 경우 권한 에러가 뜨면서 shell에서는 접근이 불가능하다.

 

2016/05/31 -  [Security/Android] - [Android APK 진단] 1. 툴 소개 - 추가 16.06.07

2016/06/07 - [Security/Android] - [Android APK 진단] 2. DIVA. 앱 로그 확인하기 1, 하드코딩된 중요정보 확인하기 1

2016/06/07 - [Security/Android] - [Android APK 진단] 3. DIVA. 안전하지 않은 데이터 저장 확인하기 1

 

5. Insecure Data Storage - Part3

화면을 보면 아이디와 패스워드를 입력하는 부분이 나온다. 

아이디와 패스워드 등의 중요정보를 넣고 저장 버튼을 누르면 저장이 성공적으로 완료 되었다는 Toast를 볼수 있다.

 

코드를 확인해 보면 이번엔 로그인 패스워드와 아이디를 file로 만드는 것을 알 수 있다.

만들어진 temp 파일은 apk 설치 디렉토리 하단에 생성되고 확인해보면 아이디와 패스워드가 저장되있는 것을 볼 수 있다.

 

※ 필자의 경험공유 - 점검을 했던 앱중에 하나는 파일을 미리보기 할 수 만 있고, 보안정책상 다운로드나 캡쳐는 불가능 했었다.

그런데, 파일 미리보기 할 때 임시파일을 만들어둬서 이것을 중간에 빼낼 수 있었던 사례가 있다.

 

 

6. Insecure Data Storage - Part 4

화면을 보면 아이디와 패스워드를 입력하는 부분이 나온다. 

아이디와 패스워드 등의 중요정보를 넣고 저장 버튼을 누르면 저장이 성공적으로 완료 되었다는 Toast를 볼수 있다.

 

코드를 확인하면 외부저장장치아래에 숨김파일로 uinfo.txt를 만들어 아이디와 패스워드를 저장하는 것을 볼 수 있다.

 

find 명령을 사용해 해당 파일의 위치를 찾아 확인하면 아래와 같이 아이디와 패스워드를 얻을 수 있다.

find 명령을 설명하면,

/ : 루트 디렉토리 하단에

-name "*uinfo.txt*" : uinfo.txt가 파일명에 들어있는 것을 검색한다.

2>/dev/null : 검색 중 not permitted 등 에러메세지는 출력하지 않는다.

 

 

 

2016/05/31 -  [Security/Android] - [Android APK 진단] 1. 툴 소개 - 추가 16.06.07

2016/06/07 - [Security/Android] - [Android APK 진단] 2. DIVA. 앱 로그 확인하기 1, 하드코딩된 중요정보 확인하기 1

 

 

3. Insecure Data Storage - Part 1

화면을 보면 아이디와 패스워드를 입력하는 부분이 나온다. 

아이디와 패스워드 등의 중요정보를 넣고 저장 버튼을 누르면 저장이 성공적으로 완료 되었다는 Toast를 볼수 있다.

 

해당 액티비티의 코드를 확인해보면, Preference에 user와 password정보를 저장하는 것을 알 수 있다.

 

find / -name "*앱이름*" 2>/dev/null 명령을 통해 해당 앱이 설치된 디렉토리를 알아내고, (/data/data/패키지명/ 에 설치가 된다.)

하위 디렉토리중 shared_prefs 에 들어가 저장된 xml을 확인해보면 아래와 같이 user와 password가 저장되는 경우를 볼 수 있다.

보통 자동로그인을 구현하기위해 아이디와 패스워드를 preference에 저장해두는데, 평문으로 저장되는 경우도 있고, 암호화를 해서 저장하는 경우도

존재한다.

 

필자의 경험공유 -  1. 암호화를 하기는 하지만 암호화 키가 소스코드에 박혀있는 경우

2. 아이디의 암호화 로직과 패스워드의 암호화 로직이 같아 암호화된 패스워드를 아이디 부분에 덮어씌우면 앱을 실행시에 로그인을 위해 복호화를 하면서 패스워드가 보이는 경우

3. preference의 암호화키가 단말마다 다르지 않아, xml 파일 자체를 빼내어 다른 단말에 넣어 로그인이 가능했던 경우

 

4. Insecure Data Storage - Part 2

화면을 보면 아이디와 패스워드를 입력하는 부분이 나온다. 

아이디와 패스워드 등의 중요정보를 넣고 저장 버튼을 누르면 저장이 성공적으로 완료 되었다는 Toast를 볼수 있다.

 

역시 소스를 확인해보면 DB에 Insert를 하는 것을 알수 있다.

 

위에서와 같이 설치된 경로밑의 databases폴더에 들어가면, ids2라는 파일이 보이는데, 이 파일을

adb pull /data/data/jakhar.aseem.diva/databases/ids2 명령을 통해 끄집어 낸다

 

끄집어낸 db파일은 sqllitebrowser를 통해 읽을 수 있다.

 

※ 필자의 경험공유 - 2016/06/07 - [Security/Etc] - 경험공유 - Android DB 파일 암호화 :)

 

2016/05/31 -  [Security/Android] - [Android APK 진단] 1. 툴 소개 - 추가 16.06.07


루팅된 안드로이드 단말에 대상 APK 를 설치하고,실행하면 아래와 같은 화면이 출력된다

 

 

 

1. INSECURE LOGGING

여기서 첫번째 안전하지 않은 로그를 살펴보자

보면, 문자열을 입력하고 check out을 누르면, Toast가 하나 뜨는것을 볼수 있는데, 이 화면에서는 입력한 문자열을 중요정보라고 가정하였다.

 

필자는 nox_adb를 이용해 shell에 들어왔고, 단말을 사용하면 adb shell을 이용하면 된다.

logcat 명령어를 통해 현재 디바이스의 로그를 출력하는데, 앱 패키지 명인 diva로 필터를 걸어 출력하면 아래와 같은 로그를 볼 수 있다.

아래에 credit card정보인 1234가 로그에 평문으로 찍히는 것을 볼 수 있다.

 

※ 필자의 경험 공유 - 세션 아이디나 아이디 패스워드 등을 출력하는 경우,

함수전달할때의 파라미터, Response 등을 로그로 출력하는 등의 경우가 있는데 이러한 정보는 직접적으로 사용되거나 공격자에게 정보를 줌으로써 다른 방법과 섞여 사용될 수 있다.

 

 

 

 

2. Hardcoding Issues - Part 1

아래 화면을 보면 key 값을 입력하고, ACCESS버튼을 누르면 접근이 제한되었다는 토스트가 나오고 있다.

JADX를 통해 소스코드를 분석해보면(DIVA난독화가 적용되어 있지 않지만, 설사 적용되어있더라도 일정부분 분석이 가능하다).

단순히 입력 문자열을 비교하는 것을 확인할 수 있고, 이를 통해 하드코딩된 key값을 얻어낼 수 있다.

 

하드코딩된 키 값을 입력하면 아래와 같이 접근이 허용되었다는 Toast가 출력된다.

 

※ 필자의 경험 공유 - 2016/06/03 - [Security/Etc] - 경험공유 - Android 데이터 암호화 :)

 


Android APK 진단을 위한 툴 소개

 

네트워크 통신을 하는 앱이라면, 웹 진단 툴을 함께 사용한다.

Apktool

링크 : http://ibotpeaches.github.io/Apktool/

ApkTool은 apk파일은 디컴파일하거나 수정한 후 다시 컴파일 할 수 있는 Tool .

여러 옵션이 있지만 자주 사용하는 옵션은

 d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋

b 옵션 : recompile 해주는 옵션으로 apkfile이 아웃풋으로 나오며, signing을 거쳐 안드로이드폰에 설치가 가능.

d -d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋으로 나오지만, 확장자를 java파일로 만들어주어 동적디버깅 할 때 사용.



apk-sign

링크 : https://github.com/appium/sign

안드로이드에는 signing되지 않은 앱은 설치되지 않음

이 signing은 개발자가 APK파일로 만들어 낼 때 하는데, Apk Tool 을 이용해 decompile을 하면 signing이 풀림.

따라서 폰에 설치를 하기 위해서는 signing을 해주어야 하는데, 원 개발자의 서명을 따라할수는 없으나 아무 keystore를 가지고 signing만 해주어도 설치는 가능.



dex2jar

링크 : https://sourceforge.net/projects/dex2jar/

Apk파일은 안에 classes.dex라는 파일이 있는데 이 파일은 Android Dalvik이 인식할수 있도록 class파일을 바이트 코드로 변환한 파일.

이 파일을 dex2jar를 이용해 class파일을 추출하는 Tool.


jd-gui

링크 : http://jd.benow.ca/

JAVA decompiler 

위 dex2jar를 이용해 추출해낸 class파일을 java로 복원해주는 Tool.

그런데 복원할때 완벽하지 않아 복원이 잘 되지 않는 부분이 있는 것이 아쉬운점.


jadx

링크 : https://github.com/skylot/jadx

JAVA decompiler

필자는 dex2jar&jd-gui 보다 jadx를 사용하는 것을 더 선호하는데 jadx의 결과가 jd-gui보다 좀더 정확하게 복원을 해주는 것으로 느껴지고, 또 dex2jar라는 단계를 밟지 않고 바로 apk파일을 끌어다 놓는 것만으로 디 컴파일이 되기 때문.

 

cheatengine

링크 : http://www.cheatengine.org/

메모리 변조 툴

android 앱에 attach해서 메모리를 변조등을 수행할 수 있다.

 

frida

링크 : http://www.frida.re/docs/android/

frida는 javascript inject를 이용해 개발자가 만들어낸 함수를 공격자가 명시해서 호출하거나, 함수를 새로 만들어서 호출 할 수도 있다.

예를 들면 Getpassword(String id) 이런 함수가 있다면 공격자가 이를 호출하여 password를 얻어낼 수 도 있다.


ida pro

링크 : https://www.hex-rays.com/products/ida/

ida는 동적 디버깅 툴로 대상 Apk를 실행시키면서, 각 부분에 BP를 걸어 그 시점에서의 레지스트리 값등을 확인하고, 패치를 통해

체크로직등의 우회를 노릴수 있다.


drozer

링크 : https://labs.mwrinfosecurity.com/tools/drozer/

안드로이드 진단 프레임워크로 안드로이드 어플리케이션의 보안 취약점을 진단할 수 있다.

 

introspy

링크 : https://github.com/iSECPartners/Introspy-Android

함수 호출을 포함한 어플리케이션 API 안드로이드 API 파라미터와 리턴값을 로깅 해주는 tool이다.

+ Recent posts