본문 바로가기

해킹-보안/모바일

로컬 암호화 취약점 & SD 카드 저장소 취약점

반응형




설명


모바일 앱에서 아이디, 비밀번호, 카드 번호 등과 같은 민감 정보를 저장할 때는 강력한 암호화 알고리즘을 사용하고
안전한 저장 장치에 저장해야 한다. 앱에 저장되는 파일 및 데이터는 소유자만 접근할 수 있는데 공격자가 이를 우회하여 

권한을 상승하는 경우 평문으로 저장된 데이터를 획득할 수 있다.

안드로이드에서 사용되는 저장소 기술 목록은 다음과 같다.

Shared Preferences
SQLite Databases
External Storage


Shared Preferences


취약점 진단



인시큐어뱅크의 메뉴 중 Autofill Credentials 기능은 로그인할 때 매번 계정을 입력하고 접속하는 번거로움을 해결한다. 

이 기능을 이용해 아이디/비밀번호를 자동으로 입력할 수 있다. 이전 로그인 기록을 shared_prefes 디렉터리에 .xml 형태로 저장하고 해당 정보를 불러와 모바일 화면에 자동으로 입력하는 구조이다. 




모바일에서 /data/data/<패키지명>은 해당 앱이 실행 할 때 필요한 정보를 저장하고 있는 위치이다.
인시큐어뱅크의 shared_prefes 디렉터리에 저장된 mySharedPreferences.xml 파일을 확인해보면
base64로 인코딩된 아이디와 aes로 암호화된 비밀번호가 저장되어 있다.



비밀번호는 Dologin 클래스의 saveCreds 메소드에서 CryptoClass의 aesEncryptedString을 이용해서 

aes 암호화를 하고 있다. 하드코딩된 키 값과 함수 정보를 바탕으로 aes로 암호화된 비밀번호를 복호화한 결과는 아래와 같다.


https://www.devglan.com/online-tools/aes-encryption-decryption
암호화된 aes를 복호화해서 나온 base64 값을 디코딩하면 평문 비밀번호를 확인할 수 있다.


대응방안


base64는 암호 해독 도구를 이용해 쉽게 디코딩 되므로 강력한 암호 기술을 적용한다.
AES-256 사용 시 난수 기술을 이용해 암호 키 값을 수시로 변경한다.



SQLite Databases


취약점 진단


모바일 환경에서 SQLite DB를 사용하면 앱 폴더에 데이터베이스가 하나의 파일로 만들어진다.
인시큐어뱅크의 경우 사용자의 계정 정보가 로컬 저장소 내의 database 폴더안에 mydb라는 파일로 저장된다.
아래 명령으로 해당 파일을 로컬 PC로 다운받고 SQLite 형식을 열 수 있는 프로그램으로 파일을 연다.
adb pull "/data/data/com.android.insecurebankv2/databases/mydb" ./



names 테이블의 데이터를 확인했을 때 이전에 접속한 사용자의 아이디가 암호화 되지 않고
평문으로 저장되어 있는 것을 알 수 있다.
이는 사용자 계정 목록화 취약점에 해당되며 무작위 대입 공격, 비밀번호 추측 공격을 통해 
특정 사용자의 비밀번호를 획득할 수 있다. 

대응방안


중요 정보는 암호화하여 저장한다.
중요 정보는 서버 측에서 관리한다.



External Storage


취약점 진단


SD 카드라고 불리우는 외부 저장소는 내부 저장소와 마찬가지로 파일을 저장하는 데 사용한다.
모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있기 때문에 민감한 파일을 저장해선 안된다.

AndroidManifest.xml 파일에 다음 권한이 존재하면 외부 저장소에 데이터를 읽고 쓸 수 있다.
WRITE_EXTERNAL_STORAGE
READ_EXTERNAL_STORAGE




외부 저장소 R/W 권한이 허용되어 있고 소스 코드 내에 SD 카드 경로를 획득하는
getExternalStorageDirectory() 메서드가 존재한다. 




SD 카드에 Statements_username.html 파일을 저장하는 코드이며
외부 저장소에서 해당 파일을 확인했을 때 계좌 정보 등이 암호화되지 않은 채로 저장되어 있다.



사용자가 앱을 제거하더라도 앱 폴더 외부에 저장된 파일은 삭제되지 않으므로 보안에 더욱 취약하다고 볼 수 있다.

대응방안


외부에 민감한 정보를 저장할 때는 암호화하여 저장한다.
대칭 키 값, 인증 값 등이 노출되지 않도록 내부 저장소에서 관리한다.
로컬 데이터베이스를 암호화한다.




반응형

'해킹-보안 > 모바일' 카테고리의 다른 글

취약한 HTTP 통신 및 파라미터 조작 취약점  (0) 2020.12.07
안전하지 않은 로깅 취약점  (2) 2020.12.06
하드코딩 취약점  (1) 2020.12.06
녹스 Burp 인증서 설치  (0) 2020.12.04
인시큐어뱅크 앱 설치  (1) 2020.12.04