Eléments de sécurité sur les mots de passe et Cryptage des

Transcription

Eléments de sécurité sur les mots de passe et Cryptage des
Eléments de sécurité sur les mots de passe et Cryptage des données en
transit
Mouhamadou Diaw, Senior Oracle Consultant, dbi services ltd.
Introduction
Avec l’augmentation exponentielle des données électroniques, la protection des données et l’adoption
des bonnes pratiques pour la manipulation de ces données deviennent vitales.
Le but de ce document est de présenter quelques éléments de sécurité permettant de limiter les risques
dans un environnement oracle.
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Sécuriser ma configuration
Choisir une bonne ligne directrice
Il ne s’agit pas de réinventer le monde, mais de se baser sur ce qui existe déjà. En effet plusieurs
organismes proposent les grandes lignes à suivre pour une configuration sécurisée respectant les
normes de sécurité en vigueur.
Parmi ces organismes on peut citer deux principaux organismes qui proposent des documents sur les
bonnes pratiques pour l’implémentation d’une base de données oracle :
Le premier est le STIG (Database Security Technical Implementation Guide) développé par le DISA
(Defense Information Systems Agency)
http://iase.disa.mil/stigs/app-security/database/Pages/oracle.aspx
Le deuxième organisme est le CIS (Centre for Internet Security)
https://www.cisecurity.org/
On peut utiliser soit l’un de ces documents ou les deux.
Utilisation d’un outil d’évaluation de la vulnérabilité
L’utilisation des checklists proposés par le STIG et le CIS peut vite devenir fastidieuse, en effet
plusieurs sujets sont abordés. Et souvent plusieurs modifications sont nécessaires. Et cela peut prendre
beaucoup de temps. Heureusement il existe des outils pour automatiser toutes ces tâches, on les
appelle Vulnerabilty Assessment Tool.
On en trouve plusieurs sur le marché : AppDetective, AppSecurity, NGS Squirrel, Guardium, Scuba
Imperva.
Figure 1
Figure 2
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Une bonne politique de mots de passe
Nous allons maintenant voir quelques éléments faciles à mettre en œuvre et qui peuvent aider à
protéger notre base oracle.
Une base oracle 11.2.0.4 est utilisée pour les démonstrations.
Un bon choix de mots de passe
Les mots de passe étant le premier levier pour accéder à la base, il convient d’adopter une procédure
de gestion rigoureuse
 Les mots de passe de SYS et SYSTEM doivent être différents
 Les mots de passe des environnements doivent être différents (Développement, Test et
Production)
 Changer les mots de passe régulièrement
 Mettre en place la fonction de validation des mots de passe. Oracle en fournit une.
