Blog

Technique de codage sécurisé : Le problème des permissions personnalisées

Pieter De Cremer
Publié le 25 octobre 2017

Lorsqu'elles sont développées pour la téléphonie mobile, les applications doivent souvent demander des autorisations au système. Elles peuvent avoir besoin d'accéder aux contacts de l'utilisateur, à la connexion Bluetooth ou à la possibilité d'envoyer des messages SMS. Toutes les permissions mentionnées ci-dessus sont des permissions de plateforme, définies par le cadre Android.

Mais dans certains cas, ces autorisations ne suffisent pas et l'application doit définir ses propres autorisations personnalisées. Prenons l'exemple de notre propre entreprise. Secure Code Warrior pourrait créer une application qui enregistre certaines données privées dans le cadre d'un profil, y compris les performances de l'utilisateur sur la plateforme SCW. Nous aimerions permettre à une autre application de formation à la sécurité, par exemple DevTrainer, d'utiliser ces données si l'utilisateur lui en donne l'autorisation. Il s'agit de données sensibles, l'utilisateur ne voudrait certainement pas que n'importe qui les connaisse, mais l'application SCW ne devrait pas complètement les cacher et les protéger car elles pourraient être utiles. Nous souhaitons donc permettre à l'utilisateur d'exercer un contrôle sur ces données. C'est là qu'interviennent les autorisations personnalisées.

Le SCWApp crée une autorisation personnalisée, DevTrainer demande cette autorisation et l'utilisateur peut décider s'il veut l'autoriser ou non. Il s'agit d'une pratique courante et d'un bon moyen de restreindre l'accès aux applications figurant sur la liste blanche.

Malheureusement, les permissions personnalisées présentent certains comportements non intuitifs qui les rendent risquées du point de vue de la sécurité. Concrètement, les autorisations personnalisées peuvent être définies par n'importe quelle application à n'importe quel moment, et "le premier qui gagne", ce qui n'est pas sans conséquences.

Pour le scénario suivant, nous définissons deux profils d'applications que nous avons introduits ci-dessus (toutes ces applications sont fictives à des fins de démonstration) :

1. SCWApp: l'application qui définit une permission personnalisée et défend un composant utilisant cette permission.

2. DevTrainer: cette application définit la même permission que SCWApp et déclare à l'utilisateur qu'elle souhaite détenir cette permission.

Il s'agit d'un scénario courant, appelé "Peer Apps Case" (cas des applications homologues). Si l'application DevTrainer n'était qu'un plugin pour SCWApp, elle n'aurait pas à définir de permission personnalisée. L'hypothèse, dans ce cas, est que SCWApp sera installée avant DevTrainer et qu'aucun comportement inattendu ne se produira. Si, d'une manière ou d'une autre, l'utilisateur installe DevTrainer en premier, il n'est pas informé de la demande d'autorisation. Si l'utilisateur installe ensuite SCWApp, la permission n'est pas accordée rétroactivement à DevTrainer, de sorte que les tentatives d'utilisation du composant sécurisé par l'application DevTrainer échoueront.

C'est là qu'intervient le cas de l'application Peers. Dans certains cas, vous ne pouvez pas vous attendre à ce qu'une application soit installée avant l'autre. Par exemple, si Facebook et Twitter veulent tous deux utiliser les composants de l'autre, ils doivent définir les autorisations personnalisées de l'un et de l'autre.

Cependant, c'est là que les choses se compliquent. Si l'application DevTrainer est installée en premier, l'utilisateur n'est pas informé de sa demande d'autorisation personnalisée. À ce stade, même si l'utilisateur n'a pas été informé, DevTrainer détient l'autorisation personnalisée et peut accéder au composant sécurisé.

La situation est encore plus délicate. L'application DevTrainer peut modifier le niveau de protection des autorisations. Android n'utilise pas le niveau de protection du défenseur, mais le niveau de protection défini en premier, ce qui signifie que l'application installée en premier peut le définir. Cela signifie que si DevTrainer modifie le niveau de protection des permissions pour qu'il devienne normal, toutes les applications futures qui demanderont cette permission n'auront pas à être confirmées par l'utilisateur, mais se verront automatiquement accorder l'accès.

Ce scénario a été inspiré par l'explication de ce problème trouvée sur le github de cwac-security.

