OWASP 카테고리: MASVS-STORAGE: 저장소
개요
애플리케이션은 일반적으로 사용하기 위해 데이터를 기기 로컬, 외부 저장소 또는 클라우드 저장소에 원격으로 저장합니다. 애플리케이션의 상태를 보존하기 위해 애플리케이션 백업이 실행됩니다. 따라서 심각한 오류 또는 사용자 오류로 인해 데이터가 손실되는 경우 애플리케이션을 복원할 수 있습니다. 저장된 데이터가 사용자의 개인 정보 또는 인증 키 및 비밀번호 등 민감한 정보와 관련된 경우 의도된 사용자가 아닌 누군가가 백업에 액세스할 때 이러한 민감한 정보가 유출되지 않도록 추가적인 보안 조치를 적용할 수 있습니다.
중요한 점은 백업 데이터를 검색하는 가장 일반적인 방법 중 하나가 ADB 백업 명령어를 사용하는 것이며 이를 위해서는 개발자 옵션을 기기에서 사용 설정해야 합니다. 개발자 옵션을 사용 설정하려면 사용자의 PIN을 사용해야 합니다. 모든 잠재적 공격자가 백업 데이터를 검색하기 위해서는 먼저 사용자의 PIN을 도용해야 합니다.
영향
애플리케이션의 백업 파일에 액세스할 수 있는 공격자는 애플리케이션이 백업한 암호화되지 않은 데이터를 검색할 수 있습니다. 그 결과 노출된 모든 민감한 정보를 공격자가 향후 공격에 사용하거나 쉽게 악용할 수 있습니다.
위험: 애플리케이션 백업 허용
잠금 해제된 기기에 실제로 액세스하거나 손상된 Google 계정에 액세스할 수 있는 공격자는 애플리케이션과 데이터를 백업할 수 있습니다.
Android 12부터는 Android 매니페스트의 android:debuggable
속성이 false
로 설정되어 있는 한 애플리케이션 데이터가 백업 데이터에 포함되지 않습니다. 따라서 백업에 포함된 암호화되지 않은 애플리케이션 데이터가 노출되어 공격자에 의해 악용될 수 있습니다.
다음 구성 변경사항은 민감한 정보가 백업 파일에서 유출되는 것을 방지하는 데 도움이 될 수 있지만 모든 휴대전화 제조업체가 애플리케이션의 백업 정책을 준수하는 것은 아니라는 점에 유의해야 합니다. 따라서 백업하지 않으려는 데이터가 고유한 OEM 백업 솔루션을 통해 백업될 수 있습니다. 이러한 경우를 고려하여 암호화 및 민감하다고 간주될 수 있는 불필요한 데이터를 삭제하거나 저장하지 않는 등 사용자 데이터를 보호하기 위한 추가 조치를 구현하는 것이 좋습니다.
완화 조치
애플리케이션 백업 사용 중지
애플리케이션의 백업 데이터가 애플리케이션의 정상 작동에 필요하지 않은 경우 백업이 실행되지 않도록 하는 규칙을 추가하는 것이 좋습니다. 애플리케이션의 백업을 제한하려면 AndroidManifest.xml
파일 내의 android:allowBackup
속성을 false
로 설정합니다. Android 버전 12 및 이후 버전에서는 allowBackup
을 false
로 설정하면 클라우드 및 ADB 백업이 제한되지만 기기 간 이전은 계속 허용됩니다.
<application android:name="com.example.foo" android:allowBackup="false">
...
</application>
백업 대상 관리
애플리케이션을 정상적으로 사용하는 데 백업이 필요한 경우 백업 규칙을 설정하여 백업할 데이터를 지정할 수 있습니다. 규칙은 backup_rules.xml 파일에 정의됩니다. 이러한 규칙을 구성하는 방법은 사용되는 Android 버전에 따라 차이가 있습니다.
Android 버전 12 및 이후 버전의 경우 다음 예와 같이 AndroidManifest.xml 내의 <application>
요소에 android:dataExtractionRules
속성을 추가합니다.
<application android:name="com.example.foo"
android:dataExtractionRules="backup_rules.xml">
…
</application>
<application android:name="com.example.foo"
android:fullBackupContent="@xml/backup_rules">
…
</application>
위험: 민감한 정보를 암호화되지 않은 상태로 저장
애플리케이션의 목적에 따라 기기에서 백업되는 일부 데이터는 민감한 정보로 간주될 수 있습니다. 예를 들면 개인 및 금융 데이터와 관련된 데이터입니다. 사용자 기기를 손상시키는 공격자는 기기에서 데이터를 가져올 수도 있습니다. 따라서 공격자에게 노출된 모든 일반 텍스트 데이터가 악용될 수 있습니다.
완화 조치
모든 민감한 정보 암호화
데이터 보안을 강화하려면 Android 암호화 가이드라인에 따라 민감하다고 간주될 수 있는 모든 저장된 데이터를 암호화하고 Android 키 저장소 시스템을 사용하여 암호화 키를 보호합니다.
새 기기로의 애플리케이션 데이터 이전을 지원해야 하는 경우 애플리케이션의 데이터 전송 모드를 구현하는 것이 좋습니다. 이 경우 암호화된 데이터가 애플리케이션의 내부 파일 내에 암호화되지 않은 상태로 잠깐 저장되므로 애플리케이션의 데이터를 새 기기로 전송할 수 있습니다.
데이터 전송 모드를 구현할 때는 다음 권장사항을 고려하세요.
- 데이터 전송 모드는 인증된 애플리케이션 사용자만 사용 설정할 수 있도록 합니다.
- 암호화되지 않은 데이터는 외부 저장소가 아닌 애플리케이션의 내부 파일에 로컬로 저장합니다.
- 암호화되지 않은 파일은 단기간만 존재하도록 허용합니다. 그 후에는 파일을 삭제합니다.
- 파일이 전송되면 시작 시 애플리케이션에서 암호화되지 않은 파일을 암호화하도록 합니다.
이 모드에서도 암호화되지 않은 데이터를 백업할 수 있지만, 암호화되지 않은 상태로 백업할 수 있는 기회가 제한되어 있으므로 인증되지 않은 공격자가 일반 텍스트 데이터에 액세스할 가능성이 줄어듭니다.
리소스
- allowBackup 속성 설명
- D2D 전송 동작 변경사항
- Android 12 이상에서 백업 제어
- Android 11 이하에서 백업 제어
- Google의 계약 및 정책에서 언급하는 개인 식별 정보의 정의 이해하기
- 암호화
- Android 키 저장소 시스템
- ADB
- 개발자 옵션