Combler le fossé en matière de sécurité des applications : aller au-delà des pratiques de sécurité de base

Lorsque nous discutons de la protection des applications avec des professionnels de la sécurité, nous obtenons des retours variés, allant de

« Nous avons conçu nos systèmes en respectant le principe de séparation des préoccupations, nous utilisons des pratiques de codage sécurisées et nous effectuons des tests SAST/DAST, donc tout va bien. »

à

« Malgré toutes les autres protections que nous avions mises en place, lorsque nous avons réalisé que des versions modifiées de nos applications mobiles représentaient une menace pour nos systèmes back-end, nous avons mis en œuvre de nouvelles mesures pour atténuer cette menace et renforcer notre niveau de sécurité global. »

Si votre opinion se rapproche davantage de la première affirmation, nous vous invitons à consulter cet article Cet article explique comment des applications, même celles développées et testées de manière sécurisée, peuvent être détournées pour attaquer les systèmes back-end qui apportent la plus grande valeur ajoutée à vos clients. Si vous pensez déjà que les applications doivent être protégées au-delà des bonnes pratiques de base, poursuivez votre lecture ici.

Il existe plusieurs méthodes principales pour protéger les applications contre la rétro-ingénierie et la falsification. Cet article traite des protections mises en œuvre après la compilation des applications, juste avant leur soumission à la plateforme de téléchargement correspondante. Les méthodes abordées sont les wrappers, les SDK et l'injection de code. Nous commencerons par une brève introduction à un cadre de sécurité standard permettant d'évaluer ces techniques.

Aperçu de la résilience OWASP MASVS

L'OWASP Mobile Application Security La norme de vérification MASVS définit quatre catégories de résilience Ces catégories visent à renforcer la sécurité des applications mobiles contre diverses menaces. Elles s'attachent à garantir la sécurité d'une application même en cas d'attaques. Bien que spécifiques au mobile, elles constituent un cadre pertinent pour toutes les applications exécutées sur Internet sur les appareils des utilisateurs. En respectant ces principes de résilience, les développeurs peuvent créer des applications plus résistantes au rétro-ingénierie et mieux armées pour protéger les données des utilisateurs.

  • MASVS-RESILIENCE-1 : L'application valide l'intégrité de la plateforme.
  • MASVS-RESILIENCE-2 : L'application met en œuvre des mécanismes anti-falsification.
  • MASVS-RESILIENCE-3 : L'application met en œuvre des mécanismes d'analyse antistatique.
  • MASVS-RESILIENCE-4 : L'application met en œuvre des techniques d'analyse anti-dynamique.

Passons maintenant aux techniques de protection.

Emballages

Les wrappers constituent un type de protection applicative offrant une première ligne de défense aux applications. L'application d'un wrapper est encodée, une routine de décodage correspondante est ajoutée, puis cette routine est exécutée avant l'application originale. Ce type de protection, impliquant une réécriture du code, n'est disponible que sur les plateformes autorisant l'automodification du code.

L'avantage de ce type de protection réside dans l'impossibilité d'effectuer une analyse statique directe. Les désassembleurs, les décompilateurs et les humains ne peuvent comprendre le code sous-jacent à l'encapsulation, car celui-ci a été converti en une séquence d'octets inintelligible. Les encapsulations satisfont ainsi au critère OWASP MASVS-RESILIENCE-3. Cependant, les routines de décodage déclenchées par l'encapsulation constituent du code normal, qui peut être désassemblé, décompilé et généralement compris. Leur présence même constitue un indice pour les acteurs malveillants, indiquant l'utilisation d'une encapsulation.

Bien qu'une analyse statique de l'application soit impossible, les acteurs malveillants n'ont qu'à la lancer et attendre la restauration du code source. Ils peuvent alors copier, désassembler ou décompiler ce code. Ces protections sont donc faciles à contourner, même pour des acteurs malveillants novices.

Alors pourquoi les entreprises vendent-elles des wrappers, et pourquoi les développeurs d'applications les utilisent-ils ? Les wrappers sont très faciles à mettre en œuvre et constituent une barrière contre l'analyse statique. Cette facilité de mise en œuvre permet aux entreprises d'entrer rapidement et à moindre coût sur le marché de la protection des applications. Elles peuvent ainsi cibler les clients qui n'ont besoin que d'une protection minimale pour leurs applications.

La protection d'une application prend un temps minimal et ne nécessite généralement aucune configuration. Cependant, ces protections sont souvent vulnérables aux attaques BORE (Break Once Run Everywhere) car elles utilisent toutes la même routine de décodage.

Une certaine protection vaut mieux que pas de protection du tout, mais nous pouvons faire mieux.

SDK

Dans notre progression vers des solutions plus ou moins sécurisées, l'étape suivante en matière de sécurité applicative est le modèle de kit de développement logiciel (SDK) de protection. Un SDK est un module de code indépendant qui intègre des protections et des systèmes de détection contre une ou plusieurs menaces. Par exemple, un SDK de protection peut contenir une logique garantissant l'intégrité de la plateforme en détectant les appareils rootés ou jailbreakés et en empêchant l'analyse dynamique grâce à la détection des débogueurs ou des outils d'analyse comme Frida.

