1 / 47

VVT 2009 Sécurisation de serveurs Web

VVT 2009 Sécurisation de serveurs Web. Thierry DOSTES Maurice LIBES. Sécurisation de sites web : le contexte (1). Les sites web sont devenus les principaux supports d'information et de communication de nos Laboratoires et systèmes d'information.

josh
Télécharger la présentation

VVT 2009 Sécurisation de serveurs Web

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VVT 2009 Sécurisation de serveurs Web Thierry DOSTES Maurice LIBES

  2. Sécurisation de sites web : le contexte (1) • Les sites web sont devenus les principaux supports d'information et de communication de nos Laboratoires et systèmes d'information. • Leurs disponibilité, fiabilité et intégrité sont primordiales .... • Or... conclusions du rapport de sécurité 2009 Sophos : • ”Spamrelated webpages” : 1 page nouvelle compromise par du spam toutes les 15 secondes. • Le Web est désormais le premier facteur par lequel les cybercriminels infectent les ordinateurs. VVT 2009

  3. Sécurisation de sites web : le contexte (2) • Multiplication des attaques sur les sites web. • Du code PHP, MySQL insuffisamment sécurisé : • Champs de formulaires non contrôlés • injection de code SQL, • Cross site scripting, • vol de session, vol de cookie, • Défacement de site. • ...des Apache mal configurés... • Fuite d'informations par indexation, « google hacking » • … des Php mal configurés... • register_global? allow_url_include? • « Phpsecinfo » vous conseille la bonne conf • etc... VVT 2009

  4. Sécurisation de sites web : le contexte (3) • Que faire ?! • dans un monde idéal : • sécuriser le code, le revoir , le réécrire • appliquer systématiquement les correctifs de sécurité et vite... • 15 sites Spip à passer de 1.9.2g à 1.9.2h • ...Trop tard • dans le monde réel... se protéger : • revoir son architecture web : zone publique, zone privée • filtrer • mettre en œuvre un pare-feu applicatif VVT 2009

  5. Formation ADF : Aide à la Détection des faiblesses de site Web • Formation nationale, redonnée sur DR12 par M. Contensin, K. Poutrain, T.Dostes, M.Libes • Typologie des menaces • Injection de code, XSS, injection SQL, CSRF • Rappels sur la sécurisation d'Apache • Conseil en utilisation et écriture de scripts Mysql, PHP • Outils de détection et recherche de vulnérabilités • pixy, rats, spike, phpsecinfo, TamperData • Scanner de vulnérabilités : Webscarab, SQLix; Nikto, Wapiti • Architecture réseau avec différents types de filtrage • Présentation reverse proxy • Présentation d'un filtrage HTTP avec ”mod_security” VVT 2009

  6. Ancienne architecture web monolithique • De plus en plus de sites et d'applications accumulées au fil du temps sur un seul serveur et une seule machine • Is No good.... OCS inventory /var/www Site associatif phpmyadmin MySQL Site étudiants Plein d'applications PHP Intranet labo Des wiki pour la doc VVT 2009

  7. 80 Architecture web plus secure • Une séparation zone publique/zone privée rendue accessible par reverse_proxy. • Un filtrage du bon HTTP par mod_security. • Des sites web isolés en machines virtuelles. mysql Http Pas bon OCS VM phpmyadmin mod_security bon rproxy Site associatif VM Site étudiant /var/www applications PHP VM VVT 2009

  8. VVT 2009 Apache : Reverse Proxy Thierry DOSTES Maurice LIBES

  9. Définition d’un serveur mandataire • Un proxy (ou serveur mandataire) : • agit comme une passerelle et un filtre pour accéder à l’Internet. • retransmet les requêtes envoyées par les machines locales. • permet une diminution de la bande passante utilisée en offrant un mécanisme de cache. • est visible pour les clients qui l’utilisent. VVT 2009

  10. Définition d’un Reverse Proxy • Un reverse proxy est un relais inversé. • Il donne l’accès depuis l’Internet à des services Web situés sur un réseau local. • Il dialogue avec le client en se substituant au serveur vers lequel il relaie les requêtes. VVT 2009

  11. Avantages d’un Reverse Proxy (1) • Les clients n’ont pas connaissance du système mis en place. • Le service peut optimiser les performances en assurant des fonctions de cache. • Il offre aussi des fonctions de sécurité. ex : contrôle d’accès par adresse IP ou par authentification auprès d’un annuaire LDAP. • Il devient le point d’entrée unique vers les services Web : • filtrage. • centralisation des traces et dela gestion des erreurs 404. VVT 2009

  12. Avantages d’un Reverse Proxy (2) • Il permet de distribuer les applications Web sur différents serveurs. • Il propose des mécanismes de répartition de charge. • Il peut simplifier/contourner l’établissement de règles sur un pare-feu (ex : hébergeur). • Il est possible de : • réécrire les requêtes http qui sont relayées (ex : avec ModSecurity). • mettre en œuvre des terminaisons SSL. VVT 2009

  13. Inconvénients d’un Reverse Proxy • Le reverse proxy devient un point central : • son indisponibilité entraîne celle de tous les serveurs auxquels il se substitue. • Une compromission peut avoir un impact fort si le cache contient des données importantes. • Les politiques de contrôle d’accès doivent se faire au niveau du reverse proxy. • L’ajout d’un reverse proxy complexifie la topologie du réseau. • Il y a une rupture des flux SSL. VVT 2009

  14. Reverse Proxy : un exemple • Mettre à disposition depuis l’extérieur une application propriétaire : VVT 2009

  15. Reverse Proxy d’Apache

  16. Présentation des modules • Apache fournit plusieurs modules pour gérer les fonctions de reverse proxy : • mod_proxy : activation de la passerelle. • mod_proxy_http : gestion des requêtes HTTP effectuées auprès de la passerelle. • mod_proxy_ftp : gestion les requêtes FTP. • mod_cache : mise en place d’un système de cache. • mod_proxy_balancer : répartition de charge entre plusieurs serveurs. • mod_proxy_html : réécriture des liens HTML contenus dans une page. VVT 2009

  17. Configuration du reverse proxy (1) • Installons le serveur Apache2 : • Chargeons les modules permettant d’activer le reverse proxy pour les requêtes HTTP : • La configuration du reverse proxy se fait dans le fichier :/etc/apache2/mods-enabled/proxy.conf apt-get install apache2 apache2-doc a2enmod proxy proxy_http VVT 2009

  18. Configuration du reverse proxy (2) • Désactivons la fonction de proxy ouvert : • Une redirection de type reverse proxy peut être activée de deux façons différentes : • en utilisant la directive ProxyPass. • En invoquant la directive RewriteRule avec le flag [P]. ProxyRequests Off ProxyPass /intranet/ http://192.168.1.40/ ProxyPass /service_info/ http://192.168.1.20/spip/ VVT 2009

  19. Configuration du reverse proxy (3) • Mettons en place une politique de filtrage pour l’accès à l’Intranet : • Les utilisateurs du réseau local peuvent accéder. • Les utilisateurs du réseau externe doivent s’authentifier auprès de l’annuaire (requiert le module mod_authnz_ldap). <Proxy http://192.168.1.40/> AuthType Basic AuthName "Zone Intranet IFR 88" AuthLDAPURL "ldap://ldap.ifr88.glm:389/ou=accounts,dc=ifr88,dc=cnrs,dc=fr" AuthBasicProvider ldap AuthzLDAPAuthoritative off require valid-user Order deny,allow Deny from all Allow from 192.168.1.0/255.255.255.0 Satisfy Any </Proxy> VVT 2009

  20. Configuration du reverse proxy (4) • Exemple de répartition de charge (après activation du module mod_proxy_balancer) : <Proxy balancer://webmail> BalancerMember http://192.168.1.50:80/ BalancerMember http://192.168.1.51:80/ </Proxy> ProxyPass /webmail balancer://webmail/ VVT 2009

  21. Conclusions • Une architecture à base de reverse proxy : • donne une grande souplesse pour mettre à disposition des applications sur Internet. • fournit de nombreux services à valeur ajoutée de manière transparente. • permet de répartir une application par serveur (en corrélation avec la virtualisation). • offre la possibilité d’intégrer un pare-feu applicatif en amont de l’application. VVT 2009

  22. VVT 2009 Apache : ModSecurity 2.x Thierry DOSTES Maurice LIBES

  23. Le pare-feu applicatif • Il intercepte les requêtes et les réponses. • Il applique la politique de filtrage applicative en vigueur. • Deux approches possibles : • liste blanche : seules les requêtes et réponses expressément autorisées peuvent passer. • liste noire : les attaques connues sont bloquées à partir d’une liste de signatures comportant des motifs réputés dangereux. • Dans la pratique : l’approche par liste noire est plus adaptée à la réalité du terrain. VVT 2009

  24. Présentation deModSecurity

  25. Présentation de ModSecurity • Il s’agit d’un module Apache2 créé en 2002. • Il est disponible sous licence GPLv2. • Il travaille au niveau de la couche application, sur le protocole http. • Il comporte un moteur de détection et de prévention pour les applications Web. • Ce moteur se base sur des règles de filtrage et des signatures. • Il fournit en standard un jeu de règles basé sur une approche de type « liste noire ». VVT 2009

  26. Fonctionnalités (1) • Depuis ses versions 2.x, ModSecurity offre les fonctionnalités suivantes : • 5 phases (ou niveaux) d’intervention possibles. • des fonctions de transformation adaptables à chaque règle de filtrage : • décodage/encodage des données en base64. • décodage des entités HTML. • normalisation des données avant traitement. • support du filtrage XML (ex : validation des flux par rapport à une DTD). • possibilité d’attribuer un score à chaque anomalie. • collecte d’informations à des fins de corrélation. VVT 2009

  27. Fonctionnalités (2) • Ainsi, ModSecurity est capable : • de filtrer des requêtes ou des réponses. • d’inspecter les flux HTTPS. • de fouiller les données compressées. • d’analyser le contenu lors de l’utilisation de la méthode POST. • d’intercepter des requêtes suspectes avant qu’elles n’atteignent une application PHP. • de journaliser des anomalies pour une analyse ultérieure. • Pour cela, il travaille sur une copie en mémoire de la requête ou de la réponse. VVT 2009

  28. Les 5 phases deModSecurity

  29. Phases de filtrage de ModSecurity VVT 2009

  30. Phases 1 & 2 : analyse de la requête • Phase 1 : • ModSecurity intervient sur l’entête de la requête. • Il ne connaît pas encore les arguments contenus dans la requête. • Toute règle s’exécutant en phase 1 intervient avant qu’Apache soit en mesure de faire quelque chose. • Phase 2 : • Nous disposons désormais des argumentsde la requête. • Les règles de filtrage ou de rejets liéesà des applications doivent intervenir à ce niveau . • ModSecurity connaît trois types d’encodage pour analyser le contenu du corps d’une requête. • application/x-www-form-urlencoded • multipart/form-data • text/xml VVT 2009

  31. Phases 3 & 4: analyse de la réponse • Phase 3 : • Elle intervient juste avant que les entêtes des réponses parviennent au client. • Les règles de filtrage permettent de définir ce qu’il doit advenir de la « future » réponse. • Nous décidons si nous voulons analyser le contenu/corps de la réponse ou la bloquer dès maintenant. • A ce niveau, nous ne savons pas encore ce que le serveur Apache va retourner. • Phase 4 : • Lors de cette phase, ModSecurity analyse lesinformations renvoyées à destination du client. • Le contenu HTML est analysé pour détecter : • des fuites d’informations. • des messages d’erreurs. • des traces d’authentifications ayant échouées. • etc. VVT 2009

  32. Phase 5 : journalisation • Les règles déclarées à ce niveau interviennent seulement sur la manière dont la journalisation doit s’opérer. • Cette phase peut être utilisée pour analyser les messages d’erreur enregistrés par Apache. • Elle permet également d’inspecter des entêtes de réponse qui n’étaient pas accessibles en phases 3 et 4. • Il est trop tard pour interdire ou bloquer des connexions. VVT 2009

  33. Exemples de règles • Interrompre le traitement et autoriser la transaction. • Interrompre le traitement et intercepter la transaction. • Contrer une attaque en force brute. • Capturer une transaction lorsqu’un modèle défini apparaît (10 captures possibles). SecRule REMOTE_ADDR "^10\.126\.100\.85$" phase:1,log,allow,ctl:ruleEngine=Off SecRule REQUEST_HEADERS:User-Agent "nikto" "log,deny,msg:'Nikto Scanners Identified'" SecAction initcol:ip=%{REMOTE_ADDR},nolog SecRule ARGS:login "!^$" \ nolog,phase:1,setvar:ip.auth_attempt=+1,deprecatevar:ip.auth_attempt=20/120 SecRule IP:AUTH_ATTEMPT "@gt 25" \ log,drop,phase:1,msg:'Possible Brute Force Attack" SecRule REQUEST_BODY "^username=(\w{25,})" phase:2,capture,t:none,chain SecRule TX:1 "(?:(?:a(dmin|nonymous)))" VVT 2009

  34. Les règles de basede ModSecurity

  35. ModSecurity Core Rules (1) • ModSecurity propose des règles par défaut. • Elles sont basées sur une approche de type liste noire. • Elles offrent une protection honorable contre les attaques les plus connues : • détection de l’activité de certains scanners ou bots. • interception de tentatives d’accès à des cheveaux de Troie. • recherche des irrégularités dans l’utilisation du protocole HTTP (en entrée et en sortie). • Elles permettent de modifier les messages d’erreurs renvoyés par le serveur. VVT 2009

  36. ModSecurity Core Rules (2) • Les règles sont organisées en fonction du type d’attaque ou de protection. • Elles sont stockées dans plusieurs fichiers : • L’ordre d’application des règles importe. modsecurity_crs_10_config.conf modsecurity_crs_20_protocol_violations.conf modsecurity_crs_21_protocol_anomalies.conf modsecurity_crs_23_request_limits.conf modsecurity_crs_30_http_policy.conf modsecurity_crs_35_bad_robots.conf modsecurity_crs_40_generic_attacks.conf modsecurity_crs_45_trojans.conf modsecurity_crs_50_outbound.conf VVT 2009

  37. ModSecurity Core Rules (3) • mod_security_crs_10_config : • fichier de configuration du moteur. • définition des comportements généraux. • mod_security_crs_20_protocol_violations : • règles vérifiant que les requêtes sont conformes au protocole HTTP. • intervention en phase 2 du cycle de vie de ModSecurity. • élimination d’un grand nombre d’attaques automatisées. • mod_security_crs_21_protocol_anomalies : • recherche de motifs synonymes d’attaques HTTP. • intervention en phase 2. • rejet des transactions concernées. VVT 2009

  38. ModSecurity Core Rules (4) • mod_security_crs_23_request_limits : • limitation du nombre et de la taille des arguments soumis lors d’une requête HTTP. • intervention en phase 2. • protection contre les attaques de type buffer overflow ou manipulation des paramètres. • mod_security_crs_30_http_policy : • règles restreignant l’utilisation du protocole HTTP par les clients : • blocage de méthodes (CONNECT, DEBUG, TRACE). • refus du protocole HTTP 0.9. • interdiction de fichiers dont l’extension est synonyme de contenus dangereux (.ini, .key, .old). • intervention en phase 2. VVT 2009

  39. ModSecurity Core Rules (5) • mod_security_crs_35_bad_robots : • limitation des nuisances générées par des robots d’indexation qui n’en seraient pas. • enregistrements des transactions, mais pas de blocage. • intervention en phase 2. • détection des scanners de sécurité. • mod_security_crs_40_generic_attacks : • mise en place de règles contre des attaques connues : • protection des sessions. • injections de code SQL. • attaques de type Cross Site Scripting (XSS). • accès ou injection de commandes. • injections diverses (PHP, LDAP, SSI, etc.). • intervention en phase 2. VVT 2009

  40. ModSecurity Core Rules (6) • mod_security_crs_45_trojans : • détection des tentatives d’accès aux troyens et portes dérobées déjà installées sur le système. • intervention en phase 2. • la mise à jour régulière de ces règles est indispensable. • attention : contournement possible de ces filtres. • mod_security_crs_50_outbound : • détection et interception de codes erreurs trop explicites renvoyés par une application (ex : erreurs SQL ou PHP). • intervention en phase 4. • renvoie le code erreur HTTP 501 (opération non supportée par le serveur). • protection contre la fuite d’informations utilisables pour initier des actions malveillantes. VVT 2009

  41. ModSecurity Core Rules (7) • mod_security_crs_55_marketing : • journalisation des transactions initiées par les moteurs de recherches. • intervention en phase 2. • utilisation à des fins statistiques. • mod_security_crs_60_custom_rules : • définition de nouvelles règles utilisateur. • cf TP disponible sur le site César. VVT 2009

  42. Une petite démo ? • Sur un formulaire php non sécurisé • http://www.com.univ-mrs.fr/ssc/bibliotheque/BIBCOM/ • XSS <script>alert(2*3)</script> • ou... avec mod_security • Forbidden • You don't have permission to access /ssc/bibliotheque/BIBCOM/livre.php on this server. VVT 2009

  43. Conclusions

  44. Limitations de ModSecurity • Les règles de base peuvent bloquer le fonctionnement de certaines applications. • GRR, webcalendar ... • Problème avec les protocoles non standards • DAV, SVN • ModSecurity nécessite un suivi des « logs » pour comprendre les effets de bords possible. • L’analyse des transactions HTTP peut surcharger le serveur selon son dimensionnement initial : • consommation mémoire (copie des transactions). • consommation CPU (expressions régulières). VVT 2009

  45. Aucune chance sans les logs • $ cat /var/log/apache2/modsec_debug.log • Indique l'url incriminée, le nom du champ, le fichier de règles, le numéro de la règle, la ligne, le pattern matching. [24/Jun/2009:22:02:11 +0200] [www.com.univ-mrs.fr/sid#83001f8][rid#8d72428][/ssc/bibliotheque/BIBCOM/livre.php][1] Access denied with code 403(phase 2). Pattern match "(?:\b(?:(?:type\b\W*?\b(?:text\b\W*?\b(?:j(?:ava)?|ecma|vb)|application\b\W*?\bx-(?:java|vb))script|c(?:opyparentfolder|reatetextrange)|get(?:special|parent)folder|iframe\b.{0,100}?\bsrc)\b|on(?:(?:mo(?:use(?:o(?:ver|ut)|down|move|up)|ve)|key(?:press|d ..." at ARGS:Auteur. [file "/etc/apache2/conf.d/modsecurity/modsecurity_crs_40_generic_attacks.conf"] [line "102"] [id "950004"] [msg "Cross-site Scripting (XSS) Attack"] [data "<script"] [severity "CRITICAL"] [tag "WEB_ATTACK/XSS"] VVT 2009

  46. Contourner les effets de bords de mod_security • On peut désactiver le pattern matching pour des URL ou des adresses clientes. • dans /etc/apache2/confd.d/modsecurity/modsecurity_crs_15_custom_rules.conf • Pour une zone Web • SecRule REMOTE_ADDR "^139\.124\.2" phase:1,nolog,allow,ctl:ruleEngine=Off • SecRule REQUEST_URI "^/grr" phase:1,log,pass,ctl:ruleEngine=Off <Directory /var/www/com-html/DAVdocs> SecRuleRemoveById 960032 960038 960904 </Directory> VVT 2009

  47. Questions / réponses

More Related