HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet.



Documents pareils
Sécurité des bases de données Nicolas Jombart Alain Thivillon

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Sécurité dans les SGBD

Vulnérabilités et sécurisation des applications Web

Sécurité des applications Retour d'expérience

Les risques HERVE SCHAUER HSC

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Attaques applicatives

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

SQL Server et Active Directory

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

SQL MAP. Etude d un logiciel SQL Injection

LES ACCES ODBC AVEC LE SYSTEME SAS

La haute disponibilité de la CHAINE DE

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Virtualisation et Sécurité

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Sécurité de la Voix sur IP

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Architectures web/bases de données

STATISTICA Version 12 : Instructions d'installation

Serveur d application WebDev

Mysql. Les requêtes préparées Prepared statements

Protection des protocoles

Installation et configuration du CWAS dans une architecture à 2 pare-feux

Test de HSQLDB et Comparatif avec Sqlite

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

FileMaker 13. Guide ODBC et JDBC

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Sécurité des applications web. Daniel Boteanu

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Sécurité des réseaux Les attaques

PySQLi. Framework d'injection de code SQL

Bases de SQL. Hacks 1-6 CHAPITRE UN

THEGREENBOW FIREWALL DISTRIBUE TGB::BOB! Pro. Spécifications techniques

LA PROTECTION DES DONNÉES

INSTALLATION DE WINDOWS 2000 SERVER POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

SQL Parser XML Xquery : Approche de détection des injections SQL

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

PHP 4 PARTIE : BASE DE DONNEES

Stockage du fichier dans une table mysql:

Use It Messaging Server V8 Bases

Sécurité des Postes Clients

contact@nqicorp.com - Web :

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Vulnérabilités et solutions de sécurisation des applications Web

et Groupe Eyrolles, 2006, ISBN :

//////////////////////////////////////////////////////////////////// Administration bases de données

JAB, une backdoor pour réseau Win32 inconnu

Créer un rapport pour Reporting Services

WDpStats Procédure d installation

Gestion des identités

Présentation d'un Réseau Eole +

Java et les bases de données

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Installation et Mise en œuvre de MySQL

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

Gestion de stock pour un magasin

III. Contexte. Objectifs. Philippe HOUE, Ecole des Mines de Nantes

Présentation du module Base de données spatio-temporelles

Sommaire. 1 Introduction Présentation du logiciel de commerce électronique 23

Dans le cadre de SECURIDAY Et sous le thème de Computer Forensics Investigation SECURINETS. Analyse des fichiers LOG. Tarek LABIDI (RT3)

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Mobilité et sécurité

PostgreSQL. Formations. Catalogue Calendrier... 8

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Introduction à ORACLE WAREHOUSE BUILDER Cédric du Mouza

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Administration de la base de données COMOS. Platform Administration de la base de données. Marques. Conditions requises. MS SQL Server 2005/2008

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

Bee Ware. Cible de Sécurité CSPN. Validation Fonctionnelle Validation Fonctionnelle Bon pour application AMOA BEEWARE BEEWARE

ClariLog - Asset View Suite

Configuration de plusieurs serveurs en Load Balancing

LemonLDAP::NG / SAML2. Xavier GUIMARD (Gendarmerie Nationale) Clément OUDOT (Groupe LINAGORA)

Menaces et sécurité préventive

Proxy et reverse proxy. Serveurs mandataires et relais inverses

<Insert Picture Here>ApExposé. Cédric MYLLE 05 Février Exposé Système et Réseaux : ApEx, Application Express d Oracle

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

OpenPaaS Le réseau social d'entreprise

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Simple Database Monitoring - SDBM Guide de l'usager

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Authentification et contrôle d'accès dans les applications web

Supervision système et réseau avec Zabbix. Anne Facq Centre de Recherche Paul Pascal 17 avril 2008

Auto-évaluation Oracle: cours de base

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

La double authentification dans SharePoint 2007

DÉVELOPPER DES APPLICATIONS WEB SÉCURISÉES

Guide de migration BiBOARD V10 -> v11

Système Normalisé de Gestion des Bibliothèques -SYNGEB : version Réseau-

StreamServe Persuasion SP4

Tom Pertsekos. Sécurité applicative Web : gare aux fraudes et aux pirates!

Tech-Evenings Sécurité des applications Web Sébastien LEBRETON

Guide d installation BiBOARD

Transcription:

HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet Journées CFSSI Sécurité et SGBD Nicolas Jombart <Nicolas.Jombart@hsc.fr> Alain Thivillon <Alain.Thivillon@hsc.fr>

