Problématique :
Dans la plupart des cas, les DBAs négligent de sécuriser le flux d'information qui circule entre les base de données Oracle et les postes client ou les serveurs d'applications. Ce flux qui transite ainsi en clair via le réseau peux être intercepté et adieu !!! la confidentialité.
Solution :
Oracle Advanced Security inclus la possibilité de crypter le trafic entre les base de données et les clients.
Le scénario est le suivant :
Nous allons installer Oracle database 11gR2 et créer une base de données.
Nous utiliserons un sniffer de réseau tel que TCPDUMP (sur le serveur de base de données) pour écouter le trafic réseau.
Par la suite nous allons lancer des requêtes vers notre base de données et voir les données non cryptées qui transitent via le réseau; ensuite nous allons crypter nos données et refaire les mêmes requêtes.
Le scénario est le suivant :
Nous allons installer Oracle database 11gR2 et créer une base de données.
Nous utiliserons un sniffer de réseau tel que TCPDUMP (sur le serveur de base de données) pour écouter le trafic réseau.
Par la suite nous allons lancer des requêtes vers notre base de données et voir les données non cryptées qui transitent via le réseau; ensuite nous allons crypter nos données et refaire les mêmes requêtes.
Test effectué dans les environnements suivant :
- Environnement virtuel VMWare Workstation
- OS : RHEL 5
- DB : Oracle 11gR2
1. Installer Oracle 11gR2 et créer une base de données que vous pourriez appeler orcl; optez pour les ''schémas exemple'' lors de la création de la base.
2. Se connecter en tant que root et vérifier que le package tcpdump est bien installer sur notre système dans le cas contraire l'installer. Ne fermer pas ce terminal, il nous servira dans la suite.
3. Ouvrez un autre terminal en tant user oracle et démarrer tous les services services et connectez vous à votre base de données.
Le listener
La base de données
4. Connectez-vous à votre base de données puis créez une table et y insérer des données
NB:
Ne pas oublier de vous connecter en précisant le nom du service pour que les données transitent via le réseau: sqlplus hr@orcl
Puis y insérer des données, ne fermer pas le terminal
Test effectué dans les environnements suivant :
- Environnement virtuel VMWare Workstation
- Environnement virtuel VMWare Workstation
- OS : RHEL 5
- DB : Oracle 11gR2
1. Installer Oracle 11gR2 et créer une base de données que vous pourriez appeler orcl; optez pour les ''schémas exemple'' lors de la création de la base.
2. Se connecter en tant que root et vérifier que le package tcpdump est bien installer sur notre système dans le cas contraire l'installer. Ne fermer pas ce terminal, il nous servira dans la suite.
3. Ouvrez un autre terminal en tant user oracle et démarrer tous les services services et connectez vous à votre base de données.
Le listener
La base de données
4. Connectez-vous à votre base de données puis créez une table et y insérer des données
NB:
Ne pas oublier de vous connecter en précisant le nom du service pour que les données transitent via le réseau: sqlplus hr@orclPuis y insérer des données, ne fermer pas le terminal
5. Nous allons maintenant lancer tcpdump puis exécuter une requête sur notre base de données et voir le résultat.
Lancer TCPDUMP dans le terminal de la session root via la commande :
/usr/sbin/tcpdump -Xs 1500 -i lo port 1521
Au bout de quelque seconde, une fenêtre de ce type s'affiche :
Cela vous permettra de voir le trafic réseau sur l'adaptateur lo et le port 1521, ce port doit être celui de votre listener, dans mon cas c'est le 1521; pour le reste, je vous ferai l'économie de l'explication des options de la commande, il y'a des sites bien plus élaborés à cet effet tel que:
http://lea-linux.org/documentations/Tcpdump6. Dans le terminal ayant servi à créer notre table, nous allons afficher toutes les lignes de cette dernière
7. Observer dans le terminal tcpdump les données qui transitent via le réseau, vous remarquerez qu'elles ne sont pas cryptées.
Si les données passent rapidement et que vous n'avez pas le temps de voir, vous pouvez ré-exécutez la requête dans le terminal sqlplus en tapant la barre oblique '/'. Ou tout simplement, vous pouvez rediriger tout le trafic vers un fichier précis.
L'idéal est de mettre les 2 fenêtres côte à côte.
Sur l'image ci-dessous, nous pouvons voir le texte de la requête exécutée
Sur celle-ci nous voyons bien le résultat de cette requête
Ainsi des données sensibles ou confidentielles peuvent tomber dans les mains d'une personne qui n'en a pas droit.
Faite les touches <<Ctl>>+<<C>> pour arrêter l'action de tcpdump
8. Nous allons maintenant crypter les données; pour cela, nous avons besoins de modifier notre fichier SQLNET.ORA situé dans $ORACLE_HOME/network/admin
Nous allons y ajouter un certain nombre de paramètres :
SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
SQLNET.ENCRYPTION_SERVER=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(MD5)
SQLNET.ENCRYPTION_TYPES_SERVER=(DES40,RC4_40)
SQLNET.CRYPTO_SEED="Mettre ici une chaîne de 10 à 70 caractères"
SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
SQLNET.ENCRYPTION_CLIENT=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(MD5)
SQLNET.ENCRYPTION_TYPES_CLIENT(DES40,RC4_40)
CRYPTO_CHECKSUM_TYPES_SERVER = (MD5)
Pour plus de détails sur les paramètres, rien de plus précis que la doc Oracle https://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF006
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(MD5)
SQLNET.ENCRYPTION_TYPES_SERVER=(DES40,RC4_40)
SQLNET.CRYPTO_SEED="Mettre ici une chaîne de 10 à 70 caractères"
SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
SQLNET.ENCRYPTION_CLIENT=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(MD5)
SQLNET.ENCRYPTION_TYPES_CLIENT(DES40,RC4_40)
CRYPTO_CHECKSUM_TYPES_SERVER = (MD5)
Pour plus de détails sur les paramètres, rien de plus précis que la doc Oracle https://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF006
Cette fois-ci, vous remarquez que le résultat de la requête est cryptée. Ainsi le risque de voir des informations confidentielles tombées dans des mains non autorisées est éliminée.
Bien entendu, il faudra également configurer le fichier sqlnet.ora du côté client; dans le cas contraire, les connexions au serveur seront refusées.
Dans la pratique, il est indéniable que le sniffer de réseau sera utilisé sur un post différent du serveur de base de données. Dans ses options, tcpdump vous permet d'écouter un hôte précis.