1 GS-Days 2011 WebScarab Développement de nouveaux modules pour les tests d intrusion Jérémy Lebourdais EdelWeb (jeremy.lebourdais@edelweb.fr)
2 Introduction Présentation de WebScarab Développements réalisés Conclusion Questions
Introduction Qui suis-je? 3 Consultant Sécurité chez EdelWeb depuis 2006. Réalisation de tests d intrusion, d audits (techniques), expertise technique et conseil. Cibles des tests d intrusion: majorité de sites web. Passionné de sécurité, de GNU/Linux et des logiciels libres, mais aussi de programmation, et d amélioration /optimisation des outils utilisés quotidiennement. Utilisateur de WebScarab depuis plus de 4 ans. Pas de «lien» avec l OWASP. Oui, j ai déjà utilisé BurpSuite ;-)
Introduction Objet de la présentation 4 Cette présentation ne concerne pas La comparaison de différents proxy intrusifs (no troll inside). La «promotion» de WebScarab. La présentation «technique» des différentes fonctionnalités de WebScarab. Cette présentation a pour objectif de présenter un retour d expérience concret sur le développement et l amélioration d outils, en l occurrence WebScarab.
5 Introduction Présentation de WebScarab Développements réalisés Conclusion Questions
Présentation de WebScarab 6 Proxy web intrusif, projet de l OWASP, codé en JAVA, sous licence GPL. Premières versions du code en 2002. N a pas évolué pendant «longtemps» de façon «officielle» (sur le site de l OWASP). Cette «vieille» version avait de nombreux bugs: mauvaise réputation de cet outil auprès des pentesters. L auteur (Rogan Dawes) l a fait évoluer sur son GIT (version non «officielle»). Moi aussi, de mon côté ;-) Une version NextGen (NG) a été publiée, mais n est pas (ou très peu) maintenue.
Présentation de WebScarab 7 Pourquoi j ai choisi WebScarab? Choix fait il y a quelques années, en partie pour les raisons suivantes Format des traces sous forme de fichiers (*-request, *-response). Logiciel libre. L ergonomie de BurpSuite ne me convenait pas, et celui-ci n avait pas de fonctionnalités indispensables par rapport à WebScarab. Quels avantages j en ai tiré? Evolution des fonctionnalités et correction des bugs, au fur et à mesure. Scripts d analyse «offline» des requêtes/réponses. Sujet de cette présentation!
Présentation de WebScarab Comment est-il codé? 8 Conçu comme un framework, c est à dire Un cœur qui s occupe de gérer les connexions, le stockage des requêtes/réponses, et plus généralement tous les aspects «bas niveau» et interface graphique. Des plugins qui interagissent avec le cœur afin de réaliser leurs tâches: la plupart des onglets de WebScarab sont des plugins (sauf les 3 premiers: la vue globale, les messages de log et les paramètres du proxy). Segmentation du code des différentes parties (packages JAVA) Gestion des requêtes HTTP. Cœur du framework. Parsers. Répertoires spécifiques pour chacun des plugins. Interface graphique. Classes «utilitaires»
Présentation de WebScarab Comment est-il codé? 9 Qualité du code? Variable, d où la présence de bugs! Problèmes de gestion des cas d erreurs (exceptions non traitées). Problèmes plus «difficiles»: mauvaise conception de certaines fonctions: parcours de tableaux, gestion de certains cas de figures uniquement, Utilisation d algorithmes trop «lourds», tel que celui pour la comparaison des requêtes. Cependant, la segmentation du code est claire et les classes/méthodes/variables ont des noms explicites qui facilitent la compréhension du code.
Présentation de WebScarab 10 Une capture d écran, pour voir à quoi ressemble WebScarab
11 Introduction Présentation de WebScarab Développements réalisés Conclusion Questions
Développements réalisés Pourquoi? 12 Pourquoi avoir développé du code pour WebScarab? Corrections des bugs, histoire de se faciliter la vie de tous les jours Ajout de fonctionnalités manquantes, au fil de l eau. Adaptation de WebScarab aux applications rencontrées. WebScarab est sous licence GPL et j aime coder :-)
Développements réalisés Liste rapide 13 Principales modifications apportées au code sur plus de 2 ans Création d un nouveau plugin de recherche d injections. Amélioration du support de l AMF. Amélioration du support des objets Java Serialisés. Corrections des bugs. Ajouts de fonctionnalités «mineures», telles que: La modification de l algorithme de comparaison des requêtes. La sauvegarde de la réponse du serveur pour analyse par un autre outil (ex: fichier flash pour décompilation). Différents menus afin de gagner du temps sur des opérations répétitives (ex: rejouer une requête en un clic).
Développements réalisés Plugin d injections 14 Plugin d injection Besoin Certaines applications Web, généralement complexes, font usage de (très) nombreux paramètres, sur de nombreuses pages. Ce même type d application complexe est généralement très peu testable avec des outils «tout-automatisés». Nécessité d utiliser l application par le pentester (opération manuelle) tout en testant les paramètres envoyés à l application (opération automatisée).
Développements réalisés Plugin d injections 15 Solution réalisée Basé sur le plugin XSS de WebScarab. Suppression de la partie détection de CSRF. Analyse, en temps réel, des requêtes envoyées par le navigateur. Création de nouvelles requêtes avec les paramètres modifiés. Utilisation d une chaine de caractères, modifiable, ainsi qu un identifiant unique pour tester les injections.
Développements réalisés Plugin d injections 16 Algorithme (simplifié) Analyse de chaque requête envoyée par le navigateur. Si celle-ci comporte des paramètres dans l URL ou dans le corps Récupération de ces paramètres. Duplication de la requête en deux copies La première avec l injection de la chaîne de caractères «normale». La seconde avec l injection de la chaine de caractères «URL-encodée». Envoi des deux copies au serveur et analyse des réponses Recherche de la chaine de caractères injectée. Information de l utilisateur sur les résultats découverts.
Développements réalisés Plugin d injections 17 Points «importants» lors du développement Création d une table de «requêtes/paramètres» testés, afin de ne pas tester plusieurs fois le même paramètre. Vérification des requêtes envoyées afin de ne pas analyser les requêtes générées par le plugin. Utilisation d un «pattern» distinctif (et modifiable) avec une marque de début et de fin, tel que: EDW-1';!--"\<\>=&{()}_EDW Ce point est très important afin de savoir quel paramètre se retrouve où (grâce à un numéro incrémenté). Prise en compte des différents contenus de requêtes qui peuvent être envoyés (texte, POST-multipart, requête GWT, )
Développements réalisés Plugin d injections 18 Points «importants» lors du développement (suite) Besoin d avoir un filtre d action pour le plugin, afin de n envoyer des requêtes forgées qu à la cible (cas des applications utilisant du contenu d autres sites, ou bien un service type XITI). Plusieurs modes d utilisation du plugin Mode sur demande (ex: test des paramètres de telle requête). Mode automatique: test de toutes les requêtes qui sont envoyées. Mode forcé: test forcé d une ou de toutes les requêtes (ex: suite à la modification de la chaîne d injection utilisée).
Développements réalisés Plugin d injections 19 Bilan Test des paramètres de l application quelque soit sa complexité. Maîtrise complète de l algorithme de test utilisé et donc des paramètres envoyés et testés. Possibilité d évolution du moteur afin de prendre en compte un nouveau type de contenu (ex: requêtes GWT). La reprise du plugin XSS original a permis de bien comprendre la structure et le fonctionnement d un plugin WebScarab. Le développement a pris du temps au début, mais permet d avoir une réactivité très forte ensuite (ex: support des requêtes GWT en une journée).
Développements réalisés Plugin d injections 20 Bilan (suite) Ce plugin a permis de trouver de nombreuses vulnérabilités de type XSS ou SQLi, publiées (ex: Typo3) ou non. Ce plugin permet d avoir une certaine «exhaustivité» Mais aussi de pouvoir fournir au client la liste des paramètres testés, afin de répondre à la question «vous avez trouvé un XSS sur le paramètre de la fonction A, mais avez-vous testé celui qui est très similaire dans la fonction B?». Cette certaine «exhaustivité» permet de trouver une aiguille dans une botte de foin: parmi tous les paramètres qui sont utilisés (plusieurs centaines voire milliers) par l application, découvrir les deux seuls paramètres vulnérables.
21 WebScarab Développements et améliorations Développements réalisés Amélioration du support de l AMF Amélioration du support de l AMF Besoin «A l époque» (début 2009), peu de programmes supportent vraiment l AMF et permettent de le modifier à la volée. Un des seuls outils utilisables est CharlesProxy. Cependant, son ergonomie pour des tests d intrusion est, de mon point de vue, lourde Le support de l AMF est déjà, en partie, présent dans WebScarab, mais très peu fonctionnel.
22 WebScarab Développements et améliorations Développements réalisés Amélioration du support de l AMF Solution réalisée Lecture des spécifications d AMF par Adobe: facile, il y a à peine 20 pages Le support de l AMF est basé sur l utilisation des classes de BlazeDS, l interface Open Source d Adobe pour utiliser Flex et AIR. Refonte de la classe utilisée pour afficher/modifier de l AMF dans WebScarab Modification des paramètres d initialisation de BlazeDS. Refonte en profondeur du code. Ajustements au cours du temps.
23 WebScarab Développements et améliorations Développements réalisés Amélioration du support de l AMF Points «importants» lors du développement L AMF est assez «simple»: les objets arrivent typés, il faut les convertir en objets JAVA pour les manipuler dans WebScarab, puis les reconvertir pour les envoyer au serveur. Cependant, le passage de la théorie à la pratique n est pas si simple a demandé plusieurs ajustements du code et pas mal de tests. Mais l accès au code source et la possibilité de le modifier «en temps réel» permet d adapter l outil et de prendre en compte certains cas non rencontrés auparavant. Problème: la modification «in vivo» du code a tendance ne pas être optimale (correction rapide pour «que ça marche»).
24 WebScarab Développements et améliorations Développements réalisés Amélioration du support de l AMF Bilan Cette amélioration a permis de trouver de nombreuses vulnérabilités critiques dans une application majeure d un client, utilisée internationalement. Bien que cette application ait été auditée plusieurs fois précédemment, aucun test sur les requêtes AMF n avait été réalisé, pourtant le cœur de l application. Méfiez-vous du support de l AMF dans les outils d intrusion: vérifiez bien qu il n y a pas du contenu «passé à la trappe» car mal ou non décodé par votre outil (comparaison du contenu brut et de celui décodé).
Développements réalisés Autres développements 25 Support des objets JAVA sérialisés Support très partiel de WebScarab «de base». Développements pour modifier les objets envoyés ou reçus. Développements faits en 2009 depuis quelques publications sur la même fonctionnalité dans BurpSuite (cf. BlackHat EU 2010). Ces développements ont permis aussi de trouver de nombreuses vulnérabilités dans différentes applications (principalement celles avec une intégration métier forte). Corrections des bugs au fil des découvertes. Ajout de nouvelles fonctionnalités selon nos besoins.
26 Introduction Présentation de WebScarab Développements réalisés Conclusion Questions
Conclusion 27 De mon point de vue, la possibilité de modification du code source de WebScarab est sa principale «killer-feature» par rapport aux autres proxies intrusifs similaires. Par contre, les nombreux bugs qui étaient présents dans la version publiée sur le site de l OWASP étaient aussi une «killer-feature», mais dans l autre sens: rejet des utilisateurs. Le langage JAVA a permis d intégrer facilement certaines fonctionnalités (ex: support AMF avec BlazeDS, objets JAVA sérialisés).
Conclusion 28 Développer prend un certain temps, parfois non négligeable mais «étalé» dans le temps. La phase d apprentissage est la plus longue, car il faut bien connaitre le code pour l exploiter au mieux. Par contre, les résultats sont aussi là, avec un outil «4x4» qui peut s adapter à n importe quelle application, et ce très rapidement.
Conclusion 29 Idées de développements Plugin d injection Gestion plus fine des injections et de leur détection. Support de l AMF et d autres contenus. Apprentissage des requêtes et de leur séquence pour déjouer les protections anti- CSRF. Support d AMF Création d une requête «from scratch». Création d un modèle générique avec des parsers par contenu: AMF, JAVA sérialisé, etc. Intégration aux outils internes Envoi d informations directement aux outils d assistance à la rédaction du rapport (telle vulnérabilité découverte sur telle requête, dans tel contexte). Utilisation d outils tiers pour certaines opérations (analyse de l entropie des cookies, exploitation automatisée d une Blind injection, etc.).
Conclusion 30 L objectif de cette présentation n est pas de vous «vendre» WebScarab Mais de vous montrer que l utilisation d outils libres, notamment dans le domaine du pentest, apporte une flexibilité non négligeable.
Questions 31