[안드로이드 APK 진단] DIVA - 11.접근 제어 부재 파트 3
·
Android_Vuln
11번째 문제, "ACCESS CONTROL ISSUES - PART3"을 클릭한다. 목표를 보면 PIN을 설정하고 해당 PIN을 이용해야만 개인 노트에 접근할 수 있는데, 우리는 PIN을 알 지 못하는 상태에서 개인 노트에 접근을 해야 한다. 일단 임의의 PIN 코드를 생성하면 위 사진과 같이 성공 메시지가 나타난다. 개인 노트 내용을 알아보기 위해 "GO TO PRIVATE NOTES"를 클릭한다. 이전에 생성한 PIN을 입력한다. 개인 노트 내용은 위 사진과 같다. Manifest.xml 파일을 보면 위 사진과 같이 provider가 exported=true 상태임을 볼 수 있다. 따라서 우리는 provider의 정확한 경로만 알면 앱을 실행하지 않고 해당 내용을 볼 수 있다. diva apk를 a..
[안드로이드 APK 진단] DIVA - 10.접근 제어 부재 파트 2
·
Android_Vuln
10번 문제, "10. ACCESS CONTROL ISSUES - PART 2"를 클릭한다. 목표를 보면 Tveeter에 등록을 하고 나면 TVEETER API 자격 증명을 얻을 수 있다고 한다. 이 앱은 온라인 등록을 해야 하는데, 벤더가 핀 코드를 주면 해당 핀 코드를 이용해서 등록해야 한다.우리의 목표는 핀 코드를 모르는 상태에서 앱 바깥에서 API 자격 증명을 얻는 것으로, 비즈니즈 로직 문제이기 때문에 코드를 봐야한다고 한다. Register Now를 선택하고 VIEW TVEETER API CREDENTIALS 버튼을 클릭한다. 등록을 시도하면 핀 코드를 입력하라고 한다. 임의의 핀 코드를 입력하면 잘못된 코드라는 메시지가 나타난다. Already Registered를 선택하고 API 자격 증명..
[안드로이드 APK 진단] DIVA - 9.접근 제어 부재 파트 1
·
Android_Vuln
9 번째 문제, "9. ACCESS CONTROL ISSUES - PART 1"을 클릭한다. 목표를 보면 버튼을 클릭할 때 API 자격 증명을 접근할 수 있는데 앱을 실행하지 않고 해당 자격 증명에 접근해야 한다. API 자격 증명을 보면 위 사진과 같다. APK. 파일의 Manifest.xml 파일을 보면 위 사진과 같은데, activity는 intent-filter로 보호 된 것을 볼 수 있다. 그러나 절대 intenet-filter를 보호 메커니즘으로 사용하면 안 된다. intent-filter가 activity와 같은 어플리케이션 컴포넌트에 쓰였을 때 해당 컴포넌트는 공개적으로 export 되기 때문에 임의로 접근할 수 있게 되어 진다. * 인텐트 필터와 구성 요소에 대해서는 다음 링크 참고 ->..
[안드로이드 APK 진단] DIVA - 8.입력 값 검증 부재 파트 2
·
Android_Vuln
8 번째 문제 "8. INPUT VALIDATION ISSUES - PART 3"을 클릭한다. 목표를 보면 웹 URL을 이용하는 것이 아니라, 다른 것을 이용하여 민감 정보를 접근하라고 한다. 일단 혹시 모르니 http://google.com 입력 후 VIEW를 클릭한다. 그냥 구글 홈페이지가 열릴 뿐 별다른 행위는 발생하지 않는다. (logcat 으로 보아도 마찬가지) InputValidation2URISchemeActivity 클래스의 코드를 대충 보면 별 문제가 없어 보인다. 문제는 위 사진에서 강조 된 라인에서 사용자의 입력에 대하여 별다른 필터링을 하지 않고 loadUrl 함수의 인자로 사용한다는 뜻이다. > URL 이 아닌 다른 것을 이용하여 민감 정보를 획득하라고 했으니 파일 접근을 시도해 ..
[안드로이드 APK 진단] DIVA - 7.입력 값 검증 부재 파트 1
·
Android_Vuln
7 번째 문제, "7.INPUT VALIDATION ISSUES - PART 1"을 클릭한다. 목표를 보면 특정한 사용자의 이름을 알지 못하는 상태에서 모든 사용자의 데이터에 대하여 접근하는 것이다. 3명의 사용자가 있는데 단 한번의 악용적인 검색을 통해 모든 데이터를 가져와야 한다. 사용자는 모른다고 하지만 게싱을 통해 어플의 이름인 "diva"를 입력하고 SEARCH를 클릭하면 위 사진처럼 diva 사용자의 아이디, 비밀번호, 신용카드 번호가 나타난다. SQLInjectionActivity 클래스를 보면 SQL 쿼리를 볼 수 있다. DB 생성 후 3명의 사용자(admin, dvia, john)에 대한 데이터를 삽입한다. 그리고 "SELECT * FROM sqliuser WHERE user=\'"사용자..
[안드로이드 APK 진단] DIVA - 6.안전하지 않은 데이터 저장 파트 4
·
Android_Vuln
6 번째 문제 "6. INSECURE DATA STORAGE - PART 4"를 클릭한다. 임의의 로그인 정보를 입력한다. InsecureDataStorage4Activity 클래스 코드를 보면 외장저장소 위치에 uinfo.txt 라는 파일을 생성하는데 파일명 앞에 '.' 이 붙는다 > 보통 안드로이드에서 외장 저장소라 하면은 /sdcard 경로를 의미한다. > 파일명 앞에 '.' 을 붙이면 숨김 파일로 인식 되어 파일 탐색기의 기본 설정으로는 보이지 않기 때문에 숨김 파 일 표시를 하거나 "ls -a" 명령를 이용해야 한다. /sdcard 경로로 이동하면 숨김 파일인 ".uinfo.txt" 파일을 보면 사용자가 입력한 로그인 정보를 볼 수 있다.
[안드로이드 APK 진단] DIVA - 5.안전하지 않은 데이터 저장 파트 3
·
Android_Vuln
5번째 문제 "5. INSECURE DATA STORAGE - PART 3"을 클릭한다. 기존 문제들과 마찬가지로 임의의 로그인 정보를 입력한다. InsecureDataStorage3Activity 클래스 코드를 보면 uinfo 문자열로 시작하는 임시 파일을 만들어 사용자가 입력한 값을 저장한다. diva 패키지 경로로 이동해보면 uinfo+숫자+tmp 이름을 가지는 파일을 볼 수 있는데 내용을 보면 사용자가 입력한 로그인 정보임을 알 수 있다.
[안드로이드 APK 진단] DIVA - 4.안전하지 않은 데이터 저장 파트 2
·
Android_Vuln
4 번째 문제 "INSECURE DATA STORAGE - PART 2, 안전하지 않은 데이터 저장 파트 2"를 클릭한다. 목표는 이전과 마찬가지로 민감한 정보가 어디에 어떻게 저장되는지, 관련 코드를 알아내는 것이다. 임의의 인증 정보를 입력하면 성공적으로 저장되었다는 메시지가 나타난다. InsecureDataStorage2Activity 클래스 코드를 보면 ids2 라는 데이터베이스를 생성 후 myuser 라는 테이블을 추가한다. 그리고 사용자가 입력한 값을 해당 테이블에 삽입한다. 위 사진에서 보는 것처럼 diva 앱의 전체 패키이 경로에서 databases 라는 폴더를 보면 2가지 종류의 파일이 있다. > divanotes.db > ids2 InsecureDataStorage2Activity 클래..
[안드로이드 APK 진단] DIVA - 3.안전하지 않은 데이터 저장 파트 1
·
Android_Vuln
3번째 문제인 "INSECURE DATA STORAGE - PART 1, 안전하지 않은 데이터 저장 파트 1"를 클릭한다. 목표를 보면 식별 정보가 어디에 어떻게 저장되는지, 관련 코드는 어떻게 되는지 알아내야 한다. 입력란을 보면 써드파티 서비스의 사용자 이름과 비밀번호를 입력하라고 하는데 이런 류의 어플은 실제로 사이트 별로 계정과 이름을 다르게 설정할 경우 외우는 것이 힘들 수 있기 때문에 자동 로그인을 위해 실제로 사용하기도 한다. 임의의 아이디와 비밀번호를 입력하면 성공적으로 저장되었다는 메시지가 나타난다. adb shell을 이용해 DIVA 앱이 설치 된 대상 디바이스의 쉘을 얻는다. 안드로이드는 보통 어플 관련 데이터가 "/data/data/어플 패키지" 경로에 저장된다. > cd `ls |..
[안드로이드 APK 진단] DIVA - 2.하드코딩 이슈 파트 1
·
Android_Vuln
2번째 문제인 "HARDCODING ISSUES - PART 1, 하드코딩 이슈 파트 1"를 클릭한다. 목표를 보면 어떤 정보가 어디에 하드 코딩 되어 있는지 찾으라고 한다. 중간쯤을 보면 벤더 키를 입력하라고 되어 있는데 특정한 키를 이용해야 벤더(개발 회사)만의 기능을 이용할 수 있는 듯 하다. 임의의 벤더 키를 입력하면 접근이 거부되었다고 나온다. HardcodeActivity 클래스를 보면 access 함수에 조건이 있는데 사용자가 입력한 값을 "vendorsecretkey" 문자열과비교하고 있다. 해당 키를 입력하면 접근 허용 메시지가 나타난다.