본문 바로가기

모바일 해킹/안드로이드

앱 해킹 내부 저장소 진단 - 1 (adb)

안녕하세요 이번에는 adb 도구 이용해 앱 내부 저장소를 한 번 봐보겠습니다.

 

우선 nox와 윈도우의 터미널과 연결하기 위해 adb을 설치하겠습니다.

 

그러니 일단 NOX 부터 설치하시고 오셔야 됩니다! 무조건 Android 6버젼이하으로 설치하세요.

왜냐하면 나중에 SSL 설치할 많이 편해집니다. (nox 드라이버 또는 nox 매니저 -> 멀티 실행 -> 위쪽에 ... 메뉴 클릭 -> 멀티설정 -> 안드로이드 5 체크 하시고 일괄 생성을 1개로 설정 -> 저장 -> 다시 ... 메뉴 클릭 -> 신규 생성)

 

adb은 안드로이드 프로그램 nox 같은 프로그램을 윈도우 shell와 연결하는데 도움 주는 프로그램이라고 보시면 됩니다!

shell 연결 되면 터미널 통해 명령어를 내려서 작업이 가능해지게 됩니다.

 

https://developer.android.com/studio/releases/platform-tools?hl=ko 

 

여기서 설치를 하시면 되는데 명령줄 도구 이용해 설치했습니다.

 

저는 여기서 참고했습니다. adb 설치 방법은 구글에 검색하시면 나옵니다!

https://tkdrms568.tistory.com/219

 

nox adb 연결

1. adb 설치 - developer.android.com/studio/releases/platform-tools SDK 플랫폼 도구 출시 노트 | Android 개발자 | Android Developers Android SDK 플랫폼 도구는 Android SDK의 구성요소입니다. developer.android.com 자신의 OS에 맞

tkdrms568.tistory.com

 

중간에 시스템 변수 설정 하실 때 

 

여기 까지하시면 됩니다.
저는 D 드라이브에 설치해서 이렇게 경로가 나옵니다.

 

[자신이 설치한 경로]\platform-tools_r34.0.4-windows 까지 하신 다음에

저 블로그에 나온 PATH 설정으로 %Android-SDK%\platform-tools 추가하시면 됩니다!

 

________________________________________________________________________________________________

 

*내부저장소

 

그리고 녹스 키신 다음에 윈도우 따로 터미널을 열고 adb.exe connect 127.0.0.1:62001 입력하고

adb shell을 입력을 해 연결을 하겠습니다. 혹은 adb -s [연결할 대상 nox] shell 이렇게 하셔도 됩니다

 

adb.exe 위치 디렉터리로 이동 한 뒤에 실행 하셔야 됩니다.

adb -s 127.0.0.1:62001 shell 하셔도 되요. 이는 nox가 하나가 아닌 여러개 인 경우 대상 포트을 지정해서 shell을 연결하는 방법입니다.

 

이제 터미널이랑 녹스와 연결이 된 겁니다! 그럼 /data/data 안에 뭐가 있는지 확인해 보겠습니다.

 

뭐가 많네요

 

여기에 있는 /data/data 에는 간단하게 설명드리자면 이 안드로이드에 어느 게 설치되어 있는지 볼 수 있는

폴더라고 보시면 됩니다.

 

쭉쭉 찾아보시면 저희가 설치해 둔 인스큐어 뱅크도 있습니다.

 

 

 

맨 앞에 drwxr-x--x 은 권한와 어느 파일 형식인지 알려 주는 거구요 그 다음은 UID 그 다음은 GID입니다.

 

그니깐 인스큐어 뱅크 예시로 보시면 d이니 디렉터리를 뜻하고 rwxr-x--x은 사용자는 읽고 쓰고 실행이 가능하고

그룹은 이 파일을 읽고 실행 가능하고 다른 사용자는 실행만 가능하다는 뜻입니다.

 

만약 파일 권한에대해 잘 모르시면 구글에 쳐서 보시고 오시면 됩니다.

그 다음은 파일 크기를 뜻하고 그 다음 언제 설치 됬는지 날짜 나옵니다.

 

여기서 안드로이드는  도메인 형식으로 저장되어 있습니다.

com에서 adroid 에서 insecurebankv2를 실행을 뜻한다고 보시면 됩니다

 

바로 여기가 안드로이드의 개인방입니다. 전문말로 internal storage, 내부 저장소 입니다.

누가 함부로 들어와서 실행할 수 없으며 함부로 작성을 못하는 매우 예민한 방이죠.

.

.

.

.

