반응형
SMALL

<그림 1-1 URL 값 입력>

DIVA 앱을 실행해 8. Input Validation Issue - Part 2를 선택하면 입력 창이 나오는데 일반적인 네이버 페이지를 입력해 접근해본다.

<그림 1-2 네이버 페이지>

웹 URL을 입력하고 View를 클릭하면 그림 1-2와 같은 네이버 페이지가 나오는데 사진으로 봐선 별다른 공격이나 특이사항은 없다.

 

<그림 1-3 소스 코드>

소스 코드를 보면 육안으로 봐선 별 문제가 없어보이지만 loaduri쪽을 보면 사용자가 입력한 값에 대해 별다른 인증절차도 없이 바로 전송된다는 걸 확인할 수 있다. loaduri 전송 외에도 파일 접근도 시도해볼 수 있는데 file:/// 형식으로 접근하면 된다.

 

<그림 1-4 민감한 데이터 노출>

Diva 앱에서 중요 정보 데이터가 저장되는 파일은 .uinfo.txt였는데 이 파일이 있는 경로를 입력한다. 이 파일이 있었던 곳은 sdcardcard에 있었다. file:///sdcard/.uinfo.txt를 입력하고 View를 클릭하면 그림 1-4와 같이 계정 정보가 그대로 노출되는 취약점이 있다는 것을 확인할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 하드 코딩 힌트>

DIVA 앱을 실행하고 2. Hardcoding Issue - Part 1을 선택하면 맨 위 상단에 힌트가 나오는데 어디에 하드코딩된 정보가 있는지 찾으라고 나온다. 하지만 이 앱만 봐서는 하드코딩된 정보를 찾을 순 없다.

<그림 1-2 값 입력>

중간에 어떤 걸 Access 하는게 있는데 아무런 값이나 대입하고 Access를 실행해보니 Access가 거부되었다는 메시지가 표시된다.

 

<그림 1-3 소스 코드>

소스 코드를 보면 access 하는 함수 부분에서 사용자가 입력한 값과 vendorsecretkey라는 문자열과 비교하고 있다. 여기서 vendorsecretkey가 Access 할 수 있는 Key 값임을 알 수 있다. 그림 1-3과 같이 코드에 Key 값이 노출되면 매우 위험하다고 판단할 수 있으며 하드코딩 취약점으로 판별할 수 있다.

<그림 1-5 Key 값 입력>

Diva 앱으로 다시 돌아와 입력값란에 vendorsecretkey를 입력하고 Access하면 성공적으로 Access가 되었다는 메시지가 표시된다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 로그 캣 확인>

먼저 cmd 창에 adb logcat을 입력해 DIVA 앱을 실행함으로써 어떤 로그 정보들이 전송되고 있는지 확인한다.

 

<그림 1-2 입력값 검증>

DIVA 앱을 실행하고 7.INPUT VALIDATION ISSUES - PART 1을 클릭하고 diva를 입력하면 그림 1-2와 같이 diva라는 사용자의 계정 정보 및 신용 카드 정보가 앱에 그대로 노출된다.

 

<그림 1-3 소스 코드>

SQLInjectionActivity 클래스를 보면 SQL 쿼리를 볼 수 있는데 "SELECT * FROM sqliuser WHERE user = \'"사용자 입력"\'" 쿼리를 사용해서 검색을 한다. SQL 인젝션에 대한 대응 방안이 전혀 반영되지 않은 소스 코드라고 판단할 수 있다.

<그림 1-4 SQL 인젝션 공격>

'or '1'='1을 입력해 SQL 인젝션 공격을 진행하면 DB에 저장되어 있는 사용자의 계정 정보, 신용카드 정보들이 앱 화면에 그대로 노출됨을 확인할 수 있다.

 

<그림 1-5 로그 캣 정보>

로그 캣 전송 정보들을 확인해보면 SQL 인젝션 공격이 그대로 들어가 실행되고 있음도 같이 확인할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 계정 입력>

DIVA 앱을 실행하고 Insecure Data Storage - 4를 클릭하면 계정 정보 입력란이 나오는데 아이디, 패스워드를 입력하고 SAVE 버튼을 누르면 계정이 앱의 외부 저장소로 전송된다.

 

<그림 1-2 소스 코드>

