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.