APK를 설치하기 전에 Android 앱 권한을 보는 방법
Google Play 스토어에서 앱을 설치하면 Android에서는 앱이 액세스할 수 있는 항목에 대한 간략한 요약을 표시합니다. Play가 아닌 소스에서 APK를 사이드로드하면 매니페스트를 직접 읽지 않는 한 그러한 안전망이 없습니다. "배경화면 앱에 SMS와 마이크 액세스가 꼭 필요할까요?"는 이 가이드가 답변하는 데 도움이 되는 질문과 정확히 같습니다.
다음은 익숙하지 않은 APK를 분류할 때 우리 팀에서 사용하는 것과 동일한 워크플로입니다. APK를 열고, uses-permission 항목을 읽고, 보호 수준을 디코딩하고, 라고 앱에 필요한 앱과 해당 카테고리에서 일반적으로 필요한 앱을 비교합니다. 당사의 온라인 APK 정보 도구는 바이너리 XML 디코딩을 수행하므로 전체 프로세스에는 약 10초가 소요됩니다.
권한 감사를 왜 귀찮게 하나요?
악의적인 개발자는 인기 있는 무료 앱을 가져와 변경하고 타사 사이트에 다시 출시합니다. 앱이 정상적으로 보이고 작동할 수 있지만 숨겨진 코드는 연락처 목록을 복사하거나 배경 오디오를 녹음할 수 있습니다. 권한 사전 설치를 보면 "권한 변동"의 위험 신호를 발견할 수 있습니다.
APK 파일을 감사하는 방법(온라인)
APK 정보 도구는 브라우저에서 파일의 매니페스트를 완전히 읽습니다. 파일은 서버에 업로드되지 않으며 코드도 실행되지 않습니다. 사용 방법은 다음과 같습니다.
과정:
- APK 정보 페이지로 이동합니다.
- .apk 파일을 선택하세요.
- 분석이 완료될 때까지 기다립니다(보통 5초).
- 권한 섹션까지 아래로 스크롤합니다.
- READ_SMS, PROCESS_OUTGOING_CALLS 또는 ACCESS_FINE_LOCATION와 같은 고위험 플래그를 찾으세요.
허가 위험 신호 목록
계산기 또는 손전등 앱이 READ_CONTACTS 또는 RECORD_AUDIO를 요청하는 경우 즉시 파일을 삭제하세요. 이러한 앱이 해당 데이터를 보유할 정당한 이유는 없습니다.
Android 권한 수준 이해
모든 권한이 동일하게 생성되는 것은 아닙니다. Android는 이를 세 가지 수준으로 분류합니다.
- 정상: 개인 정보를 직접적으로 위협하지 않는 위험도가 낮은 권한(예: SET_ALARM)입니다. Android는 이를 자동으로 부여합니다.
- 위험한: 고위험 권한(연락처, 위치, 카메라). 이러한 ~ 해야 하다는 앱이 실행될 때 확인됩니다.
- 서명/시스템: 위험도가 매우 높습니다. 이는 장치 제조업체 또는 OS 자체가 서명한 앱에만 사용할 수 있습니다.
수동 방법(ZIP 뷰어 사용)
기술적인 능력이 있다면 권한을 직접 감사할 수 있습니다.
- app.apk의 이름을 app.zip로 바꾸고 엽니다.
- AndroidManifest.xml를 찾으세요. (참고: 이진 형식이므로 텍스트 편집기에서 횡설수설처럼 보입니다.)
- AXML프린터와 같은 도구를 사용하여 읽을 수 있는 텍스트로 변환하세요.
- <uses-permission>로 시작하는 태그를 검색하세요.
권장 사항: 이를 즉시 디코딩하는 온라인 도구를 사용하는 것이 훨씬 빠릅니다.
AndroidManifest.xml에 실제로 저장되는 내용
매니페스트는 앱이 선언하는 모든 권한, 구성 요소 및 기능에 대한 정보의 소스입니다. APK 내부에는 파일이 소스 코드에서 보는 일반 텍스트가 아닌 바이너리 XML 형식이므로 일반 텍스트 편집기로 읽을 수 없습니다. 우리의 APK 정보 도구는 바이너리 XML을 디코딩하고 관련 태그를 표시합니다. 가장 중요한 것들은 다음과 같습니다:
- <uses-permission android:name="..."/>: 앱이 요청할 수 있는 모든 권한. 앱이 런타임에 실제로 사용하지 않을 수 있는 목록을 포함하여 가득한 목록이 여기에 있습니다.
- <uses-permission-sdk-23 ... />: 동일하지만 앱이 Android 6 이상에서 실행되는 경우에만 요청됩니다. 이전 장치는 메시지를 표시하지 않고 자동으로 허용됩니다.
- <uses-feature android:name="..." android:required="true|false"/>: 앱이 사용하는 하드웨어 기능(카메라, GPS, NFC). 필수의로 표시되면 Play 스토어는 해당 기능이 없는 기기에서 앱을 숨깁니다.
- <application android:debuggable="true">: 릴리스 APK의 거대한 위험 신호입니다. 디버그 가능한 앱은 ADB 액세스 권한이 있는 모든 사람에게 메모리 및 프로세스 상태를 노출합니다. 거부하다.
- 민감한 활동에 대한 <activity android:exported="true">: 다른 앱이 해당 화면을 시작할 수 있도록 합니다. 개인 정보 보호 앱의 경우 이는 코딩이 엉성하다는 신호가 되는 경우가 많습니다.
권한 보호 수준: 치트 시트
Android는 모든 권한에 "보호 수준"을 할당합니다. 요청이 어느 수준에 속하는지 알면 OS가 해당 요청을 얼마나 심각하게 처리할지 알 수 있습니다.
| 보호 수준 | 사용자 경험 | 예 |
|---|---|---|
| 정상 | 설치 시 자동으로 부여됩니다. 프롬프트가 없습니다. | 인터넷, 진동, ACCESS_NETWORK_STATE, WAKE_LOCK |
| 위험한 | 기능이 처음 사용될 때 런타임 프롬프트가 표시됩니다. 설정에서 취소할 수 있습니다. | 카메라, RECORD_AUDIO, READ_CONTACTS, ACCESS_FINE_LOCATION |
| 서명 | 부여 앱 또는 OS와 동일한 인증서로 서명된 앱에만 부여됩니다. | BIND_VPN_SERVICE, INSTALL_PACKAGES(시스템 전용) |
| 서명|특권 | 시스템 이미지의 priv-app 디렉터리에 사전 설치된 앱에만 사용할 수 있습니다. | MANAGE_USERS, READ_LOGS (사용자 및 로그 관리) |
| 앱/역할 | 활성화하려면 별도의 설정 흐름이 필요합니다. | SYSTEM_ALERT_WINDOW, BIND_ACCESSIBILITY_SERVICE, MANAGE_EXTERNAL_STORAGE (특수 시스템 권한) |
"숨겨진" 권한이 실제로 의미하는 것
일반적인 오해는 일부 권한이 비밀이라고 생각하는 것입니다. 그렇지 않습니다. 앱이 사용할 수 있는 모든 권한은 AndroidManifest.xml에 선언되어야 하며 OS는 여기에 나열되지 않은 권한 부여를 거부합니다. 사람들이 일반적으로 "숨겨진"이란 의미는 다음 두 가지 중 하나입니다.
- 일반 수준 권한은 자동으로 적용되지 않습니다. 사용자 상호 작용 없이 설치 시 부여됩니다. Play 스토어 요약에는 그 중 일부도 표시되지 않습니다. '공개되지 않는다'는 의미가 아니라 '간과하기 쉽다'는 의미에서 '숨겨져 있다'.
- 앱 정의 사용자 정의 권한. 앱은 자체 <permission> 태그를 선언하고 내부 구성 요소에 요구할 수 있습니다. 이는 앱 간 통신을 위해 존재하며 그 자체로는 개인 정보 보호 문제가 아니지만 인기 앱이 잘못된 보호 수준으로 사용자 정의 권한을 선언하고 다른 앱이 이를 백도어로 사용하는 경우 악용될 수 있습니다.
어느 쪽이든 대답은 동일합니다. 매니페스트를 읽고 Play 스토어 설명 자체를 신뢰하지 마십시오.
실제 사례: 실제 APK 감사
다운로드 폴더에 example.apk가 있다고 가정합니다. 정확한 작업 흐름은 다음과 같습니다.
- 브라우저에서 APK 정보 도구를 엽니다.
- 업로드 영역에 APK를 놓습니다. 처리는 로컬에서 이루어집니다. 파일이 장치를 떠나지 않습니다.
- 권한 섹션을 읽어보세요. 각 항목에는 상수 이름(android.permission.READ_CONTACTS과 그것이 허용하는 것에 대한 일반 언어 설명이 표시됩니다).
- 목록을 앱 카테고리와 비교하세요. 대략적으로 다음을 기대합니다.
- 카메라 앱: CAMERA, RECORD_AUDIO(비디오용), STORAGE/MEDIA 쓰기
- 메시징 앱: INTERNET, READ_CONTACTS, SEND_SMS(SMS 기반인 경우에만), RECORD_AUDIO(음성 메모용), CAMERA(사진 전송용)
- 게임: 인터넷, 때때로 RECORD_AUDIO(게임 내 음성 채팅용), 결제 관련 권한; 그 외에는 거의 없음
- 계산기, 손전등, 날씨: INTERNET(광고용), ACCESS_NETWORK_STATE, 가능하면 LOCATION(날씨만). 그 이상은 의심스럽습니다. 유틸리티 앱
- 목록에 있는 항목이 해당 범주에 맞지 않으면 설치하지 마세요. 계산기에 SMS 액세스가 필요한 이유는 없습니다.
파일이 APK, XAPK(내부 기본 APK를 읽음) 또는 APKS 번들(각 분할의 매니페스트를 읽음)인지 여부에 관계없이 동일한 논리가 적용됩니다.
명령줄에서 수행
터미널 경로를 선호하는 경우 Android SDK는 APK의 매니페스트를 일반 XML로 덤프하는 aapt2를 제공합니다.
aapt2 dump badging example.apk | grep "uses-permission"
또는 apksigner를 사용하여 동시에 서명 인증서를 확인합니다.
apksigner verify --print-certs example.apk
브라우저 도구는 단일 파일을 검사하기 위해 SDK를 설치하지 않는 사용자를 위해 동일한 작업을 수행합니다.
자주 묻는 질문(FAQ)
APK 설치 후 권한을 거부할 수 있나요?
예. Android 6.0 이상에서는 설정 > 앱 > [앱 이름] > 권한로 이동하여 개별 위험한 권한을 켜거나 끌 수 있습니다.
XAPK 파일에는 다른 권한이 있습니까?
XAPK에는 하나 이상의 APK가 포함되어 있습니다. 내부의 각 APK에는 자체 매니페스트가 있습니다. 우리 도구는 번들 내의 메인 APK를 분석하여 관련 권한을 보여줍니다.
모든 앱에서 "네트워크 액세스"를 요청하는 이유는 무엇입니까?
거의 모든 앱에는 분석, 버그 보고 또는 광고를 위해 인터넷 액세스가 필요합니다. 이는 일반적이지만 훔친 데이터가 해커의 서버로 전송되는 방식이기도 합니다.
설치를 탭하기 전에 매니페스트 권한 검사
눈에 보이지 않는 것을 판단할 수는 없습니다. 사이드로드하기 전에 APK 권한 보기에 10초를 투자하는 것은 앱이 도달할 수 있는 대상을 아는 것과 단순히 작동하기를 바라는 것의 차이입니다. 먼저 목록을 읽고 두 번째로 설치하십시오.