Modification des autorisations d'exécution dans Android

Bonjour, je m'appelle Vitaly.





J'ai 25 ans, diplômé de l'Université électrotechnique d'État de Saint-Pétersbourg "LETI" dans sa ville natale. Je programme depuis 10 ans, dont 4 pour Android. L'auteur de nombreux programmes Homebrew, connus sous le nom de VITTACH, pour Sony PlayStation Portable (PSP) .





Aujourd'hui, je voudrais discuter avec vous du problème de la sécurité des applications mobiles. Les développeurs de Google améliorent constamment Android, trouvant et corrigeant des vulnérabilités avec l'aide d'une large communauté réunie grâce au programme Android Security Rewards , dont nous parlerons plus tard. Néanmoins, des problèmes subsistent, et c'est notre tâche commune en tant que communauté de les signaler afin qu'ils soient résolus en temps opportun.





La vulnérabilité dont je parle, appartient à la classe avec la Priorité: le P2 et la Gravité: le S2 , cela selon le tableau au sens large, signifie:





  • Un problème qui doit être résolu dans un délai raisonnable;





  • Un problème qui est important pour un grand pourcentage d'utilisateurs et qui est lié aux fonctionnalités de base.





Autorisation d'exécution

L'article se concentrera sur une chose connue de tous les développeurs sous le nom de permission d'exécution, à savoir la possibilité d'induire l'utilisateur final en erreur en montrant la boîte de dialogue d'autorisation avec son propre texte et son icône sur celle du système. Il est facile de deviner qu'une telle approche permettrait aux développeurs de demander à l'utilisateur l'autorisation, par exemple, sur le système de fichiers, et en fait - de donner accès à la géolocalisation, à la caméra ou à autre chose.





C'est impossible

Une question similaire a été posée plus d'une fois sur des forums spécialisés, notamment sur StackOverflow . La seule réponse correcte était que c'était impossible. Et cela est vrai: il est impossible de remplacer le texte dans la boîte de dialogue système elle-même, mais il est possible de le remplacer par le vôtre.





Qu'y a-t-il sous le capot

Runtime Permission Android 6.0



dangerous-. , . dangerous .





Dangerous permissions
  • android.permission_group.CALENDAR





    • android.permission.READ_CALENDAR





    • android.permission.WRITE_CALENDAR





  • android.permission_group.CAMERA





    • android.permission.CAMERA





  • android.permission_group.CONTACTS





    • android.permission.READ_CONTACTS





    • android.permission.WRITE_CONTACTS





    • android.permission.GET_ACCOUNTS





  • android.permission_group.LOCATION





    • android.permission.ACCESSFINELOCATION





    • android.permission.ACCESSCOARSELOCATION





  • android.permission_group.MICROPHONE





    • android.permission.RECORD_AUDIO





  • android.permission_group.PHONE





    • android.permission.READPHONESTATE





    • android.permission.CALL_PHONE





    • android.permission.READCALLLOG





    • android.permission.WRITECALLLOG





    • android.permission.ADD_VOICEMAIL





    • android.permission.USE_SIP





    • android.permission.PROCESSOUTGOINGCALLS





  • android.permission_group.SENSORS





    • android.permission.BODY_SENSORS





  • android.permission_group.SMS





    • android.permission.SEND_SMS





    • android.permission.RECEIVE_SMS





    • android.permission.READ_SMS





    • android.permission.RECEIVEWAPPUSH





    • android.permission.RECEIVE_MMS





    • android.permission.READCELLBROADCASTS





  • android.permission_group.STORAGE





    • android.permission.READEXTERNALSTORAGE





    • android.permission.WRITEEXTERNALSTORAGE









Android GrantPermissionsActivity, .





ActivityCompat.requestPermissions(
    MainActivity.this,
    arrayOf(Manifest.permission.READ_CONTACTS),
    PERMISSION_REQUEST_CODE
)
      
      



Activity, UI , Activity, .





:





Activity android:windowIsTranslucent=true



( Activity , , ) Activity , . Activity Activity .





– Activity , – Activity . Activity, ?





, , , , . , :





Activity , onResume



onPause



. Activity.





, Activity , . – !





,

Kotlin









  • ,





    <style name="Theme.Transparent" parent="AppTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    </style>
          
          



  • Activity





    ...
    <activity android:name=".PermissionActivity"
              android:theme="@style/Theme.Transparent">
          
          



  • PermissionActivity layout





    onCreate :





    window.addFlags(
      FLAG_NOT_FOCUSABLE or FLAG_NOT_TOUCH_MODAL or FLAG_NOT_TOUCHABLE
    )
          
          



    :





    • FLAG_NOT_FOCUSABLE



      : window, FLAG_NOT_FOCUSABLE



      , ;





    • FLAG_NOT_TOUCH_MODAL



      : , , , ;





    • FLAG_NOT_TOUCHABLE



      : .





  • MainActivity





    ActivityCompat.requestPermissions(
        MainActivity.this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        REQUEST_CODE
    )
          
          



  • MainActivity : PermissionActivity.





    startActivity(Intent(this, PermissionActivity::class.java))
          
          



    PermissionActivity Activity . !





Android >= 7.1.1

Runtime Permission Android 6.0



, 7.1.1



, .. Android



.





Android 6.0



, . , Google .





Android Rewards Program

J'ai déposé une candidature et joint tous les documents explicatifs et de démonstration relatifs à cette vulnérabilité. Pour le moment, la demande est à l'étude, je ne peux donc pas divulguer les détails, car j'ai signé l'accord correspondant.





Comment est-ce plus simple?

Pour faciliter l'exploitation de la vulnérabilité, j'ai écrit une bibliothèque




















All Articles