Question:
Implication de sécurité si l'application Android peut être installée sur l'émulateur
Lexi champ
2019-12-16 19:30:46 UTC
view on stackexchange narkive permalink

Je m'efforce d'assurer la sécurité des produits de mon entreprise. Nous avons une version mobile du produit. Cette question concerne la version Android

Contexte -Notre produit est un produit SaaS et l'application est destinée à être utilisée par différents vendeurs de l'organisation locataire. Nous avons implémenté différentes couches de contrôle pour assurer un environnement sécurisé (ou plus comme sûr) pour notre application -

  • Nous vérifions la détection de racine - (vérification du niveau du système d'exploitation)
  • Implémenté Épinglage SSL - (vérification du niveau de la couche de transport)
  • Stockage des secrets dans le porte-clés Android
  • Stockage de données local minimal. Cryptez les données locales (qui doivent être stockées)

et la liste continue. En bref, de l'appareil à la couche de communication en passant par la couche serveur, nous sommes en train de couvrir tous les coins.

Le problème est que nous avons eu un problème signalé par l'un des chercheurs en sécurité qui dit que comme notre application peut être téléchargée depuis le magasin de jeu Android, elle peut donc fonctionner sur un émulateur et sur un émulateur, il est possible de contourner la détection de racine. Cela ajoute donc une énorme menace et devrait être corrigé immédiatement.

J'ai cherché, mais je ne trouve pas d'implication de sécurité qui pourrait être possible si l'application peut être installée sur l'émulateur. J'ai également vérifié si je devais le réparer, quelle pourrait être la solution possible. Il y a des vérifications comme regarder si l'environnement en cours d'exécution est un SDK, vérifier si des fonctionnalités telles que la caméra ou les capteurs fonctionnent, mais toutes ces vérifications peuvent également être contournées dans l'émulateur.

C'est un peu critique pour moi car si J'accepte ce problème, notre client le verra dans le rapport et insiste pour le corriger. Je suis vide pour l'implication que je devrais expliquer à la direction et aux développeurs (si j'accepte) et corriger (cela pourrait être nécessaire plus tard)

Mise à jour -

  1. Je souhaite clarifier une chose: nous ne préconisons jamais la détection de la racine ou tout autre contrôle de sécurité côté client comme un point positif de notre application, car nous pensons que toute protection côté client peut être contournée à un moment ou à un autre
  2. Nous continuons d'essayer de construire une architecture plus sécurisée au niveau du serveur. Mais comme le côté client fait également partie de l'éco-système, nous ne pouvons donc pas le laisser sans surveillance.
  3. Nous essayons même d'implémenter des contrôles au niveau de la couche de communication (autre que TLS) pour nous assurer qu'en appuyant simplement sur vous ne pouvez pas tout obtenir

Toute l'idée est si nous ne pouvons pas contrôler certaines choses que nous pouvons au moins rendre difficile pour les parties malveillantes. Notre objectif principal est de sécuriser les données de nos utilisateurs et les contrôles sont en place et en cours.

Mise à jour également de Pentester - Après discussion avec lui, il a déclaré qu'il ne comprenait pas les exigences de sécurité des applications. Selon lui, toutes les applications devraient avoir une détection de racine. Nous lui avons expliqué que ces choses étaient secondaires pour nous, mais si des données spécifiques au client se trouvent à la vue de tous ou peuvent être compromises en raison d'une mauvaise configuration dans l'application ou de toute vulnérabilité dans l'application (comme les secrets codés en dur), alors c'est primaire.

En me basant sur les commentaires fournis, j'ai pu clarifier cette distinction et aider à résoudre le problème. Auparavant, c'était du bruit à cause de ce problème. Merci à tous

