[모의해킹] 단말기 내 중요정보 저장 여부

cielo ru·2024년 7월 21일
0

모의해킹

목록 보기
6/14
post-thumbnail

➰ 취약점 개요

단말기는 브라우저와 다르게 많은 정보를 내부에 저장하여 사용한다. 이는 단말기 내에 민감한 정보가 저장될 가능성이 높다는 것을 의미한다. 단말기 내에 개인정보, 금융정보, 의료정보 등 민감한 정보가 있을 경우, 해커가 물리적 접근이나 악성 소프트웨어를 통해 이를 탈취할 수 있어 심각한 보안 위협이 된다. 따라서 단말기 내에 민감한 중요 정보가 있는지 확인하고, 만약 저장되어 있다면 그것이 암호화되어 있는지 확인해보자.

📍실제로 점검을 진행하면 자주 발견되는 취약점은 아니지만 전송 중 데이터가 평문으로 전송되거나 캐시 내 토큰 등 중요 정보가 들어가 있는 경우가 종종 발견된다.


❓ 왜 단말기는 브라우저와 다르게 내부에 많은 정보를 저장할까?

1) 단말기는 인터넷 연결이 없거나 불안정한 상태에서도 앱이 정상적으로 동작할 수 있도록 데이터를 로컬에 저장한다. 연락처, 일정, 메시지, 미디어 파일 등은 오프라인 상태에서도 접근할 수 있어야 하기 때문에 이러한 정보들을 로컬에 저장한다.

2) 응답 시간을 단축하고 네트워크 요청을 최소화하여 앱의 성능을 향상시키기 위해 데이터를 로컬에 저장한다.

3) 복잡한 기능을 제공하기 위해 데이터를 로컬에 저장한다. 예를 들어, 지도 앱은 지도의 일부를 로컬에 저장하여 빠르게 로드할 수 있게 한다.

단말기는 성능 향상, 오프라인 접근성, 복잡한 앱 기능 구현 등의 이유로 단말기 내부에 많은 정보들을 저장한다.


➰ 취약점 내용

동적 분석 항목 중 하나인 '단말기 내 중요정보 저장 여부'는 애플리케이션 사용 폴더 및 외부 저장소에 존재하는 파일 내 중요정보 저장 여부를 점검한다.

➰ 점검기준

** 민감한 정보 : 주민등록번호, 카드번호, OTP, 카드 비밀번호 등 중요정보라고 판단되는 정보

🌱 양호

  1. 단말기 내에 저장된 모든 민감한 정보는 강력한 암호화 알고리즘(AES, RSA 등)을 사용하여 암호화되어 있다.

  2. 민감한 정보는 최소한의 권한으로 접근할 수 있으며, 접근 권한이 엄격하게 관리되고 있다.

  3. 민감한 정보를 전송할 때 HTTPS와 같은 안전한 통신 프로토콜을 사용하여 암호화하여 전송한다.

💊 취약

  1. 단말기 내에 민감한 정보가 암호화되지 않고 평문으로 저장되어 있다.

  2. 민감한 정보가 안전하지 않은 저장소(일반 파일 시스템 등)에 저장되어 있다.

  3. 민감한 정보에 접근할 수 있는 권한이 과도하게 부여되어 있으며, 접근 권한 관리가 미흡하다.

  4. 민감한 정보를 전송할 때 암호화되지 않은 상태로 평문으로 전송한다.


➰ 점검 방법

  1. 점검 디바이스를 디버깅 모드로 연결하여 쉘에 접속한다.
> adb devices
> adb shell

  1. 데이터가 저장되어 있는 위치로 이동한다.
> cd /data/data

  1. 중요정보를 확인할 앱의 패키지로 이동한 후 파일 구조를 확인한다.
    해당 경로는 시스템 영역으로 루팅된 기기에서만 접근이 가능하다.
> cd  com.app.damnvulnerablebank/

  • cache, codecache, lib, shared_prefs 가 있는 것을 확인할 수 있다.
    주로 _shared_prefs를 먼저 확인
    하는 편이다.
  1. 분석하기 위해 해당 디렉토리를 압축한다.
> tar -cvf [압축 후 파일 이름 지정][압축대상]

> tar -cvf test01.tar * 

예제는 apk 파일이 저장되어 있는 /data/app/com.app.damnvulnerablebank-1 경로에서 진행했지만 /data/data/com.app.damnvulnerablebank-1 경로에서 실행해주면 된다. 무엇을 압축해서 정보를 확인할 것인지에 따라 다르기 때문에 중요한 설정 정보 등이 저장되어 있는 /data/data 경로에서 진행하면된다.


📍Trouble Shooting #1

/data/data $ tar -cvf test01.tar *
tar: test01.tar: Permission denied

-> 루팅 권한이 없어서 발생하는 문제

  1. su 명령어 실행 //루팅 권한으로 접속
  2. |crownlteks:/data/data $ tar -cvf test01.tar * //재실행

  1. adb 명령어를 통해 압축한 파일을 지정 폴더로 이동시킨다.
> mv test01.tar /data/local/tmp

  1. 새로운 cmd 창을 켜서 압축 파일을 로컬 PC 로 추출한다.
    (adb shell 창 exit 후 새로운 cmd 경로에서 실행해야 한다.)

> adb pull [압축파일이 있는 경로] [압축파일을 받을 경로]

> adb pull /data/local/tmp/ ./

  1. 파일을 열어 중요 정보가 노출되었는지 확인한다.

➰ 대응 방안

  • 암호화된 저장소 사용한다.

  • 인증 토큰과 같은 중요한 정보는 하드코딩된 암호화 혹은 암호화키에 의존하지 않게 하고 운영체제에서 제공하는 암호화 메커니즘 이상의 암호화 메커니즘 고려한다.

  • SharedPreferences.xml에는 꼭 필요한 데이터만 저장하도록 한다.


➿ 내 생각

위 취약점을 처음 접했을때 중요 정보가 저장되어 있는지 확인하는 것보다 중요 정보가 저장된 경로에서 파일을 압축하고 로컬에다가 옮겨서 푸는 과정이 더 오래걸렸다.

파일을 열면 내용이 많기도 하고, 코드를 잘 모르면 각각의 의미하는 바가 무엇이고 어디에 중요 정보가 저장되는지 감도 못잡아서 취약점을 못 찾거나 엄청난 시간이 걸리기도 한다. 필자는 개발을 했기 때문에 중요 파일만 열어서 확인하고, Ctrl+F를 해서 중요 정보가 될 만한 것들을 검색해서 찾는 편이다.

이 취약점은 아무래도 노하우가 필요한 취약점이다. 노하우가 있는 선임분들은 필요한 부분만 확인하시고 시간이 남으시면 좀 더 뒤져보는 방식으로 진행하셨다. 무작정 찾기 보다는 해당 취약점이 취약했던 예시들을 보며 익히는 방법도 노하우인 것 같다.


➰ 참고

profile
Cloud Engineer & BackEnd Developer

0개의 댓글