http://blog.dbi-services.com/protect-your-oracle-password-function/
Le choix d’un bon mot de passe est vital vu qu’un mot de passe simple se brise assez facilement
Exemple 1 : Dans cet exemple on a choisi root comme mot de passe de SYS et de SYSTEM
Récupérons maintenant les hash correspondants (Listing 1)
SQL> select password from sys.user$ where name in ('SYS','SYSTEM');
PASSWORD
-----------------------------4308B3327406F339
C878FEAFB91DF2F7
Listing 1
Avec ces valeurs hash on crée un fichier texte de la forme (Listing 2)
# cat fichier_hash.txt
SYS:4308B3327406F339
SYSTEM:C878FEAFB91DF2F7
Listing 2
En utilisant la version basique de john the ripper et lui passant le fichier, le mot de passe est restitué
assez rapidement (Listing 3).
# john --format=oracle ./fichier_hash.txt
Loaded 2 password hashes with 2 different salts (Oracle [oracle])
Warning: mixed-case charset, but the current hash type is case-insensitive;
some candidate passwords may be unnecessarily tried more than once.
ROOT
(SYSTEM)
ROOT
(SYS)
guesses: 2 time: 0:00:00:01 DONE (Wed Apr 27 13:16:59 2016) c/s: 749545
trying:
Listing 3
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Exemple 2 : Dans le deuxième cas on utilise un mot de passe un peu plus long mais composé
uniquement de lettre : resiste.
Là aussi le résultat est effarant, le mot de passe est retourné en un temps record (Listing 4)
[root@stand2 soug_john]# john --format=oracle ./toto_hash.txt
Loaded 1 password hash (Oracle [oracle])
Warning: mixed-case charset, but the current hash type is case-insensitive;
some candidate passwords may be unnecessarily tried more than once.
RESISTE
(TOTO)
guesses: 1 time: 0:00:00:37 DONE (Wed Apr 27 13:57:04 2016) c/s: 982843
trying:
Listing 4
Exemple 3: Dans le troisième cas l’utilisateur toto a un mot de passe comprenant des lettres et un
chiffre : resiste1
John commence déjà à avoir du mal et met un peu plus de temps.
Dans ce que nous venons de voir, on retiendra tout simplement qu’un bon mot de passe doit contenir
des lettres, des chiffres et des caractères spéciaux et doit être d’une certaine longueur. Nous voyons
aussi l’importance de protéger les HASH des mots de passe en limitant l’accès aux tables SYS.USER$
et DBA_USERS.
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
External password files
Une des problématiques est souvent l’exécution des scripts, et comment se connecter à travers le script
à la base sans fournir le login et le mot de passe en dur dans le script.
Pendant longtemps on a utilisé l’authentification OS.
Figure 3
Mais depuis la version 10g, nous avons la possibilité d’utiliser les wallets pour y stocker les infos de
connexion
Ce faisant, on peut ainsi se connecter à une base de données sans spécifier manuellement les infos de
connexion, le mot de passe étant tout simplement puisé directement depuis le wallet où il est stocké en
fonction de l’alias de connexion qui est spécifié.
Figure 4
La mise en place d’une telle procédure se fait assez facilement.
Création d’un auto login wallet
Il faut d’abord créer un wallet qui va servir à stocker les informations de connexion. La commande
utilisée est mkstore (Listing 5)
$ mkstore -wrl "/u01/app/oracle/staff/wallet/" -create
Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
Enter password:
Enter password again:
[oracle@stand2 dbhome_1]$
Listing 5
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Le mot de passe du wallet sera requis pour maintenir le wallet, mais n’est pas nécessaire pour la
connexion. Le wallet s’ouvrira automatiquement d’où le nom de auto-login wallet (le .sso) (Listing 6)
[oracle@stand2 dbhome_1]$ ls -la /u01/app/oracle/staff/wallet/
total 8
drwxr-xr-x. 2 oracle oinstall
42 Apr 27 12:22 .
drwxr-xr-x. 3 oracle oinstall
19 Apr 27 12:20 ..
-rw-------. 1 oracle oinstall 3589 Apr 27 12:22 cwallet.sso
-rw-------. 1 oracle oinstall 3512 Apr 27 12:22 ewallet.p12
[oracle@stand2 dbhome_1]$
Listing 6
Création d’une connexion sécurisée à travers le wallet
Une fois le .sso créé, il faut lui associer les infos de connexion en lui donnant le login, le mot de passe
et le TNS utilisé pour la connexion.
Supposons que mon TNS_ALIAS soit de la forme (Listing 7)
SOUGSEC_ALIAS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = stand2.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SOUGSEC)
)
)
Listing 7
Si on veut pouvoir utiliser l’utilisateur SYSTEM pour me connecter à la base sans spécifier le login et
le mot de passe, il faut d’abord lui créer une entrée dans le wallet. Cela se fait toujours avec la
commande mkstore (Listing 8).
[oracle@stand2 wallet]$ mkstore -wrl "/u01/app/oracle/staff/wallet/
cwallet.sso ewallet.p12
[oracle@stand2 wallet]$ mkstore -wrl "/u01/app/oracle/staff/wallet/" createCredential SOUGSEC_ALIAS system root
Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
Create credential oracle.security.client.connect_string1
[oracle@stand2 wallet]$
Listing 8
Il faudra juste noter que l’approche précédente n’est pas conseillée, car le mot de passe est écrit en
clair dans la commande, il faut plutôt juste passer en paramètre le login et le mot de passe nous sera
demandé (Listing 9).
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
[oracle@stand2 wallet]$ mkstore -wrl "/u01/app/oracle/staff/wallet/" createCredential SOUGSEC_ALIAS_t toto
Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password:
Re-enter your secret/Password:
Enter wallet password:
Create credential oracle.security.client.connect_string2
[oracle@stand2 wallet]$
Listing 9
Nous pouvons vérifier les infos stockées dans notre wallet par l’option –listCredential (Listing 10)
[oracle@stand2 wallet]$ mkstore -wrl "/u01/app/oracle/staff/wallet/"
listCredential
Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
List credential (index: connect_string username)
2: SOUGSEC_ALIAS_t toto
10)
Listing 10
Modifier le sqlnet.ora et redémarrer le listener
La location du wallet doit être spécifiée dans le sqlnet.ora via le paramètre WALLET_LOCATION
[oracle@stand2 admin]$ cat sqlnet.ora
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/staff/wallet)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
Listing 11
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Se connecter en utilisant l’Alias
Nous pouvons maintenant nous connecter en utilisant tout simplement la forme /@SOUGSEC_ALIAS
(Listing 12)
[oracle@stand2 admin]$ sqlplus /@SOUGSEC_ALIAS
SQL*Plus: Release 11.2.0.4.0 Production on Wed Apr 27 14:16:46 2016
Copyright (c) 1982, 2013, Oracle.
All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show user
USER is "SYSTEM"
SQL>
Listing 12
Une chose importante : L’utilisation des external password files ne modifie en rien le mécanisme de
connexion de la base. Les données d’authentification sont toujours envoyées en clair.
Le wallet nous dispense tout simplement de suppléer un login et un mot de passe.
D’où la nécessité de voir comment crypter les données.
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Encryption des données en transit
Par défaut les données envoyées dans un environnement oracle ne sont pas cryptées. Même les mots
de passe sont envoyés en clair. Nous pouvons nous en rendre compte en faisant une capture du trafic
dans notre réseau.
Faisons une petite démonstration
A partir du serveur prima1 nous établissons une connexion sur la base oracle qui est sur le serveur
stand2. Et nous exécutons les deux commandes suivantes (Listing 13)
SQL> host hostname
prima1.localdomain
SQL> alter user toto identified by toto1;
User altered.
SQL> select * from scott.emp;
Listing 13
Regardons maintenant les captures de trafic que nous avons fait en utilisant tcpflow sur le serveur
stand2 (Listing 14)
[root@stand2 capture]# grep toto *
Binary file 156.151.097.080.22573-156.151.097.082.01521 matches
[root@stand2 capture]# strings 156.151.097.080.22573-156.151.097.082.01521
#alter user toto identified by toto1
select * from scott.emp
[root@stand2 capture]# strings 156.151.097.082.01521-156.151.097.080.22573
EMPNO
ENAME
HIREDATE
COMM
DEPTNO
SMITH
CLERK
ALLEN
SALESMAN
WARD
Listing 14
On voit que toutes les données sont envoyées en clair, et même la modification mot de passe. Pour ce
dernier, le DBA ne doit pas changer un mot de passe avec un alter user, à moins d’être sûr de
l’encryption de son réseau, car les données sont envoyées en clair avec cette option. Il est
rigoureusement conseillé d’utiliser la syntaxe password comme démontré ci-dessous, qui crypte les
données.
Toujours à partir du serveur prima1, changeons le mot de passe de toto avec la syntaxe password
(Listing 15)
SQL> password toto
Changing password for toto
New password:
Retype new password:
Password changed
SQL>
Listing 15
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
En regardant de nouveau les données capturées on voit que les données envoyées sont cette fois ci
cryptées, du moins pour la modification du mot de passe avec la syntaxe password (Listing 16)
[root@stand2 capture]# strings 156.151.097.080.22818-156.151.097.082.01521
toto$
AUTH_SESSKEY
AUTH_NEWPASSWORD
@95A11E6628E3D9847ED93B83E5662E499422001EAC42EB6817544B767DB07273
AUTH_TERMINAL
pts/3
AUTH_PROGRAM_NMr
&[email protected] (TNS V1-V3)
AUTH_MACHINE6
prima1.localdomain
AUTH_PID
15207
AUTH_SID
oracle
AUTH_ALTER_SESSIONo
%ALTER SESSION SET TIME_ZONE='+02:00'
[root@stand2 capture]#
Listing 16
Mais si le problème est résolu pour la modification des mots de passe, qu’en est-il des autres données.
Eh bien il existe plusieurs méthodes pour encrypter ses données en transit (Mise en place de protocole
TCPS, Utilisation des certificats, ..). Mais d’une manière générale ce qui dissuade la mise en place de
ces méthodes est surtout la complexité et aussi la nécessité d’avoir l’option Oracle Advanced Security.
En fait depuis la 10g on a cette fameuse phrase ici qui change tout
https://docs.oracle.com/cd/B19306_01/license.102/b14199/options.htm#DBLIC137
Network encryption (native network encryption and SSL/TLS) and strong authentication services
(Kerberos, PKI, and RADIUS) are no longer part of Oracle Advanced Security and are available in all
licensed editions of all supported releases of the Oracle database.
Cool mais reste le problème de la complexité, eh bien non. Car actuellement oracle permet d’encrypter
le réseau très facilement avec juste quelques paramètres à ajouter dans le sqlnet.ora. Le ratio
sécurité/performance reste largement acceptable.
Petite démonstration : Reprenons nos exemples précédents mais en ayant au préalable ajouté les
paramètres suivants dans nos fichier sqlnet.ora (côté serveur et client) (Listing 17)
[oracle@prima1 admin]$ grep encryption sqlnet.ora
sqlnet.encryption_server = accepted
sqlnet.encryption_client = requested
sqlnet.encryption_types_server =( rc4_256)
sqlnet.encryption_types_client =( rc4_256)
[oracle@prima1 admin]$
Listing 17
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
A partir du serveur prima1, connectons-nous sur la base sur le serveur stand2 et exécutons les
requêtes comme précédemment (Listing 18)
[oracle@prima1 admin]$ sqlplus system@SOUGSEC_ALIAS
SQL*Plus: Release 12.2.0.0.2 Beta on Wed Apr 27 17:12:05 2016
Copyright (c) 1982, 2015, Oracle.
All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter user toto identified by toto1;
User altered.
SQL> select * from scott.emp;
Listing 18
Et maintenant si nous regardons les captures de trafic, bingo, les données sont encryptées (Listing 19)
[root@stand2 capture]# strings 156.151.097.082.01521-156.151.097.080.23495
|KEo
_?!L
,C3Q<
dGvW\Q
foo bar baz bat quux
yGw*
x&_9
`<g 8
jB>0
vwX*&"
5B8M
Z+mc
fM%|
>~6|N^\
@[jod^E
…
Listing 19
Pour cette partie nous retiendrons tout simplement que par défaut les données sont transmises en clair
et que par contre oracle fournit actuellement des méthodes assez simples pour encrypter le trafic.
Mouhamadou Diaw, dbi services
Eléments de sécurité sur les mots de passe et Cryptage des données en transit
Conclusion
Dans cet article, nous avons voulu mettre en évidence le fait que la sécurité de nos données peut se
mettre en place avec des moyens simples ne nécessitant aucune option supplémentaire.
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
Eléments de sécurité sur les mots de passe et Cryptage des données en transit