[Android DIVA] Insecure Data Storage 취약점

2024. 11. 2. 10:41·모바일 앱해킹(Android)/Android DIVA

안녕하세요! 이번시간에는 모바일 DIVA 문제를 보며 Insecure Data Storage = '취약한 데이터 저장' 취약점 에 대하여 실습해보는 과정에 대하여 알아보겠습니다!

 

Insecure Data Storage 란?

> 개인정보같이 민감한 정보를 편의성을 위하여 로컬저장소에 저장해놓을 때 데이터를 평문으로 저장해버리면 공격자에 의하여 저장소가 노출될 경우 사용자의 아이디와 패스워드가 그대로 노출될 수 있는 취약점을 의미합니다. 예를들어 자동로그인을 위하여 앱의 내부저장소에 아이디와 비밀번호 정보를 저장하는 경우 비밀번호를 평문 그대로 저장해버리면 앱 내부 저장소에 접근하는 것만으로도 사용자의 계정정보가 탈취될 수 있습니다.


[실습]

1. Insecure Data Storage - Part 1

1. 우선 Nox 앱플레이어에서 DIVA 앱을 실행 후 Insecure Data Storage - Part 1 을 클릭해주세요.


2. 어디서/어떻게 인증정보가 저장되는지, 코드상 취약한 부분은 어디인지 를 찾는 문제같습니다


3. 아이디: james , 비밀번호 : admin159 라고 하고 SAVE 버튼을 눌러보겠습니다.


4. 인증정보가 저장되었다고 뜨는군요, 그러면 디컴파일링 하여 이 정보가 어디에 저장됐는지 확인해보겠습니다.


5.Jadx 를 사용하여 디컴파일링 한 다음 소스코드를 보니깐 SharedPreferences를 사용하여 앱의 내부저장소에 user & password를 평문으로 저장하는것 같습니다. 이 저장된 내용을 찾아서 열어본다면 저희가 저장한 로그인 정보를 얻을 수 있습니다!

Tip. getDefaultSharedPreferences(this) 함수를 쓰면 Preference 파일의 이름이  "jakhar.aseem.diva_preferences.xml" 라는 이름으로 자동 설정됩니다!


6. nox_adb shell 에 접근후 , /data/user/0/jakhar.aseem.diva/shared_prefs 경로에 접근하시면 저장된 preferences.xml 파일을 확인하실 수 있습니다!


7. cat jakhar.aseem.preferences.xml  라고 명령어를 입력하여 xml 파일 내용을 확인하시면 방금 저장했던 로그인 정보를 평문으로 확인하실 수 있습니다!


2. Insecure Data Storage - Part 2

1. Part2 문제 형식을 보아하니 Part 1 과 동작방식은 크게 차이 없어보입니다.


2. 이번엔 아이디 : pacmax & 비밀번호 : admin159 라고 작성후 저장해주겠습니다.


3. InsecureDataStorage2Activity 로 들어와보시면 SQLite를 사용하여 로그인 정보를 저장하는 것을 확인하실 수 있습니다. 앱 내부저장소에 저장될 DB이름이 ids2 라고 설정한 후 그 안에다가 로그인 정보를 넣는것 같습니다. 또한 쿼리문중 Insert 구문을 사용하여 myuser 라는 이름의 테이블에 아이디&패스워드가 아무런 암호화없이 평문저장이 되는것을 확인하실 수 있습니다!

 


4. 저장된 DB의 경로는 "/data/user/0/jakhar.aseem.diva/databases" 입니다. 여기엔 앱 내부저장소에 저장된 DB들이 모여있는데 저희가 원하는 DB인 ids2 의 내용을 살펴보겠습니다.


5. 다음과 같은 명령어로 DB 내용을 확인하실 수 있습니다. ids2 의 DB내용을 확인해보시면 저희가 저장했던 값인 pacmax,admin159가 저장되어있는것을 확인하실수 있습니다! (그위에 kevinadmin159는 제가 따로 실습하면서 저장했던 값인것 같습니다..)

> sqlite3 ids2 (ids2 라는 DB를 sqlite3 를 이용하여 열어본다)

> .table (현재 DB의 테이블 명을 확인한다)

> select * from myuser;  (myuser 라는 테이블의 내용을 전부 읽어온다.)


3. Insecure Data Storage - Part 3

1. Part3 의 문제 형식도 이전과 같은것 같습니다. 이번엔 아이디:taegookki&비밀번호:admin123 이라고 하고 저장을 해주겠습니다.


2. 디컴파일링 하여 InsecureDataStorage3Acitivity 의 소스코드를 확인해보니 이번 문제는 앱의 내부저장소에 파일형식으로 저장하는것 같습니다. 그러면 코드에서 이해가 필요한 부분을 차례대로 설명해보겠습니다.

1. getApplicationInfo().dataDir 은 파일저장 위치를 아래와 같은 경로로 자동설정됩니다.
2. uinfo 로 시작하여 tmp로 끝나는 이름의 파일의 객체를 생성한다.
3. 지정한 파일에 적었던 로그인정보를 평문으로 저장합니다.

3. 이후 /data/user/0/jakhar.aseem.diva 경로로 들어가면 uinfo로 시작하고 tmp 로 끝나는 파일이 존재합니다.


