Introduction à la sécurité sous Oracle

La page est créée Jocelyne Guillon
 
CONTINUER À LIRE
Introduction à la sécurité sous Oracle
Introduction
                à la sécurité sous Oracle
     Pratique

                Mikoláš Panský

                Degré de difficulté

                   Cet article porte essentiellement sur le niveau de sécurité des
                   serveurs de base de données Oracle. Dans cet article nous
                   parlerons de l'histoire d'Oracle, des produits autour des bases
                   de données et de leur architecture, aux techniques de base de
                   Hacking sur Oracle et aux techniques permettant de se protéger
                   de ce genre d’attaques.

                L
                       'histoire d'Oracle Corporation commence        Application Clusters). Aujourd’hui, la version
                       en 1977, date à laquelle son activité est      actuelle 10g Release 2 supporte le Grid.
                       fondée sur les laboratoires de développe-           Oracle est disponible dans différentes
                ment logiciel. En 1979 : SDL est renommé Re-          versions. Chacune a des applications spécifiques.
                lation Software, Inc (RSI). Cette même année,         Nous verrons ici les jeux de données d'Oracle. La
                l’entreprise lance Oracle v2 en tant qu'un des        base de données d'Oracle a plusieurs éditions :
                premiers systèmes commerciaux de bases de             l'édition standard (utilisation de 4 CPU maximum,
                données relationnelles.                               sans limite de mémoire et est utilisable en
                    Cette version implémentait des fonctions          Cluster), l'édition d'entreprise (EE) inclut
                basiques de SQL : requêtes et jointures.              quelques fonctions avancées de sécurité. Il est
                Oracle Corporation a ce nom depuis 1983,              possible d'ajouter le Database Vault, qui permet la
                date à laquelle a été lancée la version 3             protection des données contre les administrateurs
                écrite en C et supportant les transactions.           de bases de données (DBA), la sécurité avancée
                En 1984, paraît la version 4, 1985 version 5          permet la communication réseau cryptée :
                (modèle client-serveur), 1989 Oracle Corp.
                sur le marché des applications avec Oracle
                Financial et implémentation de PL/SQL. En                Cet article explique...
                1992, sort la version 7h – entrepôt de données
                                                                         •   Des informations générales sur Oracle.
                (DataWarehouse) avec le support de l’intégrité
                                                                         •   Les hacks de base sur Oracle.
                référentielle, les procédures stockées et
                                                                         •   Techniques basiques pour se défendre.
                les triggers. En 1997, la version 8 supporte
                l’approche orientée objet et les applications
                multimédia, en 1999 la version 8i supporte               Ce qu'il faut savoir...
                Internet et la Machine Virtuel Java (mieux
                connue sous le nom : JVM). L’année 2001 voit la          •   Élements de base sur le serveur de base de
                sortie de Oracle 9i avec la possibilité de lire les          données Oracle.
                documents XML, et également les RAC (Real

36              hakin9 Nº 5/2007                            www.hakin9.org
Hacking et Preuve sous une Bdd Oracle

cryptage des données dans une                System Identifier, qui resout les            recherche pourrait également être
base de données, authentification            instances de bdd et identifient les bdd),    utilisé pour trouver un système précis
plus forte et finalement un Label            le protocole et le port sont stockés         suivant les termes de la recherche,
de Sécurité qui permet de définir les        dans : listener.ora. Le Listener écoute      qui est un identifiant unique pour la
privilèges de sécurité et le label des       pour des requêtes sur la base de             bonne page. Ce terme pourrait par
utilisateurs – la sécurité de base.          données. Après avoir perçu n’importe         exemple rechercher isqlplus (interface
Il y a également l’édition standard Ed :     quelle connexion, il envoie le numéro        web pour tapper des requêtes sur
Standard Edition One avec support            de port au client. Le client se connecte     des bdd Oracle), des fichiers de
de 2 CPU maximum, l’édition                  ensuite au port et s’authentifie. Le         configuration ou les Editions Express.
personnelle : Personal Edition sans          Listener pourrait aussi être utilisé         Ces termes pourraient ressembler à :
la RAC ciblée pour les développeurs          par le package PL/SQL ou par des             intitle:icql intitle:release inurl:isqlplus,
et l’Edition Express avec 1 CPU, 1Go         procédures externes.                         listener filetype:ora či inurl:apex intitle:
de RAM et 4 Go limite.                            La structure logique de la              Application Express Login.
     Le système de base de données           base est composée d’utilisateurs,                 La prochaine étape est un scan