La stratégie du "premier qui gagne" a des conséquences dangereuses et la méconnaissance de son comportement peut conduire le développeur à prendre des décisions de sécurité basées sur des données non fiables et à permettre à des applications non souhaitées d'accéder à des données sensibles ou à des services protégés. Pour en savoir plus sur la manière d'éviter les décisions de sécurité basées sur des données non fiables, visitez notre plateforme. Ce comportement a été modifié à partir d'Android 5.0 (Lollipop). Mais comme actuellement, plus de 22% des appareils Android utilisent encore une version inférieure d'Android, il est important d'atténuer les risques du comportement original dans votre application. Vérifiez si la permission a déjà été définie lors de la première exécution de votre application et prenez les mesures appropriées si c'est le cas pour résoudre les risques de sécurité.

Bonne chance pour le codage et à la semaine prochaine !

En définissant des autorisations personnalisées, une application peut partager ses ressources et ses capacités avec d'autres applications.

https://developer.android.com/guide/topics/permissions/defining.html

Voir la ressource
Voir la ressource

En définissant des autorisations personnalisées, une application peut partager ses ressources et ses capacités avec d'autres applications.

Vous souhaitez en savoir plus ?

Chercheur en sécurité applicative - Ingénieur R&D - Doctorant

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Réservez une démonstration
Partager sur :
Auteur
Pieter De Cremer
Publié le 25 octobre 2017

Chercheur en sécurité applicative - Ingénieur R&D - Doctorant

Partager sur :

Lorsqu'elles sont développées pour la téléphonie mobile, les applications doivent souvent demander des autorisations au système. Elles peuvent avoir besoin d'accéder aux contacts de l'utilisateur, à la connexion Bluetooth ou à la possibilité d'envoyer des messages SMS. Toutes les permissions mentionnées ci-dessus sont des permissions de plateforme, définies par le cadre Android.

Mais dans certains cas, ces autorisations ne suffisent pas et l'application doit définir ses propres autorisations personnalisées. Prenons l'exemple de notre propre entreprise. Secure Code Warrior pourrait créer une application qui enregistre certaines données privées dans le cadre d'un profil, y compris les performances de l'utilisateur sur la plateforme SCW. Nous aimerions permettre à une autre application de formation à la sécurité, par exemple DevTrainer, d'utiliser ces données si l'utilisateur lui en donne l'autorisation. Il s'agit de données sensibles, l'utilisateur ne voudrait certainement pas que n'importe qui les connaisse, mais l'application SCW ne devrait pas complètement les cacher et les protéger car elles pourraient être utiles. Nous souhaitons donc permettre à l'utilisateur d'exercer un contrôle sur ces données. C'est là qu'interviennent les autorisations personnalisées.

Le SCWApp crée une autorisation personnalisée, DevTrainer demande cette autorisation et l'utilisateur peut décider s'il veut l'autoriser ou non. Il s'agit d'une pratique courante et d'un bon moyen de restreindre l'accès aux applications figurant sur la liste blanche.

Malheureusement, les permissions personnalisées présentent certains comportements non intuitifs qui les rendent risquées du point de vue de la sécurité. Concrètement, les autorisations personnalisées peuvent être définies par n'importe quelle application à n'importe quel moment, et "le premier qui gagne", ce qui n'est pas sans conséquences.

Pour le scénario suivant, nous définissons deux profils d'applications que nous avons introduits ci-dessus (toutes ces applications sont fictives à des fins de démonstration) :

1. SCWApp: l'application qui définit une permission personnalisée et défend un composant utilisant cette permission.

2. DevTrainer: cette application définit la même permission que SCWApp et déclare à l'utilisateur qu'elle souhaite détenir cette permission.

Il s'agit d'un scénario courant, appelé "Peer Apps Case" (cas des applications homologues). Si l'application DevTrainer n'était qu'un plugin pour SCWApp, elle n'aurait pas à définir de permission personnalisée. L'hypothèse, dans ce cas, est que SCWApp sera installée avant DevTrainer et qu'aucun comportement inattendu ne se produira. Si, d'une manière ou d'une autre, l'utilisateur installe DevTrainer en premier, il n'est pas informé de la demande d'autorisation. Si l'utilisateur installe ensuite SCWApp, la permission n'est pas accordée rétroactivement à DevTrainer, de sorte que les tentatives d'utilisation du composant sécurisé par l'application DevTrainer échoueront.

C'est là qu'intervient le cas de l'application Peers. Dans certains cas, vous ne pouvez pas vous attendre à ce qu'une application soit installée avant l'autre. Par exemple, si Facebook et Twitter veulent tous deux utiliser les composants de l'autre, ils doivent définir les autorisations personnalisées de l'un et de l'autre.

