외로운 Nova의 작업실

insecurebankv2 - 안전하지않은 SD 카드 저장소 본문

Mobile App Penetesting

insecurebankv2 - 안전하지않은 SD 카드 저장소

Nova_ 2023. 5. 28. 20:08

- 취약점 소개

어플들은 중요 정보나 설정들을 저장소에 저장합니다. 이때 외부저장소를 사용할 경우 아무나 해당 정보에 접근할 수 있고 내부 저장소에 저장하더라도 암호화가 되어있지않으면 정보를 탈취당할 수 있습니다. 보통 어플들의 저장소는 아래와 같은 경로에 있습니다.

  • /mnt/sdcard : 외부저장소로 누구나 쓰고 읽고 할 수 있습니다.
  • /data/data/앱이름 : 내부저장소로 앱에 관련된 유저만이 읽고 쓸 수 있습니다.

또한 /data/data/앱이름 경로에서 중요하게 봐야할 디렉터리는 아래와 같습니다.

  • databases : SQLite 데이터베이스 파일로 설정파일, 콘텐츠 파일등을 저장합니다.
  • shared_prefs : 공유 프리퍼런스로 많이 사용하며 앱에 공유되는 설정파일등을 저장합니다.

- 취약점 진단 과정

<외부 저장소>

먼저 /mnt/sdcard 에 어떤 것이 저장되어 있는지 봐보겠습니다.

/mnt/sdcard에 Statement_jack.html 파일이 있고 이 내용은 jack사용자에대한 거래내역인 것을 확인할 수 있습니다. 거래내역의 경우 중요 정보이기때문에 절대 외부 저장소에 저장해서는 안됩니다.

 


<내부저장소 - shared_prefs>

이번에는 공유 프리퍼런스로 가보겠습니다.

공유 프리퍼런스에 여러가지 파일들이 있습니다. 이를 로컬 컴퓨터로 가져와보겠습니다.

adb pull /data/data/com.android.insecurebankv2/shared_prefs

 

포트번호와 서버 아이피를 볼 수 있습니다. 

또한 아이디와 패스워드를 볼 수 있습니다. 아이디와 패스워드는 코드 분석을 통해 base64와 AES로 암호화되어 있었던 것을 확인할 수 있었습니다. 이를 통해서 복호화도 가능함을 알 수 있습니다.

 

<내부저장소 - databases>

원래 databases에는 여러가지가 있어야하지만 없어서 실습을 못했습니다. 결국 중요한건 내부저장소에 저장할때도 암호화를 적용해 저장해야합니다.

 

- 취약점 대응 방안

  • 내부저장소에 데이터를 저장할때는 setStorageEncryption API를 이용해 내부저장소를 강제로 암호화할 수 있습니다.
  • SD카드같은 외부저장소에 저장할때는 라이브러리를 사용해 암호화해야합니다.
  • 공유 프리퍼런스를 사용할때는 모드 설정에 유의해야합니다. 모드는 일종의 접근권한으로 먼저 MODE_PRIVATE는 앱 내부에서만 접근할 수 있도록 해주고, MODE_WORLD_READABLE와 MODE_WORLD_WRITEABLE은 다른 앱에서 접근을 허용합니다. 따라서 MODE_WORLD_READABLE와 MODE_WORLD_WRITEABLE은 보안상의 문제점이 발생할 수 있기때문에 유의해야합니다.
Comments