[안드로이드 모의해킹] 단말기 내 중요정보 저장

직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)

개요

동적 분석 항목 중 하나인 단말기 내 중요정보 저장이다. 안드로이드 운영체제가 설치된 스마트폰이나 태블릿과 같은 기기에서 사용자의 중요한 정보가 저장되는 방식과 관련된 보안 취약점을 진단한다.

개발자들은 단말기에 저장될 데이터의 크기, 중요도, 기간 등을 고려해서 안드로이드에서 제공하고 있는 다양한 저장소에 데이터를 보관한다.

안드로이드 기기에는 다양한 유형의 중요한 정보가 저장될 수 있다. 이 정보에는 사용자의 개인 식별 정보, 금융 정보, 의료 정보, 회사 비즈니스 정보 등이 포함될 수 있다. 따라서 이러한 정보가 노출되거나 악용될 경우 사용자의 프라이버시나 안전이 위협 받을 수 있다.

안드로이드 취약점 진단 항목에서는 이러한 중요한 정보가 저장되는 방식에 따라 취약점을 식별한다. 이 항목은 데이터베이스나 파일 시스템, 암호화와 같은 보안 기술을 사용하여 중요한 정보를 안전하게 저장하는 방식을 살펴본다. 또한, 사용자 인증 및 권한 관리와 같은 보안 메커니즘도 확인한다.

중요정보 저장 위치

단말기 내 중요정보 저장 진단

안드로이드 운영체제는 다양한 유형의 중요한 정보를 저장하는데 사용되는 여러 가지 내부 저장소를 제공한다. 일반적으로 안드로이드에서 중요한 정보가 저장될 수 있는 위치는 다음과 같다.

  • SQLite Database : 많은 안드로이드 앱에서 사용되는 SQLite 데이터베이스는 중요한 정보를 저장하는 데 사용된다. 이 데이터베이스는 앱의 내부 저장소에 저장되며, 사용자 인증과 암호화를 통해 보호될 수 있다.

  • SharedPreferences
    /data/data/[Package Name]/shared_prefs/SharedPreferences
    SharedPreferences.xml에 저장되는 데이터는 기본적으로 앱의 내부 저장소에 저장되며, 앱이 root 권한을 갖지 않는 한 다른 앱이나 사용자가 접근할 수 없도록 보호된다. 그러나 루팅된 단말기 이거나 다른 예외적인 상황에서 민감한 데이터가 노출될 수 있다.
    예를 들어, 사용자 인증 토큰과 같은 중요한 정보가 SharedPreferences.xml에 저장될 경우, 이 정보를 포함하는 앱이 다른 앱과 공유하는 데이터를 사용할 수 있는 경우 민감한 정보가 노출될 수 있다. 이러한 상황에서는 악성 앱이 이 민감한 데이터를 탈취하여 사용자의 계정에 대한 접근 권한을 얻을 수 있다.
    또한, SharedPreferences.xml 파일 자체가 다른 앱 또는 사용자가 접근 가능한 저장소에 저장될 수 있는 경우 민감한 데이터가 노출될 수 있다. 예를 들어, 파일 탐색기 앱을 사용하여 기기의 내부 저장소를 탐색하는 경우에 SharedPreferences.xml 파일을 발견할 수 있다. 이 경우 악의적인 사용자가 파일을 열어 민감한 정보를 볼 수 있다.
  • 파일 시스템 : 안드로이드 내부 저장소에는 파일 시스템도 있으며, 여기에는 다양한 유형의 중요한 파일이 저장될 수 있다. 예를 들어, 사용자의 사진, 동영상, 문서, 음악 파일 등이 저장될 수 있다.
  • 암호화된 저장소 : 안드로이드에서는 암호화된 내부 저장소를 제공하여 중요한 정보를 안전하게 저장할 수 있다. 이 저장소는 사용자 인증 및 암호화를 통해 보호되며, 앱의 코드를 수정하는 공격으로부터 보호된다.
    Android Keystore:
    - 안드로이드에서 권장하는 안전한 저장 방식
    - 민감 정보를 암호화 후 결과 값을 Shared Preferences에 저장
    - 암호키는 별도 컨테이너 내 위치하며, Text, String 등 어떠한 형태로도 추출 불가

진단 시 유의사항으로는 사용자가 앱의 기능을 사용(로그인, 값 입력 및 전송 등)해야 데이터가 저장되는 동적 분석 항목이기 때문에 앱에서 충분한 기능사용하면서 저장되는 데이터를 분석해야 한다.

또한 계정정보나 토큰정보가 암호화되어 저장되어 있는 경우 평문으로 노출되지 않기 때문에 안전하다고 할 수도 있지만, 앱 설치파일에서 암복호화 키, 로직이 확인가능한 경우(=암호화된 값의 복호화가 가능한 경우) 취약으로 진단한다. 아래의 취약하게 개발된 앱에서 확인할 수 있다.

취약하게 개발된 앱

일반적인 실습은 직접 구현하거나 DIVA android 앱에서 직접해볼 수 있다. 취약하게 개발된 앱 분석을 통해 알아본다.

앱의 자동로그인 기능이 활성화된 경우 계정정보나 세션 정보가 단말기 내 저장됨을 추측할 수 있다. 해당 로직을 분석하였고 SharedPreferences.xml에 저장됨을 확인하였다.

SharedPreferences.xml 내 인코딩된 계정정보 확인
디컴파일 후 암,복호화 로직 확인
코드 내 데이터 영역에서 키,알고리즘 확인

이를 통해 수집한 정보를 이용하여 온라인 자바 컴파일러를 이용하여 복호화 및 민감 데이터의 평문 노출 여부를 확인한다.

https://www.tutorialspoint.com/online_java_compiler.php

패스워드(평문) 확인


대응방안

따라서 민감한 데이터가 root 사용자에게 공개된 위치(SharedPreferences.xml 등)에 저장될 경우, 이러한 상황을 방지하기 위해 암호화된 저장소를 사용하거나, 인증 토큰과 같은 중요한 정보를 안전하게 관리해야 한다. 또한 앱에서 SharedPreferences.xml에 저장되는 데이터를 꼭 필요한 데이터만 저장하고, 민감한 정보는 안전한 방식으로 저장하는 것이 필요하다.

더 알아보기

포스트에서 소개한 다양한 데이터 저장 방법을 직접 구현하고 디컴파일했을 때 어떻게 보이는지 분석해보기

안드로이드 운영체제에서는 다양한 내부 저장소를 제공하여 중요한 정보를 안전하게 저장할 수 있도록 지원하고 있다. 이러한 내부 저장소를 올바르게 사용하는 방법도 연구해볼 수도 있다.

 

 

반응형