안드로이드 앱 개발은 기능 구현뿐만 아니라 보안을 최우선으로 고려해야 하는 복합적인 작업입니다. 이번 글에서는 앱 배포 전에 반드시 검토해야 할 주요 보안 정책을 다루며, 실제 사례를 통해 그 중요성을 설명하겠습니다. 🛡️
앱 개발 중 남긴 디버깅 로그는 배포 환경에서는 심각한 보안 위협이 될 수 있습니다. 악성 앱이 로그를 통해 민감한 데이터를 유출하거나 앱의 취약점을 분석할 가능성이 있기 때문입니다. 🕵️♂️
BuildConfig.DEBUG
활용하기:
배포 빌드에서는 디버깅 로그가 출력되지 않도록 제어할 수 있습니다.
if (BuildConfig.DEBUG) {
Log.d("Debug", "디버깅 메시지");
}
R8/Proguard 설정으로 로그 자동 제거:
테스트용 빌드에서만 로그를 출력하도록 코드를 수정하거나, r8 컴파일러에 아래와 같은 룰을 사용해서 로깅 관련 코드가 최적화되어 제거되도록 할 수 있습니다.
-assumenosideeffects class android.util.Log {
static *** i(...);
static *** d(...);
static *** v(...);
static *** w(...);
static *** e(...);
}
-maximumremovedandroidloglevel 4
allowBackup
설정: 사용자 데이터 보호의 첫걸음
안드로이드 앱의 allowBackup
설정은 데이터 백업 및 복원과 관련된 기능을 제공합니다. 하지만 잘못 설정할 경우 치명적인 보안 문제가 발생할 수 있습니다.
allowBackup
을 true
로 설정하면 앱의 내부 저장소와 SharedPreferences
에 저장된 민감한 데이터를 ADB 명령을 통해 추출할 수 있습니다.
AndroidManifest.xml
에서 allowBackup
을 반드시 false
로 설정하세요.
<application
android:allowBackup="false"
android:fullBackupContent="false">
</application>
✨ TIP: 보안이 민감한 앱이라면 기본적으로 allowBackup을 false로 설정하는 것이 안전합니다.
debuggable
비활성화: 디버깅 악용 차단
배포 버전의 앱에서 debuggable=true
로 설정된 경우, 공격자에게 앱의 내부 로직을 노출하는 셈입니다. 이는 악성 행위를 쉽게 수행할 수 있는 디버깅 취약점으로 이어질 수 있습니다.
build.gradle
파일의 debuggable
속성을 반드시 false
로 설정하세요.
android {
buildTypes {
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
주의: 디버깅이 활성화된 상태로 배포되면 Google Play에서 앱이 거절될 수 있습니다.
상담만 받아보셔도 좋습니다 긱다이브의 상담으로 업체 비교를 시작해보세요