Si un utilisateur a un accès root, il peut de toute façon contourner votre détection de vérification racine.Les rootkits peuvent même cacher leur existence aux utilisateurs root, donc se cacher d'une application utilisateur serait beaucoup plus facile.
Votre chercheur en sécurité dit que c'est un problème que votre application soit disponible sur le Play Store?Cela ressemble à quelque chose que [ce gars] (https://serverfault.com/q/293217/402194) dirait.
Votre application est simplement mal conçue - * "Votre backend est le produit, le frontend est juste que vous soyez assez gentil pour créer un client pour vos utilisateurs" *.
De plus, _c'est l'affaire de l'utilisateur_ de rooter ou non un appareil.J'ai donné des critiques 1 étoile aux applications qui se plaignaient de root alors qu'elles n'avaient pas à s'en soucier.
Je ne suis pas sûr de ce qui se passe avec votre chercheur en sécurité, mais je ne pense pas qu'il y ait rien de spécial dans un émulateur qui facilite le masquage de root par rapport à un appareil normal.Si vous utilisez les émulateurs officiels de Google, vous ne pouvez pas du tout les rooter (enfin ceux avec les services Play installés).
Vous savez, c'est déjà assez grave que certains * vendeurs / opérateurs de téléphones * ne vous laissent pas rooter le téléphone * que vous possédez * mais d'entendre que les développeurs de logiciels se mettent en quatre pour essayer de discriminer de cette façon aussi me fait bouillir le sang!
Pourquoi votre application essaie-t-elle de détecter la racine et quels sont les secrets stockés dans le trousseau?
quels secrets stockez-vous, quelles autorisations accordent-ils?
Vous recherchez la racine en 2019?
Je ne serais pas si prompt à sauter sur l'inspecteur de sécurité.S'ils ont fourni un livre blanc / une stratégie de sécurité qui incluait une affirmation selon laquelle la détection des racines fait partie de leur stratégie de sécurité, il est tout à fait raisonnable de souligner que cette affirmation est fausse.Il est peu probable qu'ils l'aient retenu pour suffisamment de factures pour parcourir l'intégralité de leur application afin de déterminer s'il s'agit réellement d'un problème au-delà de "votre affirmation selon laquelle la détection de racine ajoute de la sécurité à votre application est fausse".
Je vous suggère de rechercher «Magisk», sa racine pratiquement cachée.Le filet de sécurité de Google ne peut pas le détecter.
Il se peut que le chercheur en sécurité ait fait ses devoirs et ait suivi la liste de contrôle OWASP, qui inclut l'enracinement comme une * menace *.Peut-être que l'auditeur suit simplement ces directives génériques quel que soit le modèle de menace réel
Si votre application n'a pas pu être lancée sur l'émulateur, l'émulateur est cassé et quelqu'un doit réparer l'émulateur.
Neuf réponses:
Steffen Ullrich
2019-12-16 20:09:37 UTC
view on stackexchange narkive permalink

Le type d'exigences de sécurité que vous avez en premier lieu n'est pas clair et il est donc difficile de savoir si vos mesures de sécurité sont suffisantes ou non.

Il n'est pas possible de se protéger complètement contre un utilisateur malveillant utilisant votre application tant que vous ne pouvez pas contrôler entièrement l'appareil de l'utilisateur. Ce risque inclut l'exécution de l'application sur des émulateurs, mais inclut également son exécution sur un appareil enraciné ou autrement falsifié - et tout cela ne sera pas détecté par la méthode de détection de racine que vous utilisez.

Au lieu de cela, vous devez concevoir votre application afin qu'un utilisateur malveillant ne puisse pas nuire à vous ou à d'autres utilisateurs mais uniquement à lui-même. Cela signifie par exemple avoir des secrets spécifiques à l'utilisateur dans l'application et ne pas utiliser de secrets globaux. Cela signifie également que vous ne devez faire confiance à rien des rapports de l'application, mais plutôt vérifier si cela a du sens (c'est-à-dire ne pas faire confiance à un score élevé auto-déclaré dans les jeux ou similaire).