Cependant, c'est là que les choses se compliquent. Si l'application DevTrainer est installée en premier, l'utilisateur n'est pas informé de sa demande d'autorisation personnalisée. À ce stade, même si l'utilisateur n'a pas été informé, DevTrainer détient l'autorisation personnalisée et peut accéder au composant sécurisé.

La situation est encore plus délicate. L'application DevTrainer peut modifier le niveau de protection des autorisations. Android n'utilise pas le niveau de protection du défenseur, mais le niveau de protection défini en premier, ce qui signifie que l'application installée en premier peut le définir. Cela signifie que si DevTrainer modifie le niveau de protection des permissions pour qu'il devienne normal, toutes les applications futures qui demanderont cette permission n'auront pas à être confirmées par l'utilisateur, mais se verront automatiquement accorder l'accès.

Ce scénario a été inspiré par l'explication de ce problème trouvée sur le github de cwac-security.

La stratégie du "premier qui gagne" a des conséquences dangereuses et la méconnaissance de son comportement peut conduire le développeur à prendre des décisions de sécurité basées sur des données non fiables et à permettre à des applications non souhaitées d'accéder à des données sensibles ou à des services protégés. Pour en savoir plus sur la manière d'éviter les décisions de sécurité basées sur des données non fiables, visitez notre plateforme. Ce comportement a été modifié à partir d'Android 5.0 (Lollipop). Mais comme actuellement, plus de 22% des appareils Android utilisent encore une version inférieure d'Android, il est important d'atténuer les risques du comportement original dans votre application. Vérifiez si la permission a déjà été définie lors de la première exécution de votre application et prenez les mesures appropriées si c'est le cas pour résoudre les risques de sécurité.

Bonne chance pour le codage et à la semaine prochaine !

En définissant des autorisations personnalisées, une application peut partager ses ressources et ses capacités avec d'autres applications.

https://developer.android.com/guide/topics/permissions/defining.html

Voir la ressource
Voir la ressource

Remplissez le formulaire ci-dessous pour télécharger le rapport

Nous aimerions que vous nous autorisiez à vous envoyer des informations sur nos produits et/ou sur des sujets liés au codage sécurisé. Nous traiterons toujours vos données personnelles avec le plus grand soin et ne les vendrons jamais à d'autres entreprises à des fins de marketing.

Soumettre
Pour soumettre le formulaire, veuillez activer les cookies "Analytics". N'hésitez pas à les désactiver à nouveau une fois que vous aurez terminé.

Lorsqu'elles sont développées pour la téléphonie mobile, les applications doivent souvent demander des autorisations au système. Elles peuvent avoir besoin d'accéder aux contacts de l'utilisateur, à la connexion Bluetooth ou à la possibilité d'envoyer des messages SMS. Toutes les permissions mentionnées ci-dessus sont des permissions de plateforme, définies par le cadre Android.

Mais dans certains cas, ces autorisations ne suffisent pas et l'application doit définir ses propres autorisations personnalisées. Prenons l'exemple de notre propre entreprise. Secure Code Warrior pourrait créer une application qui enregistre certaines données privées dans le cadre d'un profil, y compris les performances de l'utilisateur sur la plateforme SCW. Nous aimerions permettre à une autre application de formation à la sécurité, par exemple DevTrainer, d'utiliser ces données si l'utilisateur lui en donne l'autorisation. Il s'agit de données sensibles, l'utilisateur ne voudrait certainement pas que n'importe qui les connaisse, mais l'application SCW ne devrait pas complètement les cacher et les protéger car elles pourraient être utiles. Nous souhaitons donc permettre à l'utilisateur d'exercer un contrôle sur ces données. C'est là qu'interviennent les autorisations personnalisées.

Le SCWApp crée une autorisation personnalisée, DevTrainer demande cette autorisation et l'utilisateur peut décider s'il veut l'autoriser ou non. Il s'agit d'une pratique courante et d'un bon moyen de restreindre l'accès aux applications figurant sur la liste blanche.

Malheureusement, les permissions personnalisées présentent certains comportements non intuitifs qui les rendent risquées du point de vue de la sécurité. Concrètement, les autorisations personnalisées peuvent être définies par n'importe quelle application à n'importe quel moment, et "le premier qui gagne", ce qui n'est pas sans conséquences.

Pour le scénario suivant, nous définissons deux profils d'applications que nous avons introduits ci-dessus (toutes ces applications sont fictives à des fins de démonstration) :

1. SCWApp: l'application qui définit une permission personnalisée et défend un composant utilisant cette permission.