2 / 30 Plan Les SGBD et la sécurité Problèmes dans quelques SGBD bien connus Oracle MS-SQL Server MySQL Recommandations Exemples d'attaques applicatives DOS Injection SQL Démonstrations (Annuaire, PHPNuke) Contres mesures Conclusion

Budgets Sécurité Les SGBD dans la sécurité Vont d'abord à l'achat de système de sécurité (firewalls, IDS,...) À la formation À la sécurisation des applications le SGBD est le parent pauvre de la sécurité Complexité Les BD sont une affaire de spécialistes: au niveau de leur gestion : DBA au niveau de la programmation On ne peut pas sérieusement faire de l'oracle deux fois par an Quand c'est le cas, la sécurité est encore pire! 3 / 30

Rôle du DBA Les SGBD dans la sécurité - 2 Maintenir le SGBD Gérer les comptes, les applications,... Pas de formation sécurité : ne peut pas «imaginer» les attaques possibles Mises à jour des systèmes D'expérience, 80% des serveurs de BD meurent avec le système et le SGBD initial: (Informix 7.2, Oracle 7.2,...) «If it works, don't fix it» Conséquence : de nombreuses failles système et applicatives ne sont JAMAIS corrigées, surtout sur les réseaux internes Criticité des applications 4 / 30 Arrêts impossibles La sécurité passe en dernier

Les SGDB dans la sécurité - 3 Le SGBD est souvent un composant Installé par ou avec un logiciel tiers ERP (SAP, Lawson) DataMining Gestion de parc (SMS,...) Pour SQL Server, voir par exemple (223 Applications recensées) : http://www.sqlsecurity.com/desktopdefault.aspx?tabindex=10&tabid=13 Géré via ce logiciel tiers Dans une version "croupion" (MSDE) Dans un mode d'installation par défaut Sa configuration de sécurité est bien souvent encore plus obscure! Et personne ne veut/peut prendre la responsabilité de modifier le paramétrage 5 / 30

Les risques Attaques sur le SGBD lui même Failles connues classiques (buffer overflows, bugs d'authentification,...) Failles dans les applications associées: serveurs Web d'administration, démons snmp, programmes setuid root installés par le SGBD,... Mauvaises configurations Modes d'authentification dégradés (.rhosts,...) Mots de passe par défaut Fichiers de la BD non sécurisés (lecture par tous) Interception de mots de passe Par écoute du réseau Par lecture de fichiers de configuration sur disque 6 / 30

Les risques - 2 Attaques sur les applicatifs Injection SQL sur les applications Web Détournement des requêtes effectuées par un ERP Autorisations trop larges Attaques sur l'os via le SGBD Ecriture/lecture de fichiers, exécution de commandes 7 / 30 La base de données tourne avec des privilèges différents Contournement de la politique de sécurité 'safe_mode' de PHP chroot Critique chez les hébergeurs Web mutualisés load data infile '/web/data/a/anotheruser/db.param' INTO hack... select into outfile '/web/data/a/anotheruser/...' FROM hack

Exemples : Oracle - 1 Problème le plus évident: utilisation d'une fonctionnalité dangereuse: «remote_os_authent» Oracle fait confiance au client pour authentifier l'utilisateur S'il envoie ZDOING, il est transformé en OPS$ZBOING (pas de mot de passe) C'est la configuration par défaut des installations SAP! MYSID OPS$ZBOING Windows Logon : ZBOING Hello, je suis ZBOING sqlplus /@MYSID OK ZBOING! 8 / 30

EXTPROC Oracle - 2 C'est un service Oracle que le Listener connaît dans les installations par défaut Sert à Oracle pour exécuter des procédures stockées dans des.dll (Windows) ou des.so (Unix) (c'est une sorte de RPC Oracle) Il est possible de l'utiliser sans s'identifier distance avec les privilèges d'oracle xterm possibilité d'exécuter du code à Load libc.so exec(2) args = xterm, -display, ip:0 extproc 9 / 30

Oracle - 3 Multiples vulnérabilités dans IAS (Serveur HTTP Oracle 9i) Version ancienne d'apache Débordement de buffer dans le module PL/SQL Double décodage : http://oracleserver/pls/dadname/admin_/help/..%255cplsql.conf Exécutions de commandes SQL via OWA_UTIL http://oracleserver/pls/dadname/owa_util.cellsprint?p_thequery=select * from sys.dba_users... Débordement de buffer TNS Listener... comptes et mots de passe par défaut (SCOTT/TIGER, SYS/CHANGE_ON_INSTALL, SYSTEM/MANAGER,...) Il faut suivre les correctifs : http://technet.oracle.com/deploy/security/alerts.htm 10 / 30