En plus des méthodes d'utilisation malveillante ci-dessus, il est possible de procéder à une ingénierie inverse de l'apk et de supprimer toutes les protections que vous incluez.
@Nstr10 C'est souvent très facile à faire aussi.Un bon nombre d'apks que j'ai ouverts ont juste été des sites Web emballés en tant qu'application et vous pouvez lire la source originale.
Nous avons l'exigence que, puisque nous sommes une plate-forme basée sur le cloud, il est donc très critique qu'un utilisateur ne puisse pas accéder aux données d'un autre utilisateur (en particulier d'un autre locataire).Aussi, comme vous le mentionnez à propos de la conception d'applications, nous concevons en fait notre avec la sécurité comme partie intégrante.Cependant, la détection de racine, la prévention de la rétro-ingénierie ... ce sont quelques-unes des mesures qui visent à rendre les choses difficiles pour un attaquant.Même si l'on contourne toutes ces mesures, nous avons des mesures en place dans l'application au niveau du serveur et il n'acceptera que les données, les demandes basées sur les contrôles de sécurité spécifiés dans l'application.
@Lexichamp: La vraie question n'est pas de savoir si c'est un problème que vos vérifications de racine peuvent être contournées dans un émulateur.La vraie question est de savoir si un attaquant est capable d'accéder aux données d'autres utilisateurs en bidouillant d'une manière ou d'une autre votre application (c'est-à-dire le reverse engineering, le rooting ...).__Il n'a pas d'importance si un attaquant peut contourner votre détection de racine si l'attaquant ne peut rien tirer de ce contournement__, c'est-à-dire s'il ne peut pas les données des autres clients.
L'attaquant n'a peut-être même pas besoin de procéder à une ingénierie inverse de l'application, il peut tout aussi bien utiliser WireShark et altérer directement la communication.
"il est très critique qu'un utilisateur ne puisse pas accéder aux données d'un autre utilisateur" - Cela doit être implémenté côté serveur, le plus souvent en utilisant le nom d'utilisateur et le mot de passe.Une application modifiée ne pourra pas contourner un système de connexion côté serveur correctement implémenté.@Tomáš, c'est pourquoi vous avez un épinglage de certificat SSL, de sorte que l'utilisateur devra masquer l'application ou rooter l'appareil pour pouvoir afficher le trafic dans WireShark
@Lexichamp La méthode root la plus utilisée actuellement est Magisk.Ceci est jusqu'à présent indétectable alors bonne chance avec le blocage de la racine.Vous avez déjà échoué, root a toujours une longueur d'avance sur la détection.Et si un utilisateur enraciné pouvait accéder aux données d'un autre utilisateur, ce qui signifie que votre sécurité est mauvaise, ne bloquez pas root, assurez-vous que les gens ne peuvent pas accéder aux données d'autres personnes quoi qu'il arrive.
@Tomáš Comment cela est-il censé fonctionner si l'application utilise l'épinglage de certificat?Un lien avec ça?Je doute que ce soit possible, mais ce serait plutôt utile.
@Voo Je ne suis pas un expert en sécurité.Ce n'est peut-être pas possible.Ce que je sais, c'est que je pourrais voir le contenu du trafic HTTPS sur mon propre ordinateur avec WireShark très bien.Il existe probablement une alternative à Wireshark pour Android, ou un Android virtuel.Ce serait ma méthode proposée si je voulais faire de l'ingénierie inverse sur une application.
@Tomáš Peu d'applications de bureau utilisent l'épinglage de certificats, mais pour celles qui le font, votre approche ne fonctionnera pas non plus sur le bureau.Ce qui se passe lorsque vous utilisez Wireshark pour écouter le trafic TLS sur votre propre ordinateur, c'est que Wireshark MITM gère le trafic et utilise sa propre autorité de certification racine pour créer de faux certificats.L'épinglage de certificat rend cela impossible.Si l'application n'épingle pas ses certificats, vous pouvez enregistrer une autorité de certification racine sur Android, puis MITM le trafic sur une passerelle.Plus compliqué mais fonctionne.
@Voo: Wireshark est purement passif et ne peut pas faire de MITM actif comme vous le décrivez.Vous devrez utiliser quelque chose comme mitmproxy ou Burp à la place.Et sans MITM actif, vous ne voyez que le trafic crypté et la poignée de main TLS (principalement non cryptée).
@Steffen Oui, je sais - en raison de contraintes de taille, j'ai dû raccourcir et simplifier l'explication.C'était juste le contexte expliquant pourquoi l'épinglage de certificats rend les attaques MITM impossibles.
Qwertie
2019-12-17 04:48:37 UTC
view on stackexchange narkive permalink

De quelle sécurité vous préoccupez-vous ici et qu'essayez-vous de protéger? Essayez-vous de protéger les utilisateurs contre l'accès d'autres personnes à leurs données ou essayez-vous de protéger l'entreprise contre les rétro-ingénieurs qui tentent d'examiner le fonctionnement de l'application parce que votre API n'est pas sécurisée?

Si vous êtes visant uniquement à protéger la sécurité des utilisateurs, il n'y a aucun problème avec l'exécution de l'application dans une machine virtuelle, sauf si vous pensez que les utilisateurs exécuteront l'application dans une machine virtuelle mal sécurisée et se feront voler leurs données, ce qui est à la fois très improbable et est leur problème, pas le vôtre.

Si vous essayez d'empêcher les gens de faire de la rétro-ingénierie de l'application, vous menez une bataille difficile car les vérificateurs de racine sont facilement contournés. C'est aussi presque toujours un effort inutile car l'application ne devrait avoir rien d'utile pour un attaquant si elle a été conçue de manière sécurisée.

De plus, gardez à l'esprit que parfois, les testeurs de sécurité peuvent parfois simplement résoudre des problèmes si ils ne parviennent pas à trouver de véritables problèmes car un rapport vierge rend difficile la justification de l'argent dépensé. Si possible, défiez-les sur cette déclaration et demandez-leur de donner un exemple concret de la façon dont cela est réellement un problème.

Nous nous concentrons sur la sécurisation des données de nos utilisateurs qui pourraient résider sur l'appareil.Nous avons mis en place certaines mesures pour rendre difficile l'ingénierie inverse d'APK, mais ce n'est pas une préoccupation majeure pour nous.C'est juste une autre couche d'approche de défense en profondeur que nous essayons de mettre en œuvre.Nous voulons simplement rendre difficile (autant que possible) l'exécution de notre application sur un appareil enraciné.Je sais que nous ne pouvons pas le faire à 100%, mais nous voulons éviter autant que possible.Le chercheur a essayé d'exécuter notre application sur un appareil enraciné, mais lorsque cela n'a pas fonctionné, il l'a exécutée sur une image enracinée exécutée sur un émulateur.L'application fonctionnait plus tard
Nous attendons toujours d'entendre les implications de sécurité de l'application exécutée sur l'émulateur de sa part.Mon instinct dit que vous avez raison et que l'augmentation du nombre pourrait poser problème
@Lexichamp Mais pourquoi protégez-vous les données de l'utilisateur de l'utilisateur?Qui se soucie si l'utilisateur peut «voler» ses propres données?Tant qu'ils ne peuvent pas voler les données de quelqu'un d'autre.
@user253751 C'est un autre gros point.La vérification de la racine est lorsque vous ne faites pas confiance à l'utilisateur pour une raison quelconque.Principalement pour mettre en œuvre des DRM ou empêcher la triche dans les jeux.Je soupçonne qu'une partie de la raison pour laquelle le problème de VM est survenu est parce que cela montre que le vérificateur de racine était à peu près inutile.
Stilez
2019-12-17 07:02:41 UTC
view on stackexchange narkive permalink

La réponse classique et correcte à votre client est NOTANISSUE

Aucun logiciel côté client * * ne devrait jamais être considéré comme sécurisé , dans le sens que pose votre question. Ils ne peuvent pas l'être. Le logiciel côté client - que ce soit le Web ou l'application - est totalement sous le contrôle du client, tout comme son environnement, tout comme la capacité totale de réécrire / modifier le logiciel, ou de l'exécuter sur un environnement indétectablement non sécurisé ou modifié. Ce n'est pas un bug. C'est inhérent au modèle * *.

Le but de vos différentes vérifications est de réduire les risques et d'élever la barre, comme souvent avec la sécurité. Ce n'est pas fait pour sécuriser le client ou assurer la sécurité côté client, et votre client a tort de supposer cet objectif.

  • * * Avec peut-être la seule exclusion des logiciels côté client où l'ensemble du logiciel côté client et son environnement sont conçus et contrôlés dans le but de créer un environnement hautement infalsifiable et vérifiable , comme Trusted Execution, ou le micrologiciel de certains YubiKeys (qui ne peuvent pas du tout être téléchargés ou modifiés facilement une fois flashés), ou lorsque le client est un système distant avec sa propre sécurité en place, comme des serveurs de basculement bien sécurisés synchronisation entre eux via SSH.

    Même dans ce cas, peut-être que le module spécifique peut être considéré comme sécurisé (pour un certain modèle de menace), mais cela ne signifie toujours rien d'autre, comme la vérification d'une application locale la réponse du dongle est sécurisée de quelque manière que ce soit.

Aucun logiciel côté client * * ne doit jamais être considéré comme sécurisé.Bien.Les logiciels côté client peuvent être absolument non sécurisés quelle que soit la conception du backend.Stocker les mots de passe au mauvais endroit, par exemple.
Jasen
2019-12-17 13:38:50 UTC
view on stackexchange narkive permalink

Je suis réaligné entre les lignes ici, mais je pense voir d'où vient le chercheur.

Votre application n'a aucune entreprise stockant (ou utilisant) des secrets qui pourraient exposer les données d'autres

concevez votre backend de sorte que les secrets donnés au frontend ne donnent qu'un accès compartimenté aux services backend. puis si un utilisateur roote son appareil, il ne peut pirater que son propre compte.

Je suis d'accord avec cela, mais entendre que la même personne a suggéré ** la publication de l'application sur le Play Store est une vulnérabilité ** me fait douter de la crédibilité dudit chercheur.
@MechMK1 À moins que la conversation ne dise quelque chose comme: "Non, vous voyez, notre application est sécurisée car vous ne pouvez pas l'exécuter avec un appareil enraciné!", Ce à quoi le chercheur a répondu par "Je peux l'exécuter dans un émulateur"
@MechMK1 Je pense que vous donnez trop de poids à la façon dont OP a formulé cette phrase.A) "La détection de racine ajoute la sécurité à notre application" B) "Votre application est sur le magasin public, pas dans un environnement géré par l'entreprise, la détection de racine est impossible, si vous en avez besoin, vous avez un problème" serait un échange tout à fait raisonnable quiOP aurait pu reformuler.La publication de l'application sur le Play Store * est * une vulnérabilité s'il s'agit d'une application mal conçue et destinée uniquement à une utilisation en bac à sable.Ils l'ont peut-être laissé entendre au testeur.
@Cruncher voir ma réponse ci-dessous - la réponse supposée du chercheur est tout simplement fausse.
Affe
2019-12-17 23:33:45 UTC
view on stackexchange narkive permalink