d'Oracle, d’un point de vue physique, se     schemas        (objects     appartenant      plus approfondi de l’OS, à l'aide
compose de processus, qui s’exécutent        à l’utilisateur), droits, rôles, profils     d'outils comme (nmap, amap, tsnping) ou
sur des systèmes d'exploitation hôtes,       et objets. Les utilisateurs dans la          passifs (scanrad ). La première étape
la structure de la mémoire logique           base ont des identités uniques,              consiste à voir les ports ouverts. Ora-
(Instance) et la structure physique          qui ont accès à des objets de la             cle, dans sa configuration standard,
des fichiers - base de données. Les          base. Les utilisateurs sont le plus          écoute sur les ports basiques qui
processus sont divisés en processus          fréquemment identifiés par des mots          pourraient être identifiés. Pour trouver
utilisateur et en processus serveurs.        de passe. Chaque utilisateur a un            des Listeners en exécution, utilisez
Quand l'utilisateur exécute l'application,   Schema, lui appartenant et où ses            des outils comme : TSNPING. Après
le processus utilisateur se connecte         objets sont stockés. Les privilèges          que le serveur de bdd ait été trouvé,
à l’instance. Si la communication est        sont un ensemble d’opérations qu’un          essayons d’obtenir sa version, la
établie, la session démarre.                 utilisateur pourrait utiliser. Les profils   Plate-forme, le SID et la configuration,
     Pour chaque utilisateur, le serveur     sont un ensemble d'options qui limite        ceci grâce à TSNLSNR IP Client, qui