Produit complexe MS-SQL Server Tourne avec les droits LocalSystem Application des Service Pack parfois douloureuse Deux modes d'authentification NT Only : authentification sur le domaine NT/2000 Mixed-Mode : idem + comptes internes. Attention potentiellement tous les utilisateurs du domaine ont accès au serveur! Jusqu'à SQL2000, compte «SA» sans mot de passe par défaut à la création du système Des centaines de serveurs compromis par ce biais Utilisation de nombreuses procédures externes, dont xp_cmdshell compromission totale du serveur 11 / 30

MS-SQL - 2 Ver SQLSlammer Utilise le service de localisation des serveurs (UDP/1434) Basé sur bug découvert par NGSSoftware/D.Lichtfield nombreuses erreurs de programmation buffer overflow, heap overflow, déni de service réseau Le ver se renvoie par UDP ça consomme peu de ressources systèmes (pas besoin de rouvrir un socket à chaque paquet) pas d'attente, pas de ACK Déni de service réseau immédiat sur les infrastructures des hébergeurs "I'm working on it for some friends, and I'm seeing about 900mbits/second on a gigabit link coming out of their hosting facility. " Deux mois après:... 12 / 30 Mar 24 18:41:10 ng0 @0:24 b 69.22.18.6,1168 -> 217.128.134.100,1434 PR udp len 20 404 IN

MS-SQL - 3 Sur un /17 (32768 adresses IP) 13 / 30

MS-SQL - 4 Problème dans l'authentification (débordement de buffer) http://www.securityfocus.com/bid/5411 (Aout 2002) Passage du mot de passe en clair pour les logins non NT Simple XOR avec 0xA5 Débordement de buffer/de tas dans les procédures externes Un seul octet à écraser et le système de privilèges est ignoré Procédures dangereuses xp_readerrorlog : lecture de fichiers xp_regread : lecture de la registry SQL Agent Job : submission de jobs, permet de monter les privilèges 14 / 30

MySQL - 1 SGBD "Light" et facile à mettre en place Très très utilisé dans les «petits» sites Système de privilèges mais fonctions manquantes (vues notamment) 2000 : gros problème d'authentification Dans la phase d'auth, le serveur ne vérifie que le nombre de caractères envoyé par le client : avec 32 essais il est possible de comprometre n'importe quel compte Ressurgit en 2002 dans COM_CHANGE_USER (changement d'identité) Hello, je suis "root" 1234567890 random(hash(unsuperpassword),hash(1234567890)) FirstChar(random(hash(UnSuperPassword),hash(1234567890))) 15 / 30

Mysql - 2 Mauvaise génération du challenge 2001: Buffer Overflow dans SELECT Plusieurs corruptions de mémoire dans certaines fonctions Lecture du fichier de configuration dans $DATADIR/my.cnf Tous les utilisateurs ayant le privilèges 'FILE' peuvent écrire dans ce répertoire changement possible des paramètres de démarrage du serveur Fonctions intéressantes dans MySQL Association (host,password) : limitation des adresses IP Sources Limiter les adresses en écoute (127.0.0.1) Utilisation locale de sockets Unix : plus de réseau 16 / 30

Contre mesures - 1 Ne jamais exposer un serveur BD sur Internet S'il y a besoin d'accès directs au SGBD, il faut utiliser des tunnels, un firewall avec authentification forte ouvrant le flux,... Il faut etre sûr de filtrer les ports SGBD (1521, 1527, 3306, 1434, 135...) Attention aux hébergeurs pas chers! Ne jamais partager un serveur BD Durcissement de l'os 17 / 30 Va limiter l'exploitation de failles Appliquer les procédures classiques non installation des composants annexes limitation des services réseaux application régulière des correctifs de sécurité signature du système

Contre mesures - 2 Appliquer le principe de défense en profondeur et de cloisonnement par une architecture en strates Internet HTTP/HTTPS WWW / JRUN WWW / Relais Inverse Sqlnet/1521 Servlet/8080 SGBD Lan 18 / 30

Contre mesures - 3 Durcissement installation SGBD Changer les mots de passe par défaut (Oracle) Supprimer les comptes par défaut Ne pas installer les exemples, les applications annexes,.. Séparation des privilèges Recenser les rôles dans l'application (admin, mise à jour, lecture,...) Appliquer ces rôles dans les privilèges attribués Audit des applicatifs Parler sécurité avec les développeurs (SQL Injection, XSS, débordements de buffer, validation d'entrées...) Recherche des points critiques, des flux utilisateurs,... Audit des sources Java, ASP, PHP, Perl, C,... 19 / 30

