안드로이드 앱 보안에서 놓치기 쉬운 권한과 데이터 흐름
안드로이드 애플리케이션의 보안을 점검할 때 단순히 앱이 정상적으로 실행되는지만 확인해서는 충분하지 않다. 특히 연락처, 사진, 메시지, 위치 정보처럼 민감한 데이터를 다루는 환경에서는 어떤 권한이 요청되고, 해당 권한을 통해 어떤 데이터가 접근되며, 이후 데이터가 어디로 전달되는지를 함께 살펴볼 필요가 있다.
모바일 악성코드 역시 이러한 구조를 이용한다. 정상적인 애플리케이션처럼 보이는 APK가 특정 권한을 요청하고, 사용자가 이를 허용한 이후 내부 데이터를 조회하거나 외부 서버와 통신하는 형태로 동작할 수 있다. 따라서 보안 분석에서는 앱의 화면이나 아이콘보다 권한 요청 → 데이터 접근 → 데이터 처리 → 네트워크 통신으로 이어지는 전체 흐름을 확인하는 것이 중요하다.
권한은 기능과 직접 연결되어야 한다
안드로이드 앱은 제공하는 기능에 따라 다양한 시스템 권한을 요청한다. 카메라 앱에서 카메라 접근 권한이 필요한 것처럼 특정 기능을 구현하기 위해 권한이 필요한 경우는 일반적이다.
문제는 애플리케이션의 핵심 기능과 직접적인 관련이 없는 민감한 권한을 광범위하게 요청하는 경우다.
연락처, 마이크, 카메라, 사진 및 동영상 등에 대한 접근 권한은 개인정보와 직접 연결될 수 있기 때문에 특히 주의해서 살펴볼 필요가 있다.
개발 단계에서는 AndroidManifest에 선언된 권한과 실제 코드에서 사용하는 API를 비교하는 것이 도움이 된다. 선언된 권한이 실제 기능에서 사용되지 않는다면 불필요한 권한을 제거하는 것도 보안 수준을 높이는 방법이다.
API 하나만으로 악성 여부를 판단할 수 없는 이유
보안 분석 과정에서는 특정 API가 사용됐다는 이유만으로 애플리케이션을 악성으로 판단해서는 안 된다.
정상적인 애플리케이션에서도 연락처나 저장된 미디어에 접근하는 API가 사용될 수 있기 때문이다. 중요한 것은 어떤 API가 존재하는가보다 그 API가 어떤 흐름 안에서 사용되는가이다.
예를 들어 다음과 같은 구조가 확인됐다고 가정해 보자.
권한 요청 → 개인정보 조회 → 데이터 가공 → 네트워크 전송
각 단계가 서로 연결되어 있다면 단순한 데이터 조회보다 더 자세한 분석이 필요하다.
반면 동일한 API가 사용되더라도 로컬 화면에 데이터를 표시하기 위한 목적이라면 위험성에 대한 판단은 달라질 수 있다. 따라서 특정 코드나 API 하나만 분리해서 보는 것보다 애플리케이션 전체의 데이터 흐름을 확인하는 것이 중요하다.
ContentProvider를 통한 데이터 접근
안드로이드의 ContentProvider는 애플리케이션 간 데이터를 공유하기 위한 주요 구성 요소 중 하나다. 연락처와 같은 시스템 데이터 역시 ContentProvider 구조를 통해 접근할 수 있다.
애플리케이션은 ContentResolver를 이용해 필요한 데이터를 조회할 수 있으며, 보안 분석에서는 어떤 URI에 접근하는지와 조회한 결과가 이후 어떤 방식으로 처리되는지를 확인할 수 있다.
예를 들어 연락처 데이터를 조회한 뒤 별도의 객체나 JSON 형태로 변환하고 네트워크 통신을 담당하는 코드로 전달하는 구조가 발견된다면, 해당 데이터가 실제로 외부 서버로 전송되는지 추가적인 검증이 필요하다.
다만 정적 분석에서 이러한 코드가 발견됐다는 사실과 실제 실행 여부는 구분해야 한다. 실제 동작은 권한 상태나 실행 조건 등에 따라 달라질 수 있기 때문이다.
MediaStore와 미디어 데이터 접근
사진과 동영상 역시 스마트폰에서 보호해야 할 중요한 데이터다.
안드로이드에서는 MediaStore를 통해 단말기에 저장된 미디어 데이터를 조회할 수 있다. 정상적인 사진 관리나 편집 애플리케이션에서도 이러한 접근이 필요할 수 있지만, 앱의 핵심 기능과 관계없이 대량의 미디어 정보를 조회하는 동작이 확인된다면 분석 대상이 될 수 있다.
보안 점검에서는 파일 자체뿐만 아니라 파일명이나 생성 시간, 메타데이터 등이 함께 처리되는지도 확인할 필요가 있다.
또한 애플리케이션이 카메라나 갤러리 접근 권한을 필요로 한다면 사용자가 어떤 권한을 허용했는지 쉽게 확인할 수 있도록 권한 관리 기능을 명확하게 제공하는 것도 중요하다.
네트워크 통신을 함께 확인해야 하는 이유
앱 내부에서 데이터를 조회하는 것과 해당 데이터를 외부로 전송하는 것은 별개의 문제다. 따라서 개인정보와 관련된 애플리케이션을 분석할 때는 네트워크 통신을 함께 확인해야 한다.
정적 분석에서는 APK 내부에 포함된 URL, 도메인, API 경로 등의 문자열을 확인할 수 있다. 동적 분석에서는 실제 실행 과정에서 발생하는 네트워크 요청을 관찰할 수 있다.
예를 들어 특정 데이터를 수집한 직후 외부 서버에 HTTP 또는 HTTPS 요청이 발생하는 구조가 반복적으로 확인된다면 두 동작 사이의 관계를 분석할 필요가 있다.
HTTPS를 사용한다는 사실만으로 데이터 처리 과정 전체가 안전하다고 판단해서도 안 된다. 통신 자체의 보호와 어떤 데이터가 어떤 서버로 전달되는지는 별도로 확인해야 하는 영역이기 때문이다.
정적 분석과 동적 분석을 함께 활용하기
APK 보안 분석에서는 정적 분석과 동적 분석을 적절하게 조합하는 것이 효과적이다.
정적 분석은 애플리케이션을 실행하지 않은 상태에서 Manifest, 클래스, 문자열, 권한, API 호출, 네트워크 관련 정보를 확인하는 방식이다. 이를 통해 애플리케이션의 전체적인 구조를 빠르게 파악할 수 있다.
동적 분석은 실제 실행 환경에서 애플리케이션의 행동을 관찰하는 방법이다. 특정 권한을 요청하는 시점이나 파일 접근, 프로세스 활동, 네트워크 요청 등이 실제로 발생하는지 확인할 수 있다.
두 가지 방법을 함께 사용하면 정적 분석에서 발견된 코드가 실제 실행되는지 검증할 수 있으며, 애플리케이션의 실제 데이터 흐름을 보다 정확하게 파악할 수 있다.
악성 APK 분석에서 기록을 보존하는 이유
실제 보안 사고와 관련된 APK를 분석하는 경우에는 원본 자료를 보존하는 것도 중요하다.
원본 APK의 해시값과 파일명, 전달받은 경로 등을 기록하고 분석 과정에서는 별도의 복사본을 사용하는 방법을 고려할 수 있다. 또한 확인된 권한, 도메인, IP 주소, 파일 경로, API 호출 및 네트워크 요청 등을 시간 순서대로 기록하면 전체적인 동작 구조를 재구성하는 데 도움이 된다.
특히 의심스러운 APK를 개인 스마트폰에서 반복적으로 실행하는 것은 추가적인 정보 유출 가능성을 높일 수 있다. 따라서 실제 분석이 필요한 경우에는 가능한 한 분석 환경을 분리하는 것이 바람직하다.
개발 단계에서 적용할 수 있는 최소 권한 원칙
모바일 애플리케이션의 보안을 높이기 위해서는 개발 단계에서부터 최소 권한 원칙을 적용해야 한다.
앱의 기능에 필요한 권한만 요청하고 불필요한 개인정보 접근을 줄이는 것이 기본이다. 민감한 데이터를 저장해야 하는 경우에는 저장 방식과 접근 통제를 함께 고려해야 한다.
외부 서버로 데이터를 전송하는 기능이 있다면 어떤 데이터가 전송되는지 명확하게 정의하고, 로그나 디버그 코드에 민감한 정보가 남지 않도록 관리할 필요도 있다.
사용자에게 권한의 목적을 명확하게 설명하는 것 역시 중요하다. 단순히 권한 승인을 유도하는 것이 아니라 해당 권한이 어떤 기능을 위해 필요한지 이해할 수 있도록 만드는 것이 장기적인 보안 측면에서 바람직하다.
모바일 악성코드 분석에서 중요한 전체 흐름
안드로이드 보안에서는 특정 권한이나 API 하나만으로 애플리케이션의 안전성을 판단하기 어렵다.
중요한 것은 권한 요청, 데이터 접근, 데이터 처리, 네트워크 통신이 어떤 관계로 연결되어 있는지를 확인하는 것이다.
예를 들어 연락처 접근 권한을 요청하고, 해당 데이터를 조회한 뒤 별도의 형식으로 가공하고, 이어서 외부 서버와 통신하는 흐름이 확인된다면 각 단계가 실제로 어떻게 연결되는지 검증해야 한다.
이러한 분석은 악성 애플리케이션의 동작을 이해하는 데뿐만 아니라 정상적인 애플리케이션의 보안 구조를 점검하는 데도 활용할 수 있다.
관련된 악성 애플리케이션 분석과 디지털 범죄 대응에 대한 기술 자료를 참고하려면 아크링크의 관련 자료를 확인할 수 있다.
마무리
안드로이드 애플리케이션의 보안을 확인할 때는 특정 권한이나 API 하나만 바라보기보다 전체 데이터 흐름을 살펴보는 접근이 필요하다.
개발자는 최소 권한 원칙을 적용하고 불필요한 데이터 접근을 줄여야 하며, 보안 분석 과정에서는 정적 분석과 동적 분석을 통해 실제 동작 여부를 검증해야 한다.
결국 모바일 보안은 애플리케이션을 배포한 이후에만 관리하는 문제가 아니다. 기획과 개발 단계에서부터 어떤 데이터를 왜 접근하고, 어떻게 처리하며, 외부로 전송되는 데이터가 무엇인지 명확하게 정의하는 것에서 시작된다.