alloue un PGA (Program Global Area)          l'utilisation de la base de données.         permet les commandes pings, et qui
dans lequel il stocke les variables de       Ils pourraient définir des tentatives        obtient la version, les services et l’état
session. Une instance d’Oracle est           maximum d’essais de mot de passe             en cours du serveur. L’information
faite par la mémoire principale : SGA        avant que le compte ne se ferme etc.         demandée n'est obtenue que lorsque
(System Global Area) et les processus        Les Tables ont des lignes et colon-          l’Administrateur n’a pas mis de mot
en tâches de fond. Les processus             nes. L'accès aux tables peut être            de passe au Listener d’Oracle. Si un
les plus importants sont le System           défini et limité sur la base des lignes      mot de passe est attribué au Listener,
Monitor – SMON (prend soin d’une             avec le Virtual Private Database             il n'est plus possible d'obtenir des in-
restauration en cas de problème,             (Base de donnée virtuel privé). Les          formations. Il y a d’autres outils dispo-
compacte l’espace libre dans une             triggers (déclencheurs) sont des ins-        nibles pour l’exploration des Listeners :
Base de Données), Process Monitor            tructions stockées, qui s’exécutent          TNSCmd et OScanner. NGSSQuirrel
– PMON (surveillance des processus           sur des événements comme : une               est quant à lui, un produit commercial.
actifs et assure leur support), DBW –        insertion dans une table ou l’arrêt de       Ce programme est complexe mais
Database Writer et Log Writer – LGWR         la base de données. Les procédu-             dispose de nombreuses fonctions.
(écrit les enregistrements permettant        res stockées sont des programmes             Certaines sont seulement disponibles
un retour en arrière). Oracle est            écrits sous PL/SQL (langage de               avec un compte Oracle, cependant
composé de fichiers de contrôle              programmation SQL). Toutes les               il permet également des attaques
(les contrôles de fichiers incluent le       informations sur la base de données          de type : Brute Force ou avec des
nom de la base, l’emplacement des            sont stockées en dictionnaire de             Dictionnaires sur un compte utilisa-
fichiers de données and refont des           données.                                     teur. Si un Listener est non-sécurisé,
Logs), de fichiers de données et les                                                      plusieurs angles d’attaques sont en-
Redo Logs (enregistrant l’ensemble           Hacking Oracle                               visageables. Dans le passé, il y avait
des changements dans une Bdd).               Avant de commencer, il doit y avoir          beaucoup d’alertes de sécurité. Cer-
L’information sur les processus en           une phase d’analyse du réseau.               taines sont des attaques : NERP DoS,
cours est placée dans les tableaux           Cette phase nécessite la recherche           requêtes de versions illégales, trans-
V$PROCESS           et    V$SESSION.         d’informations essentielles, qui             fert de données trop faible, attaques
La communication avec le monde               pourraient être récupérées par une           de fragmentations ou des attaques
extérieur est gérée par le Listener          base de données Whois, des moteurs           SERVICE_NAME DoS. De plus, il est
d’Oracle. Sa configuration se situe          de recherche, Serveurs DNS ou par            possible de changer le mot de passe
dans le fichier :.ora. SID (Oracle           du Social Engineering. Le moteur de          du Listener qui conduit au HiJacking,

                                               www.hakin9.org                                                    hakin9 Nº 5/2007        37
Pratique

     à l'arrêt du Listener ou de l’ensemble       Créer un Rootkit pour installer une        M-CODE, ensuite passé à la Machine
     des paramètres avec la commande              porte dérobée (backdoor) ou mettre         Virtuel. Dans la version 9i il y avait la
     SET. Quand le SID et la version sont         en place d’autres choses plus mali-        possibilité de deviner le but d’un code
     connus, différents noms d’utilisateurs       cieuses sans être découvert.               grâce au reverse engineering. Dans
     et mots de passe peuvent être testés :            Une autre technique pour par-         ce code, les éléments de base étaient
     d'abord, les mêmes noms d’utili-             courir en cascade les privilèges           retrouvés (structure de données,
     sateurs et mots de passe. Ensuite,           est de décrypter les mots de passe         pointant sur la variable, fonction
     testez les noms d’utilisateurs et mots       d’autres utilisateurs depuis la table      d’un type de données dans le code
     de passe usuels. La prochaine étape          SYS.USER$. Oracle utilise des              source). Dans la version 10g, la Table
     dans l’ordre serait une attaque par          algorithmes de hashing basés eux-          Symbol n’est plus visible. Oracle 10g
     dictionnaire et finalement une brute         mêmes sur des algorithmes DES. Le          R2 a de nouvelles fonctionnalités pour
     force. Hydra permet de vérifier les          principe de cet algorithme de cryp-        empaqueter par DBMS_DLL (fonction
     noms d’utilisateurs et mots de passe.        tage le salt (pass aléatoire) d’un mot     CREATE _ WRAPPED).
          L’autre possibilité, pour obtenir       de passe. Dans Oracle, cependant,               Même pour le système de base
     l’accès au serveur de bdd Oracle             il y a une vulnérabilité à choisir salt,   de données, il pouvait exister un ver.
     est de sniffer la connexion. Si la           caractères non sensibles à la casse        Il y a déjà un Proof of Concept (Preuve
     communication entre l’utilisteur et le       et des algos de hash vulnérables. L’ac-    par concept) nommé Oracle Voyager
     client n’est pas sécurisée, elle peut être   cès aux tables SYS.USER$ est lié au        Worm. Ce ver essaye d’effectuer cer-
     sniffée par n’importe quel sniffer sur le    droit d’accès SELECT ANY DICTIONARY.       taines actions : grant DBA to PUBLIC,
     réseau. En premier lieu, l’utilisateur            Les vecteurs d’attaque consistent     supprimer le trigger et créer un trigger,
     envoie le nom d’utilisateur à la base de     à sniffer les communications sur le        exécuté après login entré et accès
     données. Si le nom d’utilisateur existe      réseau, à procéder à des injections        à Google, il essaye également d’en-
     alors le serveur vérifie le cryptage         SQL ou accéder à la table SYSTEM           voyer des mails avec le Oracle pas-
     hash du mot de passe de l’utilisateur.       (system.dbf) depuis l’OS hôte. Le          sword Hashes. Par la suite, il essaye
     Il utilise un numéro secret basé sur         langage PL/SQL est basé sur le             de scanner l’existence d’une autre
     l’heure du système.                          langage de programmation ADA. PL/          base et tente de s’y connecter et éta-
          Après avoir obtenu l’accès à la         SQL permet de compiler le code en          blir un lien.
     base, il est nécessaire de vérifier
     s'il est possible d’avoir accès en             Listing 1. Création d’un nouveau profil
     chaîne aux droits sur le système. Les
     méthodes les plus connues sont : les           CREATE PROFILE paranoid LIMIT
                                                    FAILED_LOGIN_ATTEMPTS 3
     Injections SQL, Buffer Overflow et
                                                    PASSWORD_LOCK_TIME 30
     le Cross – Site Scripting. La logique          PASSWORD_LIFE_TIME 90
     de base des injections PL/SQL est              PASSWORD_GRACE_TIME 3
     d’attaquer les programmes, autorisant          PASSWORD_VERIFY_FUNCTION check_the_password;
     les entrées utilisateur.
          Cette entrée permet à un hacker           Listing 2. Exemple de fonction qui vérifie le mot de passe
     d’écrire son propre code. Cette mé-            CREATE OR REPLACE FUNCTION check_the_password
     thode est utilisée par exemple pour               (i_am_user_id VARCHAR2, new_magic_word VARCHAR2, old_magic_word VARCHAR2)
     outrepasser le DBMS_ASSERT                        RETURN BOOLEAN IS
     (Oracle 10g R2) – ceci est utilisé                BEGIN
                                                          IF length(new_magic_word) < 5 THEN
     pour vérifier les données saisies. Il
                                                             raise_application_error(-20001, 'Your Magic Word Is Too Short!');
     y a aussi une autre méthode appe-                    END IF;
     lée le Dangling Cursos Snarfing. Le                  IF NLS_LOWER(new_magic_word) IN ('password', 'drowssap') THEN
     principe réside sur le fait qu’Oracle                   raise_application_error(-20002, 'I will Not Accept Your Magic
     ne ferme pas tous les curseurs après                          Word');
                                                          END IF;
     son utilisation. Si un utilisateur avec
                                                          RETURN TRUE;
     des privilèges crée un curseur, ce                END;
     dernier peut être utilisé par utilisa-
     teurs ayant moins de privilèges pour           Listing 3. Fonction qui retourne la chaîne qui sera ajoutée à la requête
     parcourir en cascade les droits sur
     les utilisateurs ayant plus de privi-          CREATE OR REPLACE FUNCTION deny_table_rows (
                                                       usr_schema VARCHAR2,
     lèges. Pour contrer cette méthode,
                                                       usr_object VARCHAR2) RETURN VARCHAR2 AS
     les curseurs ouverts devraient être            BEGIN
     fermés juste après leur utilisation.              RETURN 'user != SYS';
     Après avoir parcouru les privilèges,           END;
     plusieurs choses sont possibles.

38   hakin9 Nº 5/2007                                                 www.hakin9.org
Hacking et Preuve sous une Bdd Oracle

Se défendre                                   les adresses MAC connues). Il est         d’authentification, il est bon de dé-
sous une base                                 important aussi de placer le serveur      finir des droits, rôles, profils et res-
de données Oracle                             de Bdd derrière un pare-feu lequel        treindre les ressources disponibles.
La première chose à faire pour sécuri-        doit être placé en dehors du réseau       Les droits courants du système sont
ser la bdd est une restriction physique       protégé et il est nécessaire d’ouvrir     obtenus à partir de la vue USER_
à celle-ci. Il est important d’effectuer      les ports et protocoles sécurisés.        SYS_PRIVS. Les droits d’accès aux
cette étape afin de se prémunir des re-       Enfin, il est recommandé d’utiliser       tables sont stockés dans USER_
démarrages ou d'un arrêt. La tendance         l’Oracle Connection Manager.              TAB_PRIVS.
pour l’authentification sont les disposi-         OCM permet de sécuriser de                 La colonne ADMIN_OPTION
tifs biométriques. Ceux-ci incluent les       façon significative l’accès au serveur    montre, s'il est possible d’accorder
empreintes digitales, l’identification au     de base de données via le réseau.         des droits à un autre utilisateur.
niveau de l’iris ou une identification du     Il est important également de sé-         En raison du besoin de grouper
visage.                                       curiser le Listener d’Oracle, chan-       les droits, groupons-les au sein
     La prochaine étape au niveau             ger les ports par défaut, utiliser le     du rôle. Il y a des rôles prédéfinis :
