Michel Chabanne Administrateur sécurité Ecole Polytechnique michel.chabanne@polytechnique.edu APPLICATIONS WEB ET SECURITE Une approche de terrain
Quelques constats Premiers serveurs visés par les attaques: Web et mail(placésendmz ) Ciblesd ataque:logicielserveur(is,apache)et processeur de script (ASP,.NET, PHP) Objectif: simple «plaisanterie», prise de contrôle, hébergement de contenu illicite La sécurité des services web = sécurité du serveur maispasseulement
Sécurité multi-niveaux Sécuriser son serveur: comme pour tous les types de service! Sécuriser les applications:leplusdificile Sécuriser la communication client-serveur: cryptage, inspection de flux, proxy inverse
Sécuriser son serveur web (I) Windows: IIS (Internet Information Server) Actuellement en v6 (éradiquer la v5) Les outils IISLockdown et URLScan sont obsolètes Sécurité liée aux mises à jour WindowsUpdate Points clés Pasd ISsuruncontrôleurdedomaine Les sites sont sur un disque non système Verrouiller les permission NTFS sur les sites Supprimer tous les contenus fournis par défaut Déterminer la techno de script à utiliser et activer seulement celle-là(.net,cgi,asp,isapi )
Sécuriser son serveur web (II) Apache Choisir son OS, le sécuriser ( *BSD! ) Masquer la version ServerSignature ServerTokens Off Prod Utilisateurd exécution!=root (trivialmais ) Désactiver: Directory browsing, SSI Désactiver les modules non nécessaires (mod_*)
Sécuriser son serveur web (III) Apache [suite] Se protéger contre les attaques DoS: Variables Timeout LimitRequestBody MaxSpareServers, MaxRequestsPerChild, ThreadsPerChild, ServerLimit, MaxSpareThreads Utiliser le chrooting (= configuration «cage»). Le module mod_security pour Apache est utile! Restreindrelesacès(authentification,@IP ) Sécuriser les logiciels connexes (MySQL ):unautre sujet! attention aux frontends (phpmyadmin )
Sécuriser les applications: PHP (I) Exemplesd ataques commentcamarche.net
Sécuriser les applications: PHP (II) Un sujet très vaste Minimiserdifusiond informationsserveur Contrôle des saisies utilisateur Ne pas utiliser de contrôle côté client (JScript, VBScript) Utiliser du code de validation (type, taille des données) Opérer intelligemment avec ses bases de données Demanderseulementl infonécesaire! Contrôler, contrôler et encore contrôler les données!! Bien gérer les exceptions/codes erreur de retour
Sécuriser les applications: PHP (III)
Sécuriser les applications: PHP (IV) Séparer le développement en couches Accès aux données Traitement Présentation Documenter son code en ligne (PHPDoc ) Nomenclature des fonctions et variables Utiliser des «templates» plutôt que de mixer le code HTML et PHP Utiliser error_reporting() intelligemment Journaliser au maximum les événements
Sécuriser la communication (I) Le meilleur test: un sniffer! Unerègle:dèsqu ilyaauthentification,ilya nécessité de SSL/TLS (Transport Layer Security) Voir à ce sujet: certificats SSL RENATER gratuits http://www.renater.fr/spip.php?article429 Apache 2.x inclut un module SSL de base mod_security offre des règles de filtrage basées sur les regex
Sécuriser la communication (II) Danslecasd applicationn-tier: penser à sécuriser la communication entre les serveurs (IPSEC?) Sécurité des serveurs IIS : penser au reverse proxy (mod_proxy d Apache) Serveurs sensibles: utilisation IDS «host»/ips à considérer; penser également à TripWire Importance de la journalisation et aspects légaux delaconservation(1an,maispas2 )
Bilan Penser la sécurité de bout en bout (des clients aux parfois multiples serveurs) Penser la sécurité en n-dimensions (sur toutes les couches) Développer les applications avec la sécurité comme premier objectif Tenir ses briques à jour! OS-PHP-Apache-*SQL
Merci de votre attention