Je ressens le besoin de plaider en faveur du pauvre testeur de stylo décrié ici.

Qu'est-ce que ce testeur a été embauché pour faire et dans quelle mesure?

Si le développeur de l'application a fourni un livre blanc ou stratégie de sécurité, etc. qui prétend que la détection de racine fait partie de leur stratégie de sécurité, alors il est absolument approprié de souligner que la détection de racine est une fiction pour les apks accessibles au public. Ce n'est généralement pas le problème du testeur de déterminer si l'architecture globale est réellement vulnérable côté client et ne devrait être exécutée que sur des périphériques contrôlés, ou si la direction voulait simplement la plus grande liste possible de «fonctionnalités de sécurité». Il ou elle signale simplement qu'il a échoué par rapport aux revendications fournies (que la détection de racine améliore la sécurité.)

Le "correctif" consiste à cesser de prétendre que les vérifications de l'environnement côté client font tout pour la sécurité afin que vous puissiez avoir un liste plus grande de "fonctionnalités de sécurité".

Le libellé qui implique que cette personne a dit "être sur le Playstore est une vulnérabilité" n'est pas le leur. (ayant eu des choses que j'ai dites incorrectement reformulées d'une manière qui les rend assez fausses dans ma propre carrière ...!)

Exactement.Si la prétention est que la détection de racine fournit une certaine protection contre un scénario impliquant des utilisateurs exécutant intentionnellement l'application sur un appareil auquel ils ont accès root, alors le testeur a constaté que la détection de racine empêche uniquement un utilisateur qui n'est pas déterminé à exécuter leapp sur un appareil sur lequel ils ont des privilèges root.
Refineo
2019-12-16 21:02:42 UTC
view on stackexchange narkive permalink

