과도한 권한 취약점 이란?
- 과도한 권한(Excessiv Permissions) 또는 불필요한 권한 취약점은 앱 권한을 잘못 사용할때 발생하는 취약점으로, 개발자는 앱 기능상 꼭 필요한 기능만 사용하여야하며 해당 기능을 사용에 대한 문구를 작성하여 사용자에게 알려야한다.
- 앱은 접근 권한이 필요한 UsageDescription 키를 Info.plist 파일에 저장하고 있음.
- Info.plist 파일에 저장된 UsageDescription 키에 대한 접근 권한이 필요한 경우, 시스템에서 앱 대신 권한을 요청함.
대응방안
- 주어진 권한이 앱에서 반드시 필요한 것인지 확인 후, 불필요하거나 과도한 권한일 경우 삭제.
- 해당 권한을 왜 사용하여야 하는지 문구를 상세히 작성.
※ UsageDescription 키에 대한 자세한 내용은 아래의 사이트에서 확인 할 수 있음.
Protected resources | Apple Developer Documentation
※ UsageDescription 키 종류
분류 | 항목 | 설명 |
블루투스 (Bluetooth) |
NSBluetoothAlwaysUsageDescription | 앱이 블루투스에 액세스해야 하는 이유를 사용자에게 알려주는 메시지 |
NSBluetoothPeripheralUsageDescription |
앱이 Bluetooth 주변 장치에 연결하는 기능을 요청하는 이유를 사용자에게 알려주는 메시지 | |
일정 및 미리 알림 (Calendar and reminders) |
NSCalendarsUsageDescription | 앱이 사용자의 일정 데이터에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
NSRemindersUsageDescription | 앱이 사용자의 미리 알림에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 | |
카메라 및 마이크 (Camera and microphone) |
NSCameraUsageDescription | 앱이 장치의 카메라에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
NSMicrophoneUsageDescription | 앱이 장치의 마이크에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 | |
연락처 (Contacts) |
NSContactsUsageDescription | 앱이 사용자의 연락처에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
얼굴 인식 (Face ID) |
NSFaceIDUsageDescription | 앱이 Face ID로 인증하는 기능을 요청하는 이유를 사용자에게 알려주는 메시지 |
파일 및 폴더 (Files and folders) |
NSDesktopFolderUsageDescription | 앱이 사용자의 데스크톱 폴더에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 |
NSDocumentsFolderUsageDescription | 앱이 사용자의 문서 폴더에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 | |
NSDownloadsFolderUsageDescription | 앱이 사용자의 다운로드 폴더에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 | |
NSNetworkVolumesUsageDescription | 앱이 네트워크 볼륨의 파일에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 | |
NSRemovableVolumesUsageDescription | 앱이 이동식 볼륨의 파일에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 | |
NSFileProviderDomainUsageDescription | 앱이 파일 공급자가 관리하는 파일에 액세스해야 하는 이유를 사용자에게 알려 주는 메시지 | |
게임 센터 (Game center) |
NSGKFriendListUsageDescription | 앱이 Game Center 친구 목록에 액세스해야 하는 이유를 사용자에게 알려주는 메시지 |
건강 (Health) |
NSHealthClinicalHealthRecordsShareUsageDescription | 앱이 임상 기록을 읽을 수 있는 권한을 요청한 이유를 설명하는 사용자에게 보내는 메시지 |
NSHealthShareUsageDescription | 앱이 HealthKit 스토어에서 샘플을 읽을 수 있는 권한을 요청한 이유를 설명하는 사용자에게 보내는 메시지 | |
NSHealthUpdateUsageDescription | 앱이 HealthKit 스토어에 샘플을 저장할 수 있는 권한을 요청한 이유를 설명하는 사용자에게 보내는 메시지 | |
홈 (Home) |
NSHomeKitUsageDescription | 앱이 사용자의 HomeKit 구성 데이터에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 |
위치 (Location) |
NSLocationAlwaysAndWhenInUseUsageDescription | 앱이 항상 사용자의 위치 정보에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 |
NSLocationUsageDescription | 앱이 사용자의 위치 정보에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 | |
NSLocationWhenInUseUsageDescription | 앱이 포그라운드에서 실행되는 동안 앱이 사용자의 위치 정보에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 | |
NSLocationAlwaysUsageDescription | 앱이 항상 사용자 위치에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 | |
미디어 플레이어 (Media Player) |
NSAppleMusicUsageDescription | 앱이 사용자의 미디어 라이브러리에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
움직임 (Motion) |
NSMotionUsageDescription | 앱이 장치의 동작 데이터에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 |
NSFallDetectionUsageDescription | 낙상 감지 이벤트 데이터에 액세스할 수 있는 권한에 대한 앱의 요청을 설명하는 사용자에게 보내는 메시지 | |
네트워킹 (Networking) |
NSLocalNetworkUsageDescription | 앱이 로컬 네트워크에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
NSNearbyInteractionUsageDescription | 주변 장치와의 상호 작용 세션을 시작하기 위한 사용자에게 권한 요청을 보내는 메시지 | |
NSNearbyInteractionAllowOnceUsageDescription |
주변 장치와의 상호 작용 세션을 시작하기 위한 사용자 권한에 대한 일회성 권한 요청을 보내는 메시지 | |
NFC | NFCReaderUsageDescription | 앱이 장치의 NFC 하드웨어에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
사진 (Photos) |
NSPhotoLibraryAddUsageDescription | 앱이 사용자의 사진 라이브러리에 대한 추가 전용 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 |
NSPhotoLibraryUsageDescription | 앱이 사용자의 사진 라이브러리에 대한 액세스를 요청하는 이유를 사용자에게 알려 주는 메시지 | |
보안 (Security) |
NSUserTrackingUsageDescription | 앱이 사용자 또는 장치를 추적하기 위해 데이터를 사용할 수 있는 권한을 요청하는 이유를 사용자에게 알리는 메시지 |
NSAppleEventsUsageDescription | 앱이 Apple 이벤트를 보내는 기능을 요청하는 이유를 사용자에게 알려 주는 메시지 | |
NSSystemAdministrationUsageDescription | 앱이 시스템 구성 조작을 요청하는 이유를 사용자에게 알려주는 macOS의 메시지 | |
센서 (Sensors) |
NSSensorKitUsageDescription | 앱 연구 조사의 목적에 대한 간단한 설명 |
시리 (Siri) |
NSSiriUsageDescription | 앱이 Siri에게 사용자 데이터를 보내도록 요청하는 이유를 사용자에게 알려주는 메시지 |
음성 (Speech) |
NSSpeechRecognitionUsageDescription | 앱이 Apple의 음성 인식 서버로 사용자 데이터를 보내도록 요청하는 이유를 사용자에게 알려주는 메시지 |
TV | NSVideoSubscriberAccountUsageDescription | 앱이 사용자의 TV 제공업체 계정에 대한 액세스를 요청하는 이유를 사용자에게 알려주는 메시지 |
지갑 (Wallet) |
NSIdentityUsageDescription | 앱이 ID 정보를 요청하는 이유를 사용자에게 알려 주는 메시지 |
DVIA-v2 앱을 통한 실습
과도하거나 불필요한 권한이 부여되어 있는지 확인하기 위해 DVIA-v2 앱을 실행.
메인메뉴 좌측 상단 메뉴 클릭 > Excessive Permissions 클릭
CAMERA PERMISSION 클릭 > 앱을 대신하여 시스템이 해당 권한이 왜 필요한지를 알리는 문구와 함께 접근 여부를 확인하고 있다.
3uTools Files 실행 > /private/var/mobile/Containers/Data/Application/$uuid/DVIA-v2.app 경로로 이동 > Info.plist 더블클릭
아래와 같이 사용중인 UsageDescription 키와 설명 문구를 확인할 수 있음.
다른 방법으로 디바이스의 설정 앱을 통해 아래와 같이 설치된 앱과 그 앱이 무슨 권한을 필요로 하는지 알 수 있음.
'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
아이폰 버프슈트 프록시 연결 및 인증서 설치 방법 (0) | 2023.02.13 |
---|---|
[iOS 취약점 진단] 08강 - SSL 인증서 고정 우회(SSL Certificate Pinning) (0) | 2023.02.12 |
[iOS 취약점 진단] 06강 - 부채널을 통한 데이터 유출(Cookies) (0) | 2023.02.12 |
[iOS 취약점 진단] 06강 - 부채널을 통한 데이터 유출(Keystroke logging) (0) | 2023.02.12 |
[iOS 취약점 진단] 06강 - 부채널을 통한 데이터 유출(Pasteboard) (0) | 2023.02.12 |