SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Wishwho ???
• Application de social shopping.

• Développement web :

Angular / Python / NodeJS / Reactive Programming…

• Sécurité web :

Audit, PenTest & Monitoring.

• Testing & Automation.

• Agilité, Lean Management et eXtreme Programming.
Wishwhat ???
• Trainings.

• Coaching.

• Code Review.

• Audit.
Wishwhere ???
• https://blog.wishtack.com

• https://github.com/wishtack

• younes@wishtack.com

• @yjaaidi @wishtack
Sécurité des APIs
ReST

par Younes JAAIDI
…ou comment trouver les failles de vos APIs ReST
avant Gargamel et Azrael
ReSTful
• Stateless.

• Cacheable.

• Layered (basée sur des connecteurs).

• Separation of Concerns.

• Uniforme (uniforme à tous les niveaux).
Les 4 principaux

concepts de la sécurité
• Confidentialité : rejet des accès non autorisés.

• Intégrité : rejet des modifications non autorisées.

• Disponibilité : lutte contre les dénis de service.

• Non répudiation : capacité à fournir des preuves.
Les impacts
• Image de marque.

• Impact financier.

2011: DigiNotar ferme boutique après une intrusion.

https://en.wikipedia.org/wiki/DigiNotar

• Violation de conformité.

• Impacts légaux, sociaux, politiques, écologiques etc…

• Toutes les applications sont concernées sauf celles qui n’ont
jamais existé.
• La sécurité doit faire partie du Minimum Viable Product.
Les impacts
OWASP Top 10
• Top 10 des vulnérabilités web classées en fonction du
risque associé.

• Une version tous les 3 ans depuis 2004.

• La 2017 RC1 a été rejetée et la version finale est prévue
pour novembre (2017 ?).
OWASP Top 10
Identification,

Authentification

et Autorisation
• Identification : On identifie une entité sans pouvoir en vérifier l’authenticité.

• Authentification : Il est possible de vérifier l’authenticité d’un message,
d’une action etc…

Cela n’implique pas forcément une identification.

Ex. : Enregistrement d’un pseudo sur IRC.

Ex. : Facebook’s Anonymous Login.

Ex. : Clés SSH.

• Autorisation : Détermine si une entité a accès à une ressource en fonction
des règles définis dans les A.C.L. (Access Control Lists).

Ex. : Accès autorisé / refusé à une ressource sur une API.

Ex. : Accès autorisé / masqué / refusé à une propriété d’une ressource.

• Les règles A.C.L. ne sont pas forcément associées à une entité.

Le porteur d’un “token” n’est donc pas forcément identifié.

Ex. : Un “token” temporaire partagé avec plusieurs utilisateurs pour accéder à un document.
Identification, Authentification

et Autorisation :

Vulnérabilités classiques
• Authentification et autorisation absentes ou insuffisantes.

• Authentification sans autorisation.

• Autorisations trop permissives sur les propriétés en
lecture ou en écriture.
Identification, Authentification

et Autorisation :

Best Practices
• “Separation of Concerns” : Séparez les logiques
d’identification, d’authentification, d’autorisation et business
dans des composants différents de votre architecture. 

• Unit-testez l’accès à toutes les ressources (surtout les cas
d’erreur !).

• Evitez la sécurité par l’obscurité : obfuscation, protocoles
custom etc…

• Implémentez des logiques de filtrage par whitelist plutôt que
par blacklist.
Validation
• Les “inputs” et “outputs” de l’API doivent être “serialized” et
“parsed” de façon stricte pour éviter des accès non autorisés…

• … autrement, c’est la fête !

let {username, password} = req.body;



userCollection.findOne({

username: username,

password: password

});
• … et si password vaut {$ne: 'GOTCHA!!!'} ?
Validation
• Les “inputs” et “outputs” de l’API doivent être validés à
base de whitelists et côté API.

• La validation “client-side” n’est utile que pour l’UX.
Validation :
Best Practices
• Utilisez des couches dédiées à la “serialization”.