2. DevTrainer: cette application définit la même permission que SCWApp et déclare à l'utilisateur qu'elle souhaite détenir cette permission.

Il s'agit d'un scénario courant, appelé "Peer Apps Case" (cas des applications homologues). Si l'application DevTrainer n'était qu'un plugin pour SCWApp, elle n'aurait pas à définir de permission personnalisée. L'hypothèse, dans ce cas, est que SCWApp sera installée avant DevTrainer et qu'aucun comportement inattendu ne se produira. Si, d'une manière ou d'une autre, l'utilisateur installe DevTrainer en premier, il n'est pas informé de la demande d'autorisation. Si l'utilisateur installe ensuite SCWApp, la permission n'est pas accordée rétroactivement à DevTrainer, de sorte que les tentatives d'utilisation du composant sécurisé par l'application DevTrainer échoueront.

C'est là qu'intervient le cas de l'application Peers. Dans certains cas, vous ne pouvez pas vous attendre à ce qu'une application soit installée avant l'autre. Par exemple, si Facebook et Twitter veulent tous deux utiliser les composants de l'autre, ils doivent définir les autorisations personnalisées de l'un et de l'autre.

Cependant, c'est là que les choses se compliquent. Si l'application DevTrainer est installée en premier, l'utilisateur n'est pas informé de sa demande d'autorisation personnalisée. À ce stade, même si l'utilisateur n'a pas été informé, DevTrainer détient l'autorisation personnalisée et peut accéder au composant sécurisé.

La situation est encore plus délicate. L'application DevTrainer peut modifier le niveau de protection des autorisations. Android n'utilise pas le niveau de protection du défenseur, mais le niveau de protection défini en premier, ce qui signifie que l'application installée en premier peut le définir. Cela signifie que si DevTrainer modifie le niveau de protection des permissions pour qu'il devienne normal, toutes les applications futures qui demanderont cette permission n'auront pas à être confirmées par l'utilisateur, mais se verront automatiquement accorder l'accès.

Ce scénario a été inspiré par l'explication de ce problème trouvée sur le github de cwac-security.

La stratégie du "premier qui gagne" a des conséquences dangereuses et la méconnaissance de son comportement peut conduire le développeur à prendre des décisions de sécurité basées sur des données non fiables et à permettre à des applications non souhaitées d'accéder à des données sensibles ou à des services protégés. Pour en savoir plus sur la manière d'éviter les décisions de sécurité basées sur des données non fiables, visitez notre plateforme. Ce comportement a été modifié à partir d'Android 5.0 (Lollipop). Mais comme actuellement, plus de 22% des appareils Android utilisent encore une version inférieure d'Android, il est important d'atténuer les risques du comportement original dans votre application. Vérifiez si la permission a déjà été définie lors de la première exécution de votre application et prenez les mesures appropriées si c'est le cas pour résoudre les risques de sécurité.

Bonne chance pour le codage et à la semaine prochaine !

En définissant des autorisations personnalisées, une application peut partager ses ressources et ses capacités avec d'autres applications.

https://developer.android.com/guide/topics/permissions/defining.html

Accès aux ressources

Cliquez sur le lien ci-dessous et téléchargez le PDF de cette ressource.

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Voir le rapportRéservez une démonstration
Télécharger le PDF
Voir la ressource
Partager sur :
Vous souhaitez en savoir plus ?

Partager sur :
Auteur
Pieter De Cremer
Publié le 25 octobre 2017

Chercheur en sécurité applicative - Ingénieur R&D - Doctorant

Partager sur :

Lorsqu'elles sont développées pour la téléphonie mobile, les applications doivent souvent demander des autorisations au système. Elles peuvent avoir besoin d'accéder aux contacts de l'utilisateur, à la connexion Bluetooth ou à la possibilité d'envoyer des messages SMS. Toutes les permissions mentionnées ci-dessus sont des permissions de plateforme, définies par le cadre Android.

Mais dans certains cas, ces autorisations ne suffisent pas et l'application doit définir ses propres autorisations personnalisées. Prenons l'exemple de notre propre entreprise. Secure Code Warrior pourrait créer une application qui enregistre certaines données privées dans le cadre d'un profil, y compris les performances de l'utilisateur sur la plateforme SCW. Nous aimerions permettre à une autre application de formation à la sécurité, par exemple DevTrainer, d'utiliser ces données si l'utilisateur lui en donne l'autorisation. Il s'agit de données sensibles, l'utilisateur ne voudrait certainement pas que n'importe qui les connaisse, mais l'application SCW ne devrait pas complètement les cacher et les protéger car elles pourraient être utiles. Nous souhaitons donc permettre à l'utilisateur d'exercer un contrôle sur ces données. C'est là qu'interviennent les autorisations personnalisées.

