1 / 16

안드로이드 권한

안드로이드 권한. 허준영 (jyheo@hansung.ac.kr). 권한. 앱 샌드박스 앱 자신의 파일만 접근 , 제한된 서비스 접근 시스템이나 다른 앱과 상호작용을 위해 권한 필요 권한 특정 연산을 수행할 수 있음을 나타내는 표시 매우 다양한 종류의 권한 SD 카드 , 카메라 , 마이크와 같은 하드웨어 접근 연락처와 같은 데이터 접근 다른 앱의 컴포넌트 실행 커스텀 권한. 권한. $ adb shell $ pm list permissions.

natashaj
Download Presentation

안드로이드 권한

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 안드로이드 권한 허준영(jyheo@hansung.ac.kr)

  2. 권한 • 앱 샌드박스 • 앱 자신의 파일만 접근, 제한된 서비스 접근 • 시스템이나 다른 앱과 상호작용을 위해 권한 필요 • 권한 • 특정 연산을 수행할 수 있음을 나타내는 표시 • 매우 다양한 종류의 권한 • SD카드, 카메라, 마이크와 같은 하드웨어 접근 • 연락처와 같은 데이터 접근 • 다른 앱의 컴포넌트 실행 • 커스텀 권한

  3. 권한 • $ adb shell • $ pm list permissions pm: package manager command generic_x86:/ $ pm list permissions … … permission:android.permission.READ_OEM_UNLOCK_STATE permission:com.android.vending.billing.ADD_CREDIT_CARD permission:android.permission.SET_HARMFUL_APP_WARNINGS permission:com.google.android.apps.docs.permission.C2D_MESSAGE permission:android.permission.SET_SCREEN_COMPATIBILITY permission:com.android.vending.billing.IN_APP_NOTIFY.permission.C2D_MESSAGE permission:com.google.android.gtalkservice.permission.GTALK_SERVICE permission:android.permission.MEDIA_CONTENT_CONTROL permission:android.permission.DELETE_PACKAGES permission:android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED permission:com.google.android.gms.magictether.permission.DISABLE_SOFT_AP permission:com.google.android.calendar.permission.READ_OOBE permission:com.google.android.gms.chromesync.permission.METADATA_UPDATED generic_x86:/ $ permission:android.permission 기본 안드로이드 내장 권한 permission:패키지이름.permission 특정 앱의 컴포넌트 접근을 위한 권한

  4. 권한 보호 수준 • Protection Level • Normal • 개인정보 노출의 위험이 없는 권한 • 사용자에게 권한 확인 받지 않고 허가함 • Signature • 동일한 키로 서명된 앱의 경우만 자동으로 권한 부여함 • Dangerous • 개인정보 노출 위험성이 있는 권한 • 사용자에게 권한 부여를 확인하고 허가할 경우만 부여함

  5. Normal 권한 • ACCESS_LOCATION_EXTRA_COMMANDS • ACCESS_NETWORK_STATE • ACCESS_NOTIFICATION_POLICY • ACCESS_WIFI_STATE • BLUETOOTH • BLUETOOTH_ADMIN • BROADCAST_STICKY • CHANGE_NETWORK_STATE • CHANGE_WIFI_MULTICAST_STATE • DISABLE_KEYGUARD • EXPAND_STATUS_BAR • FOREGROUND_SERVICE • GET_PACKAGE_SIZE • INSTALL_SHORTCUT • INTERNET • KILL_BACKGROUND_PROCESSES • MANAGE_OWN_CALLS • MODIFY_AUDIO_SETTINGS • NFC • READ_SYNC_SETTINGS • READ_SYNC_STATS • RECEIVE_BOOT_COMPLETED • REORDER_TASKS • REQUEST_COMPANION_RUN_IN_BACKGROUND • CHANGE_WIFI_STATE • REQUEST_COMPANION_USE_DATA_IN_BACKGROUND • REQUEST_DELETE_PACKAGES • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS • SET_ALARM • SET_WALLPAPER • SET_WALLPAPER_HINTS • TRANSMIT_IR • USE_FINGERPRINT • VIBRATE • WAKE_LOCK • WRITE_SYNC_SETTINGS

  6. Dangerous 권한

  7. 권한 할당 • 리눅스 시스템에 의한 권한 할당 • 네이티브 데몬과 같이 패키지 매니저와 무관한 프로세스들 • 프로세스에 할당된 UID/GID에 따라 권한 확인 • 디바이스 파일, 유닉스 도메인 소켓등의 시스템 자원 접근시 • 패키지 매니저에 의한 권한 할당 • 프레임워크 수준에서 앱이나 시스템 서비스 등이 요청하는 안드로이드 권한

  8. 권한 할당(패키지 매니저) • 각 앱(패키지)은 고유의 UID를 가짐 • 패키지 매니저 서비스는 특정 UID가 어떤 권한을 가지고 있는지 확인 해줌 • Context.checkPermission(permission, pid, uid) • 전달된 uid가 해당 permission을 가지고 있으면 PERMISSION_GRANTED를 리턴, 없으면 PERMISSION_DENIED 리턴

  9. 권한 할당 • 액티비티와 서비스 권한 적용 • startActivity()나 startService()를 부를 때, 호출되는 액티비티나 서비스에 필요한 권한을 지정하고호출한 앱이 지정한 권한을 가지고 있는지 확인할 수 있음 • 지정한 권한이 없을 경우 SecurityException이 발생 • 컨텐트 제공자 권한 적용 • 컴포넌트 전체, 혹은 특정 URI를 보호 • 읽기와 쓰기를 분리하여 권한 적용 가능 • ContentResolver.query(), insert(), update(), delete()가 호출되면, 권한을 확인하고 권한이 확인된 경우만 처리됨

  10. 권한 할당 • 브로드캐스트 권한 적용 • Context.sendBroadcast(Intent, String receiverPermssion) • 인텐트를 브로대캐스트할 때, receiverPermission을 가지고 있는 대상만 인텐트를 수신할 수 있음 • 수신자도 발신자가 특정권한이 있는 경우만 자신한테 메시지를 보낼 수 있도록 지정할 수 있음 • 특정 시스템 브로드캐스트(BOOT_COMPLETED, PACKAGE_INSTALLED 등)는 시스템 UID나 루트UID인 경우만 보낼 수 있음

  11. 공개/비공개 컴포넌트 • 비공개 컴포넌트 • 외부에서 접근이 불가능 • 공개 컴포넌트 • 외부에서 접근이 가능 • 커스텀 권한을 만들어서 보호해야 함 • 커스텀 권한 • Manifest 파일에 명시 • 동적으로 추가할 수도 있음 • 당연한 얘기지만, • 권한이 먼저 추가된 후에 권한 부여가 가능함

  12. Pending Intent • 앱이 자신의 권한을 다른 앱에 허용할 수 있음 • Intent와 작업(액티비티 실행이나 브로드캐스트 송신 등)을 캡슐화하여 만듬 • Pending Intent를 받은 앱은 해당 액션을 수행 할 수 있음 • Alarm이나 Notification에서 주로 사용됨 • 어떤 앱이 Alarm이나 Notification이 발생했을 때 수행할 작업을 지정하고 종료한 후에도, • 시스템이 해당 액션을 종료된 앱 대신 수행할 수 있음

  13. 앱 권한 사용 지침 • 1. 꼭 필요한 권한만 사용 • 다른 방법이 있으면 그 방법을 사용. 예를 들어 인텐트를 이용하여 다른 앱을 호출 • 2. 사용하는 라이브러리가 요청하는 권한 파악 • 3. 투명하게 • 요청하는 권한의 용도와 이유를 사용자에게 명확히 설명할 것 • 4. 명시적으로 알리기 • 민감한 정보(카메라, 마이크 등)에 접근할 때 사용자에게 지속적으로 알림

  14. 실습 - EasyPermissions • 안드로이드 6.0이후로 권한 요청 처리가 귀찮음 • 좀 더 쉽게 만들어주는 library • https://github.com/googlesamples/easypermissions

  15. 실습 – 커스텀 권한 • com.example.jyheo.myapplication이 CustomActivity를 export하고 com.example.jyheo.myapplication.permission.CUSTOM_PERMISSION Activity 실행을 위해 권한을 요구함 <application <activity android:name=".CustomActivity" … android:exported="true" android:permission="com.example.jyheo.myapplication.permission.CUSTOM_PERMISSION"></activity> … </application> <permission android:name="com.example.jyheo.myapplication.permission.CUSTOM_PERMISSION" android:protectionLevel="dangerous" /> 커스텀 권한 정의

  16. 실습 – 커스텀 권한 • 다른 앱(myapplication2) 에서 com.example.jyheo.myapplication의 CustomActivity를 시작 • SecurityException발생 • 해결은? • Myapplication2에서 startActivity하기 전에 com.example.jyheo.myapplication.permission.CUSTOM_PERMISSION권한 부여 Intent intent = new Intent(); intent.setComponent(new ComponentName("com.example.jyheo.myapplication", "com.example.jyheo.myapplication.CustomActivity")); startActivity(intent);

More Related