• Il est recommandé d’utiliser des “serializers” spécifiques
en fonction de l’autorisation accordée.

Ex.: ProductPublicSerializer, ProductAdminSerializer.

Ex. pythonic http://www.django-rest-framework.org/api-guide/serializers/

• La validation doit se faire pour tous les “inputs” et
“outputs” provenant de sources extérieures : utilisateurs,
partenaires etc…
C.S.R.F.

Cross-Site Request Forgery





smurf.com gargamel.com
1 - Log In 2 - Set-Cookie :
3 - Open app

( Smurfette is still signed in to
smurf.com even if she closes
smurf.com windows)
4 - Under the hood GET / POST / … requests

The browser adds the smurf.com Cookie.



DELETE /mushrooms

Cookie:
404
MushroomDB
C.O.R.S.

Cross-Origin Resource Sharing
• “Origin” : scheme + FQDN + port.

https://www.wishtack.com(:443)

• Le client envoie une preflight request (méthode OPTIONS) indiquant l’”origin”, la méthode,
les headers si nécessaire :

• Méthode autre que GET / HEAD / POST.

• POST avec un media type autre que text/plain ou application/x-www-form-urlencoded ou multipart/
form-data.
• “Headers” modifiés autres que Accept / Accept-Language / Content-Type (Cf. condition
précédente) / Content-Language.

• Le serveur répond avec les headers :

Access-Control-Allow-Origin

Access-Control-Allow-Methods

Access-Control-Allow-Headers

Access-Control-Allow-Credentials

Comment introduire une 

vulnérabilité C.S.R.F. 

step by step en suivant StackOverflow
• http://stackoverflow.com/questions/20035101/no-access-
control-allow-origin-header-is-present-on-the-requested-
resource

• https://stackoverflow.com/questions/26411480/angularjs-
a-wildcard-cannot-be-used-in-the-access-control-allow-
origin-he

• Cookies, Basic Auth et Client Certificate sont tous CSRF-
friendly.
C.O.R.S.

Best Practices
• Configurez vos W.A.F. (Web Application Firewall) pour refuser
la valeur true pour le header Access-Control-Allow-
Credentials et supervisez ce comportement.
• En attendant la migration vers une authentification par token,
vérifiez que la valeur du header Access-Control-Allow-
Origin est définie à partir d’une whitelist stricte (pas de
regex).

• Attention au respect du ReST !

Les requêtes GET ne déclenchent pas forcément de preflight
request.

Ex. d’API vulnérable : GET /mushrooms?action=delete
C.O.R.S.

Media Type gotchas
• Rejetez toutes les requêtes dont le Content-Type est
différent d’application/json ou le media type de
votre application.

• Si votre API utilise des credentials pour l’authentification
alors elle est automatiquement vulnérable dans les deux
cas suivants :

• L’API accepte le média type application/x-www-form-urlencoded.

• L’API ne vérifie pas le média type et suppose que le contenu est de type
application/json.
C.O.R.S.

Media Type gotchas
• Pour le fun, même pas besoin de JS :

<form

action="http://api.smurf.com/mushrooms"

enctype="text/plain"

method="POST"

target="_blank">

<input

hidden

name='{"name": "Amanita muscaria", "type": "poisonous", "extra": "'

value='"}'>

…
• Ce qui nous donne :



POST /mushrooms

Content-Type: text/plain



{"name": "Amanita muscaria", "type": "poisonous", "extra": "="}
J.W.T.

JSON Web Token
• J.O.S.E. : Un framework pour échanger des “claims” de
manière sécurisée.

• J.W.K. : JSON Web Key.

• J.W.E. : JSON Web Encryption.

• J.W.S. : JSON Web Signature.

• J.W.T. : JSON Web Token.
J.W.T.

Exemple de token
J.W.T.

Exemple d’utilisation
smurf.comidentity-provider.py
6 - Get Public Key

if not in cache
1 - Signin

request
2 - Redirect
3 - Authenticate

& Authorize
5 - Redirect with

J.W.T.
7 - Verify J.W.T.

with public key
8 - Send flowers
4 - Create J.W.T.

