Comme nos téléphones jouent un rôle de plus en plus essentiel dans notre vie, le lancement d'applications sécurisées est désormais une nécessité pour protéger les utilisateurs finaux. En conséquence, le rôle des pentesters a gagné en importance dans l'identification des comportements indésirables, tels que permettre les fuites de données, produire des erreurs dans d'autres applications installées sur l'appareil, générer des coûts inattendus, ou refuser un certain service à l'utilisateur du téléphone.
Dans plusieurs articles précédents, nous avons partagé quelques conseils pour un développement sécurisé de l'iOS. Vous pouvez lire ces articles, car ils vous aideront à détecter certaines erreurs que les développeurs font souvent lors de la création d'applications pour iOS. En plus de ces articles, nous partageons les lignes directrices suivantes, qui peuvent être utilisées pour guider votre analyse.
1 - Mettez-vous à la place du programmeur
Dans la mesure du possible, essayez de comprendre les personnes qui sont à l'origine de l'élaboration du code que vous vérifiez. Déterminer avec quel langage de programmation ils travaillent la plupart du temps et quel était leur premier langage de codage principal. L'expérience des programmeurs est généralement évidente dans l'architecture de leur code et, par conséquent, dans la nature de leurs erreurs. Connaître ces choses peut vous orienter dans la bonne direction lorsqu'il s'agit d'enquêter.
Par exemple, les programmeurs avec un fond Java reproduisent souvent inlassablement des modèles de conception, délaissant au passage les fonctionnalités. En revanche, les développements mobiles réalisés par les programmeurs web auront autant de fonctionnalités que possible déposées dans des applications web, et dépendent fortement de l'utilisation de WebKit. Les deux types de développeurs sont familiers avec l'utilisation d'API de haut niveau, mais ils sont susceptibles de commettre des erreurs lors de la manipulation d'API de bas niveau.
2 – Procurez-vous le code source
Bien que ce ne soit pas l'endroit où l’on détecte généralement des attaquants, obtenir le code source vous aidera à détecter le plus grand nombre d'erreurs dans les plus brefs délais. Les tests d'intrusion impliquent généralement des ressources limitées en termes de temps et d'argent, c'est donc une bonne idée d'en tirer le meilleur parti. Votre objectif ne devrait pas être de répliquer un scénario d'attaque réel, mais de trouver autant de vulnérabilités que possible pour rendre l'application finale plus sûre.
Objective-C fonctionne très bien avec la rétro-ingénierie et permet d'obtenir un point de vue assez transparent sur les mécanismes internes d'une application, même sans partir du code source. Un attaquant avec un temps illimité peut obtenir une regard approximatif – sinon exact- sur ce que vous aurez avec le code. Il est préférable de gagner du temps et de consacrer vos efforts à trouver ces failles de sécurité.
3 - Gardez à l'esprit les points faibles du langage
Alors que Objective-C et Cocoa préviennent certaines erreurs de sécurité fréquentes en C et C+++, l'utilisation d'API dangereuses, telles que strcpy et strcat, ou de mécanismes mal implémentés, tels que les catégories ou le method swizzling, peuvent provoquer des comportements inattendus qui conduisent à de graves erreurs de sécurité. Pour cette raison, assurez-vous d'étudier l'impact de ces techniques sur l'application.
4 - Identifiez les possibles réutilisations de code vulnérable
Beaucoup de programmeurs ont pris la mauvaise habitude de consulter des forums de programmation en ligne et de copier du code sans vraiment tester son fonctionnement, surtout lorsqu'il s'agit de fonctions auxiliaires de bas niveau, de connectivité réseau et de chiffrement. D'autres intègrent des bibliothèques et développements tiers dans le code de base sans vérifier s'ils ont des failles de sécurité. Cela peut avoir pour conséquence que le même code vulnérable se retrouve dans plusieurs applications.
5 - Utilisez deux équipes de test : l'une en mode jailbreak et l'autre avec les paramètres d’usine
Avoir un dispositif avec le système d'exploitation d'usine vous aidera à évaluer le comportement de l'application dans un environnement d'utilisateur final réel, avec tous les mécanismes de sécurité activés et aucun problème pour enregistrer les notifications de push. En revanche, vous pouvez utiliser le périphérique avec jailbreak pour analyser plus en détail le système de fichiers et le fonctionnement du système d'exploitation.
Nous espérons que ces conseils vous aideront à développer de nouvelles perspectives d'analyse pour les applications sur lesquelles vous travaillez.