APPLICATIONS WEB ET SECURITE
Une approche de terrain
Michel Chabanne –Administrateur sécurité –Ecole Polytechnique [email protected]
Quelques constats
Premiers serveurs visés par les attaques: Web et mail(placésenDMZ…)
Ciblesd’attaque:logicielserveur(IIS,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:leplusdifficile…
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’IISsuruncontrô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 Off ServerTokens 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!
Restreindrelesaccès(authentification,@IP…)
Sécuriser les logiciels connexes (MySQL…):unautre sujet ! –attention aux frontends (phpMyAdmin…)
Sécuriser les applications: PHP (I)
Exemplesd’attaques
© commentcamarche.net
Sécuriser les applications: PHP (II)
Un sujet très vaste
Minimiserdiffusiond’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écessaire!
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