OWASP 카테고리: MASVS-CODE: 코드 품질
개요
테스트 또는 디버그 기능이 포함된 프로덕션 빌드를 출시하면 애플리케이션의 보안 상태에 부정적인 영향을 미칠 수 있습니다. 이러한 기능은 개발자가 새 버전 출시 전이나 출시 후에 의도한 애플리케이션 사용 사례에서 버그를 발견하고 식별하는 데 사용되며 공개적으로 액세스 가능해서는 안 됩니다.
테스트/디버그 기능의 예는 다음과 같습니다.
- 숨겨진 메뉴
- 디버그 로그 사용 설정 옵션
- 애플리케이션 흐름을 변경하는 옵션
- 결제 또는 구독 절차를 우회하는 옵션
- 인증을 우회하는 옵션
- 애플리케이션별 활동 테스트
위의 모든 항목은 악의적인 사용자가 애플리케이션의 의도된 흐름을 변경하거나, 시스템 정보를 가져와 추가 공격을 맞춤화하는 데 활용할 수 있습니다.
노출된 테스트 또는 디버그 기능을 그대로 두면 발생하는 위험은 디버그 기능 자체와 관련된 작업에 따라 달라질 수 있습니다.
애플리케이션의 또 다른 위험 영역은 AndroidManifest.xml 요소 <application>
내에 설정된 android:debuggable 속성입니다. android:debuggable 도움말에 보고된 것처럼 앞서 언급한 값이 설정된 프로덕션 애플리케이션을 배포하면 악의적인 사용자가 다르게는 액세스할 수 없는 관리 리소스에 액세스할 수 있습니다.
영향
프로덕션 빌드의 테스트 또는 디버그 기능과 상호작용하는 악의적인 사용자로 인해 예기치 않은 결과가 발생할 수 있습니다. 모든 작업의 영향은 기능에 할당된 권한과 직접 관련이 있습니다. 권한이 높을수록 활성 악용이 미칠 수 있는 영향도 커집니다. 애플리케이션 내의 이러한 기능은 다수의 보호 기능을 우회하거나 페이월을 우회하거나 시스템 또는 사용자 관련 정보를 가져오거나 테스트 활동을 트리거하는 데 사용될 수 있습니다.
완화 조치
디버그 구성요소 사용 피하기
테스트 또는 디버그 기능은 활동, broadcast receiver, 서비스 또는 콘텐츠 제공자와 같은 프로덕션 애플리케이션 구성요소 내에 구현하면 안 됩니다. 내보내는 경우 기기의 다른 프로세스에서 실행할 수 있기 때문입니다. 디버그 구성요소를 내보내지 않음으로 설정(android:exported="false")해도 기능을 유효하게 보호하지 않습니다. 디버그 옵션이 사용 설정된 경우 루팅된 기기가 여전히 Android 디버그 브리지(ADB) 도구를 통해 이를 실행할 수 있기 때문입니다.
디버그 또는 테스트 기능을 스테이징 빌드로 제한
개발자만 통제된 환경에서 애플리케이션 기능을 디버그하거나 테스트할 수 있도록, 애플리케이션 내에서 테스트 또는 디버그 기능의 실행은 제한된 스테이징 빌드 집합으로만 제한해야 합니다. 이는 애플리케이션의 전용 테스트 또는 디버그 빌드와 고급 계측 테스트를 만들어 모든 테스트 또는 디버그 기능이 격리된 버전에서 실행되도록 함으로써 달성할 수 있습니다.
자동화된 UI 테스트 구현
애플리케이션에서 테스트를 실행하는 경우 자동화된 UI 테스트를 선택하세요. 반복 가능하고, 분리된 환경에서 실행할 수 있으며, 인적 오류가 발생하지 않습니다.
리소스
- 고급 테스트 설정에 관한 개발자 가이드
- UI 테스트 자동화에 관한 개발자 가이드
- android:debuggable
- android:exported
- Android 마켓의 디버그 가능한 앱
- 디버그 코드로 인해 보안 취약점이 발생할 수 있나요?