introduction à la sécurité des webservices

50
© 2011 - S.Gioria CONFOO – Montréal Québec - Canada 10 Mars 2011 Copyright © 2009 - The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License. The OWASP Foundation http://www.owasp.org Sébastien Gioria (French Chapter Leader & OWASP Global Education Committee Member) [email protected] Introduction a la sécurité des WebServices

Upload: confoo

Post on 28-Nov-2014

11.214 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

CONFOO – Montréal Québec - Canada

10 Mars 2011

Copyright © 2009 - The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License.

The OWASP Foundation http://www.owasp.org

Sébastien Gioria (French Chapter Leader & OWASP Global Education Committee Member) [email protected]

Introduction a la sécurité des WebServices

Page 2: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Agenda

 Introduction  Démystification des technologies  Les attaques sur les WebServices  Top10 OWASP && WebServices  Top10 WebServices ?

Page 3: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

q  Expérience en Sécurité des Systèmes d’Information > 0x0D années

q  Différents postes de manager SSI dans la banque, l’assurance et les télécoms

q  Expertise Technique ü  Gestion du risque, Architectures fonctionnelles, Audits ü  S-SDLC : Secure-Software Development LifeCycle. ü  PenTesting, Digital Forensics ü  Consulting et Formation en Réseaux et Sécurité

OWASP France Leader - Evangéliste -

OWASP Global Education Comittee Member ([email protected])

CISA && ISO 27005 Risk Manager

q  Domaines de prédilection : ü  Web, WebServices, Insécurité du Web.

Twitter :@SPoint Consultant Sécurité Sénior au sein du cabinet d’audit

Page 4: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Un peu d’histoire…

 1990 : DCE/RPC – Distributed Computing Environment  1992 : CORBA – Common Object Request Broker

Architecture  1990-1993 : Microsoft’s DCOM -- Distributed Component

Object Model  Pour arriver à une standardisation (toujours en cours)

des protocoles, outils, langages et interfaces

WebServices

Page 5: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

La base

Page 6: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Qu’est-ce qu’un WebService ?

Un service web est un programme informatique permettant la communication et l'échange de données entre applications et systèmes hétérogènes dans des environnements distribués. Il s'agit donc d'un ensemble de fonctionnalités exposées sur internet ou sur un intranet, par et pour des applications ou machines, sans intervention humaine, et en temps réel

• D’après Wikipédia : http://fr.wikipedia.org/wiki/Web_service

Page 7: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Qu’est-ce qu’un WebService ?

 Mais d’autres technologies existent

 Un WebService doit :  Pouvoir être découvrable  Pouvoir être auto-suffisant

Fournisseur

XML-RPC

POST/GET

text/xml Requêteur

Requêteur Fournisseur

Page 8: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Qu’est-ce qu’un WebService ?

 Les acteurs :  L’utilisateur : la personne qui accède à un portail permettant

d’interroger un WebService  Le requêteur : l’application cliente du service Web  L’intermédiaire : un élément qui peut gérer une partie de la

requête  Le fournisseur : l’application serveur qui effectuera le traitement  Le registre : l’annuaire des services et des points d’accès

 La coordination : il existe deux modes de fonctionnement des WebServices :  Le mode direct : principe du client/serveur.  Le mode « orchestré » : principe de la requête via un tiers.

Page 9: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Chorégraphie

WS2

WS3 WS4

WS5

WS1

Page 10: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Orchestration

WS2

WS3 WS4

WS5

WS1

Page 11: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Les ingrédients

Page 12: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Démystification des technologies

•  Languages •  XML : La base

•  xPath, xQuery : équivalent à SQL

•  WSDL : Descripteur de Services

•  Protocoles •  Transport : HTTP

•  Message : SOAP (SOAP = HTTP + XML)

•  Autres éléments : •  SAML : Security Assertion Markup Language

•  WS-Security : Web Services Security

Page 13: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Démystification des protocoles

 XML : eXtensible Markup Language  Standard d’échanges de données basé sur des balises.

<?xml version="1.0" encoding="UTF-8"?> <!-- '''Commentaire''' --> <element-document xmlns="http://exemple.org/" xml:lang=";fr"> <elément>Texte</element> <élément>un second élément </element> ….. <element attribut="valeur"></element> </element-document>

Page 14: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

XPath

//username => Renvoi tous les username

//user[username = 'gandalf’]/account => Renvoi le champ account du compte gandalf

<?xml version="1.0" encoding="ISO-8859-1"?> <users> <user> <username>gandalf</username> <password>!c3</password> <account>admin</account> </user> <user> <username>Stefan0</username> <password>w1s3c</password> <account>guest</account> </user> </users>

