정적 분석 단계에서 소스 코드를 분석해 확인할 사항은 다음과 같다.
정적 분석은 취약한 함수 사용 여부, 설계 구조 상의 취약점을 식별할 수 있으나 아래와 같은
한계가 있다.
에뮬레이터 연결 후, adb install -r ./[APK File name]
명령어로 APK를 설치한다.
설치가 완료되어 앱 실행 결과 잘 작동한다.
mac os에서 unzip 명령어를 사용해 apk 파일을 압축해제 할 수 있다.
unzip [xxx.apk] -d [dir name]
해제 결과, mainfest, dex, 네이티브 라이브러리(lib) res 등의 폴더가 존재한다.
jadx-gui 디컴파일러를 사용해 apk 파일 오픈 결과, manifest.xml 파일, 디컴파일 된
자바 코드와 APK 구조를 파악할 수 있다.
manifest.xml 파일 구성 요소는 총 4가지로 구성된다.
manifest
application
uses-permission
activity/service/provider/recevier
안드로이드 접근권한 목록 중에 민감한 사용자 데이터 또는 특정 시스템 기능에 엑세스 가능한 권한 목록은 아래와 같다.
권한 | 설명 |
---|---|
연락처 및 캘린더 접근 권한 | |
READ_CONTACTS | 사용자의 연락처 정보를 읽을 수 있음 |
WRITE_CONTACTS | 사용자의 연락처 정보를 수정하거나 추가할 수 있음 |
GET_ACCOUNTS | 기기에 등록된 계정 목록에 접근할 수 있음 |
READ_CALENDAR | 사용자의 캘린더 정보를 읽을 수 있음 |
WRITE_CALENDAR | 사용자의 캘린더에 이벤트를 추가하거나 수정할 수 있음 |
전화 및 통화 관련 권한 | |
READ_PHONE_STATE | 전화번호, 기기 ID 등의 전화 상태 정보를 읽을 수 있음 |
CALL_PHONE | 전화 앱을 거치지 않고 직접 전화 발신을 할 수 있음 |
READ_CALL_LOG | 통화 기록을 읽을 수 있음 |
WRITE_CALL_LOG | 통화 기록을 수정할 수 있음 |
ADD_VOICEMAIL | 음성사서함을 추가하거나 수정할 수 있음 |
USE_SIP | SIP 통신을 사용할 수 있음 |
PROCESS_OUTGOING_CALLS | 발신 전화 이벤트를 모니터링하고 제어할 수 있음 |
메시지 및 SMS 관련 권한 | |
SEND_SMS | SMS 메시지를 보낼 수 있음 |
RECEIVE_SMS | SMS 메시지를 수신할 수 있음 |
READ_SMS | SMS 메시지 내용을 읽을 수 있음 |
RECEIVE_WAP_PUSH | WAP 푸시 메시지를 수신할 수 있음 |
RECEIVE_MMS | MMS 메시지를 수신할 수 있음 |
위치 정보 접근 권한 | |
ACCESS_FINE_LOCATION | GPS를 사용하여 정확한 위치 정보를 얻을 수 있음 |
ACCESS_COARSE_LOCATION | 기지국 또는 Wi-Fi를 통해 대략적인 위치 정보를 얻을 수 있음 |
ACCESS_BACKGROUND_LOCATION | 백그라운드에서 위치 정보를 수집할 수 있음 (Android 10 이상) |
저장소 및 파일 접근 권한 | |
READ_EXTERNAL_STORAGE | 외부 저장소에 저장된 파일을 읽을 수 있음 |
WRITE_EXTERNAL_STORAGE | 외부 저장소에 파일을 쓰거나 수정할 수 있음 |
MANAGE_EXTERNAL_STORAGE | 외부 저장소의 모든 파일에 대한 전체 접근 권한을 가질 수 있음 (Android 11 이상) |
카메라 및 마이크 접근 권한 | |
CAMERA | 카메라를 사용하여 사진이나 동영상을 촬영할 수 있음 |
RECORD_AUDIO | 마이크를 사용하여 오디오를 녹음할 수 있음 |
센서 및 신체 정보 접근 권한 | |
BODY_SENSORS | 심박수 등 신체 관련 데이터를 수집할 수 있음 |
ACTIVITY_RECOGNITION | 사용자의 활동 상태를 인식할 수 있음 (예: 걷기, 달리기) |
개인 정보 및 시스템 설정 권한 | |
READ_PRIVILEGED_PHONE_STATE | 추가적인 전화 상태 정보를 읽을 수 있음 (시스템 앱 전용) |
READ_LOGS | 시스템 로그를 읽을 수 있음 |
WRITE_SETTINGS | 시스템 설정을 읽거나 변경할 수 있음 |
SYSTEM_ALERT_WINDOW | 다른 앱 위에 창을 띄울 수 있음 |
PACKAGE_USAGE_STATS | 앱 사용 통계에 접근할 수 있음 |
INSTALL_PACKAGES | APK 파일을 설치할 수 있음 |
REQUEST_INSTALL_PACKAGES | 사용자에게 앱 설치를 요청할 수 있음 |
MODIFY_AUDIO_SETTINGS | 오디오 설정을 변경할 수 있음 |
네트워크 및 연결 설정 권한 | |
ACCESS_WIFI_STATE | Wi-Fi 연결 상태 정보를 읽을 수 있음 |
CHANGE_WIFI_STATE | Wi-Fi 연결 상태를 변경할 수 있음 |
ACCESS_NETWORK_STATE | 네트워크 연결 상태 정보를 읽을 수 있음 |
CHANGE_NETWORK_STATE | 네트워크 연결 상태를 변경할 수 있음 |
BLUETOOTH | 블루투스 기능에 접근할 수 있음 |
BLUETOOTH_ADMIN | 블루투스 설정을 변경할 수 있음 |
NFC | NFC 기능을 사용할 수 있음 |
생체 인증 및 보안 관련 권한 | |
USE_FINGERPRINT | 지문 인식 기능을 사용할 수 있음 |
USE_BIOMETRIC | 생체 인증 기능을 사용할 수 있음 (Android 9 이상) |
BIND_ACCESSIBILITY_SERVICE | 접근성 서비스를 바인딩하여 기기를 제어할 수 있음 |
계정 및 인증 관련 권한 | |
MANAGE_ACCOUNTS | 계정을 추가하거나 제거할 수 있음 |
USE_CREDENTIALS | 계정의 인증 정보를 사용할 수 있음 |
AUTHENTICATE_ACCOUNTS | 계정 인증을 수행할 수 있음 |
디바이스 관리자 및 잠금 화면 권한 | |
BIND_DEVICE_ADMIN | 디바이스 관리자 권한을 부여받을 수 있음 |
DISABLE_KEYGUARD | 잠금 화면을 비활성화할 수 있음 |
기타 민감한 권한 | |
READ_FRAME_BUFFER | 화면에 표시되는 내용을 읽을 수 있음 |
CAPTURE_AUDIO_OUTPUT | 기기의 오디오 출력을 캡처할 수 있음 |
CAPTURE_VIDEO_OUTPUT | 기기의 비디오 출력을 캡처할 수 있음 |
GET_CLIPBOARD_DATA | 클립보드에 저장된 내용을 읽을 수 있음 |
INTERNET | 네트워크 소켓을 열 수 있음 (주의: 다른 권한과 결합될 경우 민감한 데이터 전송에 사용될 수 있음) |