Je ne considérerais aucune des applications côté client ou Web comme autonomes suffisamment sûres, c'est-à-dire sans sécuriser la solution côté serveur indépendamment sur le système d'exploitation.

Toutes les couches de sécurité, toutes les validations et tous les contrôles implémentés dans l'application côté client doivent être au moins répétés avec des validations correspondantes ou plus fortes dans les composants côté serveur d'applications.

De plus, l'utilisation de l'émulateur pour exécuter l'application signifie que les propres vulnérabilités de l'émulateur peuvent nuire à la sécurité de l'utilisateur, par exemple, certaines vulnérabilités ont permis aux attaquants d'exécuter du code à distance, de divulguer des informations, de voler des sauvegardes et des données, ainsi que d'accéder aux fonctions de communication inter-processus de l'émulateur * .

* Source: https://www.bleepingcomputer.com/news/security/bluestacks-flaw-lets-attackers-remotely-control-android-emulator/

Martin Zeitler
2019-12-18 07:03:53 UTC
view on stackexchange narkive permalink

Il y a peu de différence entre une JVM exécutée sur un périphérique matériel ou un émulateur. Bien sûr, on pourrait voir si la chaîne de construction du système d'exploitation a "générique" (que seul l'émulateur a), puis quitter l'application, quand il s'agit d'une version de version - mais cela ne fournit aucune amélioration de la sécurité globale (puisque le bytecode peut facilement être décompilé - et seule la signature du code empêche les modifications de fonctionnalité dans une certaine mesure). En outre, les versions de version ne sont pas configurées en tant que débuggable.

