Ubuntu paris 1610 -
Chiffrer et sécuriser
MariaDB
Christophe Villeneuve
@hellosct1
Le 13 novembre 2016
Qui ???
Christophe
Villeneuve
mozilla reps - firefox os - B2GOS - ausy - afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – Libre@toi – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – elephpant - owasp -security
Ubuntu paris 1610 -
Aujourd'hui
● Les possibilités de MariaDB
● La sécurité
● Le chiffrement
Chiffrer et sécuriser MariaDB
Ubuntu paris 1610 -
✔ Fondé par
✔ Monty Widenius
✔ David Axmark
✔ 1983 – 1ère idée
✔ Fondé en 1995
✔ 2007 Préparation pour
Nasdaq
✔ 2008 Rachat par Sun
✔ 2009 Sun racheté par Oracle
✔ Promesse de Oracle sur 5
ans (fin 2014)
L'origine Dates importantes
Histoire de début
Ubuntu paris 1610 -
GO MariaDB
Ubuntu paris 1610 -
✔ Communauté d'amis
✔ 100 % Open source et
compatible MySQL
✔ Plateforme d'innovation
✔ Des commiteurs
✔
Dec 2008 Création de Monty 
Program 
 → Monty Widenius
✔
MariaDB 5.1 (Fev 2010)
✔
MariaDB 5.2 (Nov 2010)
✔
MariaDB 5.3 (Avril 2012)
✔
MariaDB 5.5 (Avril 2012)
✔
MariaDB 10.0 (Mars 2013)
✔
2013 Fondation
✔
MariaDB 10.1
(fin 2013)Galera people
Compression Multimaster
Replication
MariaDB : un jeune projet... MATURE
Ubuntu paris 1610 -
✔ PHP (driver natif) → BSD licence
✔ Python
✔ Perl
✔ Ruby
✔ .NET avec MyODBC
✔ JDBC (basé sur drizzle driver)
✔ C
✔ Oracle connector (licence GPL)
Tous sont LGPL → Aucune licence commerciale
Différents connecteurs avec MariaDB
Ubuntu paris 1610 -
Moteur de stockage
storage engine
Ubuntu paris 1610 -
Insertion de données : TokuDB
● Moteur de stockage
● Natif dans MariaDB 5.5 & MariaDB 10.0+
●
(R)Tokutek & MariaDB
● Technique utilise l'arbre fractal
– Amélioration indexation
– Amélioration des requêtes
●
Schéma de vitesse
●
Compression
●
Réplication
●
Souple
Ubuntu paris 1610 -
TokuDB : exemple
Ubuntu paris 1610 -
Manipuler les données : Connect
● Dispo MariaDB 10.0+
● ETL : Extract, transform et Load
● Lecture / Ecriture / MAJ
– TXT, DBF, INI, XML
– MS Access, MS Excel, TBL (similaire à MERGE)
– ODBC, MySQL,SQLite, Oracle, DB2, WMI...
● Locale ou distant
● Custom possible
● Accès en parallèle sur multitables
● Installation dans My.cnf
[mysqld]
plugin-load=ha_connect.so
Ubuntu paris 1610 -
Connect : exemple CSV
● Fichier
– first,last,birthday
– "Christophe","Villeneuve","Jan 1"
– "PHP","ODBC","Nov 22"
> CREATE TABLE users_csv (
first varchar(32) NOT NULL,
last varchar(32) NOT NULL,
birthday varchar(50) NOT NULL
) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv'
HEADER=1 SEP_CHAR=',' QUOTED=1;
> SELECT * FROM users_csv;
| first | last | birthday |
+---------------+---------------+-------------+
| Christophe | Villeneuve | Jan 1 |
| PHP | ODBC | Nov 22 |
+---------------+---------------+-------------+
Ubuntu paris 1610 -
Connect : exemple ODBC
> create Table table2
ENGINE=CONNECT TABLE_TYPE=ODBC
SRCDEF='select key, sum(l_quantity) qt from dbt3.table1 group by key'
CONNECTION='DSN=oracle;UID=login;PWD=password';
> MariaDB [dbt3]> select sum(qt) from (select qt from table2) as
result;
→ 31444
Valeur de sum(qt)
Ubuntu paris 1610 -
Recherche SphinxSE
● Dispo MariaDB 5.2+
● Recherche Full-text
● Ne stocke pas les données
● Client haut pour permettre à MariaDB de parler à Sphinx
searchd
● Installation dans My.cnf
[mysqld]
plugin-load= 'ha_sphinx.so';
Ubuntu paris 1610 -
Exemple SphinxSE
● CREATE TABLE t1 (
id INTEGER UNSIGNED NOT NULL,
weight INTEGER NOT NULL,
query VARCHAR(3072) NOT NULL,
group_id INTEGER,
INDEX(query)
) ENGINE=SPHINX
CONNECTION="sphinx://localhost:9312/test";
● SELECT * FROM t1 WHERE query='test it;mode=any';
Poids
Entier
Votre requete
Indexation
Requete
Group
Ubuntu paris 1610 -
Ouverture vers le NewSQL
● Moteur de stockage : CassandraSE
● Dispo MariaDB 10.0+
● Brique de Apache Cassandra
● Données non relationnelles (NoSQL)
● Assurer l'intégration des données SQL / NoSQL
● Mapping possible
● Manipulations :
static columns, dynamic columns, rowkey
● Installation dans My.cnf
[mysqld]
plugin-load=ha_cassandra.so
Ubuntu paris 1610 -
CassandraSE : Utilisation (1/2)
> create table t2 (rowkey varchar(36) primary key,
data1 varchar(60),
data2 varchar(60)
) engine=cassandra
keyspace='mariadbtest'
thrift_host='localhost'
column_family='cf1';
Clé
primaire
obligatoire
Colonnes
statiques
Sous ensemble
des colonnes CF
Ubuntu paris 1610 -
CassandraSE : Utilisation (2/2)
> insert into t1 values
('rowkey10', 'data1-value', 123456),
('rowkey11', 'data1-value2', 34543);
> select * from t1 where rowkey='rowkey11';
Ubuntu paris 1610 -
XA en Spider
● Dispo MariaDB 10.0+
●
Moteur de stockage fédérés comme
– Sharding / partitionnement *
– Transactions *
– Intégré dans le pool de connexion
– Haute disponibilité Cluster Shared­Nothing
 