4. 이후 cat info1431452964tmp 라는 명령어로 내용을 확인해보면 저희가 적었던 로그인정보가 평문으로 저장된 것을 확인하실 수 있습니다!


4. Insecure Data Storage - Part 4

1. 아이디 : Gomdol & 비밀번호 : admin159 를 입력후 저장해주겠습니다.


2. 그러면 파일 에러가 뜰것입니다... 무슨일인지 한번 디컴파일하여 소스코드를 살펴봐야겠습니다.


3. InsecureDataStorage4Activity 코드를 살펴보니 로그인 정보를 파일에 저장합니다. 근데 파일을 저장할 때 getExternalStorageDirectory() 함수를 사용하여 외부저장소에 접근한다는 특징이 있습니다.. 외부저장소에 접근하려면 따로 앱의 권한에서 저장권한을 ON 해주어야 합니다.


4. NOX 화면으로 돌아가서 Diva 아이콘을 꾹누르면 앱 정보 라는 항목이 뜨게되는데 클릭합니다.


5. 권한 메뉴로 접근하셔서 앱의 저장 권한을 부여해주세요.

권한 메뉴로 접근 저장 권한을 ON  하기

6. 이후 다시 저장해보시면 이번엔 무사히 저장되는 것을 확인하실 수 있습니다!


7. 자 그럼 저장도 했으니 소스코드를 다시 살펴보죠! .... 이번 문제는 전반적으로 Part3 문제와 매우 유사하지만 하나 다른점이 있습니다. 이번엔 외부저장소의 절대경로를 파일의 저장경로로 사용한다는 점입니다!

※외부저장소의 절대경로는 : /storage/emulated/0 입니다!

즉 밑에 코드대로면 파일의 저장경로는 /storage/emulated/0/.uinfo.txt 가 됩니다!


8. 실제로 해당 경로에 접근하게 되면 .uinfo.txt 라는 파일이 존재합니다. 이때 ls -al 이라는 명령어로 숨겨진 파일까지 전부 보게 해주어야 txt 파일이 표시되게 됩니다. 이후 cat 명령어로 txt 내용을 확인하시면 저희가 입력한 로그인 정보가 평문으로 저장되어 있는것을 확인하실 수 있습니다.


[대응방안]

이 문제는 민감한 정보를 평문 그대로 저장하는것이 원인이였습니다. 대응방안은 다음과 같습니다.

 

  • 패스워드와 같은 민감한 정보는 앱이 삭제되면 같이삭제될 수 있도록 내부저장소에 저장
  • 저장할 때 반드시 비밀번호와 같은 민감한 정보는 반드시 암호화 하여 저장(암호화는 Hash 암호화 추천)

긴 글 읽어주셔서 감사합니다!

'모바일 앱해킹(Android) > Android DIVA' 카테고리의 다른 글

[Android DIVA] Access Control Issues 취약점  (1) 2024.11.06
[Android DIVA] Input Validation Issues 취약점  (0) 2024.11.03
[Android DIVA] Hardcoding Issues 취약점  (0) 2024.10.30
[Android DIVA] '취약한 로깅' 취약점  (0) 2024.10.28
[Reversing] 디스어셈블러 툴 GHIDRA 설치방법  (0) 2024.10.27
'모바일 앱해킹(Android)/Android DIVA' 카테고리의 다른 글
  • [Android DIVA] Access Control Issues 취약점
  • [Android DIVA] Input Validation Issues 취약점
  • [Android DIVA] Hardcoding Issues 취약점
  • [Android DIVA] '취약한 로깅' 취약점
무너박사
무너박사
IT 보안 블로그 입니다. 제가 작성하는 블로그가 누군가의 공부에 조금이라도 도움이 되길 바라며 작성하였습니다.
  • 무너박사
    무너박사의 연구일지
    무너박사
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • WEB 지식 (3)
      • 웹해킹 (13)
      • 웹개발(PHP-Mysql) (12)
      • 웹개발(JSP-Oracle) (2)
      • 워게임 문제풀이 (19)
        • Segfault (17)
        • Dreamhack (2)
      • SQL (3)
      • Python (2)
      • AI (1)
        • LLM(Large Language Model) (1)
      • Kail Linux (3)
      • 잡다한 지식 (2)
      • 모바일 앱개발(Kotlin-PHP-Mysql) (13)
      • 모바일 앱해킹(Android) (31)
        • Frida Lab (2)
        • Android DIVA (8)
        • Insecure Bank (20)
      • 안드로이드 위협 탐지 및 우회 (0)
        • 루팅 탐지 & 우회 (0)
        • 디버깅 탐지 & 우회 (0)
        • 에뮬레이터 탐지 & 우회 (0)
        • Frida 탐지 & 우회 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Kotlin
      php
      인시큐어 뱅크
      칼리리눅스
      모의해킹
      시스템해킹
      Koltin
      normaltic
      dom based xss
      앱해킹
      인시큐어뱅크
      리패키징
      취업반
      Android Studio
      취업반6기
      워게임
      sql injection
      Blind sql injection
      웹해킹
      MySQL
      mobile diva
      안드로이드 스튜디오
      해킹
      android diva
      모바일 앱해킹
      모바일 앱개발
      insecure bank
      XSS
      모바일앱개발
      취업반 6기
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    무너박사
    [Android DIVA] Insecure Data Storage 취약점
    상단으로

    티스토리툴바