Application Security Forum - 2012 Western Switzerland
7-8 novembre 2012 - Y-Parc / Yverdon-les-Bains https://www.appsec-forum.ch
Oauth : un protocole d'autorisation qui authentifie ?
Maxime Féroul
Directeur Technique / KYOS IT SECURITY
# who -m
Ingénieur Informatique & Télécom (ESIGETEL / France)
15 ans d'expérience : web-hosting & sécurité
Co-fondateur de Kyos IT Security (2002) : 10 ans ;)
– Pen-testing & intégration & IAM
– Recherche EU : SEINIT, DEMONS,...
– Spacecom : le wifi est correct ?
Domaines de prédilection : en ce moment J2ee & IAM
Ambition : Une vision globale au prix de moins de
2
Agenda
Contexte : Social Login
Oauth 2.0 : Sous le capot
Implicit Flow : ou Implicit Flaw ?
Mitigation : La bonne implémentation
3
Perturbation atmosphérique...
4
Poursuite de la décentralisation des SI
Utilisation de plateformes “tierces”, en dehors de son domaine de sécurité
Nouveaux défis pour le contrôle d'accès
Identités Multiples, BYOD, “Information and
user centric”, ...
SIMPLICITÉ UTILISATEUR,
FACILITÉ DE MISE EN OEUVRE
& SÉCURITÉ
...et toujours le même “Graal“
Emergence du “Social Login“
6
Utiliser les services d'authentification d'une plateforme de réseau social
Social Login – Pourquoi ?
Pour l'utilisateur
– Moins de login & mot de passe
– Meilleure gestion de ses identités
• Facebook → sites perso., linkedin → sites pro., …
• Meilleur « contrôle » : révoquer les applications
Social Login – Pourquoi ?
Pour le fournisseur de service
– Enregistrement simplifié
– Information plus fiable
– Plus d'information !
Social Login – Comment ?
Etablir un « lien de confiance », fédérer les identités
Déléguer l'authentification et l'autorisation
Echanger des informations sur l'identité
Oauth 2.0
UMA
Standards : Maelström ?
SOAP, XML
Framework / service d'identité
Framework / message Web Service
Global & très modulaire
Connotation “Microsoft & IBM”
WS-Security, WS-Federation, WS-Trust,...
Web Centric API Délégation de l'autorisation
User Centric REST,
JSON
Authentification, SSO, Federation
Autorisation
SAML assertion
Profile, protocol, bindings,...
“couche identité” au dessus de OAuth 2.0
Connotation “Standard Entreprise”
Connotation “web / end-user”
Authentification, session, attributs d'identité,...
Oauth 2.0 – Emergence
REST, Simplicité, “designed for the web...”
Facebook, Google, Salesforce,...
Agenda
Contexte : Social Login
Oauth 2.0 : Sous le capot
Implicit Flow : ou Implicit Flaw ?
Mitigation : La bonne implémentation
12
Password anti-pattern
13
Bonjour BLOG, j'aimerais aussi que tu publies mes “posts” sur Facebook ?
Pas de problème, donne moi ton login et ton mot de passe Facebook, je m'y connecterais en ton nom pour mettre à jour ton profil...
Tu m'excuses mais j'ai moyennement confiance en toi BLOG, tu ne peux pas faire autrement que stocker mes “crédentiels” ?
Oauth 2.0 – Framework d'autorisation
14
Permettre à des applications et des fournisseurs de services d’accéder à des données d’un utilisateur en lui demandant sa permission.
Oauth 2.0 – Rôles
Resource Owner
Client Authorization Server
Un internaute Utilise un blog
Resource Server
En s'authentifiant via Facebook et pour également publier ses « posts » sur son profil
Par exemple :
Oauth 2.0 – Principe
16
Client
Resource Server
Authorization Server
S'authentifie et autorise l'application (client)
Délivre le token d'accès Accède au
service 1.1.
2.2.
3.3.
Accède à la ressource protégée
4.4.
Délègue l'autorisation
Oauth 2.0 – Spécification
17
Client type & profile
– Confidential, public & WebApp, user agent, native
Endpoints – Authorization, Token, Redirection
Plusieurs types de « jeton d'autorisation » – Authorization Code, Implicit, Resource Owner Password
Credentials, Client Credentials
– Des requêtes et réponses pour chaque type
Oauth 2.0 – Question de départ
Ok pour le password anti-pattern et l'autorisation – Mais alors quel rapport avec le social login ?
– Comment “authentifier” ?
Authentifier c'est obtenir des attributs d'identité et prouver/valider qu'ils sont justes
18
Oauth : un protocole d'autorisation qui authentifie ?
Oauth permet d'accéder à des données d'identité !
Oauth 2.0 – Comment authentifier ?
19
1.) BLOG demande à BORIS l'autorisation d'aller récupérer chez Facebook les données relatives à son identité pour l'authentifier.
2.) BORIS s'authentifie chez Facebook et autorise BLOG à lire ses données d'identité.
Nom Prénom Email Login
Profil Boris
Agenda
Contexte : Social Login
Oauth : Sous le capot
Implicit Flow : ou Implicit Flaw ?
Mitigation : La bonne implémentation
20
Oauth 2.0 – Implicit Flow
Délivrance « directe » du token d'accès
Moins d'échanges
Application mobile (native)
Application JavaScript (user-agent)
21
RECHERCHE DE LA
SIMPLICITÉ
Exemple – Authentification Facebook 22
Sign in via Facebook
Redirect vers Facebook OAuth Implicit request AppId, redirectUri(blog.jsp)
Authentification
+ Autorisation de AppId
OAuth Implicit response Redirect vers redirectUri(blog.jsp) +AccessToken(xxxx)
Get /blog.jsp?AToken=xxxx
Get /graphAPI?AToken=xxxx
JSON object userId=Boris
Welcome Boris !
Access Token – Attention ! 23
« ...This specification does not provide any methods for the
resource server to ensure that
an access token presented to
it by a given client was issued to that client by the
authorization server. »
Source : draft-ietf-oauth-v2-31
Implicit Flow – Usurpation 24
Auth.+ Auto. AccessToken
Get /ninjagame.jsp?AToken=ABXYZ
Get /graphAPI?AToken=ABXYZ
userId=Boris
Welcome on NinjaGame Boris !
Réutilisation du token !
Get /graphAPI?AToken=ABXYZ
Welcome Boris !
Get /blog.jsp?AToken=ABXYZ
userId=Boris
La « spec. » nous avais prévenu... 25
Source : draft-ietf-oauth-v2-31
«... Authenticating Resource Owners to clients is out of scope for this specification.
Any specification that uses the authorization process as a form of delegated end-user authentication to
the client (e.g. third-party sign-in service) MUST NOT
use the implicit flow without additional security mechanisms such as audience restricting the access
token that enable the client to determine if the access token was issued for its use. »
Est ce que cela nous concerne ? 26
Oui si nous implémentons “nous-même” ou sans les framework proposés
N'est ce pas plutôt un « problème » pour facebook, google, et consorts ?
Oui si nous vérifions des implémentations
Oui pour notre culture et une meilleure compréhension d'Oauth ;)
Agenda
Contexte : Social Login
Oauth : Sous le capot
Implicit Flow : ou Implicit Flaw ?
Mitigation : La bonne implémentation
27
Mitigation – Implicit Flow
Restreindre l'audience / valider le token d'accès avant d'authentifier
– Signed request (Facebook JavaScript SDK)
– Service de validation du token
Mitigation – Server Side Flow 29
Sign in via Facebook
Redirect vers Facebook OAuth Authorization request AppId, redirectUri(blog.jsp)
Authentification + Autorisation de AppId OAuth Authorization response
Redirect vers redirectUri(blog.jsp) +Code(xxxx)
Get /blog.jsp?Code=xxxx
Get /graphAPI?AToken=yyyy
JSON object userId=Boris
Welcome Boris !
OAuth Access Token request AppId, Code, redirectUri(blog.jsp)
AccessToken=yyyy Lié à l'AppId donc invalide
pour une autre app !
Mitigation – OpenId Connect 30
OAUTH 2.0 Layer
IDENTITY Layer
UserInfo endpoint
– Fournisseur d'information d'identité
ID token objects – Informations sur les évenements
d'authentification (i.e audience, contexte, temps,...)
Une extension de Oauth 2.0
Conclusion
Un protocole d'autorisation ...
… mais qui peut servir à authentifier ...
… à condition de l'implémenter correctement.
31
Les mécanismes de sécurité existent, il faut veiller à les utiliser et à les vérifier.
… au prix d'un peu de compléxité ...
« Il n'y a pas de simplicité véritable, il n'y a que des simplifications » Léon Paul Farge
Questions?
32
Principales Sources http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html
by John Bradley
http://www.independentid.com/2011/04/oauth-does-it-authenticate-wellyes-and.html by Phil Hunt
http://vennofidentity.org/ by Eve Maler
http://oauth.net/2/
http://tools.ietf.org/html/draft-ietf-oauth-v2-31
http://openid.net/connect/
https://developers.facebook.com/docs/concepts/login/
https://developers.google.com/accounts/docs/OAuth2
Merci/Thank you!
Contact:
http://www.kyos.ch
Slides:
http://slideshare.net/ASF-WS/presentations
33