Lors de la compilation/protection, un SDK de protection est lié à l'application à protéger. À l'instar de la solution d'encapsulation, le SDK s'insère au point d'entrée de l'application afin de lancer un ou plusieurs threads qui effectuent les détections en arrière-plan. Ensuite, le code original s'exécute sans interaction avec le SDK.

En général, aucune modification n'est apportée au code source lors de l'exécution ; ainsi, des variantes de cette solution peuvent être utilisées sur n'importe quelle plateforme. Cependant, comme le code source reste inchangé, il est vulnérable à l'analyse statique par les désassembleurs et les décompilateurs, même s'il peut résister à l'analyse dynamique. Le problème, dans ce cas, est que si le kit de développement logiciel (SDK) de protection est supprimé, le reste de l'application peut s'exécuter sans aucun mécanisme de protection.

Du fait de la complexité accrue de la logique sous-jacente, le développement de solutions de protection basées sur des SDK représente généralement un investissement en temps et en argent plus important pour les entreprises, mais moindre que pour les solutions d'injection de code. Dans ce cas, l'étape de protection est également simple et ne nécessite généralement aucune configuration.

Les SDK satisfont donc aux exigences MASVS-RESILIENCE-1, 2 et 4. Cependant, à l'instar des wrappers, les SDK de protection sont souvent vulnérables aux attaques BORE. Bien qu'il soit possible de lier le SDK à l'application via des mécanismes supplémentaires, cela nécessite généralement une analyse de l'application, ce qui complexifie le développement et augmente le risque d'erreurs de liaison.

Injection de code

Les solutions de sécurité contre l'injection de code représentent le summum de ces trois techniques. Il est important de noter que, dans les deux cas précédents, le code de protection s'exécute dès le début de l'application, ce qui facilite sa détection, son analyse et son contournement.

L'idée principale dans le scénario d'injection de code n'est pas simplement d'encapsuler ou d'ajouter un SDK, mais d'analyser l'application pour bien comprendre le flux de contrôle, puis d'ajouter des mécanismes de protection dans toute l'application afin qu'ils s'exécutent en arrière-plan pendant que l'application protégée est en cours d'exécution. mécanismes de protection peut inclure des contrôles d'intégrité de la plateforme pour empêcher l'exécution du code sur des appareils jailbreakés ou rootés, des mécanismes d'analyse antistatique comme l'obfuscation, des mécanismes d'analyse antidynamique pour détecter les débogueurs et les kits d'outils d'instrumentation dynamique, et des mécanismes anti-falsification pour garantir que l'application exécutée est identique à l'application livrée.

Et comme ces techniques sont disséminées dans tout le code, elles sont beaucoup plus difficiles à trouver, ce qui oblige les acteurs malveillants à consacrer beaucoup plus de temps et d'efforts – souvent en vain – pour tenter de les contrer.

Un autre avantage de cette technique est que, une fois les mécanismes de protection intégrés au code, ils peuvent se protéger de manière répétée et aussi en profondeur que souhaité. En créant un réseau suffisamment étendu de mécanismes de protection, les propriétaires d'applications peuvent renforcer considérablement la sécurité de leurs applications en concevant un système complexe et intelligent, capable de réagir par des actions visibles et invisibles pour contrer les tentatives de résolution de ce système par des acteurs malveillants.

De plus, comme le code de protection est dispersé dans toute l'application, il est effectivement caché, ce qui signifie que certaines détections peuvent entreprendre des actions furtives et personnalisées — si le produit de sécurité le permet — afin que des modifications subtiles puissent être apportées au comportement de l'application, modifications que les acteurs malveillants pourraient complètement manquer, augmentant ainsi leur frustration et les éloignant de leur objectif.

En frustrant les acteurs malveillants, vous pouvez les dissuader d'utiliser des applications fortement protégées et les inciter à rechercher des applications non protégées ou moins bien protégées. Il n'est pas nécessaire de mettre votre adversaire en échec ; il suffit qu'il capitule et aille voir ailleurs.

Pour compléter l'analyse comparative, les outils de protection contre l'injection de code offrent les protections les plus complètes, des protections qui résistent à l'analyse statique ET dynamique, répondant ainsi aux 4 exigences de résilience MASVS.

Le Digital.ai La différence

La comparaison de ces techniques de protection met en évidence un point essentiel : aucune méthode ne peut garantir une protection absolue. Pour assurer une véritable résilience des applications, il est indispensable de mettre en place des défenses coordonnées et une automatisation tout au long du cycle de vie du logiciel. Digital.ai Application Security offre cette solution.

  • Une plateforme unique qui automatise les processus de déploiement et intègre des chaînes d'outils complexes. Unifiez la distribution de vos applications, intégrez vos outils existants et déployez-les dans n'importe quel environnement.
  • Tests automatisés et sécurité des applications mobiles conçus pour évoluer. Fournissez des applications sécurisées et de haute qualité grâce à des techniques de test automatisées et de protection des applications améliorées.
  • Intelligence artificielle, intelligence, conformité et gouvernance intégrées à tous les flux de travail de livraison de logiciels. Centralisez les données, optimisez les processus et obtenez des informations enrichies pour une mise en œuvre plus rapide. safelivraison de logiciels R

Vous aimerez aussi