YPrefer's Develop&Security :: 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

 

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 파일 암호화 :)

 

전에 안드로이드 앱 점검을 하던 중 db파일을 추출해내서 데이터를 확인하려고 한 적이 있었다.

근데, 이게 분명 db파일임은 파일명에서 부터 D!B! 라고 적혀 있어서 확신할 수 있는데, Sqlbrowser을 통해 열리지가 않는 거였다.


심증은 있지만 물증이 없어 확인을 못하던 상황!

혹시나 해서 Hex Editor로 열어보니, 일반적인 DB파일은 Header가 SQL...뭐 이렇게 시작되어야 하는데,

이상한 값으로 적혀있는 걸보고 이상하다 싶어서 hex 값들을 쭉보고 있는데

보통은 00으로 섹션이 나누어지는데 이상하게 77이라는 값이 무지 많이 보였었다.

 

(정상적인 db파일)

 


 

여기서 XOR 연산을 했구나 싶어 malzilla를 이용해 XOR 키를 찾았더니 77을 키로 xor 연산을 한 걸 알 수 있었다.

링크 : http://malzilla.sourceforge.net/


키를 알고 그걸로 다시 복호화를 시도하니 정상적인 db파일로 떨어져서, DB내용을 볼 수 있었다.


오래 되서 잘 기억은 나지 않지만, 암호화 키를 77로 하지 않고 앱의 패스코드와 모바일의 유니크값을

섞은 것을 키로 사용하는 것으로 수정했던 것으로 기억한다.

+ Recent posts