Page 15: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Démystification des protocoles

 SOAP : Simple Object Access Protocol  Permet l’envoi de messages XML

Entête SOAP Directives de Traitement

Corps SOAP (Message XML de requête ou de réponse)

Enveloppe SOAP

Page 16: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

SOAP - Type de communication

q  RPC

 Le document XML transmis dans la requête SOAP est calqué sur la syntaxe de la méthode invoquée

 Traitement synchrone

q  Document

 Le document XML transmis dans la requête SOAP est traité par le serveur, qui renvoie un document XML en retour

 Le Client ne sait pas comment le service est implémenté, ni comment le message est traité

 Traitement asynchrone

Page 17: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

SOAP – Exemple <?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body>

<addition xmlns="http://addition.example.com">

<a>6</a>

<b>9</b>

</addition>

</soapenv:Body>

</soapenv:Envelope>

<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <additionResponse xmlns="http://addition.example.com"> <multReturn>15</multReturn> </additionResponse> </soapenv:Body> </soapenv:Envelope>

Requête

Réponse

Page 18: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Démystification des protocoles

IP

HTTP/SMTP/FTP/…

XML-RPC/SOAP/XML

WSDL

UDDI

Transport

Message XML

Description

Découverte

Page 19: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Securité Web Classique

Démystification des protocoles

IP - IPSec

TCP – SSL /TLS

HTTP – HTTP Authentification

XML – Xml Signature

XML – XML Encryption

SOAP – WS Security / SAML /WS Policy

Relations de confiance – WS Trust/WS Federation/ LibertyAlliance

Page 20: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

XML Signature

 Objectif: signature numérique d’un document XML

 Garantir l’authenticité et l’intégrité du document  Signature de tout ou partie du document XML

 Recommandation W3C: XML Signature Syntax and Processing

 http://www.w3.org/TR/xmldsig-core/

 Types de signature

1.  Enveloppante (‘enveloping’)

2.  Enveloppée (‘enveloped’)

3.  Détachée (‘detached’)

S O

S S

O

S

S S

Enveloppante

Enveloppée

Détachée

Page 21: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Xml Encryption

 Objectif: chiffrement d’un document XML  Garantir la confidentialité de bout en bout du

document

 Recommandation W3C: XML Encryption Syntax and Processing  http://www.w3.org/TR/xmlenc-core/

 Flexible  Possibilité d’encrypter tout ou partie du

document, avec 1 ou différentes clés

Page 22: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

XMLencryption

 Chiffrement symétrique

 Quid de la clé?

 Clé connue des deux parties

 Plusieurs clés communes et identifiant de la clé utilisée transmis

 Transmission de la clé partagée encryptée avec la clé publique du correspondant

Page 23: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Xml Encryption

 Chiffrement XML 1.  Choix d’un algorithme (3DES ou AES)

2.  Obtention ou génération de la clé

3.  Sérialisation des données à encrypter

4.  Chiffrement  Déchiffrement

1.  Identifier l’algorithme et la clé utilisés

2.  Obtenir la clé

3.  Déchiffrer les données

4.  Intégrer les données déchiffrées dans le document

Page 24: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

WS-Security

 Objectifs   Authentification   Confidentialité des messages   Intégrité des messages

  Fondation d’autres standards

Page 25: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

WS-Security

 Notion de jeton de sécurité (security token)

 Pour l’authentification ou l’autorisation

§  Ex: username/password, certificat X509, …

 Extension de SOAP

 Définition d’un header SOAP contenant l’information de sécurité

§  Jetons de sécurité

§  Signatures numériques

§  Élements encryptés

Page 26: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

WS-Security

§ Confidentialité des messages SOAP

§  Utilisation de XML-Encryption

§  Encryption d’un ou plusieurs éléments du message SOAP

§  Référence vers les éléments encryptés dans le header

§  Clé partagée §  Possibilité d’encrypter différents éléments

avec des clés différentes

Page 27: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

WS-Policy

§ Objectif: spécifier des informations et des exigences pour un WS

§  S’applique aussi bien au serveur qu’au client

§ Exemples:

§  utilisation d’une version spécifique de SOAP

§  Exigence de signature

§  Information sur le format de la réponse (encrypté, signée…)

Page 28: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

WS-Trust

§  Modèles de confiance nombreux et variés §  Et transorganisations

§ Problèmes

§  Émettre et obtenir des jetons de sécurité

§  Etablir et valider des relations de confiance