sécurité est de protéger les systèmes         Node Filtering, filtrant les clients      CONNECT, RESOURCE et DBA.
d’exploitation hôtes. Cette partie inclut     selon leurs adresses IP. Une des          Il est essentiel d’en prendre soin, car le
la désinstallation de l’ensemble des          tâches courantes doit être la vérifi-     rôle CONNECT ne sert pas seulement
services non nécessaires (ftp, telnet         cation des Logs du Listener d’Oracle.     à connecter l’utilisateur à la base, mais
etc.), permettre l’activation du pare-feu     Il y a une option dans l’authentifica-    il permet aussi la création de tables,
et la mise en place d’une politique de        tion utilisateur : l’Identification par   synonymes ou vues. Pour récupérer
sécurité. Avant de raccorder Oracle           Système d’Exploitation.                   le rôle d’un utilisateur, utilisez la vue
au réseau, il est important de contrôler          Cette option n’est plus sûre.         USER_ROLE_PRIVS. Pour protéger
les droits d’accès pour chaque fichier        Il n’est pas recommandé de l’utili-       les ressources de la base, utilisez
et répertoire. Supprimer les comptes          ser, tout simplement parce qu’elle        les profils.. DBA_PROFILES liste les
utilisateurs qui ne sont pas indispen-        est vulnérable. Dans le processus         enregistrements de la base à propos
sables, supprimer les logiciels non
indispensables et les Systèmes de               Listing 4. Police, qui ajoute la fonction deny _table_rows à la table
Detections d’Intrusions (IDS).                  sec_table
     Désinstaller également les ban-