Le fait est que lorsqu'il ne peut pas fonctionner sur un périphérique enraciné, il ne fonctionnera pas sur un émulateur (enraciné).

Lassi Kinnunen
2019-12-19 12:39:58 UTC
view on stackexchange narkive permalink

Une détection fiable de la racine est impossible, en raison de trous de test logiques évidents.

Si l'utilisateur a accès à l'apk, l'utilisateur peut également simplement analyser l'apk puis appeler directement l'API de votre serveur assez facilement et contourner complètement l'application ou porter l'application vers un autre système. Vous devez repenser votre approche globale de la sécurité si cela fait partie de la stratégie de protection de vos systèmes pour détecter s’il est exécuté sur un appareil enraciné - puisque vous ne pouvez même pas savoir de manière fiable ce qui est exécuté.

L'utilisateur peut, s'il le souhaite, décompiler votre application et simplement supprimer toutes les parties de détection de l'application en premier lieu. Le processus serait exactement le même que le logiciel de "cracking".

Ce que vous pouvez faire avec la détection de racine est simplement de faire savoir à un utilisateur que vous pensez que son téléphone est enraciné, comme une mise en garde de sécurité pour le utilisateur - peut-être que le téléphone est rooté sans que l'utilisateur le sache? mais même dans ce cas, vous ne pouvez pas vous y fier. vous ne pouvez pas savoir si c'est du matériel réel ou non sur lequel vous utilisez. Vous ne pouvez pas savoir s'il fonctionne sur un système comme Knox où vous pouvez payer Samsung pour obtenir essentiellement des pouvoirs root dans le système (via la fonctionnalité d'entreprise - et oui, il peut essentiellement vous accorder des pouvoirs presque rootés pour jouer avec d'autres applications et d'autres composants d'applications. - le téléphone apparaîtra comme knox sécurisé même alors et non enraciné).