and sign with private key
J.W.T.

ou cryptographie

sans “Key Management”
• La cryptographie sans “Key Management”, c’est comme
une voiture sans freins, tant qu’on ne cherche qu’à rouler
en ligne droite sans s’arrêter, ça répond plutôt bien au
besoin…

• Analysons d’abord la sécurité de nos clés TLS.
Quand on vole

une clé T.L.S.
TLS Endpoint

@1.1.1.1
@2.2.2.2
AppD.N.S.
1 - Exploit Vulnerability

on TLS Endpoint

and steal Key2 - Cache Poisoning

(or ARP Spoofing etc…)

smurf.com => @2.2.2.2
3 - smurf.com ???
4 - GET https://smurf.com
C.A.
5 - Revoke
Quand on vole

une clé J.W.T.
App
1 - Exploit Vulnerability on App and steal Key
2 - Create arbitrary but valid JWT tokens and use them
D’OH! I’m smurfed up!

If I replace the key,

I will invalidate all previous JWTs
J.W.T.

Vulnérabilités classiques
• Stockage non sécurisé.

• data = jwt.decode(token, key) 

vs.

data = jwt.verify(token, key)

•Signature stripping: {alg: 'none'}
• asymétrique ?

• HS256 nécessite une clé de longueur supérieure ou égale à :

256 bits / 32 bytes / 64 caractères hexadécimaux.

• HS256 vs RS256.

• Selon NIST :

1024 : RIP 2006

2048 : RIP 2030

4096 : ???
J.W.T.

Exemple RS256
• Et hop, 1/2 kilo de token :

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJqb2
huZG9lIiwiaWF0IjoxMzk3MzgzOTA4LCJrZXlpZCI6IjEyMyJ9.
b0cBt45NzbdAi21VNv_mVtGwYNWRJBkkWNyk_IQDTt6las
PvXUmbPU-6ou1Yj9FElRCDr7aqjvm7IaQHs0cx0aU5CmBY
EcvbTo7kNxJkhOtWl2XRU7Mk2zCNJgNK2eEEOHDTT48_U
MCkHcCGADYzJ5H9mPySeMGTYq4cHGHVbw5v6LRjXYaB
Xa1jgDfqjTqy5RL2hS19YYaKsoCm5Vsk1tsHAyz4TdqM-
Ctbuk6AnA57TL_-
zcx2XbXqv_ztTpdZSA9hLzXVJyFQOj-8hDmNHpZTTFLKfeC
Ha7HSZfQ1kUGD6AX-
Kn5Gk3nmaRv7Ox0Dtl-2v15BELiFCLAOFp1acw

J.W.T. Key Rotation
• Les clés doivent être générées et remplacées
dynamiquement et régulièrement.

• Les clés ne peuvent pas avoir une durée de vie inférieure
à celles des tokens générés.

• Chez Google, une durée moyenne de 3 jours : https://
www.googleapis.com/oauth2/v3/certs
WebSheep
• Inspiré de WebGoat, une application volontairement
vulnérable conçue pour le fun et l’apprentissage.

https://github.com/WebGoat/WebGoat

• WebSheep essaie de compléter WebGoat sur la partie
APIs ReST, NodeJS, J.W.T., …

https://github.com/wishtack/wishtack-websheep
Keep In Touch
• Pensez à vous inscrire à la newsletter pour recevoir les
picks of the week.

• https://blog.wishtack.com

• https://github.com/wishtack

• younes@wishtack.com

• @yjaaidi @wishtack

Contenu connexe

Tendances

Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak Abhishek Koserwal
 
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim HegazyHackIT Ukraine
 
API Security Best Practices & Guidelines
API Security Best Practices & GuidelinesAPI Security Best Practices & Guidelines
API Security Best Practices & GuidelinesPrabath Siriwardena
 
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」Tatsuo Kudo
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおうわかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおうTakashi Toyosaki
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway Chris Mague
 
