Comprendre Transparent Data Encryption (TDE)

Transcription

Comprendre Transparent Data Encryption (TDE)
Comprendre Transparent Data Encryption (TDE)
Mouhamadou Diaw, Senior Oracle Consultant, dbi services ltd.
Introduction
Les fichiers d’une base de données étant stockés localement sur le serveur tout utilisateur qui a accès
physiquement à ces fichiers peut constituer un danger potentiel si les données sont sensibles.
Bien que les fichiers soient binaires, il reste toujours possible de tirer quelques informations, ne seraitce qu’avec la commande basique strings (Listing 1)
[oracle@stand2 ~]$ strings users01_me.dbf
1umS
Rififi
37429155622
1umS
L'avventura
37429156025
1umS
Playtime
37429155820
1umS
…
Listing 1
Une solution entre autre serait tout simplement de crypter les données dans les fichiers physiques.
Cette approche peut se faire de 3 façons
•
Par l’application : utilisation par exemple de DBMS_CRYPTO
DBMS_CRYPTO est un package PL/SQL qui permet de crypter et de décrypter sélectivement des
données dans la base. Par exemple ce package peut nous permettre de crypter des numéros de
comptes bancaire ou des numéros de carte avant de les stocker sur le serveur. Evidemment ici le
développeur est responsable du schéma de cryptage.
Figure 1
•
Par le stockage : Le cryptage est fait en utilisant les fonctionnalités du stockage.
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Figure 2
•
Par la base de données (TDE) : Utilisation des fonctionnalités Oracle Advanced Security
C’est la méthode la plus facile à mettre en œuvre, vu que tout le travail est fait par oracle et tout est
transparent pour l’utilisateur et les applications, d’où le nom TDE.
Figure 3
Dans ce qui suit, nous présenterons quelques exemples de cette dernière méthode de cryptage par
oracle.
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Transparent Data Encryption : Niveau colonnes
TDE a été introduit à partir de la version 10g et a beaucoup été amélioré dans la version 11g.
Comme son nom l’indique, TDE permet de faire une encryption de manière transparente. C’est-à-dire
qu’une fois mise en place, oracle s’occupe de tout. Par contre il faut la licence Oracle Advanced
Security
Le principe est le suivant, une clé principale (Master Key) est créée dans le wallet. Et au niveau de la
base de données, une clé sera créée pour chaque colonne ou tablespace que l’on voudra crypter. Ces
clés seront stockées dans le dictionnaire de données et seront protégées par la clé principale.
Figure 4
TDE sur les colonnes (seule option disponible sur la 10g) se fait assez facilement.
Création du wallet pour y stocker la clé principale
Il faut d’abord créer un répertoire qui servira à stocker la clé principale. On a la possibilité de partager
les wallets déjà existants pour les autres composantes. Mais il est fortement recommandé d’utiliser un
wallet spécifique pour TDE. Pour cela il suffit juste d’ajouter dans le fichier sqlnet.ora le paramètre
ENCRYPTION_WALLET_LOCATION pointant vers le répertoire dédié (Listing 2)
[oracle@stand2 admin]$ cat sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/staff/wallet_tde)))
Listing 2
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Création de la clé principale dans le wallet
Une fois le sqlnet.ora mis à jour, il faut créer la clé principale qui va être stockée dans le wallet
(Listing 3)
SQL> alter system set encryption key identified by "hollyw00d";
System altered.
SQL>
Listing 3
Nous pouvons vérifier que la clé principale est créée dans le répertoire wallet_tde Il faut juste noter
l’extension .pl2 qui vient tout simplement du standard PKCS#12 utilisé pour le stockage des clés
(Listing 4).
[oracle@stand2 admin]$ ls -l /u01/app/oracle/staff/wallet_tde/*
-rw-r--r--. 1 oracle oinstall 2845 Apr 29 09:38
/u01/app/oracle/staff/wallet_tde/ewallet.p12
Listing 4
Crypter les colonnes concernées
La syntaxe ALTER TABLE est utilisée pour le cryptage des colonnes. SALT qui est la valeur par défaut
ajoute des valeurs aléatoires avant d’encrypter les données, ce qui augmente l’efficacité du cryptage
(Listing 5).
SQL> alter table BONUS
modify (ENAME encrypt no salt);
Table altered.
SQL> alter table BONUS
modify (SAL encrypt salt);
Table altered.
Listing 5
Chaque colonne cryptée possède une clé de cryptage qui est stockée dans le dictionnaire de données
et cette clé de colonne est à son tour protégée par la clé principale dans le wallet (Figure 4).
On peut vérifier l’encryption en faisant un simple DESC de la table (Listing 6)
SQL> desc BONUS
Name
Null?
----------------------------------------- --------ENAME
JOB
SAL
COMM
Listing 6
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Type
-------------------------VARCHAR2(10) ENCRYPT
VARCHAR2(9)
NUMBER ENCRYPT
NUMBER
Pour plus d’informations sur les colonnes encryptées, on peut interroger la table
USER_ENCRYPTED_COLUMNS.
Le cryptage des colonnes peut aussi se faire lors de la création de la table. Par défaut AES192 est
utilisé, mais d’autres algorithmes sont disponibles.
La question qu’on se pose souvent est la suivante : Est-ce qu’il y’a un coût si on utilise TDE ? La
réponse est clairement oui. Oracle décrypte les données quand on fait un SELECT et encrypte les
données quand on fait un UPDATE/INSERT, ce qui aura pour effet d’allonger la durée des traitements.
D’une manière générale il faut compter en moyenne 5% pour chaque colonne concernée.
Une autre problématique est aussi le stockage, eh oui une colonne encryptée occupera plus d’espace
qu’une colonne non encryptée. Par contre la seule façon de voir cette problématique d’espace utilisée
est d’aller directement sur le disque physiquement. TDE maintient la transparence au niveau de la base
de données de telle sorte que l’utilisation des fonctions telle VSIZE ne retournera aucune différence
comme le montre petite démonstration (Listing 7) et (Listing 8))
SQL> alter table EMP
modify (SAL encrypt
salt);
Table altered.
SQL>
select vsize(SAL) from emp where empno=7902;
VSIZE(SAL)
---------2
Listing 7
SQL> alter table EMP
modify (SAL decrypt
);
Table altered.
SQL>
select vsize(SAL) from emp where empno=7902;
VSIZE(SAL)
---------2
Listing 8
L’utilisation de TDE au niveau des colonnes présente quelques limitations:
•
•
•
On ne peut pas l’utiliser sur les clés étrangères
On ne peut pas utiliser l’option SALT avec les colonnes indexées
Seuls les index B-tree sont supportés
Si on est dans un de ces cas, il faut passer à l’option TDE au niveau tablespace.
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Transparent Data Encryption : Niveau tablespaces
Cette fonctionnalité existe seulement depuis la version 11g. Les étapes sont les suivantes.
Création de la clé principale
Comme dans le cas de l’encryption des colonnes, il faut d’abord créer la clé principale. (Listing 9)
SQL> alter system set encryption key identified by "hollyw00d";
System altered.
SQL>
Listing 9
Encryption du tablespace
L’encryption d’un tablespace se lors de sa création en spécifiant le mot clé encryption (Listing 10)
SQL> create tablespace cryptta datafile '/u01/oradata/SOUGSEC/cryptta01.dbf'
size 10M encryption USING 'AES256' default storage(ENCRYPT);
Tablespace created.
Listing 10
Créons maintenant une table sur ce tablespace (Listing 11)
SQL> SQL> create table scott.salgradecrypt tablespace cryptta
from scott.salgrade ;
as select *
Table created.
Listing 11
On peut vérifier par strings que le fichier cryptta01.dbf est crypté sur le disque (Listing 12)
[oracle@stand2 SOUGSEC]$ strings cryptta01.dbf
}|{z
SOUGSEC
vLD6
CRYPT_TA
vLD6
18l]
"jND
tops
6Z;:
m;je
FJx>g
Listing 12
Redémarrons notre base et faisons maintenant un SELECT sur la table cryptée (Listing 13)
SQL> conn scott/tiger
Connected.
SQL> select * from scott.salgradecrypt;
select * from scott.salgradecrypt
*
ERROR at line 1:
ORA-28365: wallet is not open
Listing 13
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
On voit que le wallet doit être ouvert avant toute opération sur les données cryptées (Listing 14) et
(Listing 15)
SQL> alter system set encryption wallet open identified by "hollyw00d";
System altered.
Listing 14
SQL> conn scott/tiger
Connected.
SQL> select * from salgradecrypt;
GRADE
LOSAL
HISAL
---------- ---------- ---------1
700
1200
2
1201
1400
3
1401
2000
4
2001
3000
5
3001
9999
Listing 15
Gestion des clés principales
Dans ce qui précède, nous retiendrons que pour accéder aux données cryptées, le wallet doit être
ouvert. Il est possible de créer un auto login wallet avec l’utilisation des PKI. Il suffit de générer un
certificat et d’utiliser ce dernier dans la création de la clé principale (Listing 16)
SQL> alter system set encryption key <certificate id here> identified by
"hollyw00d";
Listing 16
Il faudra à chaque moment être sûr que l’on a une sauvegarde de la clé principale.
Dans certains cas, une ségrégation des tâches peut être mise en place en attribuant la gestion de la clé
principale à une autre personne différente du DBA.
Si on veut changer de mot de passe du wallet, il faudra faire comme suit
 Décrypter toutes les données cryptées
 Fermer le wallet
 Sauvegarder le wallet
 Régénérer la clé principale
Une règle d’or est de toujours garder les anciennes clés, on peut avoir besoin de restaurer par exemple
un backup RMAN encrypté avec l’ancienne clé.
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)
Conclusion
Dans cet article nous avons voulu présenter les possibilités qui s’offrent à nous pour protéger nos
données au niveau du serveur. Nous avons ainsi vu qu’oracle offrait des possibilités avec TDE. Il faut
juste noter que l’option Oracle Advanced Security est requise.
Références:
 How to secure Oracle 10g and 11g by Ron B Natan CRC Press
https://www.crcpress.com/HOWTO-Secure-and-Audit-Oracle-10g-and11g/BenNatan/9781420084122
 Oracle official documentation
 Oracle-base.com
Contact :
Mouhamadou Diaw
Senior Oracle Consultant
[email protected]
Mouhamadou Diaw, dbi services
Comprendre Transparent Data Encryption (TDE)