Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le SQL dans la cybersécurité avec MariaDB

hellosct1
December 14, 2023

Le SQL dans la cybersécurité avec MariaDB

Présentation effectuée à la DevCon #20 par Christophe Villeneuve et Sébastien Giraud sur "Le SQL dans la cybersécurité avec MariaDB".
Cette session vous aidera à sécuriser une base de données SQL. Vous verrez le moyen de sécurisé la donnée par la pratique et les outillages de MariaDB

hellosct1

December 14, 2023
Tweet

More Decks by hellosct1

Other Decks in Technology

Transcript

  1. DEVCON#20 /14/12/2023/ Sebastien Giraud Senior Solution Architect MariaDB Plc Christophe

    Villeneuve Atos - Eviden Le SQL dans la cybersécurité avec MariaDB
  2. Agenda • La sécurité, c’est important !!! • Sécuriser la

    donnée • En pratique, on sécurise • Outillages
  3. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages
  4. Sécurisation : How to ? • Avoir une base de

    données sécurisée n'est pas facile • Processus complet • Une seule défaillance peut compromettre l'ensemble de la base de données > db_secure = on
  5. Enjeux • Une seule défaillance peut compromettre l'ensemble de la

    base de données • Réputation de l'entreprise • Comprenons ce qui se cache derrière • L'objectif principal est de sécuriser les données (pas seulement la base de données).
  6. Comprendre MariaDB • MariaDB est une solution modulaire ◦ Moteurs

    de stockage ◦ Plugins • Architecture Linux like ◦ Hautement ajustable ◦ 800 variables de configuration • Solution green (codé en C) ◦ Package de 100 Mo • Réplication entre différents moteurs • Ecosystem de plus en plus complet ◦ MaxScale ◦ MariaBackup ◦ MariaDB Shell ◦ Connecteurs ◦ MariaDB Cloud
  7. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages
  8. Sécuriser la donnée Démarche globale, actions locales Sécuriser la donnée,

    c’est sécuriser l'intégralité de l’infrastructure Actions de sécurisation à mener au niveau • de la donnée • du serveur • du cluster • de l’architecture et du déploiement
  9. Sécuriser la donnée Démarche globale, actions locales Axes techniques de

    sécurisation • Authentification forte • Chiffrement sur disque • Chiffrement des données • Chiffrement des communications au sein du cluster • Chiffrement des flux sur le réseau • Chiffrement des sauvegardes • Sauvegarde des bases chiffrées • Restriction des accès aux serveurs • Audit des accès et requêtes
  10. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Authentification
  11. AUTHENTICATION METHODES ed25519 GSSAPI Named Pipe PAM Unix Socket Default

    (SHA-1) ED25519 (OpenSSH like) Utilisation INSTALL SONAME 'auth_ed25519'; OU [mariadb] ... plugin_load_add = auth_ed25519 https://mariadb.com/kb/en/authentication-plugin-ed25519/
  12. AUTHENTICATION METHODES ed25519 GSSAPI Named Pipe PAM Unix Socket Default

    (SHA-1) ED25519 (OpenSSH like) Utilisation CREATE USER username@hostname IDENTIFIED VIA ed25519 USING PASSWORD('secret'); OU ALTER USER username@hostname IDENTIFIED VIA ed25519 USING PASSWORD('new_secret'); https://mariadb.com/kb/en/authentication-plugin-ed25519/
  13. Mais aussi • Authentification basée sur le host • Complexité

    des mots de passe • Utilisation des dictionnaire des mots de passe
  14. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Injection SQL
  15. Utilisation du SQL (1/3) Risque : Requête avec des simples

    quotes SELECT * FROM 'users' WHERE 'username'='$login' AND 'password'='$pass' Saisie : $login = hello $pass = hello SELECT * FROM 'users' WHERE 'username'='hello' AND 'password'='hello'
  16. Utilisation du SQL (2/3) Risque : Requête avec des simples

    quotes SELECT * FROM 'users' WHERE 'username'='$login' AND 'password'='$pass' Saisie : $login = ' OR '1'='1' $pass = ' OR '1'='1' SELECT * FROM 'users' WHERE 'username'='' OR '1'='1'' AND 'password'='' OR '1'='1''
  17. Utilisation du SQL (3/3) Risque : Requête avec des simples

    quotes SELECT * FROM 'users' WHERE 'username'='$login' AND 'password'='$pass' Saisie : $login = ' OR 1=1"); drop table users; $pass = SELECT * FROM 'users' WHERE 'username'='' OR 1=1"); drop table users;' AND 'password'=''
  18. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages DDOS
  19. Déni de service distribué(1/3) Distributed Denial Of Service (DDOS) •

    La mise en commun des connexions protège contre les surcharges de connexion (pool de connexions) • Limiter la taille de l'ensemble des résultats • Limiter le nombre de lignes de l'ensemble de résultats • Limiter le nombre de requêtes / connexions par heure • Nombre maximum de connexions par utilisateur
  20. Déni de service distribué (2/3) Connexions persistantes au backend •

    lorsque les connexions au serveur sont logiquement proches, les conserver dans le pool pour les réutiliser Limitation des connexions client • spécifier le nombre maximum de connexions pour un service particulier Limiter le nombre d’authentification avant blocage Serveur : Prévention des attaques maxcale.cnf maxcale.cnf maxscale.cnf [SomeServer] persistpoolmax = 30 [SomeServer] max_routing_connections = 100 Max_auth_errors_until_block = 10
  21. Déni de service distribué (3/3) Plafonner le nombre qui peut

    être retourné • par lignes ou par taille ou les deux • les données seront renvoyées à maxScale, mais MaxScale ne les transmettra pas nécessairement au client Réseau : Protection des attaques maxcale.cnf [LimitSize] type=filter module=maxrows max_resultset_rows=500
  22. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Attaque de l’homme du milieu (MITM)
  23. Attaques de l’homme du milieu Man in the middle (MITM)

    Touche le transport des données • Entre l’application • Et la base de donnée Utilisateurs supposent • Transferts sont confidentiels • Et sécurisés Solution • Garder MariaDB à jour • Isoler MariaDB du réseau global • Exiger le chiffrement TLS
  24. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Chiffrement
  25. Chiffrement des flux sur le réseau • Connection Client-Serveur chiffrée

    • Authentification basé sur la vérification du certificat • Limiter les autorités de certification • Imposer les protocole de chiffrement à la connexion CREATE USER 'alice'@'%' REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland' AND ISSUER '/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/emailAddress=p.parker@_______.com' AND CIPHER 'SHA-DES-CBC3-EDH-RSA';
  26. Chiffrement sur disque (½) • Niveau de chiffrement ajustable ◦

    everything — all tablespaces (with all tables) ◦ individual tables ◦ everything, excluding individual tables • Chiffrement interne ◦ Chiffrement du redo log ◦ Chiffrement des fichiers temporaires ◦ Chiffrement des binlogs ◦ Chiffrement du Gcache • Chiffrement des sauvegardes (multi sites) • Plusieurs plugin disponibles ◦ File Key Management Plugin ◦ AWS Key Management Plugin ◦ Hashicorp Key Management Plugin
  27. Chiffrement sur disque (2/2) • Chiffrement opéré lors du flush

    des pages sur disque • En combinaison avec la compression ◦ First compress, then cipher • Mais aussi ◦ AES_DECRYPT() ◦ AES_ENCRYPT()
  28. Chiffrement : Exemple Utilisation INSTALL SONAME 'file_key_management'; OU [mariadb] ...

    plugin_load_add = file_key_management https://mariadb.com/kb/en/file-key-management-encryption-plugin/ [mariadb] file-key-management file_key_management_encryption_algorithm=aes_cbc file_key_management_filename = /etc/mysql/encryption/keyfile file_key_management_filekey = ff5b3126d19674570890bffd789e0a12 innodb-encrypt-tables innodb-encrypt-log
  29. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Restrictions d’accès
  30. Restrictions des accès • Limiter les droits au minimum requis

    • Utilisation des rôles pour simplifier l’administration • Multiplier les comptes utilisateurs et applicatifs • Gestion des droits par l'utilisateur, l'hôte, mot de passe et colonne • Définir des comptes pour les services internes de l’infrastructure (compte dédiés pour la réplication, la supervision, par serveur applicatif) • Multiplier les comptes pour limiter l’impact d’une intrusion et garder le contrôle en mode dégradé
  31. Restrictions des accès • Gestion des droits simplifiée ◦ GRANT

    ◦ REVOKE ◦ DROP USER • Restriction d’accès aux ressources REVOKE SELECT ON dbname.tablename FROM 'user'@'host'; REVOKE ALL PRIVILEGES ON dbname.tablename FROM 'user'@'host'; GRANT SELECT ON dbname.tablename TO 'user'@'host' WITH MAX_QUERIES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 10 MAX_USER_CONNECTIONS 2 MAX_UPDATES_PER_HOUR 5; FLUSH USER_RESOURCES;
  32. Restrictions des accès • Gestion des droits simplifiée ◦ Roles

    • Choix du rôle actif sur la session • Visualisation du rôle actif sur la session CREATE ROLE role; GRANT privileges ON db-objects TO role; SET ROLE role; SET ROLE NONE; SELECT CURRENT_ROLE();
  33. Les comptes utilisateurs avec MARIADB L'authentification est basée sur l'utilisateur,

    l'hôte et le mot de passe. Les privilèges sont basés sur la combinaison de l'utilisateur et de l'hôte, ainsi que sur le rôle actuel de l'utilisateur. Les privilèges peuvent être accordés globalement, au niveau de la base de données, au niveau de la table ou au niveau de la colonne.
  34. APERÇU DES PRIVILÈGES DISPONIBLES Privilèges de base Personnalisation des Privilèges

    Privilèges des administrateurs (SHOW PRIVILEGES) … Et bien plus encore • Create Routine • Alter Routine • Execute • Event • Trigger • All [Privileges] • Super • Create User • Grant Option Privilèges des développeurs Privilèges Spéciaux Privilèges de la réplication • Create • Alter • Index • Drop • Create Temporary Tables • Create View • Show View • Lock Tables • Replication Client • Replication Slave • Process • File • Reload • Shutdown • Usage • Select • Insert • Update • Delete • Show Databases
  35. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Sauvegardes
  36. Chiffrement des sauvegardes • Les sauvegardes sont indispensables • Sécurité

    des sauvegardes ◦ hors site ◦ sur site ◦ sur bande • Chiffrement impératif • Campagnes de test des sauvegardes ◦ Validation des procédures ◦ Validation de la présence des clés sur le site de secour ◦ Vérification de la volumétrie nécessaire
  37. Chiffrement des sauvegardes : Exemple avec Mariabackup • Sauvegarde mariabackup

    --user=root --backup --stream=xbstream | openssl enc -aes-256-cbc -k mypass > backup.xb.enc • Restauration openssl enc -d -aes-256-cbc -k mypass -in backup.xb.enc | mbstream -x // Pensez à prévoir de l’espace de stockage temporaire pour la décompression des backups https://mariadb.com/kb/en/using-encryption-and-compression-tools-with-mariabackup/ Méthode AES-encrypted mot de passe "mypass" stocke dans un fichier Intègre outils externe de chiffrement
  38. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages Audit
  39. Audit Etude des logs • Activer les audits logs •

    Penser à superviser les autres logs • Vérifier l’homogénéité des configurations • Suivre les KPI • Suivre de près le monitoring ERROR LOG GENERAL QUERY LOG SQL ERROR LOG SLOW QUERY LOG BINARY LOG AUDIT LOG
  40. Audit : exemple Utilisation INSTALL SONAME 'server_audit'; https://mariadb.com/kb/en/mariadb-audit-plugin/ OU [mariadb]

    ... plugin_load_add = server_audit $ tail -f /var/lib/mysql/server_audit.log 20231212 19:58:49,MariaDB1,root,localhost,137,926073,QUERY,,'SELECT DATABASE()',0 20231212 19:58:49,MariaDB1,root,localhost,137,926075,QUERY,test1,'show databases',0 20231212 19:58:49,MariaDB1,root,localhost,137,926076,QUERY,test1,'show tables',0 20231212 19:59:20,MariaDB1,root,localhost,137,926182,CREATE,test1,t1, 20231212 19:59:20,MariaDB1,root,localhost,137,926182,QUERY,test1,'create table t1 (id int, message text)',0 20231212 19:59:48,MariaDB1,root,localhost,137,926287,QUERY,test1,'insert into t1 values (4,'message 1')',0
  41. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages MaxScale
  42. Filtrage des requêtes grâce a MaxScale • Applique des filtres

    sur les flux • Masque des données • Réécriture de requête • Base de règles de filtrage ◦ Type de requête ◦ Fonction utilisée ◦ Colonne sélectionnée ◦ Fréquence des requêtes • Permet le BAN d’utilisateur et d’IP • Permet de multiplier les ports en fonction des besoins (filtrage N3 possible)
  43. Et pourquoi pas diviser les schémas ? • Le Sharding

    avec MaxScale [accounts_east] type=server address=192.168.56.102 port=3306 [accounts_west] type=server address=192.168.122.85 port=3306 [Sharded-Service] type=service router=schemarouter servers=accounts_west,accounts_east
  44. Apercu de MaxScale Advanced • Performance and scalability ◦ Read/write

    split ◦ Load balancing adaptatif ◦ Causal reads ◦ Caching des résultats de requête avec Redis • HA ◦ Failover Automatique ◦ Transaction replay • Multiple Moniteurs ◦ ColumnStore and Replicated environments. • Verrouillage coopératif ◦ MaxScale HA ◦ Multiple MaxScale Moniteurs dans un Cluster • Sécurité ◦ Masquage dynamique des données ◦ Limitation des requêtes ◦ Limitation des résultats des requêtes ◦ Statistiques de performance ◦ Enregistrement central des requêtes Basics
  45. • La sécurité, c’est important !!! • Sécuriser la donnée

    • En pratique, on sécurise • Outillages • A retenir
  46. A retenir : La sécurisation passe par plusieurs axes •

    Axes de sécurisation ◦ Démarche globale ◦ Sécuriser l’authentification ◦ Sécuriser les mots de passe • Privilèges ◦ Limiter les droits ◦ Utiliser les roles ◦ Limiter l‘accès aux ressources • Auditing ◦ Auditer tous les fichiers de journaux disponibles ◦ Sauvegarder les pistes d’audit ◦ Assurer l’alerting • Filtrage ◦ Multiplier les accès et ajouter un filtrage physique N3 ◦ Filtrer les accès
  47. A retenir : Bonnes pratiques • S'assurer que les comptes

    utilisateurs soient sécurisés • Des informations d'identification robustes • Conserver les informations d'identification en toute sécurité • Ajuster la configuration de la base par rapport à leurs valeurs par défaut • Restrictions et limitation des accès • Effacer les données et utilisateurs de test • Procéder à des évaluations régulières de la sécurité • Assurer la sécurité des réseaux • Conserver un journal d'audit accessible et inaltérable • Masquer la localisation des données • Vérifier les privilèges des fichiers