FreeIPA - Attacking the Active Directory of Linux
FreeIPA - Attacking the Active Directory of LinuxFreeIPA - Attacking the Active Directory of Linux
FreeIPA - Attacking the Active Directory of LinuxJulian Catrambone
 
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたAmazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたmganeko
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQLAmazon Web Services Japan
 
20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS BatchAmazon Web Services Japan
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介Amazon Web Services Japan
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with KeycloakJulien Pivotto
 

Tendances (20)

Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
 
API Security Best Practices & Guidelines
API Security Best Practices & GuidelinesAPI Security Best Practices & Guidelines
API Security Best Practices & Guidelines
 
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
 
Nginx Essential
Nginx EssentialNginx Essential
Nginx Essential
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
Introducing Vault
Introducing VaultIntroducing Vault
Introducing Vault
 
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおうわかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway
 
FreeIPA - Attacking the Active Directory of Linux
FreeIPA - Attacking the Active Directory of LinuxFreeIPA - Attacking the Active Directory of Linux
FreeIPA - Attacking the Active Directory of Linux
 
Api security-testing
Api security-testingApi security-testing
Api security-testing
 
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたAmazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみた
 
IDOR Know-How.pdf
IDOR Know-How.pdfIDOR Know-How.pdf
IDOR Know-How.pdf
 
Web Application Security
Web Application SecurityWeb Application Security
Web Application Security
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
 
20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch
 
ASP.NET Web Security
ASP.NET Web SecurityASP.NET Web Security
ASP.NET Web Security
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介
AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 

Similaire à ReST API Security

Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Asma Messaoudi
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1Tarek MOHAMED
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfdepinfo
 
Rétro-ingénierie de protocole crypto: Un "starter pack"
Rétro-ingénierie de protocole crypto: Un "starter pack"Rétro-ingénierie de protocole crypto: Un "starter pack"
Rétro-ingénierie de protocole crypto: Un "starter pack"Maxime Leblanc
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIOlivia Reaney
 
Introduction vulnérabilité web
Introduction vulnérabilité webIntroduction vulnérabilité web
Introduction vulnérabilité webdavystoffel
 
La sécurité des API: Quand les mauvais élèves entrent en piste.
La sécurité des API: Quand les mauvais élèves entrent en piste.La sécurité des API: Quand les mauvais élèves entrent en piste.
La sécurité des API: Quand les mauvais élèves entrent en piste.EyesOpen Association
 
Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18e-Xpert Solutions SA
 
LemonLDAP::NG, un WebSSO libre
LemonLDAP::NG, un WebSSO libreLemonLDAP::NG, un WebSSO libre
LemonLDAP::NG, un WebSSO libreClément OUDOT
 
Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Marc-André Tousignant
 
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V012010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01Sébastien GIORIA
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebCyrille Grandval
 
Les principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesLes principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesBee_Ware
 
Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Microsoft Technet France
 
Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Microsoft Décideurs IT
 

Similaire à ReST API Security (20)

Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdf
 
Rétro-ingénierie de protocole crypto: Un "starter pack"
Rétro-ingénierie de protocole crypto: Un "starter pack"Rétro-ingénierie de protocole crypto: Un "starter pack"
Rétro-ingénierie de protocole crypto: Un "starter pack"
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
Securite web is_ima
Securite web is_imaSecurite web is_ima
Securite web is_ima
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une API
 
Introduction vulnérabilité web
Introduction vulnérabilité webIntroduction vulnérabilité web
Introduction vulnérabilité web
 
Securité web
Securité webSecurité web
Securité web
 
La sécurité des API: Quand les mauvais élèves entrent en piste.
La sécurité des API: Quand les mauvais élèves entrent en piste.La sécurité des API: Quand les mauvais élèves entrent en piste.
La sécurité des API: Quand les mauvais élèves entrent en piste.
 
Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18
 
LemonLDAP::NG, un WebSSO libre
LemonLDAP::NG, un WebSSO libreLemonLDAP::NG, un WebSSO libre
LemonLDAP::NG, un WebSSO libre
 
Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0
 
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V012010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative Web
 
