Commit fb20a72b authored by Vincent Mazenod's avatar Vincent Mazenod
Browse files

enhance auth & passwords

parent 5348b38b
...@@ -2,8 +2,11 @@ ...@@ -2,8 +2,11 @@
"<i class="fa fa-wikipedia-w" aria-hidden="true"></i> processus permettant à un système de s'assurer de la légitimité de la demande d'accès faite par une entité (être humain ou un autre système...) afin d'autoriser l'accès de cette entité à des ressources du système (systèmes, réseaux, applications…) conformément au paramétrage du contrôle d'accès ." "<i class="fa fa-wikipedia-w" aria-hidden="true"></i> processus permettant à un système de s'assurer de la légitimité de la demande d'accès faite par une entité (être humain ou un autre système...) afin d'autoriser l'accès de cette entité à des ressources du système (systèmes, réseaux, applications…) conformément au paramétrage du contrôle d'accès ."
## 3 concepts
* identification * identification
* authentification * **authentification**
* ACL * ACL
...@@ -12,22 +15,14 @@ ...@@ -12,22 +15,14 @@
* ce que je sais * ce que je sais
* mot de passe, numéro d'identification personnel * mot de passe, numéro d'identification personnel
* ce que je possède * ce que je possède
* carte d'identité, carte à puce, droit de propriété, certificat électronique, diplôme, passeport, Token, Token OTP, préiphérique * carte d'identité, carte à puce, droit de propriété, certificat électronique, diplôme, passeport, Token, Token OTP, périphérique
* ce que je suis * ce que je suis
* photo, caractéristique physique, voire biométrie * photo, caractéristique physique, voire biométrie
* ce que je sais faire * ce que je sais faire
* geste, signature * geste, signature
## sur le web # quelques techniques
* authentification HTTP
* basic
* digest
* authentification par formulaire
* authentification déportée
* OAuth
* authentification d'API
## apache & .htaccess ## apache & .htaccess
...@@ -174,7 +169,8 @@ htdigest /var/www/http-basic/.htdigest "authdigest" otheruser ...@@ -174,7 +169,8 @@ htdigest /var/www/http-basic/.htdigest "authdigest" otheruser
## auth digest ## auth digest
le client demande un contenu (protégé) * le client demande un contenu (protégé)
* le serveur répond que le contenu est protégé
```http ```http
HTTP/1.1 401 Unauthorized HTTP/1.1 401 Unauthorized
...@@ -187,9 +183,12 @@ WWW-Authenticate: Digest realm="OwaspSample", ...@@ -187,9 +183,12 @@ WWW-Authenticate: Digest realm="OwaspSample",
``` ```
## auth digest ## auth basic
le serveur répond que le contenu est protégé ![HTTP digest auth](images/authentication/http-basic-auth.png "HTTP digest auth")
## auth digest
```http ```http
GET /example/owasp/test.asmx HTTP/1.1 GET /example/owasp/test.asmx HTTP/1.1
...@@ -237,47 +236,22 @@ le plus courant ...@@ -237,47 +236,22 @@ le plus courant
* le mot de passe est transmis en clair au serveur * le mot de passe est transmis en clair au serveur
* https :) * https :)
* stocker les mots de passe en clair sur le serveur est un mauvaise idée * stocker les mots de passe en clair sur le serveur est un mauvaise idée
* stocker les hashés est un bonne pratique
* [Rockyou.com en 2010](http://commedansdubeurre.ch/?story=162-piratage-de-32-millions-de-comptes-utilisateurs-chez-rockyou-recours-collectif-depose) * [Rockyou.com en 2010](http://commedansdubeurre.ch/?story=162-piratage-de-32-millions-de-comptes-utilisateurs-chez-rockyou-recours-collectif-depose)
* stocker les hashés est une bonne pratique
Note: * saler les hashés est encore mieux
- peut être en GET
- plus facile pour le scripter en brute force
- et encore
- passe dans l'url?
- server-status intéressant
- http sniffbale https ok
- peut avoir du code coté client (calcul du md5 en js avant soumiision par exemple)
- 3 étapes
- formulaire
- traitement serveur
- la ressource (notamment accès direct) ou information 403 avec la suite
- dépend beaucoup des développeurs
- best practice
- esapi OWASP
- récupération du token de session suffit souvent (passé par GET par exemple SID ou par cookie)
- potentiellement
- lock out sur brute force
- paramètre assitionel - timestamp
- XSS redirect user vers une page d'auth fake
- SQL injection
- marche aussi avec un interpréteur de commande LDAP
- pour l'attaque des fois ca répond 200 alors que c'est non (ca devrait être 403)
- méfiance
## oAuth ## oAuth
* tri-partie ![oAuth](images/authentication/oAuth.png "oAuth")
<div style="text-align: center">
![oAuth](images/oAuth.png "oAuth")<!-- .element style="width: 50%" --> ## oAuth
</div>
| Version | SSL | Token | Technique | | Version | SSL | Token | Technique |
| --------- | ----------- | --------------- | ------------------------ | | ------- | ----------- | --------------- | ------------------------ |
| oAuth 1.0 | optionel | sans expiration | mise en place compliquée | | 1.0 | optionel | sans expiration | mise en place compliquée |
| oAuth 2.0 | obligatoire | révocable | simple et plus léger | | 2.0 | obligatoire | révocable | simple et plus léger |
* 1.0 incompatible avec 2.0 * 1.0 incompatible avec 2.0
* <i class="fa fa-newspaper-o"></i> [How to Secure Your REST API using Proven Best Practices](https://stormpath.com/blog/secure-your-rest-api-right-way) * <i class="fa fa-newspaper-o"></i> [How to Secure Your REST API using Proven Best Practices](https://stormpath.com/blog/secure-your-rest-api-right-way)
...@@ -291,16 +265,19 @@ Note: ...@@ -291,16 +265,19 @@ Note:
- confiance dans consumer (l'app qui demande l'autorisation) - confiance dans consumer (l'app qui demande l'autorisation)
## Les attaques brute force ## JWT
[![jwt auth](images/authentication/jwt-auth.png "jwt auth")<!-- .element style="width: 80%" -->](https://blog.ippon.fr/2017/10/12/preuve-dauthentification-avec-jwt/)
* Différents types
* Attaque par dictionnaires ## force brute
* devine automatiquement les paramètres d'authentification à partir d'une liste d'utilisateur / mot de passe
* par dictionnaires
* liste d'utilisateurs + list de mots de passe
* optimisable avec de la probabilité, [des dictionnaires au hasard](https://dazzlepod.com/site_media/txt/passwords.txt), de l'ingénieurie sociale, du flaire etc ... * optimisable avec de la probabilité, [des dictionnaires au hasard](https://dazzlepod.com/site_media/txt/passwords.txt), de l'ingénieurie sociale, du flaire etc ...
* Attaque par recherche * par recherche
* essayer toutes les combinisaons de caractères * combinatoire
* trouver un mot de passe de 8 caractères composé exclusivement de caractères alphabétiques: 26<sup>8</sup> possibilités * hybride
* Attaque par recherche basée sur des règles
* décliner via des règles les propositions d'un dictionnaire * décliner via des règles les propositions d'un dictionnaire
* leetspeakation automatique * leetspeakation automatique
* [John the Ripper](http://www.openwall.com/john/) permet de générer des mots de passes dérivant de parties du username * [John the Ripper](http://www.openwall.com/john/) permet de générer des mots de passes dérivant de parties du username
...@@ -372,6 +349,16 @@ unshadow /etc/passwd /etc/shadow > mypasswd ...@@ -372,6 +349,16 @@ unshadow /etc/passwd /etc/shadow > mypasswd
</pre> </pre>
## 2AF
https://www.google.com/landing/2step/
## Yubikey
[![Ubikey](images/passwords/yubikey.png)](https://www.yubico.com/)
## <i class="fa fa-medkit"></i> Se protéger ## <i class="fa fa-medkit"></i> Se protéger
* bien choisir son système d'authentification * bien choisir son système d'authentification
...@@ -388,3 +375,6 @@ unshadow /etc/passwd /etc/shadow > mypasswd ...@@ -388,3 +375,6 @@ unshadow /etc/passwd /etc/shadow > mypasswd
* sensibilisez vos utilisateurs * sensibilisez vos utilisateurs
* [<i class="fa fa-desktop"></i> Se protéger avec de bons mots de passe](http://doc.m4z3.me/_/bpu/se_proteger_avec_de_bons_mots_de_passe.htm#/cover) * [<i class="fa fa-desktop"></i> Se protéger avec de bons mots de passe](http://doc.m4z3.me/_/bpu/se_proteger_avec_de_bons_mots_de_passe.htm#/cover)
* [<i class="fa fa-video-camera"></i> Se protéger avec de bons mots de passe](http://webtv.u-clermont1.fr/media-MEDIA150410174414391) * [<i class="fa fa-video-camera"></i> Se protéger avec de bons mots de passe](http://webtv.u-clermont1.fr/media-MEDIA150410174414391)
* mettre en place en deuxième facteur d'authentification
* utiliser la crypto asymétrique
...@@ -197,8 +197,3 @@ ...@@ -197,8 +197,3 @@
## Solution Hardware ## Solution Hardware
[![mooltipass](images/passwords/mooltipass.jpg)](https://www.themooltipass.com/) [![mooltipass](images/passwords/mooltipass.jpg)](https://www.themooltipass.com/)
## [Ubikey](https://www.yubico.com/)
[![Ubikey](images/passwords/yubikey.png)](https://www.yubico.com/)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment