370 likes | 461 Views
INF8420: Éléments de Sécurité Informatique. Sécurité des applications web. Architecture des applications web. Client légitime. Server Web. Internet. HTTP HTML. Architecture des applications web. Client légitime. Server BD. Server Web. Internet. SQL. HTTP HTML.
E N D
INF8420: Éléments de Sécurité Informatique Sécurité des applications web
Architecture des applications web Client légitime Server Web Internet HTTP HTML
Architecture des applications web Client légitime Server BD Server Web Internet SQL HTTP HTML
Architecture des applications web Client légitime Server BD Server Web Internet XML SQL HTTP HTML Serveur d’application
Architecture des applications web Client légitime Server BD Server Web Internet XML SQL HTTP HTML Serveur d’application Kerberos LDAP Serveur d’authentification
Architecture des applications web Client légitime Server BD Server Web Internet XML SQL HTTP HTML Serveur d’application Kerberos LDAP Client malicieux Serveur d’authentification
Architecture des applications web Client légitime Server BD Server Web Internet HTTP HTML XML SQL HTTP HTML Serveur d’application Pare-feu Kerberos LDAP Client malicieux Serveur d’authentification
Problèmes de sécurité • Authentification • Vérification des données usager • SQL injection • Cross site scripting • Parameter tampering • Phishing (hameçonnage) • Logique application
Authentification • Composantes impliquées Client légitime Server BD Server Web Internet Serveur d’application Pare-feu Client malicieux Serveur d’authentification
Authentification • Canal de communication sécurisé (https) • Challenge – response (NTLM, Kerberos) • Réauthentification à des intervalles sécurisés • Permission des usagers • Tester • Authentifier le client • Authentifier le serveur
Authentification • Authentification du serveur • Certificat SSL
Authentification • Authentification du serveur • Certificat SSL • Autre
(Input validation) Vérification des données usager
Vérification des données usager (Input validation) • Ce qu’on fait Client légitime Server BD Server Web Internet Serveur d’application Pare-feu Client malicieux Serveur d’authentification
Vérification des données usager (Input validation) <form action="mailto:yourname@yourdomain.com" method="post" onsubmit="return checkform(this);"> <script language="JavaScript" type="text/javascript"><!--function checkform ( form ){ // see http://www.thesitewizard.com/archive/validation.shtml // for an explanation of this script and how to use it on your // own website // ** START ** if (form.email.value == "") { alert( "Please enter your email address." ); form.email.focus(); return false ; } // ** END ** return true ;}//--></script> • Code source html
Vérification des données usager (Input validation) • Ce qu’on devrais faire Client légitime Server BD Server Web Internet Serveur d’application Pare-feu Client malicieux Serveur d’authentification
Vérification des données usager (Input validation) • Attaques • Injection SQL (SQL Injection) • Cross Site Scripting (XSS) • Variable tampering
Vérification des données usager SQL Injection
Vérification des données usager (Input validation) Client légitime Server BD Server Web extract($_POST); $req = "select mem_code from MEMBRES where mem_login = '$login' and mem_pwd = '$pass'"; $result = mysql_query($req) or die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error()); list($mem_code) = mysql_fetch_array($result); if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive • Injection SQL (SQL Injection)
Vérification des données usager (Input validation) daniel Xa4!dfga Client légitime Server BD Server Web select mem_code from MEMBRES where mem_login = 'daniel' and mem_pwd = 'Xa4!dfga' extract($_POST); $req = "select mem_code from MEMBRES where mem_login = 'daniel' and mem_pwd = 'Xa4!dfga'"; $result = mysql_query($req) or die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error()); list($mem_code) = mysql_fetch_array($result); if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive • Injection SQL (SQL Injection)
Vérification des données usager (Input validation) daniel ' or '1'='1 Server BD Server Web select mem_code from MEMBRES where mem_login = 'daniel' and mem_pwd = '' or '1'='1' extract($_POST); $req = "select mem_code from MEMBRES where mem_login = 'daniel' and mem_pwd = '' or '1'='1'"; $result = mysql_query($req) or die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error()); list($mem_code) = mysql_fetch_array($result); if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive Client malicieux • Injection SQL (SQL Injection)
Vérification des données usager (Input validation) daniel x'; INSERT INTO members ('email','passwd','login_id','full_name') VALUES ('steve@unixwiz.net','hello','steve','Steve Friedl');-- Client malicieux • Injection SQL (SQL Injection)
Vérification des données usager Cross Site Scripting
Vérification des données usager (Input validation) Search results for Gagner de l’argent: • Comment gagner de l'argent facile et des cadeaux sur internet… • L' objectif du blog est de présenter toutes les idées qui permettent d' économiser … Gagner de l’argent Client légitime Server Web Search <html> <head></head> <body> <h1>Search results for Gagner de l’argent :</h1> <itemize> <item>Comment gagner deacile et des cadeaux sur internet…</item> <item>L' objectif du blog est de présenter toutes les idées qui permettent d' économiser …</item> </itemize> </body> </html> extract($_POST); $req = "select * from POSTS where title = '$stitle' • Cross site scripting (XSS)
Vérification des données usager (Input validation) Search results for Super: No results found <b>Super</b> Server Web Search <html> <head></head> <body> <h1>Search results for <b>Super</b> :</h1> No results found </itemize> </body> </html> Client malicieux extract($_POST); $req = "select * from POSTS where title = '$stitle' • Cross site scripting (XSS)
Vérification des données usager (Input validation) Server BD Post Client malicieux <script type="text/javascript">document.location.href=“http://boteanu.com"</script> Your message has been posted • Cross site scripting (XSS)
Vérification des données usager (Input validation) Client légitime Server BD Guestbook messages: Hello Bien fait ... <h1>Guestbook messages:</h1> Hello<br> Bien fait<br> <script type="text/javascript">document.location.href=“http://boteanu.com"</script><br> ... • Cross site scripting (XSS)
Vérification des données usager (Input validation) • Comment se protéger ? • Valider les données de l’usager • sur le serveur Web • et/ou sur le serveur d’applications • limiter la taille de l’entrée • refuser les caractères spéciaux ‘ “ \ / ; - < > • accepter seulement les caractères nécessaires • Utiliser les SQL Stored Procedures • Gérer les permissions sur la basé de données • usagers, rôles, permissions • Messages d’erreur • Vérifications
Vérification des données usager (Input validation) • Comment vérifier si un site est vulnérable ? • Rien fait pour protéger -> probablement vulnérable • Développé sans gestion de projet -> probablement vulnérable • Outils automatiques • Nikto • Acunetix ($$) • WebScarab • Autres (http://sectools.org/web-scanners.html)
Phishing Hameçonnage
Hameçonnage(Phishing) Client légitime Server BD Server Web Faux Server Web Internet Vous avez gagné 1 million. Connectez vous sur le site de la banque en cliquant sur https://www.desjard1ns .com Serveur d’application Pare-feu Client malicieux
Hameçonnage(Phishing) • Comment se protéger ? • Filtrer le spam • Authentification du serveur • Eduquer les utilisateurs
Logique de l’application • Chaque attaque est différente • Exploite la logique de l’application • Difficile à détecter • Exemples: • Acheter un livre de -20$ • Créer un million d’usagers et écrire des messages • Enlever le câble réseau au milieu d’une partie d’échec
Conclusions • Attaques web très populaires • Facile de créer une application vulnérable • Validation des données usager • Éducation des usagers • Principe de sécurité de l’oignon (layered security)