La sécurité Pour les développeurs
Plan Règles de base Filtrage des variables Cryptographie Exemples d’attaques Ressources
Règles de base « Never trust user input » Maîtriser le contexte : OS, configuration, langage Connaître les attaques pour bien préparer les défenses Connaître, appliquer, améliorer les bonnes pratiques Never trust user input Vérifier toutes les entrées : utilisateur (implicite ou explicite), système, autre application Maitriser l’environnement Comment fonctionne l’ordinateur matériel, OS (win/mac/linux) services (web, BDD) configuration (config par défaut) protocoles (TCP/UDP, HTTP, …) Connaitre le langage : compilation, exécution Connaître la sécurité offensive S’intéresser à l’aspect offensif pour mieux appréhender les façon de se protéger, mieux tester ses applications, et imaginer les possibles vecteurs d’attaques Les bonnes pratiques Connaître, appliquer et améliorer les bonnes pratiques
Filtrage des variables Fonctions dédiées Intval() Filter_var() htmlentities() PDO Regex Vérification manuelle Fonctions dédiées En PHP il existe beaucoup de fonctions de filtrage : intval, filter_var, htmlentities, PDO Regex Les expressions régulières permettent d’écarter les valeurs contenant des caractères inattendus Fonctions originales Attention à la justesse et à l’exhaustivité des fonctions qui font le travail à la main. Préférer utiliser des whitelist plutôt que des blacklist. $sql = 'SELECT * FROM news WHERE title LIKE :t'; $req = $db->prepare($sql); $req->execute(array('t' => $title)); intval("1234"); = 1234 intval("XCV34"); = 0 intval("34XCV"); = 34 filter_var('azert@ty.com', FILTER_VALIDATE_EMAIL) = azert@ty.com filter_var('az#ert@t/y.com', FILTER_VALIDATE_EMAIL) = false htmlentities("te<b>st") = te<b>st /^[a-zA-Z0-9]+$/
Cryptographie md5("a"); = 0cc175b9c0f1b6a831c399e269772661 md5("b"); = 92eb5ffee6ae2fec3ad71c777531578f Hachage Chiffrement symétrique Chiffrement asymétrique Utiliser des bibliothèques dédiées Utiliser des algorithmes éprouvés et une protection maximale Nul besoin d’être un expert en cryptologie ; il suffit de connaître les différents type d’algorithmes et de bien comprendre l’utilité de chacun. Les fonctions les plus utilisées sont les suivantes : Hachage (MD5, SHA) Le hachage permet de calculer une l’empreinte unique d’une information ; il peut s’agir de texte, d’un fichier, … Il est généralement utilisé pour stocker les mots de passe et vérifier l’intégrité d’un fichier Conseil : Utiliser des bibliothèques dédiées au hachage de mots de passe (protection contre le bruteforce et les dictionnaires) Chiffrement symétrique (AES) Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer une information. Il est rapide, mais nécessite un échange de clé préalable Chiffrement asymétrique (RSA) Le chiffrement asymétrique utile un couple clé publique/clé privée. Il permet d’authentifier son interlocuteur. Autant que possible, utiliser les algorithmes les plus puissants/éprouvés.
Exemples d’attaques Web Exécutable Injection XSS Injection SQL Upload Remote Code Execution (RCE) Exécutable Buffer overflow Reverse engineering Bruteforce, DoS,… Attaque d’une application Web Injection XSS Injection de code HTML/JS : phishing, vol de session, redirection, téléchargement de malware Injection SQL Dump de la base, lecture/écriture de fichier Upload Permissivité des scripts d’upload RCE Failles permettant l’exécution de code PHP ou de ligne de commande Attaque d’un exécutable Buffer overflow Consiste à injecter dans un programme une valeur spécifique permettant d’en modifier le comportement. Reverse engineering Analyse du code assembleur ou du code source Attaque de service Accès anonyme, bruteforce, exploits, DoS,…
Ressources Conclusion Filtrage des entrées Maitrise de l’environnement Utiliser la bonne crypto Rester informer Ressources Cours online, forums Magazines / webzines Challenges Conclusion Il suffit de respecter quelques consignes simples : Filtrage des entrées Maitrise de la configuration/environnement Utiliser la bonne crypto Rester informer Ressources Cours Online, Forums dédiés OpenClassrooms, développez.net Magazines / Ezines Beaucoup de magazines, papiers et online, pour tous les niveaux : MISC, Pirate Informatique, Open Silicium, les mags Linux, Rafale Security checklist, Cheat sheets Challenges NewbieContest, HackThisSite