부적절하게 노출된 컴포넌트 분석
1. 서론
안드로이드 애플리케이션은 독립적으로 실행될 수 있는 여러 컴포넌트의 조합으로 구성됩니다. 가장 대표적인 컴포넌트인 액티비티는 사용자 인터페이스를 구성하는 화면 단위로 앱의 핵심 기능을 담당합니다. 안드로이드는 인텐트라는 메시징 객체를 통해 앱 내부 또는 앱 간에 컴포넌트를 호출하고 데이터를 전달하는 유연한 구조를 가지고 있습니다.
이런 유연성은 AndroidManifest.xml 파일의 android:exported 속성을 통해 제어됩니다. 이 속성이 true로 설정된 컴포넌트는 외부 앱에서 직접 호출하는 것이 허용됩니다. 다른 앱과 연동하는 기능을 구현할 때 필수적이지만, 만약 인증이나 권한 검증 없이 내부 기능을 수행하는 컴포넌트가 exported="true"로 설정된다면, 공격자는 악의적인 앱을 통해 해당 컴포넌트를 직접 실행시켜 인증 절차를 우회하거나 민감한 정보에 접근할 수 있습니다. 이 방식을 컴포넌트 하이재킹이라고 합니다.
2. 분석 환경
분석 대상: InsecureBankv2.apk
분석 도구: JADX-GUI 1.4.7, Android Debug Bridge(adb)
3. 분석 절차
3.1. 분석 전략: AndroidManifest.xml 분석
애플리케이션 컴포넌트의 속성과 상호작용 방식은 모두 AndroidManifest.xml에 정의됩니다.
따라서 이 파일을 분석하여 android:exported="true" 속성을 가진 컴포넌트를 찾는 것이 핵심입니다.
3.2. 단서 식별: JADX를 이용한 매니페스트 분석
#2에서 분석했던 AndroidManifest.xml 파일을 다시 JADX로 열어서 모든 컴포넌트 태그들을 검토합니다.

분석 결과, 정상적인 로그인 절차를 거쳐야만 접근 가능해야 할 여러 핵심 기능 액티비티들이 exported="true"로 설정되어 외부 앱에서 직접 호출할 수 있는 상태임을 확인했습니다.
4. 취약점 분석 및 영향
취약점 분류: CWE-926: Improper Export of Android Application Components
위험도: 심각 (Critical)
상세 설명: 인증 및 권한 검사가 필요한 애플리케이션 컴포넌트를 외부에 노출시켜 발생하는 취약점입니다. 공격자는 인텐트를 통해 해당 컴포넌트를 직접 호출하여 보호 메커니즘을 우회할 수 있습니다.
영향:
- 인증 우회: 로그인과 같은 인증 절차를 거치지 않고 앱의 내부 기능(송금 등)에 직접 접근할 수 있습니다.
- 민감 정보 노출: 노출된 Provider를 통해 앱이 저장하고 있는 내부 데이터를 조회하거나 수정할 수 있습니다.
- 서비스 거부(DoS): 노출된 Receiver에 반복적으로 브로드캐스트를 전송하여 앱의 리소스를 고갈시키고 정상적인 작동을 방해할 수 있습니다.
5. 결론 및 대응 방안
android:exported 속성은 다른 앱과의 상호작용을 위해 반드시 필요하지만, 최소 권한의 원칙에 따라 신중하게 사용되어야 합니다. 앱 내부에서만 사용되는 컴포넌트는 반드시 외부에 노출되지 않도록 설정해야 합니다.
안전한 컴포넌트 관리 방안
- exported="false" 명시적 설정: 앱 내부에서만 사용되는 모든 액티비티, 리시버, 서비스, 프로바이더에 대해 android:exported="false"를 명시적으로 선언하는 것을 원칙으로 합니다. (Android 12, API 레벨 31 이상을 타겟으로 하는 앱에서는 인텐트 필터가 있는 컴포넌트의 경우 이 값을 필수로 명시해야 합니다.)
- 인증 및 권한 검사 구현: 컴포넌트를 반드시 외부에 노출해야 한다면, 컴포넌트의 onCreate()나 onHandleIntent()와 같은 진입점 메소드에서 호출자의 신원이나 권한을 확인하는 로직을 반드시 구현해야 합니다.
- Signature-level Protection: 특정 개발자의 서명이 있는 앱들끼리만 통신하도록 하려면 android:protectionLevel="signature" 권한을 정의하고 사용하여 신뢰할 수 있는 앱만 컴포넌트에 접근하도록 제한할 수 있습니다.
'해킹&보안 > 모바일' 카테고리의 다른 글
| 모바일 정적분석 #6 (0) | 2025.10.18 |
|---|---|
| 모바일 정적분석 #4 (0) | 2025.10.17 |
| 모바일 정적분석 #3 (0) | 2025.10.17 |
| 모바일 정적분석 #2 (0) | 2025.10.16 |
| 모바일 정적분석 #1 (0) | 2025.10.16 |