La détection de racine et de tels finissent généralement dans une application pour dissuader le piratage, mais c'est à 100% la mauvaise approche pour lutter contre le problème. Désolé, mais ce dont vous avez besoin, c'est d'un changement de pensée culturelle dans l'organisation en ce qui concerne la sécurité: vous ne pouvez pas faire confiance à un logiciel qui s'exécute ailleurs pour être ce que vous pensez qu'il est si repensant car c'est inutile.

edit: Si vous avez besoin d'un moyen de l'expliquer à vos supérieurs, vous pouvez essayer ceci: "Si nous pouvions faire cela, alors ce morceau de code vaudrait plus que la société entière ne vaudra jamais" - et cette citation s'appliquerait toujours à votre entreprise même si vous travailliez pour Google.

Lucas
2019-12-23 00:28:22 UTC
view on stackexchange narkive permalink

L'avertissement du chercheur en sécurité est correct, mais vous devez placer cet avertissement dans le contexte de votre application pour savoir s'il est pertinent.

Vous avez répertorié la "détection de racine" comme une fonctionnalité de sécurité importante de votre app.

Étant moi-même un expert en sécurité, je voudrais souligner que la détection de racine peut être facilement contournée. Non seulement sur les machines virtuelles: mais également sur les périphériques physiques. De nombreux frameworks qui prétendent faire de la détection de racine ne détectent pas de nombreux périphériques enracinés et détectent certains périphériques normaux comme rootés. Même si c'était le cas, le côté client de n'importe quelle application peut être facilement rétro-conçu. Un attaquant motivé pourra accéder à votre interface back-end en contournant complètement l'application côté client. Cela signifie que tous les contrôles côté client peuvent être contournés et que tout calcul peut être perturbé. Aucun contrôle ou calcul côté client ne peut être fiable.

Il est possible de créer un client de confiance, mais cela nécessite du matériel propriétaire, un système d'exploitation et des logiciels propriétaires. Les consoles de jeux et les réseaux câblés le font, mais souffrent encore beaucoup du piratage, ce qui devrait être un bon exemple de la difficulté à protéger un appareil. Cette stratégie est théoriquement possible, mais échoue sur la pratique car elle est trop chère, voler et empêcher les investissements sur la fonctionnalité du produit qui devient faible et obsolète face à sa concurrence.

À quel point doit-elle être sécurisée?

Une application sécurisée / sûre n'existe pas. La sécurité consiste à comprendre les risques, la probabilité et l'ampleur des pertes qu'elle peut causer et à identifier les éventualités et les stratégies d'atténuation pour maintenir une marge bénéficiaire saine. Les questions que vous devriez vous poser sont:

  • que se passe-t-il lorsque la "détection de racine" échoue?
  • contre quels types d'attaques la "détection de racine" est censée protéger?
  • Quelle est la probabilité que cela se produise?
  • Quels types de pertes un échec de "détection racine" peut-il causer?
  • existe-t-il d'autres protections contre cela?
  • Est-il possible de détecter rapidement ce type de violations?
  • Est-il possible de déclencher des contingences qui réduisent ou éliminent les pertes?
  • l'entreprise sera-t-elle toujours rentable avec ces pertes?

Toute logique importante doit être côté serveur

Vous semblez gêné par la possibilité de un attaquant pouvant installer votre application dans un environnement virtuel. Je soupçonne que bon nombre des contrôles de sécurité et des calculs importants sont du côté du client. Si tel est le cas, vous devez vraiment repenser votre application pour déplacer tous les contrôles côté serveur:

  • Les API d'interface back-end exposées aux réseaux d'utilisateurs doivent nécessiter une authentification de l'utilisateur.

  • Les API de l'interface back-end doivent limiter ce que l'utilisateur peut voir et faire. Les limites d'accès doivent être imposées par le côté serveur, jamais par le côté client. À l'exception, bien sûr, des services qui n'incluent pas d'informations et de commandes sensibles;

  • Les API de l'interface back-end doivent tenir compte de la possibilité d'attaques par force brute. Un attaquant peut télécharger d'énormes portions de votre base de données et deviner des mots de passe et des codes de confirmation faibles en les essayant tous.

  • Les API internes - celles utilisées par le back-end et non exposées aux réseaux d'utilisateurs - composent une couche de service interne qui devrait utiliser des utilisateurs de service ou des certificats clients pour l'authentification. Les informations de l ' utilisateur réel doivent être propagées à ces services à des fins de journalisation.

