HERVÉ SCHAUER CONSULTANTS HERVÉ SCHAUER CONSULTANTS
Cabinet de Consultants en Sécurité Informatique depuis 1989 Cabinet de Consultants en Sécurité Informatique depuis 1989
Spécialisé sur Unix, Windows, TCP/IP et Internet Spécialisé sur Unix, Windows, TCP/IP et Internet
Sécurité des bases de Sécurité des bases de
données données
Nicolas Jombart – Alain Thivillon
Nicolas Jombart – Alain Thivillon
Place des bases de données Place des bases de données
dans la sécurité du SI dans la sécurité du SI
Budgets Securité
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 !
Contraintes sur la sécurité Contraintes sur la sécurité
Rôle du DBA
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 : Arrêts impossibles
La sécurité passe en dernier
Contraintes (2) Contraintes (2)
Le SGBD est souvent un composant
installé par ou avec un logiciel tiers
ERP (SAP, Lawson) DataMining
Gestion de parc (SMS, ...)
Pour SQL Server : 223 Applications recensées en 2003
Géré via ce logiciel tiers
Dans une version limitée (exemple MSDE pour Epolicy Manager) 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
Types d'attaques Types d'attaques
Attaques sur le SGBD lui même
failles connues classiques (buffer overflows, bugs d'autentification, injections SQL dans les procédures stockées, ...)
failles dans les applications associées: serveurs Web d'administration, applications Web, serveurs LDAP, démons snmp, programmes setuid root installés par le SGBD, ...
Mauvaises configurations
modes d'authentification dégradés (.rhosts, OPS$... ...) mots de passe par défaut
Interception de mots de passe
par écoute du réseau
par lecture de fichiers de configuration sur disque
Types d'attaques (2) Types d'attaques (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
écriture/lecture de fichiers, exécution de commandes
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 ...
Securité Listener Securité Listener
Gestion des accès réseaux Oracle Problèmes de sécurité
Peut être arrêté à distance sans mot de passe
Peut être utilisé (via la fonction de trace) pour écraser n'importe quel fichier Oracle.
Attention aux entrées ExtProc qui peuvent permettre à des anonymes d'exécuter du code arbitraitre via les appels de procédures externes Multiples dénis de service
Possibilité:
De placer un mot de passe
De limiter l'accès réseau Oracle : tcp.validnode_checking = yes, tcp.invited_nodes = (x.x.x.x, ...)
Cf
http://www.integrigy.com/info/Integrigy_OracleDB_Listener_Security.pdfMots de passe par défaut Mots de passe par défaut
Combien d'installations Oracle 8 ont encore
SYSTEM/MANAGER et SYS/CHANGE_ON_INSTALL ?
Au moins 80% de nos audits (et c'est bien pratique, ...) Permet d'accéder à tous l'environnement à distance
Permer d'écrire des procédures stockées appelant le système
Mots de passe des comptes applicatifs
appli/appli ...
Comptes par défaut installés par Oracle ...
Possession des tables, privilèges DBA attribués abusivement, ..
Vulnérabilités Oracle Vulnérabilités Oracle
Multiples vulnérabilités découvertes en permanence
25 vulnérabilités en un seul jour
Principalement liées aux extensions (mod_plsql, ...)
Beaucoup de problèmes liées aux procédures stockées nécessaires au fonctionnement de IAS et autres ...
Exemple: gain des privilèges via le compte CTXSYS
Produit difficile à patcher
La suppression des comptes par défaut, une installation
minimalisée permet de réduire beaucoup de problèmes
Vulnérabilités Oracle Vulnérabilités Oracle
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 POUET, il est transformé en OPS$POUET (pas de mot de passe)
Hello, je suis POUET
ROMINET
sqlplus /@ROMINET
OK POUET !
En environnement Internet En environnement Internet
Typiquement utilisé pour « dynamiser » les sites Web
Contenu mobile (publications)
Commerce électronique / Notion de compte
Risques principaux sur la base de données :
Injection SQL
Compromission de la base depuis une autre machine compromise
Les bases de données sont souvent moins durcies
Comptes oracle/oracle
Systèmes d'exploitation non configurés pour la sécurité
Déni de service
Défense en profondeur Défense en profondeur
HTTP/HTTPS
Sqlnet/1521
Servlet/8080
Architecture en strates
Conseils de sécurité Conseils de sécurité
Durcir le système d'exploitation
Notamment l'accès, et les comptes
Supprimer les exemples, les autres applications satellites
Pour l'écriture de l'application
Principe de séparation des privilèges
Savoir quels comptes sont nécessaires (Création, Lecture, Mise à jour, Sauvegarde)
Appliquer ces rôles dans la base de données
Comptes SELECT seulement
Comptes ayant accès à toutes les tables/à certaines tables ...
Se prémunir contre l'injection SQL et le déni de service
En contrôlant ce qui est envoyé à la base de données
Risques applicatifs Risques applicatifs
Protection contre le déni de service
Conception de la base
Empêcher de générer trop de calculs ou trop de réponses
Injection SQL
Le principe de l'attaque : Insérer du code SQL dans une requête construite dynamiquement, pour modifier son comportement
Outrepasser par exemple un contrôle effectué par l'application
Fonctionnement d'une application :
1. Récupération de données client (formulaires, fichiers XML, ...)
2. Construction d'une requête SQL (SELECT, INSERT, procédure, ...) 3. Exécution de celle-ci sur la base
4. Traitement des résultats et présentation
Injection SQL Injection SQL
Différentes méthodes :
Modification simple de comportement
SELECT * FROM users WHERE name='hsc' and password='xxx' or 'x'='x'
Enchaînement de deux requêtes
SELECT * FROM table WHERE login='hsc' ; SELECT * FROM passwords '
Ne fonctionne plus avec la plupart des drivers Utilisations de fonctions spécifiques
master..xp_cmdshell (MSSQL) shell("ping.exe 10.20.30.40")|
Utilisation de UNION
SELECT Ccnum, Ccexp FROM Creditcards WHERE Ccnum='xxx'
Injection SQL Injection SQL
Exemple : Vulnérabilité IMP (Webmail) de janvier 2003
Écueils
Utilisation des quotes (simples ou doubles) et des commentaires Les résultats ne sont pas toujours visibles
Couche de présentation
Les possibilités peuvent dépendre du driver utilisé et de la base attaquée
$sql="select username from $default->db_pref_table where username='$user@$server'";
http://webmail/imp/mailbox.php3
?actionID=6&server=x&imapuser=x';somesql+--&pass=x"
De l'utilité des messages d'erreur De l'utilité des messages d'erreur
Exemple avec le driver ODBC/ASP
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
Se prémunir Se prémunir
Sécurité du développement : valider les entrées
Règle fondamentale, ne protégera pas que contre l'injection SQL
Injection de code, modification de comportements, buffer overflows, ...
Utiliser les fonctions spécialement conçues par le driver
->quote() (Perl DBI)
mysql_escape_string (PHP) magic_quotes (PHP)
...
Se connecter avec des comptes différents si nécessaire
Compte read-only Compte read-write
Sécurité des ERP Sécurité des ERP
Plusieurs niveaux:
Sécurité systèmes
Sécurité réseau (chiffrement, firewalls, accès distants, ...) Sécurité intrinsèque (accès, rôles, interfaces, ...)
Sécurité de la base de données Télémaintenance
Doit être étudiée:
Par les équipes fonctionnelles Par les consultants ERP
Par l'équipe sécurité
Exemple : SAP Exemple : SAP
Peu d'études publiques de sécurité sur SAP (« La sécurité SAP pour les nuls »):
http://www.sapsecurity.net/
http://www.auditnet.org/sapaudit.htm
http://www.giac.org/certified_professionals/practicals/gsec/0760.php
Comptes systèmes créés sur Unix
<SID>adm, ora<SID>
Privilèges SAP :
SAP_ALL
S_A.SYSTEM
Certaines transactions permettent d'exécuter du code système (SM59, rôle S_RSZ_ADM).
SIDADM
SAP et Oracle SAP et Oracle
Mot de passe par défaut sur l'utilisateur SAPR3 : SAP Oracle en mode insécurisé
remote_os_authent = TRUE
Utilisateurs OPS$SIDADM et OPS$ORASID ont le pribilège SAPDBA
Pas de restrictions dans le LISTENER
Télémaintenance SAP Télémaintenance SAP
SAP Router:
Relais TCP générique authentifié
Permet d'atteindre toutes les applications du LAN (!)
Restrictions
Limitations IP Sources
Limitations IP Destinations et protocoles
http://help.sap.com/saphelp_nw04/helpdata/en/4f/992dbd446d11d189700000e8322d00/content.htm
Doit être placé dans une DMZ
Internet
VPN SSL Proxy HTTPS
LAN Infrastructure SAP
Mobiles
Sap Router
SAP HTTPS
Sap Waldorf
IPSEC
Firewall SAP
Conclusions Conclusions
Les SGBD sont:
Complexes
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, admins, réseau, ...