한 번 인스큐어뱅크 디렉터리 안으로 들어가보겠습니다.

 

cd com.android.insecurebankv2

그리고 ls -al 통해 안에 뭐가 있는지 확인 해보겠습니다.

 

저희가 전 포스팅에 apk파일 뜯어본거랑 같죠

 

환경에 따라 다르겠지만 보통 설치한 패키지에 관한 경로는 이러합니다.

 

/data/data/<package>  : 설치 앱 패키지 경로

/data/data/<package>/files : 관리자가 내부적으로 사용하는 파일을 저장(so파일, data파일, ini파일 등이 포함)

/data/data/<package>/lib : 앱에서 요청하는 라이브러리 파일 저장(so파일 존재)

/data/data/<package>/databases : 설정 파일, 컨텐츠 파일 등의 쿼리 정보가 포함된 SQLite 데이터베이스 파일(db파일)

/data/data/<package>/cache : 쓰기 읽기 권한이 있고 브라우저 캐시같이 일시적인 사용자의 상태 정보가 포함

/data/data/<package>/shared_prefs : XML파일로 저장이 되며, 앱에 공유되는 설정 파일

/data/app : 사용자에 의해 설치된 앱 경로

/system/app : 시스템에 의해 미리 설치된 경로

/mnt/sdcard : External/internal SD Card 경로

 

여기서 저희가 유심히 봐야 되는 것은 shared_prefs 파일 입니다.

저기에 XML 파일로 설정 파일이 설치 되어 있습니다.

 

인스큐어 뱅크 안에 있는 설정 파일

여기에 권한 설정부터 시작해서 다양한 정보가 담겨져 있습니다. 그러니 저희는 모의해킹하는 거니 이 파일을

잘 보면 취약점이 나오게 됩니다.

 

한번 위에서 부터 xml 파일들을 봐보겠습니다. cat 명령어 이용했습니다.

저희가 인스큐어 뱅크 접속할 때 설정한 ip가 있네요

 

오호 여기서 보니

이 파일은 사용자 정보가 저장되어 있는 파일이네요

Username와 Password가 적혀져 있고 상세 내용은 암호화가 되어 있네요.

 

apk 파일은 자동적으로 계정이나 비밀번호는 암호화 되어서 저장을 하게 되어있습니다.

그래서 사용자 정보가 담겨 있다고 해도 암호화가 되어 있어서 취약점이라고 잡을 수가 없습니다.

 

그러니깐 내부 저장소(internal storage)에 중요한 정보를 저장이 되야 합니다.

하지만 꼭 암호화가 되어야 됩니다. 강한 암호화를 이용해서 암호화가 되야만 합니다.

 

방금 본 인스큐어 뱅크 Username과 password은 약한 암호화로 되어 있습니다.

문장 끝에 ==으로 끝나는 암호는 거의 무조건 base64 암호입니다.  구글에 base64 decode라 치고 한 번 직접 넣으면

Username은 dinesh가 나오실 겁니다. 뒤에 &#13;,&#10 은 공백이나 줄 바꿈을 뜻합니다.

 

잘나오네요

 

그런데 패스워드는 이상하게 나오실 거에요. 그건 높은 확률로 키값을 이용해 양방향 통신을 하는 겁니다.

 

키 값으로 암호화되어서 단순하게 디코딩하면 안 됩니다.

 

키 값으로 암호화 한게 저렇게 나온거니 또 찾아보다 보면 안에 키값이 담긴 파일이 있을 수도 있겠죠.

 

물론 id는 평문으로 저장이 되어도 되긴 합니다.

근데 그 아이디가 알고보니 admin 권한 가진 계정이면 그 때 취약점으로 잡으시면 됩니다.

 

약간 정리하면

"내부저장소엔 중요한 정보가 있다. 하지만 강한 암호화가 되어 있어야 된다." 입니다. 

 

 

 

*외부 저장소

 

그럼 내부가 있으면 외부 저장소(External Storage)가 있겠죠. 간단히 말하면 거실이라고 보시면 됩니다.

요리를 하든 밥을 먹든 TV를 보든 상관 없듯이 안드로이드도 마찬가지로 뭘 해도 상관 없는 공간이라고 합니다.

 

근데 보통 요즘 스마트폰은 용량이 매우 크게 나와서 따로 외부 저장소 SD카드를 이용하는 경우는 드물다고 합니다.


그래도 꽤나 나중에 다루겠습니다. 일단 내부 저장소 살펴보는 위주로 실습을 해보겠습니다.

감사합니다!