소스 코드를 보면 그림 1-1에서 입력된 계정 정보를 외부저장소 위치에 .uinfo.txt이라는 파일을 생성해 저장하고 있음을 확인할 수 있다. 파일명 앞에 .을 붙이면 숨김 파일로 인식되서 탐색기에서 바로 보여지지 않기 때문에 리눅스 상에서 파일을 확인할 땐 ls -al 명령어를 사용해야 한다. 또한 파일에 계정 정보를 저장할 때 따로 암호화 시키는 소스코드는 확인할 수 없어 평문으로 저장되고 있음을 추측할 수 있다. 

 

<그림 1-3 .uinfo.txt>

 adb shell을 입력해 안드로이드 내에 접속 후 cd /sdcard 명령어를 입력해 외부 저장소로 이동해 ls -al을 입력해 목록을 확인하면 .uinfo.txt를 발견할 수 있다. 이 파일에 계정 정보가 담겨 있다.

 

<그림 1-4 계정 정보>

cat .uinfo.txt 명령어를 입력해 해당 파일 내의 내용을 보면 그림 1-1에서 입력했던 계정 정보를 확인할 수 있다. 계정 정보가 저장될 때 암호화 되지 않고 평문으로 저장되서 취약점이 발견되었다고 볼 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 계정 입력>

DIVA 앱을 실행하고 Insecure Data Storage - 3를 클릭하면 계정 정보 입력란이 나오는데 아이디, 패스워드를 입력하고 SAVE 버튼을 누르면 계정이 앱의 내부 저장소로 전송된다.

 

<그림 1-2 소스 코드>

그림 1-2의 소스코드를 보면 tmp 폴더에 uinfo로 시작하는 파일 명으로 파일이 생성되는데 이 파일 안에 그림 1-1에서 보낸 계정 정보들이 담긴다는 것을 추측할 수 있다. 또한 소스코드에서 따로 암호화 처리를 하는 코드는 없어 계정 정보가 저장될 때 암호화 되지 않고 그대로 저장된다는 것도 추측해볼 수 있다.

<그림 1-3 파일 생성>

adb shell을 입력해 안드로이드 쉘로 들어간 후 cd /data/data/jakhar.aseem.diva를 입력해 해당 앱 내부로 들어가서 ls -al을 입력해 목록을 확인하면 uinfo-502312121tmp라는 파일이 있는데 이 파일에 그림 1-1에서 입력했던 계정 정보들이 저장된다.

 

<그림 1-4 계정 정보>

cat uinfo-502312121tmp 명령어를 입력해 파일 내의 내용을 확인하면 그림 1-1에서 입력했던 계정 정보들을 확인할 수 있다. 이 때 파일에 암호화되지 않고 평문으로 전송된 것이 취약점이라고 판단할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 Insecure Data Storage - 2> 

DIVA 앱을 실행하고 Insecure Data Storage - 2를 선택하면 그림 1-1과 같이 계정 정보 입력 창이 나온다. 아이디, 패스워드를 넣고 Save 버튼을 누르면 계정 정보들이 앱의 내부 저장소에 저장된다.

 

<그림 1-2 소스 코드>

해당 앱의 소스 코드를 확인하면 Databases 폴더의 ids2 파일에 계정 정보를 전송하고 있음을 볼 수 있다. 현재 소스 코드를 보면 데이터베이스에 계정정보가 저장될 때 아무런 암호화 조치도 없이 그대로 저장되고 있음을 확인할 수 있다.

 

<그림 1-3 내부 저장소>

adb shell을 실행해 cd /data/data/jakhar.aseem.diva 폴더에 접근해 목록을 확인하면 중요 정보들이 저장되는 폴더들을 확인할 수 있다. 그림 1-2에서 본 것과 같이 Databases 폴더에 입력한 값들이 저장되고 있기 때문에 cd databases를 입력해 databases 폴더에 접근한다. databases 폴더에 접근하면 ids2 파일이 있는데 ids2 파일에 그림 1-1에서 입력한 계정 정보가 저장되고 있는 것이다.

 

<그림 1-4 SQlite 접근>

