I. Introduction▲
Que ce soit dans les anciennes ou les nouvelles implémentations, le besoin de revoir les aspects sécuritaires de ces environnements s'avère nécessaire, tant du point de vue de la confidentialité d'accès aux données que de l'intégrité de celles-ci.
Les lois européennes sur la protection des données sont claires sur le fait qu'il incombe de veiller à la protection des données personnelles que l'on stocke.
D'autres informations sont jugées sensibles au sein des entreprises, par exemple la liste des clients, le prix des produits ou les salaires des collaborateurs de l'entreprise.
La menace interne est généralement sous-estimée et donc souvent peu prise en compte, alors que la majorité des analyses disponibles sur le sujet indiquent que la sécurisation périmétrique ne suffit plus, une grande partie des menaces provenant désormais de l'interne.
Le but de cet article est la revue des menaces impliquant les informations hébergées au sein des instances Oracle et de proposer un catalogue de mesures permettant d'y remédier ou tout le moins d'en minimiser les risques.
« Mieux vaut connaître son ennemi pour le combattre ! » Conscient que donner ce type d'information sur des brèches sécuritaires peut pousser certaines personnes mal intentionnées à s'y engouffrer, je ne peux que vous conseiller de ne pas « plonger du côté obscur de la force »… et d'envisager ce type d'information de manière la plus professionnelle qu'il soit.
II. Sources▲
Le but principal est la diminution sensible des risques d'accès ou de modification inappropriée des données. Il se base principalement sur les sources suivantes :
- les compétences et expériences des DBA ;
- les différents scénarios d'intrusions disponibles sur Internet ;
- les outils BackTrack 2 ;
- les informations reçues lors du cours Oracle antihacking donné par M. Alexander Kornbrust, un des spécialistes de la sécurité sur Oracle ;
- le site de Pete Finnigan ;
- la documentation officielle d'Oracle : Oracle Database Security Guide ;
- les diverses autres documentations délivrées par Oracle sur le sujet (via Metalink, Grid control, etc.) ;
- la Faq Oracle Sécurité de developpez.com.
III. Types de dangers▲
Les dangers peuvent être catégorisés de la manière suivante :
No |
Type de danger |
Explication |
---|---|---|
1 |
Déni de service |
Plantage volontaire du SGBDR rendant l'accès aux données impossible |
2 |
Intrusion |
Accès malintentionné afin d'obtenir plus d'informations que nécessaire |
3 |
Injection SQL |
Utilisation de failles du SGBDR afin de s'octroyer des droits excessifs |
4 |
Corruption de données |
Pourrissement des données métier par mauvaise configuration, envie de nuire… |
IV. Dangers et mesures▲
Ici sont exposés les dangers latents et les mesures à apporter afin de les éviter.
IV-A. Schémas / Logins▲
Oracle mixte la notion de schéma et de login. Un Schéma est en fait lié à un utilisateur qui est propriétaire d'au moins un objet. Un schéma dans son rôle de conteneur d'objets devrait en fait être un login verrouillé dont le mot de passe ne devrait même pas être connu.
Pour les schémas métier créés par vos équipes de développement, c'est généralement le cas. Personne ne se connecte directement sur ces logins, mais un utilisateur spécifique et applicatif peut y accéder.
Dans les faits malheureusement, la plupart des applicatifs externes n'utilisent pas le prédicat du schéma pour accéder aux tables. Il leur faut donc soit se connecter directement sous le nom du schéma, soit utiliser la notion de synonyme. Couplé à un trigger sur connexion, la commande ALTER SESSION SET CURRENT_SCHEMA offre cependant une alternative élégante et permet la dissociation du schéma et du login utilisé.
Dès sa version 12, Oracle offre désormais « un emplâtre sur une jambe de bois » à cette problématique d'affinité de schémas : les bases enfichables (pluggable databases). Cette option (supplémentaire et coûteuse) offre la possibilité de limiter les droits à un nombre défini de schémas. On peut donc donner des droits étendus à une base de données multitenant spécifique. Vous trouverez de plus amples informations dans l'article Architecture multitenant Oracle 12c.
Pour couronner le tout, certains logins/schémas système Oracle sont installés par défaut dans toute nouvelle instance et ont des droits excessifs ou/et des failles sécuritaires. Il est donc primordial de ne laisser sur une instance Oracle que les schémas nécessaires. Au besoin, il est toujours possible de recréer ces schémas via les scripts Oracle. Le surplus doit être désinstallé ou, au minimum, verrouillé.
La liste des schémas Oracle, une explication sommaire et les scripts de création et de désinstallations sont décrits dans l'article Les schémas Oracle.
IV-B. Mots de passe▲
IV-B-1. Mots de passe simplistes▲
Type |
2 (intrusion) |
Contrôle |
Vérification régulière à l'aide d'outils Backtrack (checkpwd + francais.txt), basé sur la comparaison de chaînes hachées. Vérifications périodiques en brute force |
Mesure |
Demander aux utilisateurs de modifier les mots de passe faibles ; forcer la complexification des mots de passe via les profils Oracle |
CREATE
PROFILE
Compexite_Pwd_profile
LIMIT
PASSWORD_LIFE_TIME 30
LIMIT
PASSWORD_REUSE_TIME 180
LIMIT
PASSWORD_REUSE_MAX 3
;
ALTER
USER
scott PROFILE
my_profile;
C:\oracle_checkpwd>
checkpwd122.exe system/monpwd@hostdvp:1521
/ORA10G.DVP.COM default_passwords.txt
Checkpwd 1
.22
- (
c) 2007
by Red-Database-Security GmbH
Oracle Security Consulting, Security Audits &
Security Trainings
http://www.red-database-security.com
initializing Oracle client library
connecting to the database
retrieving users and password hash values
disconnecting from the database
opening weak password list file
reading weak passwords list
checking passwords
Starting 1
threads
JRULES OK [OPEN]
SNPM OK [OPEN]
SNPW OK [OPEN]
MIDOFF OK [OPEN]
WAREHOUSE has weak password BUSINESS [OPEN]
DISTRIBUTE has weak password HOUSE [OPEN]
MDSTATUS has weak password MDSTATUS [OPEN]
QC OK [OPEN]
DASHBOARD OK [OPEN]
SYS_USER OK [OPEN]
DEPLOYER OK [OPEN]
TSMSYS OK [LOCKED]
DBSNMP OK [OPEN]
EXFSYS OK [LOCKED]
XDB OK [LOCKED]
SYSMAN OK [LOCKED]
MGMT_VIEW OK [OPEN]
SYS OK [OPEN]
SYSTEM OK [OPEN]
OUTLN OK [LOCKED]
Done
. Summary:
Passwords checked : 43241
Weak passwords found : 3
Elapsed time (
min:sec) : 0
:00
Passwords / second : 43241
IV-B-2. Mots de passe par défaut▲
Type |
2 (intrusion) |
Contrôle |
Validation régulière à l'aide d'outils Backtrack (checkpwd + default_passwords.txt), basé sur la comparaison de chaînes hachées. Contrôles périodiques en brut force |
Mesure |
Modification des mots de passe par la DBA. |
IV-B-3. Mots de passe codés en dur▲
Type |
2 (intrusion) |
Contrôle |
Via trigger sur connexion (cf. ci-dessous), en s'assurant que l'applicatif appelant est le bon. |
Mesure |
Externalisation du mot de passe crypté dans fichiers de paramètres |
Voici un exemple de déclencheur sur connexion qui permet de n'autoriser l'utilisation de certains applicatifs qu'à certains comptes.
create
or
replace
TRIGGER
"SYS"
."BLOCK_USER_ACCESS"
AFTER
LOGON ON
DATABASE
DECLARE
v_prog sys.v_$session
.program%
TYPE
;
v_dbuser sys.v_$session
.username%
TYPE
;
v_osuser sys.v_$session
.osuser%
TYPE
;
v_db sys.v_$database
.name
%
TYPE
;
/*
* Auteur : Fabien Celaia
* Date : 7 juillet 2006
* Desc. : Empêche l'utilisation de certains logins avec certains applicatifs
*/
BEGIN
/* Récupération des informations utiles dans v$session */
SELECT
upper
(
program)
, upper
(
username)
, upper
(
osuser)
INTO
v_prog, v_dbuser, v_osuser
FROM
sys.v_$session
WHERE
audsid =
USERENV(
'SESSIONID'
)
AND
audsid !=
0
-- N'impacte pas la connexion SYS
AND
rownum
=
1
; -- Gestion du parallélisme (même AUDSID)
SELECT
upper
(
name
)
INTO
v_db
from
v$database
;
/* Utilisation à proscrire */
IF
v_dbuser NOT
IN
(
'SYSTEM'
, 'SYS'
, 'STREAM'
, 'DBSNMP'
)
AND
coalesce
(
v_osuser,'SYSTEM'
)
not
in
(
'SYSTEM'
)
AND
(
v_prog =
'TOAD.EXE'
OR
v_prog LIKE
'%ACCESS.EXE'
OR
v_prog LIKE
'%SQIREL%'
OR
v_prog LIKE
'SQLPLUS%'
OR
v_prog LIKE
'SQL DEV%'
OR
v_prog LIKE
'%MSQ%.EXE'
)
THEN
RAISE_APPLICATION_ERROR(-
20000
, v_osuser ||
' n''est pas autorisé à utiliser '
||
v_prog ||
' sur l''environnement '
||
v_db)
;
END
IF
;
EXCEPTION
WHEN
NO_DATA_FOUND THEN
NULL
;
END
;
Il s'agit là d'une sécurité toute relative compte tenu du fait qu'il est aisé de modifier le nom du programme appelant via PL-SQL, que ce trigger ne se déclenche pas avec sysdba… et pour de nombreuses autres raisons exposées dans la FAQ Oracle.
IV-B-4. Spoliation temporaire de mot de passe▲
Avec des droits DBA, il est tout à fait aisé de s'approprier l'identité d'un utilisateur spécifique de manière temporaire.
Le mot de passe haché est un md5 de la concaténation du login, du mot de passe et d'un bout de chaîne. Il est donc invariable d'une instance à une autre pour un login/mot de passe donné. De plus, le mot de passé haché de scott/tigger sera le même que celui de sco/tttiger.
Dès la version 10g, le mot de passe devient sensitif, ce qui n'était pas le cas au préalable. Mixez donc majuscules et minuscules afin de complexifier la tâche aux outils de brute force.
Dans un premier temps, on relève son mot de passe crypté, connecté en tant que dba.
SQL
>
connect
system/
motdepasse
Connecté
SQL
>
select
password
from
dba_users where
username=
'MONCOCO'
PASSWORD
-----------------------------
F894765434402B67
Il est ensuite aisé de changer son mot de passe, puis de se connecter sous son profil
SQL
>
alter
user
MONCOCO identified
by
MonPwd
User
altered
SQL
>
connect
MONCOCO/
MonPwd
Connecté
Notre méfait accompli, il ne nous reste plus qu'à remettre l'ancien mot de passe
SQL
>
connect
system/
motdepasse
Connecté
SQL
>
alter
user
MONCOCO identified
by
values
'F894765434402B67'
Il est possible de limiter ce genre d'intrusion, en empêchant par exemple la modification d'un mot de passe via trigger sur ALTER, mais cela ne limitera pas un compte de type sysdba.
IV-B-4-a. Stockage du mot de passe dès la version 11▲
Dès la version 11, Oracle change sa stratégie quant aux mots de passe. Ceux-ci ne se trouvent plus stockés en haché dans la vue DBA_USERS.PASSWORD, mais dans la table SYS.USER$.
En fait, il y a maintenant deux champs permettant, tout en gardant la même permissivité d'alors, de déterminer si un mot de passe a été modifié « naturellement » ou en passant par la valeur de hachage.
- PASSWORD est mis à jour lorsque le mot de passe est utilisé normalement.
- SPARE4 est mis à jour lorsque l'on passe le mot de passe par sa valeur de hachage.
Sur la faisabilité de reprendre un mot de passe, pas de souci : vos anciens scripts fonctionneront toujours… dans la mesure où vous modifierez le nom de la table. Via l'option IDENTIFIED BY VALUE, vous pouvez prendre l'une ou l'autre des valeurs PASSWORD ou SPARE4… cela revient au même. Par contre, il devient alors possible de déterminer, en analysant si l'une ou l'autre colonne est NULL, si l'identified by value a été usité ou non.
IV-C. Intrusion via système d'exploitation▲
Une des principales failles de la sécurité Oracle est qu'il n'est quasi pas possible d'empêcher un administrateur du système d'exploitation de se connecter en tant qu'administrateur de la base de données.
Sous Windows, un administrateur est tout à fait en mesure de se mettre dans le rôle système oradba. Sous Unix, idem pour le rôle, et de manière encore plus aisée, il sera en mesure d'exécuter un sudo - oracle.
Cette capacité à se connecter sur une instance Oracle sans mot de passe, directement en sqlplus / as sysdba permet à quiconque qui aurait des droits d'administration sur la machine de se connecter en tant que superuser sur Oracle.
Cela peut aussi être considéré comme un avantage lors du départ inopiné ou du décès du DBA !
Type |
2 (intrusion) |
Contrôle |
Éviter, pour les DBA aussi, de se connecter en tant que sys |
Mesure |
Comptes DBA spécifiques et nommés, audit fait (par exemple, c'est le cas avec Oracle Grid Control) |
IV-D. Intrusion par application frontale▲
Que ce soit via SQLDeveloper ou via Toad, les configurations de connexion sont stockées sur le PC client du développeur/DBA. Bien que ces 2 applicatifs stockent les mots de passe en cryptage EAS, il est possible, au travers d'un disque partagé par exemple, d'aller « vampiriser » le fichier de configuration afin de s'approprier les accès excessifs, sans pour cela connaître les mots de passe utilisés.
IV-D-1. Informations de connexion stockées en local▲
Les fichiers sensibles sont
- pour SQL Developer : …\sqldeveloper\jdev\system\oracle.onlinedb.11.0.0.37.42\IDE*.* ;
- pour Toad : …\Quest Software\Toad for Oracle\User Files\*.* ;
- pour sqlplus, sqlplusw : toute sorte de raccourcis dans environnement Windows.
Type |
2 (intrusion) |
Contrôle |
Validation régulière à l'aide d'outils Backtrack (checkpwd + default_passwords.txt), basé sur la comparaison de chaînes hachées. |
Mesure |
Suppression ou limitation du partage C$ sur les postes. Interdiction faite aux utilisateurs d'utiliser toute forme de sauvegarde de mot de passe dans les connexions. |
IV-D-2. Clients non patchés / non sécurisés▲
Il est nécessaire de maîtriser l'installation des clients Oracle, ceux-ci étant aussi sensibles aux failles de sécurité. Bien souvent, l'installation des bases et de leurs binaires est dévolue au DBA, mais les installations clientes Oracle sont souvent faites « à la sauvage », via des packages ou un département « bureautique » peu sensible aux soucis sécuritaires qui nous occupent.
Type |
3 (injection SQL) |
Contrôle |
Éviter toute installation cliente sauvage |
Mesure |
Catalogage de toute installation cliente |
Type |
4 (corruption) |
Contrôle |
Installation des clients correcte, variables d'environnement adéquates (NLS) Pas de caractères étranges saisis |
Mesure |
Reprise en main des installations clientes Configuration adéquate des clients Oracle, et plus particulièrement des variables NLS |
IV-D-3. Fichiers autoexécutables▲
Du code SQL néfaste peut être insidieusement placé sur le disque d'un super-utilisateur et auto exécuté au démarrage de sqlplus. Ceci se fait dans les fameux fichiers glogin.sql et login.sql, situés soit dans Oracle_home\bin, soit dans Oracle_home\sqlplus\admin.
Type |
3 (injection SQL) |
Contrôle |
S'assurer que les fichiers login.sql et glogin.sql ne se trouvent pas dans le répertorie ${ORACLE_HOME}/bin des clients |
Mesure |
Démarrer sqlplus à l'aide d'un fichier script/batch nettoyant au préalable tout glogin.sql ou login.sql du répertoire incriminé. |
IV-E. Intrusion par sniffage du processus d'écoute▲
Le listener d'Oracle peut être détourné à des fins néfastes. Il permet de sniffer le protocole de transfert Oracle non crypté. Les requêtes, les données passent en clair au travers de la trame. Plusieurs solutions peuvent être mises sur pied afin de pallier ce problème. Il convient aussi de spécifier au listener de quelles bases il est censé gérer la communication.
Type |
1 (déni de service) |
Contrôle |
Check du listener.ora afin de s'assurer de sa bonne configuration |
Mesure |
- en version pré10, mise en place d'un mot de passe pour le listener |
Type |
2 (intrusion) |
Contrôle |
Check du listener.ora, de $TNS_ADMIN afin qu'ils ne comportent pas de redirection |
Mesure |
- en version pré10, mise en place d'un mot de passe pour le listener |
Type |
3 (injection SQL) |
Contrôle |
Check du listener.ora, du tnsnames.ora, de $TNS_ADMIN afin qu'ils ne comportent pas de configuration extproc |
Mesure |
Suppression de la possibilité d'utiliser des procédures externes |
IV-F. Scannage de port▲
Pour les applications n'étant pas orientées extranet, le risque de subir ce genre d'attaque de l'extérieur est plus limité. Cependant, il existe en interne, mais est aisément détectable, les outils de scannage (nmap, amap, etc.) étant perçus comme des attaquants par les outils réseau. Le risque existe néanmoins puisque ce type d'attaque est en mesure de faire tomber certains modules Oracle (Notification Delivery Service).
Type |
1 (déni de service) |
Contrôle |
Par outils réseau interne (IDS) détectant ce type de scannage. |
Mesure |
Audit réseau |
IV-G. Intrusion par binaires non sécurisés▲
Les failles de sécurité n'étant fixées que dans les dernières versions, les anciens binaires Oracle sont plus sensibles. Il convient donc de supprimer toute ancienne version de binaire.
Type |
3 (intrusion) |
Contrôle |
Suppression de dumpsga (permettant de flusher la mémoire sur disque). Cryptage des datafiles |
Mesure |
Utilisation de Transparent Data Encryption d'Oracle Sélectionnez
|
Type |
4 (injection SQL) |
Contrôle |
Suppression des binaires non patchés |
Mesure |
Sélectionnez
|
IV-H. Injection SQL▲
Certains modules Oracle offrent des possibilités d'intrusion SQL. Il est donc nécessaire de réduire au maximum les droits (par défaut ALL to PUBLIC) sur ces modules. Ceux-ci ne peuvent pas être purement et simplement supprimés, car appartiennent au noyau Oracle.
revoke
execute
on
sys.dbms_obfuscation_toolkit from
public
;
grant
execute
on
sys.dbms_obfuscation_toolkit to
sysman ;
grant
execute
on
sys.dbms_obfuscation_toolkit to
dbsnmp ;
grant
execute
on
sys.dbms_obfuscation_toolkit to
wksys ;
Grant
execute
on
sys.dbms_obfuscation_toolkit to
flows_030000 ;
revoke
execute
on
sys.utl_tcp from
public
;
grant
execute
on
sys.utl_tcp to
sysman ;
revoke
execute
on
sys.utl_http from
public
;
grant
execute
on
sys. utl_http to
ordplugins ;
revoke
execute
on
sys.utl_smtp from
public
;
grant
execute
on
sys.utl_smtp to
sysman ;
revoke
execute
on
sys.utl_file
from
public
;
grant
execute
on
sys. utl_file
to
ordplugins ;
Grant
execute
on
sys.utl_file
to
mitg_rml ;
Grant
execute
on
sys.utl_file
to
mitg ;
grant
execute
on
sys. utl_file
to
xdb ;
grant
execute
on
sys. utl_file
to
sysman ;
grant
execute
on
sys. utl_file
to
dmsys ;
revoke
execute
on
sys.dbms_lob from
public
;
grant
execute
on
sys.dbms_lob to
xdb ;
Grant
execute
on
sys.dbms_LOB to
ctxsys ;
Grant
execute
on
sys.dbms_lob to
flows_030000 ;
Grant
execute
on
sys.dbms_lob to
mitg_rml ;
Grant
execute
on
sys.dbms_lob to
mitg ;
grant
execute
on
sys.dbms_lob to
dmsys ;
grant
execute
on
sys.dbms_lob to
exfsys ;
grant
execute
on
sys.dbms_lob to
dba
;
grant
execute
on
sys.dbms_lob to
ctxsys ;
grant
execute
on
sys.dbms_lob to
mdsys ;
grant
execute
on
sys.dbms_lob to
ordsys ;
grant
execute
on
sys.dbms_lob to
wksys ;
grant
execute
on
sys.dbms_lob to
olapsys ;
grant
execute
on
sys.dbms_lob to
ordplugins ;
revoke
execute
on
sys.dbms_job from
public
;
grant
execute
on
sys.dbms_job to
dbsnmp ;
grant
execute
on
sys.dbms_job to
wksys ;
grant
execute
on
sys.dbms_job to
exfsys ;
Grant
execute
on
sys.dbms_job to
flows_030000 ;
revoke
execute
on
sys.utl_inaddrm from
public
;
revoke
execute
on
sys.dbms_export_extension from
public
;
grant
execute
on
sys.dbms_export_extension to
dba
;
grant
execute
on
sys.dbms_export_extension to
system ;
revoke
execute
on
sys.dbms_backup_restore from
public
;
revoke
execute
on
sys.dbms_sql from
public
;
grant
execute
on
sys.dbms_sql to
sysman ;
grant
execute
on
sys.dbms_sql to
system ;
grant
execute
on
sys.dbms_sql to
xdb ;
grant
execute
on
sys.dbms_sql to
exfsys ;
Grant
execute
on
sys.dbms_sql to
flows_030000 ;
grant
execute
on
sys.dbms_sql to
dmsys ;
Grant
execute
on
sys.dbms_sql to
mitg_rml ;
Grant
execute
on
sys.dbms_sql to
mitg ;
grant
execute
on
sys.dbms_sql to
mdsys ;
grant
execute
on
sys.dbms_sql to
olapsys ;
grant
execute
on
sys.dbms_sql to
ctxsys ;
grant
execute
on
sys.dbms_sql to
oracle_ocm ;
revoke
execute
on
sys.dbms_ldap from
public
;
revoke
execute
on
sys.dbms_advisor from
public
;
Grant
execute
on
sys.dbms_ldap to
flows_030000 ;
GRANT
EXECUTE
ON
SYS.DBMS_LDAP TO
sysman ;
Sans oublier pour chaque schéma pouvant être importé :
grant
execute
on
sys.dbms_export_extension to
MonSchema ;
Pour diverses raisons (installation de modules Oracle, telle que la dbconsole par exemple), il est souhaitable d'avoir les droits initiaux sur ces modules. Voici donc les requêtes SML de rétro conversion :
grant
all
on
sys.dbms_obfuscation_toolkit TO
PUBLIC
;
grant
all
on
sys.utl_tcp TO
PUBLIC
;
grant
all
on
sys.utl_http TO
PUBLIC
;
grant
all
on
sys.utl_smtp TO
PUBLIC
;
grant
all
on
sys.utl_file
TO
PUBLIC
;
grant
all
on
sys.dbms_lob TO
PUBLIC
;
grant
all
on
sys.dbms_job TO
PUBLIC
;
grant
all
on
sys.utl_inaddrm TO
PUBLIC
;
grant
all
on
sys.dbms_export_extension TO
PUBLIC
;
grant
all
on
sys.dbms_backup_restore TO
PUBLIC
;
grant
all
on
sys.dbms_sql TO
PUBLIC
;
grant
all
on
sys.dbms_ldap TO
PUBLIC
;
grant
all
on
sys.dbms_advisor TO
PUBLIC
;
IV-I. Détection par mauvais paramétrage▲
En spécifiant une SORT_AREA_SIZE = 0, les tris sont redirigés sur le disque (tablespace temp) plutôt que la mémoire, et donc éditables via des outils tels que BBED.
Type |
2 (intrusion) |
Contrôle |
S'assurer que la sort_area_size ne soit pas égale à 0 |
Mesure |
Évite la gestion des tris sur disque plutôt que mémoire |
Type |
2 (intrusion) |
Contrôle |
Crypter les tablespaces |
Mesure |
Utiliser le module Oracle Transparent Data Encryption |
Ceci étant dit, cette attaque est purement théorique puisque
- BBED nécessite un accès local sur le serveur ;
- BBED peut aussi attaquer directement les tablespaces de données.
Elle reste cependant une alternative de contournement pour les données protégées par Virtual Private DB, Label Security, et autre Database Vault.
IV-J. Politique du droit juste et nécessaire▲
Souvent malheureusement, la priorité est donnée au développement, le côté sécuritaire étant temporairement mis de côté afin d'éviter de ralentir l'avancée des projets. Les droits sont souvent attribués de manière lâche afin de permettre des installations peu problématiques, les spécificités logicielles en la matière étant souvent minimums et lacunaires. Il convient de reprendre la main sur cet état de fait afin de n'attribuer à un compte que les droits justes et nécessaires.
De manière basique, certaines structures s'accommodent d'une hiérarchie de rôles minimum, dont voici un exemple
Une gestion de la sécurité plus sérieuse ne pourra se faire sans une analyse longue et rébarbative, et sans les couacs inhérents à une restriction de droits. Il va sans dire que plus cette tâche sera retardée et plus elle sera pénible à mettre en place.
Il convient donc de reprendre cette stratégie de rôles de manière plus sectorielle. Une première mesure serait de créer des droits en baissant la granularité actuelle qu'est la base de données à une granularité de schéma.
Type |
2 (intrusion). |
Contrôle |
S'assurer qu'un utilisateur ayant un droit sur un domaine ne puisse traiter un autre domaine. |
Mesure |
Pour chaque schéma spécifique, créer un droit en lecture seule et un droit supérieur en lecture/écriture. |
Pour reprendre l'exemple le plus flagrant, en production, seul le déployeur devrait être en mesure de créer/modifier/supprimer des objets/d'utiliser le DML.
D'autres mesures, plus conceptuelles celles-ci, devraient être prise afin d'assurer un minimum de cohérence de données, et ce même dans un environnement 3-tiers.
Type |
2 (intrusion) |
Contrôle |
Crypter les données, autoriser les accès à certains utilisateurs uniquement |
Mesure |
Installation de Oracle Database Vault |
Oracle offre des possibilités énormes de gérer des hiérarchies de rôles, des profils… malheureusement, certaines lacunes péjorantes existent et entravent la mise en place rigoureuse des autorisations :
- certains droits doivent être donnés en direct sur les logins afin que les comportements soient corrects (surtout au niveau de la programmation de packages PL-SQL) ;
- les quotas ne peuvent pas être attribués à des rôles ;
- etc.
IV-K. Sauvegardes / exports / imports▲
À partir d'un jeu de sauvegarde ou d'un fichier d'export, il est possible de remonter toute l'information sensible sur une instance étrangère/non sécurisée.
Il est dès lors nécessaire de gérer ces médias avec toute la prudence qui s'impose.
Type |
2 (intrusion) |
Contrôle |
2 (intrusion) |
Mesure |
- S'assurer que les bandes sont confinées dans un lieu sûr. |
Par défaut, les fichiers d'export ont des droits trop étendus, car ils utilisent le masque (umask) par défaut. Il convient donc d'être prudent lorsqu'on réimporte un fichier ayant été stocké préalablement sur le disque ou venant de l'externe. Il est aisé d'inclure dans le code SQL du fichier d'export des portes dérobées.
Type |
2 (intrusion) |
Contrôle |
Export dans environnement sécurisé |
Mesure |
- Ne pas laisser traîner des fichiers d'export sur les disques |
Type |
3 (injection SQL) |
Contrôle |
Ne pas importer un fichier vérolé |
Mesure |
- Ne pas laisser traîner des fichiers d'export sur les disques |
IV-L. Documentation libre, sur Internet, externe▲
Il est primordial qu'aucune information interne concernant vos instances ne se retrouve en DMZ ou sur Internet.
Type |
2 (intrusion) |
Contrôle |
Les informations se trouvant dans les SR ouvertes chez Oracle, et plus particulièrement dans les fichiers attachés à la SR doivent avoir une durée de vie limitée à la résolution du problème. |
Mesure |
- Confirmation d'Oracle que les fichiers attachés ne survivent pas à la clôture d'une SR. |
V. Conclusion▲
Ce document n'a pas pour ambition d'empêcher toute violation. Une personne motivée sera toujours à même de violer les systèmes informatiques, quels qu'ils soient. Prendre conscience de ces dangers et y apporter un certain nombre de mesures complexifiera la stratégie d'attaque d'un expert, mais surtout freinera les ardeurs de la majeure partie des personnes peu formées qui pourraient être amenées à commettre des actes frauduleux sur vos systèmes.
Je vous conseille de plus d'utiliser Oracle Grid Control pour gérer votre parc : la plupart des brèches sécuritaires y sont détectées.