설명
안전한 저장 장치에 저장해야 한다. 앱에 저장되는 파일 및 데이터는 소유자만 접근할 수 있는데 공격자가 이를 우회하여
권한을 상승하는 경우 평문으로 저장된 데이터를 획득할 수 있다.
안드로이드에서 사용되는 저장소 기술 목록은 다음과 같다.
①
Shared Preferences ②
SQLite Databases ③
External StorageShared 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
취약점 진단
인시큐어뱅크의 경우 사용자의 계정 정보가 로컬 저장소 내의 database 폴더안에 mydb라는 파일로 저장된다.
아래 명령으로 해당 파일을 로컬 PC로 다운받고 SQLite 형식을 열 수 있는 프로그램으로 파일을 연다.
평문으로 저장되어 있는 것을 알 수 있다.
이는 사용자 계정 목록화 취약점에 해당되며 무작위 대입 공격, 비밀번호 추측 공격을 통해
대응방안
①
중요 정보는 암호화하여 저장한다. ②
중요 정보는 서버 측에서 관리한다.External Storage
취약점 진단
모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있기 때문에 민감한 파일을 저장해선 안된다.
AndroidManifest.xml 파일에 다음 권한이 존재하면 외부 저장소에 데이터를 읽고 쓸 수 있다.
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 |