Le SCWApp crée une autorisation personnalisée, DevTrainer demande cette autorisation et l'utilisateur peut décider s'il veut l'autoriser ou non. Il s'agit d'une pratique courante et d'un bon moyen de restreindre l'accès aux applications figurant sur la liste blanche.

Malheureusement, les permissions personnalisées présentent certains comportements non intuitifs qui les rendent risquées du point de vue de la sécurité. Concrètement, les autorisations personnalisées peuvent être définies par n'importe quelle application à n'importe quel moment, et "le premier qui gagne", ce qui n'est pas sans conséquences.

Pour le scénario suivant, nous définissons deux profils d'applications que nous avons introduits ci-dessus (toutes ces applications sont fictives à des fins de démonstration) :

1. SCWApp: l'application qui définit une permission personnalisée et défend un composant utilisant cette permission.

2. DevTrainer: cette application définit la même permission que SCWApp et déclare à l'utilisateur qu'elle souhaite détenir cette permission.

Il s'agit d'un scénario courant, appelé "Peer Apps Case" (cas des applications homologues). Si l'application DevTrainer n'était qu'un plugin pour SCWApp, elle n'aurait pas à définir de permission personnalisée. L'hypothèse, dans ce cas, est que SCWApp sera installée avant DevTrainer et qu'aucun comportement inattendu ne se produira. Si, d'une manière ou d'une autre, l'utilisateur installe DevTrainer en premier, il n'est pas informé de la demande d'autorisation. Si l'utilisateur installe ensuite SCWApp, la permission n'est pas accordée rétroactivement à DevTrainer, de sorte que les tentatives d'utilisation du composant sécurisé par l'application DevTrainer échoueront.

C'est là qu'intervient le cas de l'application Peers. Dans certains cas, vous ne pouvez pas vous attendre à ce qu'une application soit installée avant l'autre. Par exemple, si Facebook et Twitter veulent tous deux utiliser les composants de l'autre, ils doivent définir les autorisations personnalisées de l'un et de l'autre.

Cependant, c'est là que les choses se compliquent. Si l'application DevTrainer est installée en premier, l'utilisateur n'est pas informé de sa demande d'autorisation personnalisée. À ce stade, même si l'utilisateur n'a pas été informé, DevTrainer détient l'autorisation personnalisée et peut accéder au composant sécurisé.

La situation est encore plus délicate. L'application DevTrainer peut modifier le niveau de protection des autorisations. Android n'utilise pas le niveau de protection du défenseur, mais le niveau de protection défini en premier, ce qui signifie que l'application installée en premier peut le définir. Cela signifie que si DevTrainer modifie le niveau de protection des permissions pour qu'il devienne normal, toutes les applications futures qui demanderont cette permission n'auront pas à être confirmées par l'utilisateur, mais se verront automatiquement accorder l'accès.

Ce scénario a été inspiré par l'explication de ce problème trouvée sur le github de cwac-security.

La stratégie du "premier qui gagne" a des conséquences dangereuses et la méconnaissance de son comportement peut conduire le développeur à prendre des décisions de sécurité basées sur des données non fiables et à permettre à des applications non souhaitées d'accéder à des données sensibles ou à des services protégés. Pour en savoir plus sur la manière d'éviter les décisions de sécurité basées sur des données non fiables, visitez notre plateforme. Ce comportement a été modifié à partir d'Android 5.0 (Lollipop). Mais comme actuellement, plus de 22% des appareils Android utilisent encore une version inférieure d'Android, il est important d'atténuer les risques du comportement original dans votre application. Vérifiez si la permission a déjà été définie lors de la première exécution de votre application et prenez les mesures appropriées si c'est le cas pour résoudre les risques de sécurité.

Bonne chance pour le codage et à la semaine prochaine !

En définissant des autorisations personnalisées, une application peut partager ses ressources et ses capacités avec d'autres applications.

https://developer.android.com/guide/topics/permissions/defining.html

Table des matières

Télécharger le PDF
Voir la ressource
Vous souhaitez en savoir plus ?

Chercheur en sécurité applicative - Ingénieur R&D - Doctorant

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Réservez une démonstrationTélécharger
Partager sur :
Centre de ressources

Ressources pour vous aider à démarrer

Plus d'articles
Centre de ressources

Ressources pour vous aider à démarrer

Plus d'articles