Je sais que c'est très décevant. Avec ces restrictions, les API de l'interface back-end doivent être très spécifiques aux flux de travail de l'application et donc moins réutilisable. Malheureusement, seules les API internes peuvent être réutilisables. Cela signifie également que les développeurs back-end devront très bien comprendre l'expérience utilisateur, les flux de travail conçus et travailler en étroite collaboration avec les équipes frontales, ce que la plupart des développeurs n'aiment pas ou sont prêts à faire.

Même avec toute la logique importante sur le serveur, il est nécessaire de concevoir les flux de travail pour tenir compte des autres risques

Si l'application suit les directives mentionnées ci-dessus, peu importe si le côté client l'application est falsifiée sur l'appareil d'un attaquant. Il ne pourra rien faire d'autre que ce que les informations d'identification de l'utilisateur dont il dispose lui permettraient de faire via l'application officielle côté client.

Mais si un appareil utilisateur réel est enraciné, les logiciels malveillants pourront:

  • contourner la détection des appareils rootés;
  • capturer les informations d'identification de l'utilisateur;
  • rediriger l'utilisateur vers une fausse page;
  • rediriger l'utilisateur vers une fausse application;
  • contrôler à distance l'appareil;

Ces attaques ne sont pas très courantes. Ceux-ci sont difficiles car nécessitent généralement que l'utilisateur effectue des procédures compliquées. Mais si le produit est cher ou si les informations sont trop sensibles, ces attaques doivent être prises au sérieux.

Si votre inquiétude vient du fait que vos "vendeurs" traitent des produits coûteux dans lesquels les pertes sont importantes et difficiles à récupérer, vous devez tenir compte des barrières secondaires telles que:

  • validation par le superviseur sur des opérations plus importantes;
  • valider l'adresse de livraison avec plusieurs bases de données externes;
  • améliorer le suivi des livraisons;
  • imposer des contraintes de temps sur les livraisons en fonction du risque.

Si cela ne suffit toujours pas, vous pouvez choisir de fournir un appareil appartenant à l'entreprise qui est verrouillé pour empêcher installation de l'application et verrouillez la clé USB uniquement pour la charger. Je connais quelques personnes qui se promènent tout le temps avec trois téléphones d'entreprise de différentes entreprises: c'est toujours une chose.

Développer de bons logs et les surveiller

Le monitoring est aussi une bonne stratégie pour éviter de nombreuses pertes. Le retour en arrière des pertes sur les journaux permet de mieux comprendre comment elles se produisent et ce qui a échoué, de proposer des modifications aux produits ou du moins de surveiller ces situations pour obtenir des alertes précoces de situations similaires à l'avenir.

Si les journaux sont suffisamment détaillés, il existe des techniques de biométrie du comportement qui sont faciles à mettre en œuvre et peuvent détecter de nombreux types d'intrusions et certains types d'erreurs opérationnelles suffisamment tôt pour éviter les pertes.

Vous avez une version de bureau?

Quand vous avez dit "Nous avons une version mobile du produit", vous avez l'impression d'en avoir une autre. Avez-vous une version de bureau? Les systèmes d'exploitation de bureau sont enracinés par défaut et il n'y a pas d'isolation d'application. Si vous pouvez vivre avec une version de bureau, vous n'avez probablement même pas besoin de détection de racine en premier lieu.

C'est une bonne chose d'améliorer continuellement la sécurité, et vous devriez le faire, mais vous pouvez vous attendre à ce que la version mobile soit plus sûre que celle de bureau à moins que vous ne fassiez une horrible erreur dans le nouveau développement.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...