9. 로컬 암호화 이슈 & 취약한 SD카드 스토리지

2024. 12. 16. 09:00·기반 지식/Android

1. 취약점 소개

○ 안드로이드에서 온라인/오프라인을 통해 데이터를 처리할 수 있도록 로컬 스토리지 제공

○ 애플리케이션 환경설정 정보, 외부 API 연동 및 인증을 위한 토큰 값, 연동 서버 정보 등을 로컬 스토리지에 저장

○ 로컬 스토리지에 데이터를 저장하는 경우 보안을 고려하지 않으면 평문 형태의 파일로 저장

○ 애플리케이션에서 저장되는 파일이나 데이터는 소유자만 접근 하도록 제한

○ 공격자가 접근 제한을 우회하거나 권한 상승에 성공하는 경우 평문으로 저장된 데이터 획득 가능

  

2. 데이터 저장

저장소 설명
Shared Preferences ● 안드로이드 앱 설정(ID/PASS, 사용자 토큰 정보 등)들이 저장되는 저장소
SQLite Databases ● 데이터베이스(컨텐츠 목록, 사용자 목록 등)에 데이터가 저장되는 저장소
Internal Storage  ● 내부 저장소 (위 두 저장소는 해당 저장소에 저장되어 있음)
External Storage ● 외부 저장소

 

○ 데이터를 저장하는 것은 많은 모바일 앱에서 필수적

○ 일부 앱은 데이터 저장소를 사용해 사용자 설정 또는 사용자 제공 데이터를 추적

○ 안드로이드 플랫폼에서 널리 사용되는 저장소 기술 목록

 

3. Shared Preferences

MODE_WORLD_READABLE

○ Key-value 쌍으로 앱의 환경 설정을 저장하는 데 사용되는 XML 파일

○ 일반적으로 boolean, float, int, long, string의 타입을 가짐

○ MODE_WORLD_READABLE를 사용하면 모든 애플리케이션이 XML 파일에 접근 가능

○ MODE_WORLD_READABLE 및 MODE_WORLD_WRITEABLE은 Android 4.2(API Level 17) 부터

   더 이상 사용되지 않아, Android:targetSdkVersion 값이 17보다 작은 애플리케이션은 영향을 받음

 

KEY.xml

○ 앱에서 액티비티가 호출되면 key.xml 파일에 제공된 데이터가 작성됨

○ 사용자 이름과 비밀번호는 아래 파일에 일반 텍스트로 저장됨

    ● /data/data/<package-name>/shared_prefs/key.xml

○ MODE_WORLD_READABLE을 사용하면 모든 애플리케이션이 key.xml의 컨텐츠에 접근 가능

 

 

4. SQLite Databases

○ 모바일 환경에서 일반적으로 사용되는 경량 파일 기반 데이터베이스 (key value 쌍으로 이뤄짐)

○ 안드로이드 SDK는 SQLite 데이터베이스를 기본적으로 지원함

○ 특정 애플리케이션의 SQLite 데이터베이스에 저장된 데이터는 기본적으로 안드로이드 보안 제한으로 인해

   다른 애플리케이션에 접근할 수 엇음

○ 데이터베이스를 관리하는 데 사용되는 기본 패키지는 android.database.sqlite

○ 두 가지 종류인 Unencrypted & Encrypted로 나눠볼 수 있음

 

[ Unencrypted ]

MODE_PRIVATE

○ 암호화 되지 않은 일반 텍스트가 저장됨

○ 액티비티가 호출되면 제공된 데이터로 privateNotSoSecure 데이터베이스 파일이 작성

○ 아래 경로의 일반 텍스트 파일에 저장

    ● /data/data/<package-name>/databases/privateNotSoSecure

○ MODE_PRIVATE를 사용해 접근 설정

 

[ Encrypted ]

En

○ 지정한 비밀번호로 암호화된 정보가 저장됨

○ SQLCipher 라이브러리를 사용하면 SQLite 데이터베이스를 비밀번호로 암호화 가능

○ 이런 경우, 비밀번호가 소스에 하드 코딩되어 있거나 Shared Preferences에 저장되어 있거나

    코드 또는 파일 시스템의 다른 곳에 숨겨져 있는지 판별해야 함

○ 키를 검색하는 가장 안전한 방법

    ● 앱을 열면 사용자에게 PIN 또는 비밀번호로 데이터베이스의 암호를 해독하도록 요청
    ● 서버에 키를 저장하고 웹 서비스에서만 접근할 수 있도록 허용

 

 

5. Internal Storage

내부 저장소
MODE_PRIVATE

○ 내부 저장소는 파일을 저장하는데 사용

○ 각 애플리케이션은 /data/data/<package-name>와 같은 디렉토리를 생성해, 해당 디렉토리는 생성한

    애플리케이션 전용이며 다른 애플리케이션은 접근할 수 없음

○ 사용자가 애플리케이션을 제거하면 내부 저장소에 저장된 파일도 제거됨

○ MODE_PRIVATE를 사용해 접근 설정

○ MODE_WORLD_READABLE 및 MODE_WORLD_WRITEABLE과 같은 모드는 보안 위협 발생

 

6. External Storage

외부 저장소

 

password.txt

○ 외부 저장소는 내부 저장소와 마찬가지로 파일을 저장하는데 사용

○ 이동식 저장 매체(예: 외부 SD 카드) 또는 내부일 수 있음

○ 모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있기 때문에 민감한 파일은 저장해서는 안됨

○ 액티비티가 호출되면 파일이 작성되고 데이터가 외부 저장소의 일반 텍스트 파일에 저장됨

○ 또한 사용자가 애플리케이션을 제거할 때 애플리케이션 폴더 외부에 저장된 파일은 삭제되지 않음

 

 

 

'기반 지식 > Android' 카테고리의 다른 글

11. 녹스(Nox)에서 앱 SSL 자격증명 설치  (0) 2024.12.21
10. 안드로이드 dumpsys 패키지 정보 확인  (2) 2024.12.20
8. GDA를 활용한 디컴파일 코드 분석 사례  (0) 2024.12.13
7. Adroid 앱 코드 정적 분석 tool  (0) 2024.12.12
6. 모바일 취약점 진단 항목  (0) 2024.12.09
'기반 지식/Android' 카테고리의 다른 글
  • 11. 녹스(Nox)에서 앱 SSL 자격증명 설치
  • 10. 안드로이드 dumpsys 패키지 정보 확인
  • 8. GDA를 활용한 디컴파일 코드 분석 사례
  • 7. Adroid 앱 코드 정적 분석 tool
real-again
real-again
realagin 님의 블로그 입니다.
  • real-again
    또또, 다시
    real-again
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로젝트
        • AOS 모바일 앱 모의해킹
        • Spring Boot 웹 애플리케이션 구축
        • [ESXi]인프라 구축 및 모니터링
        • 인프라 취약점 진단 고도화
      • CVE 분석
      • 기반 지식
        • AWS
        • 인프라
        • 웹 어플리케이션
        • Android
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    브로트캐스트
    insecure authentication/authorization
    EC2
    app intsructure
    sd스토리지
    vlan
    spring boot
    android directory
    dvm
    하드코드
    통신 과정 취약점 진단
    owasp mobile top10
    aos정리
    pfsense
    tocken
    AWS
    Snort
    splunk #esm
    diva
    콘텐츠 프로바이더
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
real-again
9. 로컬 암호화 이슈 & 취약한 SD카드 스토리지
상단으로

티스토리툴바