Déni de service Objectifs de l'attaquant : prendre de la ressource sur la base de données Demander un nombre trop grand d'enregistrements Jointures mal définies Chercher à prendre de la ressource (CPU) et de la mémoire moteur de recherche exemple des robots (Google, dir.com) 20 / 30

Injection SQL Principe : Insérer du code SQL forgé dans une requête construite dynamiquement pour modifier son comportement Application utilisant une entrée de l'utilisateur (nom, n, information, etc.) : Construction de la requête Exécution dans la base de données associée à l'application Traitement/présentation de la réponse 21 / 30

Plusieurs méthodes : Injection SQL : méthodes Modifier le comportement SELECT * FROM table WHERE login='hsc' or 'x'='x' "Coller" deux requêtes SELECT * FROM table WHERE login='hsc' ; SELECT * FROM passwords; Utilisation de fonctions du SGBD master.xp_cmdshell (MS-SQL) shell("ping.exe 10.20.30.40") (MS-SQL) Utilisation de UNION, ou de sous-requêtes... 22 / 30

Le problème Login/Mot de passe entrés dans un formulaire Un script en perl $name = $query->param("name"); $password = $query->param("pass"); $sth = $dbh->prepare("select password WHERE name=$name"); $sth->execute(); $row = $sth->fetchrow_hashref(); if($$row{"password"} eq $password) { # Ok... } else { &login_error; } $name peut contenir un nom plus des caractères de contrôle Il est donc possible de modifier la requête en y ajoutant des commandes 23 / 30

Injection SQL : autre exemple Vulnérabilité IMP (Webmail), 8 janvier 2003 $sql="select username from $default->db_pref_table where username='$user@$server'"; http://webmail.server/imp/mailbox.php3?actionid=6&server=x&imapuser=x';somesql+--&pass=x" 24 / 30

Injection SQL : écueils Quotes Il est souvent nécessaire de commencer une injection en fermant l'apostrophe (" ou ') Lors d'une insertion (variable située en milieu de requête) Il faut supprimer la fin en utilisant les commentaires (-- /* etc.) Il est souvent nécessaire d'encoder les caractères dans l'url %20 pour espace Ou double-encodage : %2520 Cependant les possibilités et méthodes d'injection dépendent : Du SGBD utilisé Du driver utilisé pour la connexion au SGBD (limitations supplémentaires) On ne voit pas toujours les résultats (couche de présentation) 25 / 30

Injection SQL : messages d'erreur Attaque par tâtonnements : Certaines applications renvoient à l'utilisateur le message d'erreur du driver utilisé pour se connecter. http://webserver/script.asp?id=0--%20%28select%20*%20from%20table%29 Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access Driver] You have written a subquery that can return more than one field without using the EXISTS reserved word in the main query's FROM clause. Revise the SELECT statement of the subquery to request only one field. /script.asp, line 15 26 / 30

Injection SQL : UNION Trouver le nombre de colonnes d'une table Avec un nombre incorrect : http://webserver/script.asp?id=1%20union%20select%20*from%20table Microsoft OLE DB Provider for ODBC Drivers error '80004005'% [Microsoft][ODBC Microsoft Access Driver] The number of columns in the two selected tables or queries of a union query do not match. /script.asp, line 15 Avec un nombre correct : http://webserver/script.asp?id=1%20union%20 SELECT%20a,%20,%20b,%20c,%20d,%20e,%20f,%20g,%20h,%20i,%20j*from%20table Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect. /script.asp, line 15 27 / 30

Contre-mesures Valider les entrées Ne protégera pas que des problèmes d'injection SQL Utiliser les fonctions spécialement conçues du driver Exemple avec perl DBI : $dbh->quote(); mysql_escape_string(), etc. Attention, ça ne règle pas tout : il devient possible d'insérer du code SQL dans la base elle-même (par exemple, création d'un compte admin'--) Problème des entiers : vérifier que les entiers sont bien numériques... Ne donner à l'utilisateur (SGBD) de l'application que les droits nécessaires Par exemple SELECT dans le cas d'une simple consultation SELECT, INSERT et UPDATE dans la plupart des cas 28 / 30

Les SGBD sont: Complexes Conclusion Leur sécurité n'est pas toujours maîtrisée Les risques sont réels et parfois ignorés Expériences HSC Il faut sensibiliser la chaîne: Appels d'offre/cahier des charges Développeurs Recettes Dba, Administrateurs, Réseau,... Questions? 29 / 30

Références NGSSoftware : http://www.nextgenss.com/ SQLSecurity : http://www.sqlsecurity.com About.COM: http://databases.about.com/cs/security/ Sans: http://www.sans.org/rr/win/sql_sec.php 30 / 30