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