데이터베이스 정보를 확인하기 위해 SQlite를 실행한다. 리눅스 환경에서도 실행이 가능하기 때문에 sqlite3 ids2를 입력한다. 이 때 ids2는 정보가 담긴 파일이다. sqlite3가 실행되면 .tables를 입력해 테이블 정보들을 확인한다. 테이블 정보를 보면 myuser이 있는데 이 테이블에 접근한다.

<그림 1-5 계정 정보>

myuser 파일을 덤프해서 확인해보면 데이터베이스에 그림 1-1에 입력했던 계정 정보들이 들어가는 것을 확인할 수 있다. 하지만 여기서 취약점은 암호화 되지 않은 상태로 계정 정보가 데이터베이스에 저장되고 있다는 것이다. 

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 Insecure Data Storage - 1>

DIVA 앱에서 3번째인 Insecure Data Storage - 1을 선택하면 그림 1-1과 같이 아이디, 패스워드를 입력하는 화면이 나오는데 여기서 아이디, 패스워드를 입력하면 앱의 내부 저장소에 중요 정보들이 저장된다.

<그림 1-2 내부 저장소>

윈도우 cmd 창에서 adb shell을 입력해서 nox의 내부로 접근한다. cd /data/data/를 입력 후 ls 명령어를 입력하면 현재 설치되어 있는 앱의 정보가 담겨있는 목록들이 나오는데 여기서 jarhar.aseem.diva에 접근한다. 마찬가지로 cd jarhar.aseem.diva를 입력한다.

 

<그림 1-3 내부 저장소>

 jarhar.aseem.diva를 입력한 후 ls -al 명령어를 입력하면 해당 목록들이 나오는데 shared_prefs는 중요 정보를 저장해 놓는 장소다. cd shared_prefs를 입력해서 해당 폴더에 접근한다.

<그림 1-4 중요 정보 파일>

shared_prefs에 접근하면 jarkhar.aseem.diva_preferences.xml 파일이 나오는데 이 파일에 그림 1-1에서 입력했던 아이디, 패스워드 정보가 저장되어 있다.

<그림 1-5 중요 정보>

cat 명령어를 사용해서 해당 파일을 열면 그림 1-1에서 입력했던 계정 정보가 담겨 있다는 것을 볼 수 있다. 여기서 중요한건 계정 정보가 암호화 되지 않고 평문으로 노출되어 있다는 점에서 취약점이라고 판단할 수 있다.

 

<그림 1-5 소스 코드>

Jadx-Gui 도구를 사용해 해당 앱을 디컴파일해서 열면 InsecureDataStorage | Activity 항목이 있는데 해당 항목 소스코드를 보면 계정 정보를 보낼 때 어떠한 암호화 처리가 되지 않은 채 그대로 계정 정보를 전송하고 있다는 것을 볼 수 있다. 

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

안드로이드 앱 취약점 중 하나인 안전하지 않은 로깅은 Logcat을 통해 앱 실행 Log들이 보여질 때 아이디, 비밀번호 등과 같은 중요 정보들이 평문으로 노출되어 2차 피해를 입을 수 있다.

 

<그림 1-1 DIVA 앱>

안드로이드에 DIVA 앱을 설치하고 1. Insecure Logging을 클릭한다.

 

<그림 1-2 특정 값 입력>

임의의 카드 비밀번호를 입력하고 Check out을 누르면 에러메시지가 발생하게 된다. 현재 그림 1-2에선 나와 있지 않지만 임의의 번호를 입력하고 Check out을 누르면 에러메시지가 발생한다. 에러메시지가 발생하고 adb logcat을 통해 Logcat 정보를 보면 된다.

 

<그림 1-3 Logcat 정보>

adb logcat을 입력해 Logcat 정보들을 보면 그림 1-2에서 전송했었던 123123이 난독화 되지 않고 평문으로 전송되고 있음을 확인할 수 있다. 

 

<그림 1-4 jadx-gui>

Jadx-gui 디컴파일 도구를 활용해 Diva 앱의 소스코드를 진단해본다. 현재 취약점이 발생되는 곳은 LogActivity쪽인데 전송되는 로그 정보 코드를 살펴보면 어떠한 시큐어코딩도 되지 않은채 사용자가 입력한 값이 그대로 전송되는 취약점이 발생하게 되는 것이다. 대응 방안은 이 코드 자체를 시큐어코딩을 하거나 삭제 하는 것이다.

반응형
LIST
블로그 이미지

만년필석사

,