●
Load balancing : 
– Accès par Spider cluster avec plusieurs serveurs 
MariaDB
Ubuntu paris 1610 -
NewSQL
Ubuntu paris 1610 -
✔ Pont entre les BDD relationnelles et non relationnelles
✔ Toutes les colonnes stockées dans un « blob »
✔ Possibilité de le manipuler
✔ Possibilité de créer des index Virtuels
Colonnes Dynamiques
Ubuntu paris 1610 -
create table newsql( 
id int 
    auto_increment    
    primary key,
nom varchar(40),
type enum 
     ('animal',
     'ordinateur'),
prix int,
nosql blob);
COLUMN_CREATE(
column_nr, 
value [as type],
[
column_nr, 
value [as type]
], 
...)
Exemple (colonne dynamique) 1/3
ID nom type Prix blob
Multi produits
Ubuntu paris 1610 -
Exemple (colonne dynamique) 2/3
>INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500, 
COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe'));
>INSERT into newsql values (NULL, 'elePHPant','animal',20, 
COLUMN_CREATE('taille', 'normal', 'description' , 'peluche'));
>UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue') 
WHERE id=2;
ID Nom type prix couleur type taille description
1 Atari Ordinateur 500 Noir Ste
2 elePHPant animal 20 bleu normal peluche
>SELECT nom, column_list (nosql) FROM newsql;
Multi produits
Ubuntu paris 1610 -
Exemple (colonne dynamique) 3/3
>SELECT nom, COLUMN_JSON(nosql) FROM newsql;
>SELECT id,type,nom,
COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql;
Multi produits
Ubuntu paris 1610 -
Utilisation / Installation
Ubuntu paris 1610 -
MariaDB Repositories
> sudo apt-get install software-properties-common
> sudo apt-key adv --recv-keys --keyserver
hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
> sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el]
http://fr.mirror.babylon.network/mariadb/repo/10.1/ubuntu
trusty main'
https://downloads.mariadb.org/mariadb/repositories/#mirror=babylon-fr&distro=Ubuntu&distro_release=trusty--ubuntu_trusty&version=10.1
Ubuntu paris 1610 -
✔ sudo apt-get install mariadb-server mariadb-client
✔ Vous retrouvez :
✔ /etc/mysql/my.cnf
✔ > mysql
✔ Au final
Linux
Ubuntu paris 1610 -
sécuriser
Ubuntu paris 1610 -
Lors de l'installation
> mysql_secure_installation
Enter current password for root (enter for none): ← Entrée
Set root password? [Y/n] ← y
New password: ← saisir nouveau Mot de passes
Re-enter new password: ← resaisir
Remove anonymous users? [Y/n] ← y
Disallow root login remotely? [Y/n] ← y
Reload privilege tables now? [Y/n] ← y
Ubuntu paris 1610 -
Les connexions 'SSL / TLS' sécurisés disponibles
● Connexions client / serveur → protocole TLS
– Les données peuvent être cryptées pendant le transfert à
l'aide du protocole TLS
● Variable système SSL / TLS
● Variable d'état SSL / TLS
● Réplication avec connexions sécurisées
– Maîtres / Esclaves avec des données cryptées
Ubuntu paris 1610 -
Connexion 'SSL / TLS'
● Par défaut
– Connexion non chiffré
● Si le serveur prend en charge les connexions sécurisées
→ OUI
● Pour activer TLS
– Démarrer le serveur avec l'option --ssl
> SHOW VARIABLES LIKE 'have_ssl';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_ssl | DISABLED |
+---------------+----------+
https://mariadb.com/kb/en/mariadb/secure-connections-overview/
Ubuntu paris 1610 -
● Cryptage de données
● Transfert TLS
● Exemple
– have_openssl
– have_ssl
● Interchangeable SSL
● SSL
n'est plus considéré comme sécurisé
● Exemple
– ssl_ca
– ssl_capath
– ...
Options 'SSL / TLS'
Système/Status de variables Attention
https://mariadb.com/kb/en/mariadb/ssltls-system-variables/
https://mariadb.com/kb/en/mariadb/ssltls-status-variables/
Ubuntu paris 1610 -
Réplication
https://mariadb.com/kb/en/mariadb/replication-with-secure-connections/
● Maître(s) / Esclave(s)
● Répliqués des données cryptées
● Activation des connexions sécurisées (obligatoire)
● Cluster
Attention
Si un des serveurs n'est pas configuré pour les connexions sécurisés
→ les connexions ne seront pas cryptées
Ubuntu paris 1610 -
Réplication : exemple (1/3)
● Création SSL dans chaque serveur
sudo mkdir -p /etc/mariadb/ssl
● Gestion des certificats
$ sudo openssl genrsa 4096 > ca-key.pem
$ sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem
● Créer un certificat de serveur sur serveur1
$ sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out
server-req.pem
$ sudo openssl rsa -in server-key.pem -out server-key.pem
$ sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-
key.pem -set_serial 01 -out server-cert.pem
Ubuntu paris 1610 -
Réplication : exemple (2/3)
● Vérification des certificats (serveur1)
sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
● Résultat
server-cert.pem: OK
client-cert.pem: OK
● Copier le certificat vers les autres serveurs
sudo scp /etc/mariadb/ssl/*.pem root@10.0.0.2:/etc/mariadb/ssl/
● Installation MariaDB
sudo apt-get install mariadb mariadb-server -y
Ubuntu paris 1610 -
Réplication : exemple (3/3)
● Configuration de my.cnf
– pour chaque serveur
# SSL
ssl-ca=/etc/mariadb/ssl/ca-cert.pem
ADD under [mysqld]:
# SSL
ssl-ca=/etc/mariadb/ssl/ca-cert.pem
ssl-cert=/etc/mariadb/ssl/server-cert.pem
ssl-key=/etc/mariadb/ssl/server-key.pem
CHANGE under [mysqld]:
server-id = 1
log-bin=mysql-bin
binlog_format=mixed
Pas de modifications (processus identique) pour :
La réplication / MariaDB Galera Cluster
Ubuntu paris 1610 -
Le chiffrement
Ubuntu paris 1610 -
Pourquoi chiffrer ?
● Avec MySQL / MariaDB / Percona
● Mariadb → cryptage au niveau des tables
– Innodb
– XtraDB (Percona)
$ INSERT INTO users (username, password)
VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));
$ SELECT AES_DECRYPT(password, 'key12346123')
FROM users
WHERE username = 'admin';
Ubuntu paris 1610 -
Chiffrement (1/2)
● Disponible pour 10.1+
● Contribution Google
● Chiffrer
– Pas de modification pour vos applications
– Pas de dégradation des performances globales
– Une meilleure pratique en matière de sécurité de
données
● Storage engine supporté
– XtraDB
– InnoDB
Ubuntu paris 1610 -
Chiffrement (2/2)
● Chiffrement : support de clefs (AES Algorithm)
table individuel → PAGE_ENCRYPTION=1
tablespace encryption → Crypte tout ainsi que les logs
● Plugin : file_key_management
– Plugin de cryptage
– Lit les clés de cryptage d'un fichier
– Options :
● File_key_management_filename
→ Où se trouve le fichier
● File_key_management_filekey
→ Clé facultative pour déchiffrer le fichier de clés
● File_key_management_encryption_algorithm
→ Algorithme de cryptage à utiliser.
https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/
Ubuntu paris 1610 -
Avantages
● Par rapport à d'autres BDD Open Source
– Chiffrement des données au repos
. Chiffrement au niveau des instances et des tables
. Avec support des clés tournantes (contribution Google)
– Validation des mots de passe
– Contrôle d'accès de base de profils (par défaut)
. Renforcé et optimisé
● Type de cryptage supporté
– Clefs de chiffrement identifier (32 bit)
– Advanced Encryption Standard (AES) 128 / 192 / 256 bit
– Exemple :
$ openssl enc -aes-256-cbc -md sha1 -k secret -in keys.txt -out keys.enc
Ubuntu paris 1610 -
config MariaDB : my.cnf
[mysqld]
plugin-load-add=file_key_management.so
file-key-management
file-key-management-filename = /home/mdb/keys.enc
innodb-encrypt-tables
innodb-encrypt-log
innodb-encryption-threads=4
aria-encrypt-tables=1 # PAGE row format
encrypt-tmp-disk-tables=1 # this is for Aria
Ubuntu paris 1610 -
Chiffrer une table
CREATE TABLE client (
client_id bigint not null primary key,
client_name varchar(80),
client_infosensible varchar(20)
)
ENGINE=InnoDB
page_encryption=1
page_encryption_key=1;
Clef 1
Chiffrement 1
Information très
sensible
Password...
● En mode fixe
Ubuntu paris 1610 -
Chiffrer : mode avancé
● Tablespace encrypton (Google)
● Choisir un algorithme de cryptage
● Spécifier ce qui doit être chiffrer
– Innodb-encrypt-tables
– Aria
– Aria-encrypt-tables
– Crypter-tmp-disk-tables
– Innodb-encrypt-log
● Prévoir les rotations (impératif)
– innodb-encryption-threads = 4
– innodb-encryption-rotate-key-age = 1800
Ubuntu paris 1610 -
Validation du mot de passe
● Les rappels du mot de passe
● MariaDB propose : Validation de mot de passe
– S'assurer que les mots de passe 'utilisateur'
répondent à certaines exigences de sécurité
– Plugin dédiée
– Contrôle par rapport à la configuration
● Fonctions : SET PASSWORD et GRAND
https://mariadb.com/kb/en/mariadb/password-validation/
Ubuntu paris 1610 -
Exemple (1/2)
SET PASSWORD = PASSWORD('plain-text password');
SET PASSWORD FOR `user`@`host` = PASSWORD('plain-text password');
SET PASSWORD = OLD_PASSWORD('plain-text password');
SET PASSWORD FOR `user`@`host` = OLD_PASSWORD('plain-text password');
CREATE USER `user`@`host` IDENTIFIED BY 'plain-text password';
GRANT privileges TO `user`@`host` IDENTIFIED BY 'plain-text password';
https://mariadb.com/kb/en/mariadb/password-validation/
SET PASSWORD = 'password hash';
SET PASSWORD FOR `user`@`host` = 'password hash';
CREATE USER `user`@`host` IDENTIFIED BY PASSWORD 'password hash';
CREATE USER `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash';
CREATE USER `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash';
GRANT privileges TO `user`@`host` IDENTIFIED BY PASSWORD 'password hash';
GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password
hash';
GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash';
● Avant
● Avec clé de hash
Ubuntu paris 1610 -
Exemple (2/2)
● Vérification
● Erreur de validation
$ UPDATE mysql.user
SET password='password hash'
WHERE user='user' AND host='host';
$ FLUSH PRIVILEGES;
SUCCES
> grant select on *.* to foobar identified by 'toto';
ERROR HY000: Your password does not satisfy the current policy requirements
> show warnings;
Ubuntu paris 1610 -
En résumé
Ubuntu paris 1610 -
Merci
Questions
Christophe Villeneuve
@hellosct1
Supports :
- MariaDB

Contenu connexe

PPTX
Apache kafka 확장과 응용
PDF
Kubernetes Basics
PPTX
When it Absolutely, Positively, Has to be There: Reliability Guarantees in Ka...
PPTX
Envoy and Kafka
PDF
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
PDF
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
PDF
MySQL Cluster performance best practices
PDF
Openstack 101
Apache kafka 확장과 응용
Kubernetes Basics
When it Absolutely, Positively, Has to be There: Reliability Guarantees in Ka...
Envoy and Kafka
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
MySQL Cluster performance best practices
Openstack 101

Tendances (20)

PDF
Understanding LLM LLMOps & MLOps_open version.pdf
PPTX
Modern Enterprise integration Strategies
PDF
Introducing Kubeflow (w. Special Guests Tensorflow and Apache Spark)
PPTX
Ansible Automation - Enterprise Use Cases | Juncheng Anthony Lin
PPTX
Redis Streams
PDF
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
PDF
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
PDF
NATS Streaming - an alternative to Apache Kafka?
PDF
Introduction to kubernetes
PPTX
Yup... WebRTC Still Sucks
PPTX
OPA APIs and Use Case Survey
PDF
Gcp intro-20160721
PDF
Apache Kafka Architecture & Fundamentals Explained
PDF
Scaling WebRTC applications with Janus
PDF
Why Splunk Chose Pulsar_Karthik Ramasamy
PDF
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
PPTX
Apache Kafka at LinkedIn
PPTX
AWS reInvent 2023 re:Cap services Slide deck
PDF
Hazelcast Distributed Lock
Understanding LLM LLMOps & MLOps_open version.pdf
Modern Enterprise integration Strategies
Introducing Kubeflow (w. Special Guests Tensorflow and Apache Spark)
Ansible Automation - Enterprise Use Cases | Juncheng Anthony Lin
Redis Streams
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
NATS Streaming - an alternative to Apache Kafka?
Introduction to kubernetes
Yup... WebRTC Still Sucks
OPA APIs and Use Case Survey
Gcp intro-20160721
Apache Kafka Architecture & Fundamentals Explained
Scaling WebRTC applications with Janus
Why Splunk Chose Pulsar_Karthik Ramasamy
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
Apache Kafka at LinkedIn
AWS reInvent 2023 re:Cap services Slide deck
Hazelcast Distributed Lock
Publicité

En vedette (20)

PDF
Les tests de securite devops
PDF
Contrôler votre matériel par les apps - JDLL
PDF
RGAA3 et votre projet drupal - drupalfr
PDF
MariaDB à l'assaut des developpeurs
PDF
Le service workers
PDF
Mariadb pour les developpeurs - OSDC
PDF
Les fonctions MariaDB - LeMug.fr
PDF
La sécurité à tous les niveaux - JDLL
PDF
Comprendre la securite web
PPTX
Les réseaux Informatiques
PPT
A la découverte de l'univers des échecs
PPT
Cours de tactique aux echecs
PDF
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
PDF
Firefox OS - Api battery status
PPT
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
PDF
Media center sous linux
PPT
Forum aaf preuve sécurité 22 mars 2013 (2)
PDF
Simulations et applications réparties sous LINUX
DOC
Virtualisation
PPT
Mysql Apche PHP sous linux
Les tests de securite devops
Contrôler votre matériel par les apps - JDLL
RGAA3 et votre projet drupal - drupalfr
MariaDB à l'assaut des developpeurs
Le service workers
Mariadb pour les developpeurs - OSDC
Les fonctions MariaDB - LeMug.fr
La sécurité à tous les niveaux - JDLL
Comprendre la securite web
Les réseaux Informatiques
A la découverte de l'univers des échecs
Cours de tactique aux echecs
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Firefox OS - Api battery status
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
Media center sous linux
Forum aaf preuve sécurité 22 mars 2013 (2)
Simulations et applications réparties sous LINUX
Virtualisation
Mysql Apche PHP sous linux
Publicité

Similaire à Chiffrer et sécuriser MariaDB (20)

PDF
Le nouveau AMP : apache mariadb php
PDF
PHP et MariaDB dans le Cloud
PDF
Sécuriser & chiffrer Mariadb - JDLL 2017
PDF
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
KEY
1 2-3-grails
DOCX
Gestion et surveillance du reseau syslogng
PPTX
PDF
Infrastructure as code drupal
PPTX
3 Microsoft Advanced Threat Analytics - Genève
PDF
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
ODP
LPIC1 11 01 sécurité réseaux
PDF
Docker en Production (Docker Paris)
PDF
MariaDB une base de donnees NewSQL
PPTX
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
PPTX
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
ODP
09 01 configuration du serveur samba
PDF
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
PDF
Install arch ultrabook full luks ssd
DOC
Nagios twil
Le nouveau AMP : apache mariadb php
PHP et MariaDB dans le Cloud
Sécuriser & chiffrer Mariadb - JDLL 2017
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
1 2-3-grails
Gestion et surveillance du reseau syslogng
Infrastructure as code drupal
3 Microsoft Advanced Threat Analytics - Genève
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
LPIC1 11 01 sécurité réseaux
Docker en Production (Docker Paris)
MariaDB une base de donnees NewSQL
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
09 01 configuration du serveur samba
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
Install arch ultrabook full luks ssd
Nagios twil

Plus de Christophe Villeneuve (20)

PDF
La boîte à outils de développements dans Firefox
PDF
pister les pisteurs
PDF
controler vos donnees éthiques dans le web
PDF
Mariadb une base de données NewSQL
PDF
Open Source et contribution : Une association gagnante
PDF
Pentest bus pirate
PDF
Peur de la migration vers l’open source ?
PDF
La sécurité applicative par le design
PDF
Foxfooding semaine 3
PDF
PDF
Accessibilite web wcag rgaa
PDF
Mozilla french speaking community activites
PDF
Monitoring dynamique : Grafana et Microsoft
PDF
Etes vous-pret pour php8 ?
PDF
Le futur de l'authentification webAuthn
PDF
Send large files with addons
PDF
Tests d'accessibilite par la pratique
PDF
Donnez la voix aux machines
PDF
La réalité mélangée dans vos applications
PDF
la boite à outils de développements dans firefox devtools
La boîte à outils de développements dans Firefox
pister les pisteurs
controler vos donnees éthiques dans le web
Mariadb une base de données NewSQL
Open Source et contribution : Une association gagnante
Pentest bus pirate
Peur de la migration vers l’open source ?
La sécurité applicative par le design
Foxfooding semaine 3
Accessibilite web wcag rgaa
Mozilla french speaking community activites
Monitoring dynamique : Grafana et Microsoft
Etes vous-pret pour php8 ?
Le futur de l'authentification webAuthn
Send large files with addons
Tests d'accessibilite par la pratique
Donnez la voix aux machines
La réalité mélangée dans vos applications
la boite à outils de développements dans firefox devtools

Chiffrer et sécuriser MariaDB

  • 1. Ubuntu paris 1610 - Chiffrer et sécuriser MariaDB Christophe Villeneuve @hellosct1 Le 13 novembre 2016
  • 2. Qui ??? Christophe Villeneuve mozilla reps - firefox os - B2GOS - ausy - afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – Libre@toi – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – elephpant - owasp -security
  • 3. Ubuntu paris 1610 - Aujourd'hui ● Les possibilités de MariaDB ● La sécurité ● Le chiffrement
  • 5. Ubuntu paris 1610 - ✔ Fondé par ✔ Monty Widenius ✔ David Axmark ✔ 1983 – 1ère idée ✔ Fondé en 1995 ✔ 2007 Préparation pour Nasdaq ✔ 2008 Rachat par Sun ✔ 2009 Sun racheté par Oracle ✔ Promesse de Oracle sur 5 ans (fin 2014) L'origine Dates importantes Histoire de début
  • 6. Ubuntu paris 1610 - GO MariaDB
  • 7. Ubuntu paris 1610 - ✔ Communauté d'amis ✔ 100 % Open source et compatible MySQL ✔ Plateforme d'innovation ✔ Des commiteurs ✔ Dec 2008 Création de Monty  Program   → Monty Widenius ✔ MariaDB 5.1 (Fev 2010) ✔ MariaDB 5.2 (Nov 2010) ✔ MariaDB 5.3 (Avril 2012) ✔ MariaDB 5.5 (Avril 2012) ✔ MariaDB 10.0 (Mars 2013) ✔ 2013 Fondation ✔ MariaDB 10.1 (fin 2013)Galera people Compression Multimaster Replication MariaDB : un jeune projet... MATURE
  • 8. Ubuntu paris 1610 - ✔ PHP (driver natif) → BSD licence ✔ Python ✔ Perl ✔ Ruby ✔ .NET avec MyODBC ✔ JDBC (basé sur drizzle driver) ✔ C ✔ Oracle connector (licence GPL) Tous sont LGPL → Aucune licence commerciale Différents connecteurs avec MariaDB
  • 9. Ubuntu paris 1610 - Moteur de stockage storage engine
  • 10. Ubuntu paris 1610 - Insertion de données : TokuDB ● Moteur de stockage ● Natif dans MariaDB 5.5 & MariaDB 10.0+ ● (R)Tokutek & MariaDB ● Technique utilise l'arbre fractal – Amélioration indexation – Amélioration des requêtes ● Schéma de vitesse ● Compression ● Réplication ● Souple
  • 11. Ubuntu paris 1610 - TokuDB : exemple
  • 12. Ubuntu paris 1610 - Manipuler les données : Connect ● Dispo MariaDB 10.0+ ● ETL : Extract, transform et Load ● Lecture / Ecriture / MAJ – TXT, DBF, INI, XML – MS Access, MS Excel, TBL (similaire à MERGE) – ODBC, MySQL,SQLite, Oracle, DB2, WMI... ● Locale ou distant ● Custom possible ● Accès en parallèle sur multitables ● Installation dans My.cnf [mysqld] plugin-load=ha_connect.so
  • 13. Ubuntu paris 1610 - Connect : exemple CSV ● Fichier – first,last,birthday – "Christophe","Villeneuve","Jan 1" – "PHP","ODBC","Nov 22" > CREATE TABLE users_csv ( first varchar(32) NOT NULL, last varchar(32) NOT NULL, birthday varchar(50) NOT NULL ) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv' HEADER=1 SEP_CHAR=',' QUOTED=1; > SELECT * FROM users_csv; | first | last | birthday | +---------------+---------------+-------------+ | Christophe | Villeneuve | Jan 1 | | PHP | ODBC | Nov 22 | +---------------+---------------+-------------+
  • 14. Ubuntu paris 1610 - Connect : exemple ODBC > create Table table2 ENGINE=CONNECT TABLE_TYPE=ODBC SRCDEF='select key, sum(l_quantity) qt from dbt3.table1 group by key' CONNECTION='DSN=oracle;UID=login;PWD=password'; > MariaDB [dbt3]> select sum(qt) from (select qt from table2) as result; → 31444 Valeur de sum(qt)
  • 15. Ubuntu paris 1610 - Recherche SphinxSE ● Dispo MariaDB 5.2+ ● Recherche Full-text ● Ne stocke pas les données ● Client haut pour permettre à MariaDB de parler à Sphinx searchd ● Installation dans My.cnf [mysqld] plugin-load= 'ha_sphinx.so';
  • 16. Ubuntu paris 1610 - Exemple SphinxSE ● CREATE TABLE t1 ( id INTEGER UNSIGNED NOT NULL, weight INTEGER NOT NULL, query VARCHAR(3072) NOT NULL, group_id INTEGER, INDEX(query) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test"; ● SELECT * FROM t1 WHERE query='test it;mode=any'; Poids Entier Votre requete Indexation Requete Group
  • 17. Ubuntu paris 1610 - Ouverture vers le NewSQL ● Moteur de stockage : CassandraSE ● Dispo MariaDB 10.0+ ● Brique de Apache Cassandra ● Données non relationnelles (NoSQL) ● Assurer l'intégration des données SQL / NoSQL ● Mapping possible ● Manipulations : static columns, dynamic columns, rowkey ● Installation dans My.cnf [mysqld] plugin-load=ha_cassandra.so
  • 18. Ubuntu paris 1610 - CassandraSE : Utilisation (1/2) > create table t2 (rowkey varchar(36) primary key, data1 varchar(60), data2 varchar(60) ) engine=cassandra keyspace='mariadbtest' thrift_host='localhost' column_family='cf1'; Clé primaire obligatoire Colonnes statiques Sous ensemble des colonnes CF
  • 19. Ubuntu paris 1610 - CassandraSE : Utilisation (2/2) > insert into t1 values ('rowkey10', 'data1-value', 123456), ('rowkey11', 'data1-value2', 34543); > select * from t1 where rowkey='rowkey11';
  • 20. Ubuntu paris 1610 - XA en Spider ● Dispo MariaDB 10.0+ ● Moteur de stockage fédérés comme – Sharding / partitionnement * – Transactions * – Intégré dans le pool de connexion – Haute disponibilité Cluster Shared­Nothing   ● Load balancing :  – Accès par Spider cluster avec plusieurs serveurs  MariaDB
  • 21. Ubuntu paris 1610 - NewSQL
  • 22. Ubuntu paris 1610 - ✔ Pont entre les BDD relationnelles et non relationnelles ✔ Toutes les colonnes stockées dans un « blob » ✔ Possibilité de le manipuler ✔ Possibilité de créer des index Virtuels Colonnes Dynamiques
  • 23. Ubuntu paris 1610 - create table newsql(  id int      auto_increment         primary key, nom varchar(40), type enum       ('animal',      'ordinateur'), prix int, nosql blob); COLUMN_CREATE( column_nr,  value [as type], [ column_nr,  value [as type] ],  ...) Exemple (colonne dynamique) 1/3 ID nom type Prix blob Multi produits
  • 24. Ubuntu paris 1610 - Exemple (colonne dynamique) 2/3 >INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500,  COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe')); >INSERT into newsql values (NULL, 'elePHPant','animal',20,  COLUMN_CREATE('taille', 'normal', 'description' , 'peluche')); >UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue')  WHERE id=2; ID Nom type prix couleur type taille description 1 Atari Ordinateur 500 Noir Ste 2 elePHPant animal 20 bleu normal peluche >SELECT nom, column_list (nosql) FROM newsql; Multi produits
  • 25. Ubuntu paris 1610 - Exemple (colonne dynamique) 3/3 >SELECT nom, COLUMN_JSON(nosql) FROM newsql; >SELECT id,type,nom, COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql; Multi produits
  • 26. Ubuntu paris 1610 - Utilisation / Installation
  • 27. Ubuntu paris 1610 - MariaDB Repositories > sudo apt-get install software-properties-common > sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db > sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://fr.mirror.babylon.network/mariadb/repo/10.1/ubuntu trusty main' https://downloads.mariadb.org/mariadb/repositories/#mirror=babylon-fr&distro=Ubuntu&distro_release=trusty--ubuntu_trusty&version=10.1
  • 28. Ubuntu paris 1610 - ✔ sudo apt-get install mariadb-server mariadb-client ✔ Vous retrouvez : ✔ /etc/mysql/my.cnf ✔ > mysql ✔ Au final Linux
  • 29. Ubuntu paris 1610 - sécuriser
  • 30. Ubuntu paris 1610 - Lors de l'installation > mysql_secure_installation Enter current password for root (enter for none): ← Entrée Set root password? [Y/n] ← y New password: ← saisir nouveau Mot de passes Re-enter new password: ← resaisir Remove anonymous users? [Y/n] ← y Disallow root login remotely? [Y/n] ← y Reload privilege tables now? [Y/n] ← y
  • 31. Ubuntu paris 1610 - Les connexions 'SSL / TLS' sécurisés disponibles ● Connexions client / serveur → protocole TLS – Les données peuvent être cryptées pendant le transfert à l'aide du protocole TLS ● Variable système SSL / TLS ● Variable d'état SSL / TLS ● Réplication avec connexions sécurisées – Maîtres / Esclaves avec des données cryptées
  • 32. Ubuntu paris 1610 - Connexion 'SSL / TLS' ● Par défaut – Connexion non chiffré ● Si le serveur prend en charge les connexions sécurisées → OUI ● Pour activer TLS – Démarrer le serveur avec l'option --ssl > SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+ https://mariadb.com/kb/en/mariadb/secure-connections-overview/
  • 33. Ubuntu paris 1610 - ● Cryptage de données ● Transfert TLS ● Exemple – have_openssl – have_ssl ● Interchangeable SSL ● SSL n'est plus considéré comme sécurisé ● Exemple – ssl_ca – ssl_capath – ... Options 'SSL / TLS' Système/Status de variables Attention https://mariadb.com/kb/en/mariadb/ssltls-system-variables/ https://mariadb.com/kb/en/mariadb/ssltls-status-variables/
  • 34. Ubuntu paris 1610 - Réplication https://mariadb.com/kb/en/mariadb/replication-with-secure-connections/ ● Maître(s) / Esclave(s) ● Répliqués des données cryptées ● Activation des connexions sécurisées (obligatoire) ● Cluster Attention Si un des serveurs n'est pas configuré pour les connexions sécurisés → les connexions ne seront pas cryptées
  • 35. Ubuntu paris 1610 - Réplication : exemple (1/3) ● Création SSL dans chaque serveur sudo mkdir -p /etc/mariadb/ssl ● Gestion des certificats $ sudo openssl genrsa 4096 > ca-key.pem $ sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem ● Créer un certificat de serveur sur serveur1 $ sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out server-req.pem $ sudo openssl rsa -in server-key.pem -out server-key.pem $ sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca- key.pem -set_serial 01 -out server-cert.pem
  • 36. Ubuntu paris 1610 - Réplication : exemple (2/3) ● Vérification des certificats (serveur1) sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem ● Résultat server-cert.pem: OK client-cert.pem: OK ● Copier le certificat vers les autres serveurs sudo scp /etc/mariadb/ssl/*.pem [email protected]:/etc/mariadb/ssl/ ● Installation MariaDB sudo apt-get install mariadb mariadb-server -y
  • 37. Ubuntu paris 1610 - Réplication : exemple (3/3) ● Configuration de my.cnf – pour chaque serveur # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ADD under [mysqld]: # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ssl-cert=/etc/mariadb/ssl/server-cert.pem ssl-key=/etc/mariadb/ssl/server-key.pem CHANGE under [mysqld]: server-id = 1 log-bin=mysql-bin binlog_format=mixed Pas de modifications (processus identique) pour : La réplication / MariaDB Galera Cluster
  • 38. Ubuntu paris 1610 - Le chiffrement
  • 39. Ubuntu paris 1610 - Pourquoi chiffrer ? ● Avec MySQL / MariaDB / Percona ● Mariadb → cryptage au niveau des tables – Innodb – XtraDB (Percona) $ INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123')); $ SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'admin';
  • 40. Ubuntu paris 1610 - Chiffrement (1/2) ● Disponible pour 10.1+ ● Contribution Google ● Chiffrer – Pas de modification pour vos applications – Pas de dégradation des performances globales – Une meilleure pratique en matière de sécurité de données ● Storage engine supporté – XtraDB – InnoDB
  • 41. Ubuntu paris 1610 - Chiffrement (2/2) ● Chiffrement : support de clefs (AES Algorithm) table individuel → PAGE_ENCRYPTION=1 tablespace encryption → Crypte tout ainsi que les logs ● Plugin : file_key_management – Plugin de cryptage – Lit les clés de cryptage d'un fichier – Options : ● File_key_management_filename → Où se trouve le fichier ● File_key_management_filekey → Clé facultative pour déchiffrer le fichier de clés ● File_key_management_encryption_algorithm → Algorithme de cryptage à utiliser. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/
  • 42. Ubuntu paris 1610 - Avantages ● Par rapport à d'autres BDD Open Source – Chiffrement des données au repos . Chiffrement au niveau des instances et des tables . Avec support des clés tournantes (contribution Google) – Validation des mots de passe – Contrôle d'accès de base de profils (par défaut) . Renforcé et optimisé ● Type de cryptage supporté – Clefs de chiffrement identifier (32 bit) – Advanced Encryption Standard (AES) 128 / 192 / 256 bit – Exemple : $ openssl enc -aes-256-cbc -md sha1 -k secret -in keys.txt -out keys.enc
  • 43. Ubuntu paris 1610 - config MariaDB : my.cnf [mysqld] plugin-load-add=file_key_management.so file-key-management file-key-management-filename = /home/mdb/keys.enc innodb-encrypt-tables innodb-encrypt-log innodb-encryption-threads=4 aria-encrypt-tables=1 # PAGE row format encrypt-tmp-disk-tables=1 # this is for Aria
  • 44. Ubuntu paris 1610 - Chiffrer une table CREATE TABLE client ( client_id bigint not null primary key, client_name varchar(80), client_infosensible varchar(20) ) ENGINE=InnoDB page_encryption=1 page_encryption_key=1; Clef 1 Chiffrement 1 Information très sensible Password... ● En mode fixe
  • 45. Ubuntu paris 1610 - Chiffrer : mode avancé ● Tablespace encrypton (Google) ● Choisir un algorithme de cryptage ● Spécifier ce qui doit être chiffrer – Innodb-encrypt-tables – Aria – Aria-encrypt-tables – Crypter-tmp-disk-tables – Innodb-encrypt-log ● Prévoir les rotations (impératif) – innodb-encryption-threads = 4 – innodb-encryption-rotate-key-age = 1800
  • 46. Ubuntu paris 1610 - Validation du mot de passe ● Les rappels du mot de passe ● MariaDB propose : Validation de mot de passe – S'assurer que les mots de passe 'utilisateur' répondent à certaines exigences de sécurité – Plugin dédiée – Contrôle par rapport à la configuration ● Fonctions : SET PASSWORD et GRAND https://mariadb.com/kb/en/mariadb/password-validation/
  • 47. Ubuntu paris 1610 - Exemple (1/2) SET PASSWORD = PASSWORD('plain-text password'); SET PASSWORD FOR `user`@`host` = PASSWORD('plain-text password'); SET PASSWORD = OLD_PASSWORD('plain-text password'); SET PASSWORD FOR `user`@`host` = OLD_PASSWORD('plain-text password'); CREATE USER `user`@`host` IDENTIFIED BY 'plain-text password'; GRANT privileges TO `user`@`host` IDENTIFIED BY 'plain-text password'; https://mariadb.com/kb/en/mariadb/password-validation/ SET PASSWORD = 'password hash'; SET PASSWORD FOR `user`@`host` = 'password hash'; CREATE USER `user`@`host` IDENTIFIED BY PASSWORD 'password hash'; CREATE USER `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash'; CREATE USER `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED BY PASSWORD 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash'; ● Avant ● Avec clé de hash
  • 48. Ubuntu paris 1610 - Exemple (2/2) ● Vérification ● Erreur de validation $ UPDATE mysql.user SET password='password hash' WHERE user='user' AND host='host'; $ FLUSH PRIVILEGES; SUCCES > grant select on *.* to foobar identified by 'toto'; ERROR HY000: Your password does not satisfy the current policy requirements > show warnings;
  • 49. Ubuntu paris 1610 - En résumé
  • 50. Ubuntu paris 1610 - Merci Questions Christophe Villeneuve @hellosct1 Supports : - MariaDB