OWASP TOP 10 Proactive
OWASP TOP 10 ProactiveOWASP TOP 10 Proactive
OWASP TOP 10 Proactive
 
Les principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesLes principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuelles
 
Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !
 
Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !Sécurité Active Directory : détecter l’indétectable !
Sécurité Active Directory : détecter l’indétectable !
 

ReST API Security

  • 1.
  • 2. Wishwho ??? • Application de social shopping. • Développement web :
 Angular / Python / NodeJS / Reactive Programming… • Sécurité web :
 Audit, PenTest & Monitoring. • Testing & Automation. • Agilité, Lean Management et eXtreme Programming.
  • 3. Wishwhat ??? • Trainings. • Coaching. • Code Review. • Audit.
  • 4. Wishwhere ??? • https://blog.wishtack.com • https://github.com/wishtack • younes@wishtack.com • @yjaaidi @wishtack
  • 5. Sécurité des APIs ReST
 par Younes JAAIDI …ou comment trouver les failles de vos APIs ReST avant Gargamel et Azrael
  • 6. ReSTful • Stateless. • Cacheable. • Layered (basée sur des connecteurs). • Separation of Concerns. • Uniforme (uniforme à tous les niveaux).
  • 7. Les 4 principaux
 concepts de la sécurité • Confidentialité : rejet des accès non autorisés. • Intégrité : rejet des modifications non autorisées. • Disponibilité : lutte contre les dénis de service. • Non répudiation : capacité à fournir des preuves.
  • 8. Les impacts • Image de marque. • Impact financier.
 2011: DigiNotar ferme boutique après une intrusion.
 https://en.wikipedia.org/wiki/DigiNotar • Violation de conformité. • Impacts légaux, sociaux, politiques, écologiques etc… • Toutes les applications sont concernées sauf celles qui n’ont jamais existé. • La sécurité doit faire partie du Minimum Viable Product.
  • 10. OWASP Top 10 • Top 10 des vulnérabilités web classées en fonction du risque associé. • Une version tous les 3 ans depuis 2004. • La 2017 RC1 a été rejetée et la version finale est prévue pour novembre (2017 ?).
  • 12. Identification,
 Authentification
 et Autorisation • Identification : On identifie une entité sans pouvoir en vérifier l’authenticité. • Authentification : Il est possible de vérifier l’authenticité d’un message, d’une action etc…
 Cela n’implique pas forcément une identification.
 Ex. : Enregistrement d’un pseudo sur IRC.
 Ex. : Facebook’s Anonymous Login.
 Ex. : Clés SSH. • Autorisation : Détermine si une entité a accès à une ressource en fonction des règles définis dans les A.C.L. (Access Control Lists).
 Ex. : Accès autorisé / refusé à une ressource sur une API.
 Ex. : Accès autorisé / masqué / refusé à une propriété d’une ressource. • Les règles A.C.L. ne sont pas forcément associées à une entité.
 Le porteur d’un “token” n’est donc pas forcément identifié.
 Ex. : Un “token” temporaire partagé avec plusieurs utilisateurs pour accéder à un document.
  • 13. Identification, Authentification
 et Autorisation :
 Vulnérabilités classiques • Authentification et autorisation absentes ou insuffisantes. • Authentification sans autorisation. • Autorisations trop permissives sur les propriétés en lecture ou en écriture.
  • 14. Identification, Authentification
 et Autorisation :
 Best Practices • “Separation of Concerns” : Séparez les logiques d’identification, d’authentification, d’autorisation et business dans des composants différents de votre architecture. • Unit-testez l’accès à toutes les ressources (surtout les cas d’erreur !). • Evitez la sécurité par l’obscurité : obfuscation, protocoles custom etc… • Implémentez des logiques de filtrage par whitelist plutôt que par blacklist.
  • 15. Validation • Les “inputs” et “outputs” de l’API doivent être “serialized” et “parsed” de façon stricte pour éviter des accès non autorisés… • … autrement, c’est la fête ! let {username, password} = req.body;
 
 userCollection.findOne({
 username: username,
 password: password
 }); • … et si password vaut {$ne: 'GOTCHA!!!'} ?
  • 16. Validation • Les “inputs” et “outputs” de l’API doivent être validés à base de whitelists et côté API. • La validation “client-side” n’est utile que pour l’UX.
  • 17. Validation : Best Practices • Utilisez des couches dédiées à la “serialization”. • Il est recommandé d’utiliser des “serializers” spécifiques en fonction de l’autorisation accordée.
 Ex.: ProductPublicSerializer, ProductAdminSerializer.
 Ex. pythonic http://www.django-rest-framework.org/api-guide/serializers/ • La validation doit se faire pour tous les “inputs” et “outputs” provenant de sources extérieures : utilisateurs, partenaires etc…
  • 18. C.S.R.F.
 Cross-Site Request Forgery
 
 
 smurf.com gargamel.com 1 - Log In 2 - Set-Cookie : 3 - Open app ( Smurfette is still signed in to smurf.com even if she closes smurf.com windows) 4 - Under the hood GET / POST / … requests
 The browser adds the smurf.com Cookie.
 
 DELETE /mushrooms
 Cookie: 404 MushroomDB
  • 19.
  • 20. C.O.R.S.
 Cross-Origin Resource Sharing • “Origin” : scheme + FQDN + port.
 https://www.wishtack.com(:443) • Le client envoie une preflight request (méthode OPTIONS) indiquant l’”origin”, la méthode, les headers si nécessaire : • Méthode autre que GET / HEAD / POST. • POST avec un media type autre que text/plain ou application/x-www-form-urlencoded ou multipart/ form-data. • “Headers” modifiés autres que Accept / Accept-Language / Content-Type (Cf. condition précédente) / Content-Language. • Le serveur répond avec les headers :
 Access-Control-Allow-Origin
 Access-Control-Allow-Methods
 Access-Control-Allow-Headers
 Access-Control-Allow-Credentials

  • 21.
  • 22. Comment introduire une 
 vulnérabilité C.S.R.F. 
 step by step en suivant StackOverflow • http://stackoverflow.com/questions/20035101/no-access- control-allow-origin-header-is-present-on-the-requested- resource • https://stackoverflow.com/questions/26411480/angularjs- a-wildcard-cannot-be-used-in-the-access-control-allow- origin-he • Cookies, Basic Auth et Client Certificate sont tous CSRF- friendly.
  • 23. C.O.R.S.
 Best Practices • Configurez vos W.A.F. (Web Application Firewall) pour refuser la valeur true pour le header Access-Control-Allow- Credentials et supervisez ce comportement. • En attendant la migration vers une authentification par token, vérifiez que la valeur du header Access-Control-Allow- Origin est définie à partir d’une whitelist stricte (pas de regex). • Attention au respect du ReST !
 Les requêtes GET ne déclenchent pas forcément de preflight request.
 Ex. d’API vulnérable : GET /mushrooms?action=delete
  • 24.
  • 25. C.O.R.S.
 Media Type gotchas • Rejetez toutes les requêtes dont le Content-Type est différent d’application/json ou le media type de votre application. • Si votre API utilise des credentials pour l’authentification alors elle est automatiquement vulnérable dans les deux cas suivants : • L’API accepte le média type application/x-www-form-urlencoded. • L’API ne vérifie pas le média type et suppose que le contenu est de type application/json.
  • 26. C.O.R.S.
 Media Type gotchas • Pour le fun, même pas besoin de JS : <form
 action="http://api.smurf.com/mushrooms"
 enctype="text/plain"
 method="POST"
 target="_blank">
 <input
 hidden
 name='{"name": "Amanita muscaria", "type": "poisonous", "extra": "'
 value='"}'>
 … • Ce qui nous donne :
 
 POST /mushrooms
 Content-Type: text/plain
 
 {"name": "Amanita muscaria", "type": "poisonous", "extra": "="}
  • 27. J.W.T.
 JSON Web Token • J.O.S.E. : Un framework pour échanger des “claims” de manière sécurisée. • J.W.K. : JSON Web Key. • J.W.E. : JSON Web Encryption. • J.W.S. : JSON Web Signature. • J.W.T. : JSON Web Token.
  • 29. J.W.T.
 Exemple d’utilisation smurf.comidentity-provider.py 6 - Get Public Key
 if not in cache 1 - Signin
 request 2 - Redirect 3 - Authenticate
 & Authorize 5 - Redirect with
 J.W.T. 7 - Verify J.W.T.
 with public key 8 - Send flowers 4 - Create J.W.T.
 and sign with private key
  • 30. J.W.T.
 ou cryptographie
 sans “Key Management” • La cryptographie sans “Key Management”, c’est comme une voiture sans freins, tant qu’on ne cherche qu’à rouler en ligne droite sans s’arrêter, ça répond plutôt bien au besoin… • Analysons d’abord la sécurité de nos clés TLS.
  • 31. Quand on vole
 une clé T.L.S. TLS Endpoint
 @1.1.1.1 @2.2.2.2 AppD.N.S. 1 - Exploit Vulnerability
 on TLS Endpoint and steal Key2 - Cache Poisoning
 (or ARP Spoofing etc…)
 smurf.com => @2.2.2.2 3 - smurf.com ??? 4 - GET https://smurf.com C.A. 5 - Revoke
  • 32. Quand on vole
 une clé J.W.T. App 1 - Exploit Vulnerability on App and steal Key 2 - Create arbitrary but valid JWT tokens and use them D’OH! I’m smurfed up!
 If I replace the key,
 I will invalidate all previous JWTs
  • 33. J.W.T.
 Vulnérabilités classiques • Stockage non sécurisé. • data = jwt.decode(token, key) 
 vs.
 data = jwt.verify(token, key) •Signature stripping: {alg: 'none'} • asymétrique ? • HS256 nécessite une clé de longueur supérieure ou égale à :
 256 bits / 32 bytes / 64 caractères hexadécimaux. • HS256 vs RS256. • Selon NIST :
 1024 : RIP 2006
 2048 : RIP 2030
 4096 : ???
  • 34. J.W.T.
 Exemple RS256 • Et hop, 1/2 kilo de token :
 eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJqb2 huZG9lIiwiaWF0IjoxMzk3MzgzOTA4LCJrZXlpZCI6IjEyMyJ9. b0cBt45NzbdAi21VNv_mVtGwYNWRJBkkWNyk_IQDTt6las PvXUmbPU-6ou1Yj9FElRCDr7aqjvm7IaQHs0cx0aU5CmBY EcvbTo7kNxJkhOtWl2XRU7Mk2zCNJgNK2eEEOHDTT48_U MCkHcCGADYzJ5H9mPySeMGTYq4cHGHVbw5v6LRjXYaB Xa1jgDfqjTqy5RL2hS19YYaKsoCm5Vsk1tsHAyz4TdqM- Ctbuk6AnA57TL_- zcx2XbXqv_ztTpdZSA9hLzXVJyFQOj-8hDmNHpZTTFLKfeC Ha7HSZfQ1kUGD6AX- Kn5Gk3nmaRv7Ox0Dtl-2v15BELiFCLAOFp1acw

  • 35. J.W.T. Key Rotation • Les clés doivent être générées et remplacées dynamiquement et régulièrement. • Les clés ne peuvent pas avoir une durée de vie inférieure à celles des tokens générés. • Chez Google, une durée moyenne de 3 jours : https:// www.googleapis.com/oauth2/v3/certs
  • 36. WebSheep • Inspiré de WebGoat, une application volontairement vulnérable conçue pour le fun et l’apprentissage.
 https://github.com/WebGoat/WebGoat • WebSheep essaie de compléter WebGoat sur la partie APIs ReST, NodeJS, J.W.T., …
 https://github.com/wishtack/wishtack-websheep
  • 37. Keep In Touch • Pensez à vous inscrire à la newsletter pour recevoir les picks of the week. • https://blog.wishtack.com • https://github.com/wishtack • younes@wishtack.com • @yjaaidi @wishtack