Sécurité MySQL

3 654 vues

Publié le

La sécurité des bases de données est une condition critique à leur exploitation. Effacement, falsification ou simplement divulgation sont les menaces les plus sérieuses qui rôdent et attendent le premier faux-pas des administrateurs. Il est primordial de bien connaître les aspects sécurité de MySQL, et de faire des choix éclairés parmi les protections natives.Durant cette présentation nous examinerons le système de droits, les directives de configurations, les techniques d'intrusion et les vulnérabilités sur le Web : pour chaque menace, nous verrons quels sont les défenses disponibles pour se protéger efficacement.

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 654
Sur SlideShare
0
Issues des intégrations
0
Intégrations
35
Actions
Partages
0
Téléchargements
152
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Sécurité MySQL

  1. 1. Sécurité MySQL Forum PHP 2007 22 Novembre 2007
  2. 2. Agenda Pourquoi la sécurité est importante La gestion des droits Les directives de configuration La sécurité sur le Web Les prochains défis de la sécurité
  3. 3. Qui parle? Damien Séguy Qui reçoit la lettre hebdo? Accompagnements des projets LAMP ‘Sécurité PHP 5 et MySQL’ avec Philippe Gamache chez Eyrolles http://www.nexen.net/
  4. 4. Les risques Usurpation du compte root Effacement des données Modification de données Divulgations de données Ridicule...
  5. 5. Les vulnérabilités avérées 1) Insuffisance des tests de sécurité 2)Configuration par défaut 3) Pas de chiffrement des données sensibles 4)Pas mises à jour du système 5) La sécurité apparaît lors des catastrophes 6)Surveillance inefficace 7)Contrôle insuffisant de l’accès par des tiers
  6. 6. Les droits par défaut Compte root, sans mot de passe Mettre un mot de passe Changer root en ‘chef ’? Les utilisateurs et bases de test Les utilisateurs sans mot de passe Les utilisateurs sans restriction d’IP Les utilisateurs anonymes
  7. 7. Configurations de la table user Utilisateur anonyme SELECT count(*) FROM users WHERE user=’’; Eviter les % dans les adresses SELECT count(*) FROM users WHERE host LIKE ‘%%%’; Toujours mettre un mot de passe SELECT count(*) FROM users WHERE password=’’;
  8. 8. Le droit de FILE Exportation de données vers un fichier Importation de données depuis un fichier Importations de données depuis le client
  9. 9. Le droit de GRANT Possibilité de donner ses propres droits Escalade dans les droits Compléments par échange dans les droits
  10. 10. Configuration serveur --skip-grant-tables --old-password --secure-auth --skip-show-databases
  11. 11. Configuration serveur (2) --port=3306 --skip-name-resolve --skip-networking --bind-address --skip-symbolic-links
  12. 12. Configuration serveur (3) --local-infile=0 --secure-file-priv --chroot --open-files-limit --safe-user-create --allow-suspicous-udf
  13. 13. Configuration client --secure-auth --safe-updates aussi appelée : --i-am-a-dummy --select_limit=1000 --max_join_size
  14. 14. Limiter les consommations Dans la table User Max_connections +-----------------------+------+ | Field | Null | Max_user_connections +-----------------------+------+ | max_questions | NO | | max_updates | NO | Max_questions | max_connections | NO | | max_user_connections | NO | Max_updates +-----------------------+------+ Désactivé par défaut Valables sur une heure
  15. 15. Construction dynamique de la requête SQL Injections SQL $requete = “SELECT COUNT(*) FROM users WHERE login=’quot;.$_GET['login'].quot;‘ AND motdepasse=’quot;.$_GET['password'].quot;‘ “; Mélange des données et de la commande Il est possible d’échapper à l’encadrement, et perturber la requête SQL
  16. 16. Formes d’injections Suppression de clause WHERE WHERE login = '' or 1 or '' Sous-requête WHERE id=(SELECT BENCHMARK(md5(1),1000)); UNION WHERE id=1 UNION SELECT * FROM table; Insertions multiples VALUES ('login'),('admin');
  17. 17. Caractères spéciaux de MySQL ‘ et “ : délimiteur de chaîne () : sous-requêtes % et _ : regex avec LIKE REGEXP ; g G : délimiteur de fin de commande --, # et /* .... */ commentaires
  18. 18. Protections Protection des caractères Appelé échappement (barbarisme) en PHP : mysqli_real_escape_string() ET délimiteurs $sql = quot;SELECT * FROM table WHERE id = 'quot; .mysqli_escape_string($mid, $_GET['id']). quot;'quot;; Forcer le type avant la mise en requête SQL : cas des entiers
  19. 19. Protections Commandes préparées Préparation de la commande Affectation des variables Exécution de la commande
  20. 20. /* Préparation de la commande d'insertion */ $query = quot;INSERT INTO ma_ville (Nom, Pays, Region) VALUES (?,?,?)quot;; $stmt = $mysqli->prepare($query); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; $stmt->bind_param(quot;sssquot;, $val1, $val2, $val3); /* Exécution de la commande */ $stmt->execute(); $val1 = 'Montréal'; $val2 = 'CAN'; $val3 = 'Québec'; /* Exécution de la commande */ $stmt->execute(); /* Fermeture de la commande */ $stmt->close();
  21. 21. Protections Procédures stockées $sql = quot;CALL ma_proc('quot;.$_GET['id'].quot;'); Variables MySQL Plus facile à lire et à sécuriser $sql = quot;SET @id := 'quot;.$_GET['id'].quot;'quot;; mysqli_query($mid, $sql); $sql = quot;SELECT * FROM table WHERE id = @idquot;; mysqli_query($mid, $sql); Les injections sont toujours possibles!!
  22. 22. Les portes dérobées Les logs (binaire, lent, général) SHOW PROCESSLIST SHOW CREATE TABLE Le dossier de données Les sauvegardes (media, fichiers) La réplication Les clients (historique,
  23. 23. Autres outils Jetez ce qui ne sert pas Chiffrez les données Empoisonnez vos données Auditez tout ce qui se passe Sauvegardez Outils : MySQL Enterprise Security Advisor
  24. 24. Vers des standards de sécurité? Sarbanes-Oxley, SOX Health Insurance Portability and Accountability Act (HIPAA) Payment Card Industry Gramm-Leachy Bliley Act SB 1386 BASEL II
  25. 25. Norme PCI (traduction libre) 1. Entretenir un fire-wall pour protéger les données 2. Ne pas utiliser les valeurs par défaut des paramètres de sécurité 3. Protéger les données stockées 4. Chiffrer les transmissions sur les réseaux ouverts 5. Utiliser régulièrement un anti-virus 6. Développer et entretenir des systèmes sécurisés 7. Implémenter des contrôles d'accès stricts 8. Assigner un identifiant unique à tout utilisateur du système 9. Restreindre l'accès physique aux données 10.Noter et surveiller tous les accès aux données 11.Tester régulièrement les systèmes de sécurité 12.Établir une politique de sécurité pour les sous-traitants et employés
  26. 26. http://www.nexen.net/ conferences.php damien.seguy@nexen.net

×