§ Définition d’un Security Token Service

§  Émet, valide ou échange un jeton de sécurité

Page 29: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Les parseurs XML

 2 grandes familles :   SAX :

§  Simplistes §  Analyse du document en fonction des événements §  Appel de fonction lorsque des nœuds sont trouvés

 DOM : §  Plus complexes et utiles §  Basés sur des principes d’arbres pour créer des hiérarchies du

document §  Compatibles xPath !

Page 30: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Les attaques sur les WebServices

Page 31: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

XML Bomb :

 Trivial à effectuer : §  Référence récursive à une entité du même document :

 Peut provoquer un déni de service !

<?xml … …. <!entity owasp0 « Owasp »> <!entity owasp1 « &owasp0;&owasp0> …. …. <!entity owasp424242 « &owasp424241;&owasp424241 »> <owasptest>&owasp424242;</owasptest>

Page 32: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Injection XML entity

  La possibilité d’injecter du code XML de type entity system peut être catastrophique

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>

Crash du système

Obtention des mots de passe

Page 33: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Injection XML

DTD : <!DOCTYPE users [

<!ELEMENT users (user+) > <!ELEMENT user (username,password,userid,mail+) > <!ELEMENT username (#PCDATA) > <!ELEMENT password (#PCDATA) > <!ELEMENT userid (#PCDATA) > <!ELEMENT mail (#PCDATA) >

]>

http://www.example.com/addUser.jsp?username=tony&password=Un6R34kb!e</password><!--&email=--><userid>0</userid><mail>[email protected]

Résultat : <?xml version="1.0" encoding="ISO-8859-1"?> <users>

<user> <username>tony</username> <password>Un6R34kb!e</password><!--</password> <userid>500</userid> <mail>--><userid>0</userid><mail>[email protected]</mail> </user>

</users>

Page 34: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Injection CDATA

<html> $HTMLCode </html>

$HTMLCode = <![CDATA[<]]>script<![CDATA[>]]>alert('xss')<![CDATA[<]]>/script<![CDATA[>]]>

Avant analyse du parser: <html> <![CDATA[<]]>script<![CDATA[>]]>alert('xss')<![CDATA[<]]>/script<![CDATA[>]]> </html>

Le contenu des élément CDATA est éliminé lors du parsing. Soit :

Après Analyse: <html> <script>alert('XSS')</script> </html>

Page 35: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Injection xPath

<?xml version="1.0" encoding="ISO-8859-1"?> <users> <user> <username>gandalf</username> <password>!c3</password> <account>admin</account> </user> <user> <username>Stefan0</username> <password>w1s3c</password> <account>guest</account> </user> </users>

Imaginons la base d’authentification Xml suivante La chaine de recherche étant :

string(//user[username/text()='gandalf' and password/text()='!c3']/account/text())

Username: ' or '1' = '1 Password: ' or '1' = '1

Si l’utilisateur entre :

string(//user[username/text()='' or '1' = '1' and password/text()='' or '1' = '1']/account/text())

Page 36: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Injection xPath - dump XML

Le dump d’un document XML est rendu possible via le caractère |

Soit le descriptif d’un champ

//item[itemID=‘$id’]/description/text()

$itemID=chaine’] | /* | //item[itemID=‘chaine

Si l’utilisateur entre :

//item[itemID=‘chaine’] | /* | //item[itemID=‘chaine’]/description/text()

Match de tous les nœuds !!!!!

Page 37: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Rejeu des messages SOAP

 SOAP est un protocole d’échanges  SOAP ne dispose pas d’un mécanisme de

sessions :  Aucune relation entre les messages  Rejeu possible très facilement :

§  Authentification §  Messages §  DOS…

Page 38: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Les WebServices et le Top10

 A1: Cross Site Scripting (XSS)  Facilité d’effectuer du XSS persistent via les injections

XML

 A2: Failles d’injection  Injections XML/Xpath, SQL, …

 A3: Execution de fichier malicieux  Via les références et les tags <!entity>

 A4: Référence directe non sécurisée à un objet  Mêmes problèmes que pour le mode Web.

Page 39: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Les WebServices et le Top10

 A5: Falsification de requête inter-site (CSRF)  Cf XSS

 A6: Fuite d’information et traitement d’erreur incorrect  Différents mécanismes sont disponible via SOAP pour obtenir les

informations sur les méthodes disponibles

 A7: Violation de gestion de session ou de l’authentification  Aucune fonction disponible dans les protocoles, même problèmes

qu’en « Web Standard »

 A8: Stockage cryptographique non sécurisé  Rien de différent qu’en Web.

 A9: Communications non sécurisées  SOAP n’est pas sécurisé par conception

 A10: Manque de restriction d’accès à une URL  Rien de différent qu’en Web.

Page 40: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Proposition d’un Top 10 WebServices

Page 41: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

Page 42: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A1 – Manque d’authentification

 But :  Rejeu des transactions  Elevation de privilèges

 Principe :  Envoie d’un message SOAP au point d’accès

 Dangerosité :  Faible à Forte

 Protection :  Utilisation de SSL  Utilisation des couches WS-Security  Mettre en place des principes d’unicité des transactions

Page 43: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A2 – Manque d’habilitation

 But :  Premier => modifier des fichiers/données  Final => Elevation de privilèges

 Principe :  Envoie d’un message SOAP au point d’accès contenant des

identifiants valide

 Dangerosité :  Faible à Forte

 Protection :  Mise en place d’une habilitation dans le code  Protéger les fichiers de politiques et des DTDs  Ne pas se contenter d’URLs non publiées

Page 44: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A3 – Manque de trace d’audit

 Constat :  Les framework de WebServices ont peu de traces des

événements.  Il devient quasi-impossible de pouvoir tracer correctement les

flux dans le cas d’orchestration complexes.

 Protection :  Mettre en place des traces d’audit dans le code en particulier des

appels : §  D’authentification §  Changement dans le système(creation/destruction/modification) §  Dépassement des limites §  Lancement, arret de fonctions §  …….

Page 45: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A4 – Manque de politique de sécurité

 Constat :  Du à la conception des WebServices, il est très difficile de

disposer d’une politique globale.  De base les framework ne comportent pas de contrôle d’accès

 Dangerosité :  Faible à Forte

 Protection :  Mettre en place une politique de sécurité des WebServices :

§  Sur les protocoles de communication (HTTP/HTTPS/…) §  Sur l’échange des messages §  Sur la gestion des clefs de chiffrement §  Sur la protection contre les rejeux §  ….

 Mettre en place les tags WS-SecurityPolicy

Page 46: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A5 – Défaillance XML   But :

 Abuser les parseurs XML pour obtenir : §  Des informations §  Des privilèges §  ….

  Dangerosite :  Forte

  Protection :  Vérifier que les parseurs XML utiliser sont immunes aux problèmes

d’injection de type DOS/Entité, ….

 Vérifier la taille des documents XML lors des utilisations  Vérifier que l’intégralité du document est signé par juste une partie

(dans le cas d’utilisation des signatures)  Vérifier le document XML via le schéma le plus strict

 Ne pas faire confiance à une pré-validation des données de l’expéditeur.

Page 47: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A6 – Détournement d’identité

 Constat :  Les WebServices utilisent l’identité de l’appelant dans :

§  Le contrôle d’accès §  Les décisions de routage des appels §  La logique métier

 Les frameworks ne disposent pas de fonctions de protection de l’identité

 But :  Elevation de privilèges  Obtention d’informations

 Dangerosite :  Forte

 Protection :  Mettre en place WS-Security, les assertions SAML  Vérifier les signatures des messages  Utiliser l’authentification forte

Page 48: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A7 – Faiblesse des clefs

 Constat :  Il n’existe pas de protection des messages et de l’authentification

en XML et HTTP.  Le standard WS-Security ne suffit pas à protéger les clefs d’accès

car les données sont passées en clair.

 But :  Elevation de privilèges  Obtention d’informations

 Dangerosite :  Forte

 Protection :  Mettre en place du chiffrement de bout en bout (SSL/IPSec)  Utiliser des authentifications fortes (certificats X509, OTP, ..)  Mettre en place des mécanismes anti-rejeu  Ne pas autoriser d’authentification en clair

Page 49: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A8/A9/A10

 Ces différentes failles sont à lier au Top10 OWASP classique, mais appliqué aux WebServices.

Page 50: Introduction à la sécurité des WebServices

© 2011 - S.Gioria

A voir

 http://www.soaspecs.com/ws.php  NIST Guide : Securing Web Services :

 http://csrc.nist.gov/publications/nistpubs/800-95/SP800-95.pdf

 Article du CERT :  https://buildsecurityin.us-cert.gov/bsi/articles/best-practices/

assembly/639-BSI.html

 Gunnar Peterson  http://arctecgroup.net/pdf/WebServicesSecurityChecklist.pdf  Blog : http://1raindrop.typepad.com/  WebCast SANS : https://www.sans.org/webcasts/security-web-

services-soa-91958