nières pour empêcher la détection               BEGIN DBMS_RLS.add_policy (
                                                      object_schema => 'sec_user',
du système d’exploitation, avoir un
                                                      object_name => 'sec_table',
anti-virus, des points de contrôles                   policy_name => 'sec_table_policy',
réguliers, la surveillance au niveau                  policy_function => 'deny_table_rows');
des logs et restreindre le nombre de            END;
super-utilisateurs. Hormis la sécurité
relative aux systèmes d’exploitations,          Listing 5. Bloque PL/SQL anonyme qui crypte la chaîne en AES
il est également important de sécuriser         256-bit
les stations de travail. Celles-ci doivent      /* CRYPT IT ROUTINE IN AES 256-bit */
être sécurisées en différents niveaux           DECLARE
selon leur type d’utilisation (Adminis-            k4y RAW (32);
tration des Bdd, Developpement, les                t0p_s3cr3t_3nc RAW (2000);
                                                   t0p_s3cr3t_d3c RAW (2000);
applications en cours). Certains vec-
                                                BEGIN
teurs d’attaque utilisent les fonctionna-          /* 256 bit key - 32 byte */
lités des clients SQL comme TOAD ou                k4y := DBMS_CRYPTO.RANDOMBYTES(256/8);
SQL*Plus.                                          t0p_s3cr3t_3nc := DBMS_CRYPTO.ENCRYPT (
     L’attaque pourrait cibler les fichiers           src => UTL_I18N.STRING_TO_RAW ('h4x0rIzN0tD34d', 'AL32UTF8'),
                                                      typ => 4360,
ou les enregistrements du registre
                                                      /* encryption type - DBMS.CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC
qui permettent l’exécution de code                      + DMBS_CRYPTO.PAD_PKCS5 */
après authentification. Beaucoup de                   key => k4y
clients stockent également des mots                );
de passe. Même si le mot de passe                  t0p_s3cr3t_d3c := DBMS_CRYPTO.DECRYPT (
                                                      src => t0p_s3cr3t_3nc,
stocké est crypté, il est indiqué. Dans
                                                      typ => 4360,
le domaine de la sécurité réseau,                     key => k4y
il est indispensable d’implémenter                 );
des restrictions physiques au réseau               DBMS_OUTPUT.PUT_LINE (UTL_I18N.RAW_TO_CHAR (t0p_s3cr3t_d3c, 'AL32UTF8'));
(Cf. Limiter l’obtention des adresses           END;
IP avec le DHCP seulement pour

                                                www.hakin9.org                                                hakin9 Nº 5/2007       39
Pratique

     des profils. L’administrateur crée son       possible de travailler avec le Dictio-      être compromis. Ceux-ci incluent :
     propre profil (Cf. Listing 1).               naire des Données, ce qui est à éviter.     UTL _ SMTP (pour l’envoi d’e-mails),
         En outre, dans le profil, peut être      Ajouter le paramètre d’initialisation       UTL _ TCP (pour l’utilisation de TCP/
     déterminé le nombre d’essais que             07 _ DICTIONARY _ ACCESSIBILITY        =    IP), UTL _ HTTP ( pour l’accès au Web),
     possède un utilisateur pour entrer un        FALSE   étend la protection du diction-     UTL _ FILE (pour l’accès au système
     mot de passe avant que le compte ne          naire des données. Ce paramètre             de fichier) et un paquet de cryptage
     soit bloqué. PASSWORD_LOCK_TI-               restreind le privilège DELETE ANY. Il est   DBMS_CRYPTO. Un contrôle effec-
     ME définit le temps de blocage du            également intéressant de ne donner          tif est atteint en utilisant un paramètre
     compte après le nombre maximum               à l’utilisateur que les privilèges né-      d’initialisation REMOTE _ OS _ AUTH     =
     d’essais pour entrer le mot de passe.        cessaires, rien de plus, tout comme         FALSE.
     PASSWORD_LIFE_TIME définit la                il convient de restreindre le rôle par           Pour les tâches courantes d’ad-
     durée de vie du mot de passe en              défaut PUBLIC.                              ministration (démarrage, fermeture,
     jours. PASSWORD_GRACE_TIME                       Le rôle PUBLIC est attribué par         sauvegarde, restauration et archi-
     définit le nombre de jours avant             défaut à chaque nouvel utilisateur          vage) utilisez le rôle : SYSOPER (au
     l’expiration du mot de passe lorsque         Oracle. Dans la configuration de            lieu de SYSDBA). La base de données
     Oracle affiche l’avertissement sur           base, ce rôle permet de travailler          Oracle offre plusieurs niveaux de
     l’expiration du mot de passe. Il y a         avec des paquetages qui pourraient          sécurité. Ce type de sécurité fait
     une possibilité intéressante : créer
     sa propre fonction (Cf. Listing 2) qui
     vérifiera le mot de passe avant son              À propos de l’auteur
     changement.                                      Mikoláš Panský est employé chez Czech computer company Cleverlance Enterprise
         La fonction de vérification permet           Solutions en tant que développeur de bases de données. Il est également professeur
     de contrôler la bonne longueur du                à la Charles University Faculty of Education, où il est allé après avoir passé son
     mot de passe ou s'il ne s’agit pas d’un          master d’informatique.
                                                      Contact avec l’auteur : mikolas.pansky@gmail.com
     mot de passe issu d’un dictionnaire.
     Le profil est accordé à l’utilisateur
     lors de sa création ou avec la com-
     mande :
                                                      Sur Internet
     ALTER USER n1c3_us3r PROFILE paranoid
                                                      •   http://en.wikipedia.org/wiki/Oracle_Database,
                                                      •   http://www.oracle.com/database,
     Une autre fonctionnalité au niveau de
                                                      •   http://www.red-database-security.com/whitepaper/oracle_default_ports.html,
     la sécurité est la restriction de l’espace
                                                      •   http://www.dokfleed.net/duh/modules.php?name=News&file=article&sid=35,
     dans la table. Voici un exemple d’une            •   http://www.jammed.com/~jwa/hacks/security/tnscmd/tnscmd,
     commande à utiliser :                            •   http://www.ngssoftware.com/squirrelora.htm,
                                                      •   http://xforce.iss.net/xforce/alerts/id/advise82,
     ALTER USER n1c3_us3r 100M ON USERS;              •   http://www.appsecinc.com/resources/alerts/oracle/02-0013.shtm,
                                                      •   http://www.thc.org/thc-hydra/,
     D’autres étapes apportent la preuve              •   http://www.cqure.net/wp/?page_id=3,
     du hacking de la base de données                 •   http://www.petefinnigan.com/orasec.htm,
     Oracle. L’une de ces étapes est                  •   http://www.dba-oracle.com/t_oracle_biometrics_security.htm,
     l’installation des composants juste              •   http://www.databasejournal.com/features/oracle/article.php/3644956.
     nécessaires. Il est recommandé d’uti-
     liser le principe de la configuration
     la plus minime possible. Les options
     installées sont récupérées depuis la             Référence
     vue V$OPTION.
                                                      •   Alexander Kornbrust, 2006. Oracle rootkits, Hakin9 1/2006,
          Selon les vecteurs d’attaque, il
                                                      •   Joshua Wright, Carlos Sid, 2005. An Assesment of the Oracle Password Hashing
     est nécessaire de se défendre contre
                                                          Algorhytm,
     l’intrus, vérifiant le couple usernames/         •   Alexander Kornbrust, 2005. Hardening Oracle Administration– and Developer
     passwords. Il est bon de vérouiller ces              Workstations,
     comptes par une requête ALTER USER               •   William Heney, Marlene Theriault, 1998. O’Reilly – Oracle Security,
     hr ACCOUNT LOCK et/ou changer le mot             •   David Know, 2004. Effective Oracle Database 10g Security,
     de passe : ALTER USER hr IDENTIFIED              •   Integrity, 2004. Oracle Database Listener Security Guide,
     BY n1c3n3wp4ss; Attention à ne pas               •   Pete Finningan, 2006. How to unwrap PL/SQL,
     donner des privilèges : ANY. Si ce               •   Marlene Theriault, Aaron Newman, 2001. Oracle Security Handbook.
     privilège est accordé, il devient alors

40   hakin9 Nº 5/2007                                                  www.hakin9.org
partie du Virtual Private Database
(VPD).
     Le VPD assure les briques de
base de la sécurité. Ces derniers
définissent des fontions PL/SQL,
retournant des chaînes. Cette
fonction est par la suite ajoutée
à l’objet sélectionné (table, vue ou
synonyme), que nous souhaiterions
protéger avec le paquetage PL/SQL
DBMP_RLS.
     Si une requête SQL est produite,
Oracle ajoute en fin de requête la
chaîne résultante de la fonction
définie. Cette fonction peut ensuite
être une restriction, supprimant
des lignes, et qui contient dans la
colonne utilisateur la valeur : SYS
(Cf. Listing 3).
     La règle, qui assure, que la répon-
se de la requête SELECT ne contient
pas certaines lignes, est également
définie par le paquetage : DBMS _ RLS
(Cf. Listing 4). Pour de plus amples
informations, Cf. l’article sur le VPD
à : www.databasejournal.com.
     Il y a plusieurs raisons au cryptage
des données d’une base : par exem-
ple, se protéger et cacher les infor-
mations contre les administrateurs :
DBA ; ou atteindre une sécurité
standard. Pour crypter les données,
utilisez DMBS_CRYPTO (il devrait
remplacer : DBMS_OBFUSCATION_
TOOLKIT). DBMS_CRYPTO est
orienté sur le travail avec des types de
données RAW.
     Cela n’empêche pas la possibilité
de convertir VARCHAR2 vers du RAW et
vice-versa avec le pack UTL_RAW.
Ce paquetage offre DES (qui n’est par
ailleurs plus recommandé aujourd’hui),
triple-DES avec 3 clés, AES avec plu-
sieurs clés de tailles différentes et des
algorithmes RC4. Le Listing 5 montre
un exemple d’un cryptage AES de
256-bit avec Cipher-Block-Chaining
selon le standard PKCS#5 (Cf. RFC
2898).

Conclusion
Je voulais vous présenter au travers
de cet article des concepts de base
en sécurité des Bases de Données
Oracle de 2 points de vues diffé-
rents: l’attaque et la défense. l
Vous pouvez aussi lire