-
Vincent Mazenod authoredVincent Mazenod authored
- authentification
- 3 concepts
- preuves
- 2AF
- Yubikey
- quelques techniques
- du world wide web
- A base de login / mot de passe
- apache & .htaccess
- auth basic .htaccess
- auth basic
- auth basic
- auth basic
- auth basic
- auth digest
- auth digest
- auth digest .htaccess
- auth digest
- auth digest
- auth digest
- authentification par formulaire
- authentification par formulaire
- oAuth
- oAuth
- SSO
- JWT
- force brute
- force brute
- THC Hydra
- THC Hydra
- attaques offline
- attaques offline
- attaques offline
- attaques par tables arc-en-ciel
- Se protéger
- Se protéger
authentification
" 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
- authentification
- ACL
preuves
- ce que je sais
- mot de passe, numéro d'identification personnel
- ce que je possède
- carte d'identité, carte à puce, certificat électronique, Token, Token OTP, périphérique
- ce que je suis
- photo, caractéristique physique, voire biométrie
- ce que je sais faire
- geste, signature
2AF
https://www.google.com/landing/2step/
Yubikey
quelques techniques
du world wide web
A base de login / mot de passe
apache & .htaccess
-
EnablingUseOfApacheHtaccessFiles
- surcharge du vhost courant (déconseillé)
$ sudo vi /etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All # None par défaut
Order allow,deny
allow from all
</Directory>
Note:
- potentiellement danegreux
- php.ini surchargeable aussi
- tems d'exec max
- taille de fichier max
- reporting d'erreur
- configurable en cas de virtual hosting
- à creuser
- configurable en cas de virtual hosting
- php.ini surchargeable aussi
auth basic .htaccess
$ vi /var/www/http-basic/.htaccess
AuthType Basic
AuthName "Big Basic Secret"
AuthUserFile /var/www/http-basic/.htpasswd
Require valid-user
htpasswd outil de création des utilisateurs
$ htpasswd -c /var/www/http-basic/.htpasswd guest
$ htpasswd /var/www/http-basic/.htpasswd otheruser
auth basic
le client demande un contenu (protégé)
GET /http-basic/ HTTP/1.1
Host: go.od
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.8.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
auth basic
le serveur répond que le contenu est protégé
HTTP/1.1 401 Authorization Required
Date: Wed, 21 Oct 2015 13:26:29 GMT
Server: Apache/2.2.22 (Debian)
WWW-Authenticate: Basic realm="Big Basic Secret"
Content-Length: 472
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
</body>
auth basic
auth basic
GET /http-basic/ HTTP/1.1
Host: go.od
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.8.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Authorization: Basic b3dhc3A6cGFzc3dvcmQ=
base64(username:password)
auth digest
- Même schéma que la version Basic excepeté
- algorithme de hashage MD5 plutôt qu'un simple encodage base64
- ajout d'un nonce, rattacher à la session de communication, pour éviter les attaques "par rejeu"
$ sudo a2enmod auth_digest
$ sudo service apache2 reload
auth digest
auth digest .htaccess
$ vi /var/www/http-digest/.htaccess
AuthType Digest
AuthName "authdigest"
AuthDigestDomain "/"
AuthDigestProvider file
AuthUserFile "/var/www/http-digest/.htdigest"
Require valid-user
htdigest outil de création des utilisateurs
htdigest -c /var/www/http-basic/.htdigest "authdigest" guest
htdigest /var/www/http-basic/.htdigest "authdigest" otheruser
auth digest
- le client demande un contenu (protégé)
- le serveur répond que le contenu est protégé
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="OwaspSample",
nonce="Ny8yLzIwMDIgMzoyNjoyNCBQTQ",
opaque="0000000000000000", \
stale=false,
algorithm=MD5,
qop="auth"
auth digest
auth digest
GET /example/owasp/test.asmx HTTP/1.1
Accept: */*
Authorization: Digest username="owasp",
realm="OwaspSample",
qop="auth",
algorithm="MD5",
uri="/example/owasp/test.asmx",
nonce="Ny8yLzIwMDIgMzoyNjoyNCBQTQ",
nc=00000001,
cnonce="c51b5139556f939768f770dab8e5277a",
opaque="0000000000000000",
response="2275a9ca7b2dadf252afc79923cd3823"
Note:
- haché plus réversible même si MD5 ca craint un peu
- le nonce evite le rejeu
- le serveur connait les nonce qu'il a émis
- il sait qu'ils ne sont valables qu'une fois
- http://slideplayer.fr/slide/1622495/ -> slide 30
- le serveur connait les nonce qu'il a émis
- le cnonce agit comme un salt
- évite le cassage du mot de passe par dictionnaire
- toujours pas de lockout
- attaque man in the middle
- demande de nonce au serveur et l'envoie au client et renvoie le resultat du cacul au serveur
- pas de blocage testable à l'infini
authentification par formulaire
le plus courant
<form method="POST" action="login">
<input type="text" name="username">
<input type="password" name="password">
</form>
authentification par formulaire
- le mot de passe est transmis en clair au serveur
- https :)
- stocker les mots de passe en clair sur le serveur est un mauvaise idée
- stocker les hashés est une bonne pratique
- saler les hashés est encore mieux
oAuth
oAuth
Version | SSL | Token | Technique |
---|---|---|---|
1.0 | optionel | sans expiration | mise en place compliquée |
2.0 | obligatoire | révocable | simple et plus léger |
- 1.0 incompatible avec 2.0
- How to Secure Your REST API using Proven Best Practices
Note:
- authentification simple (instagram)
- souvent autorisations partielles attribuées à l'app
- le token évite de rejouer l'auth
- oAuth 1.0 en clair lire le token
- pas de consensus sur la version 1 ou 2 sur Internet
- confiance dans consumer (l'app qui demande l'autorisation)
SSO
"Identity providers (IdPs) supply user information, while service providers (SPs) consume this information and give access to secure content"
JWT
force brute
- par dictionnaires
- liste d'utilisateurs + liste de mots de passe
- optimisable avec
- de la probabilité
- des dictionnaires au hasard
- de l'ingénieurie sociale
- du flaire etc ...
- optimisable avec
- liste d'utilisateurs + liste de mots de passe
force brute
- par recherche
- combinatoire
- hybride
- décliner via des règles les propositions d'un dictionnaire
- leetspeakation automatique
- John the Ripper permet de générer des mots de passes dérivant de parties du username
THC Hydra
- multi-protocole: IMAP, SMB, HTTP, VNC, MS-SQL MySQL, SMTP, SSH, VNC, Asterisk, ...
- RTFM
- liste de usernames
- liste de mots de passe
THC Hydra
hydra 192.168.1.26 ssh2 -s 22 -P pass.txt -L users.txt -e nrs -t 10
- attaque du protocole ssh sur le port 22
- 10 threads à la fois
- essaie toutes les combinaisons possibles entre les username de users.txt et les mots de passe de pass.txt
-
- mot de passe vide
-
- mot de passe = username
-
- mot de passe = username à l'envers
-
- OWASP - Testing for Brute Force
Note:
- Burp Suite
- Patator
attaques offline
- Dépend de la puissance de calcul
- Non furtive
- Reproductible
attaques offline
-
OPHCRACK (the time-memory-trade-off-cracker)
- monde windows
- fichiers SAM
- fonctionne avec des dictionnaires
- obtenir le pass d'un compte windows en moins de 10 minutes
- Password Cracking: Lesson 2
attaques offline
-
John the Ripper
- monde UNIX/BSD
- fichier /etc/passwd + /etc/shadow
- mangling rules: leet speak, custom ...
unshadow /etc/passwd /etc/shadow > mypasswd
attaques par tables arc-en-ciel
-
CrackStation
- avec la signature de smithy dans la table user
5f4dcc3b5aa765d61d8327deb882cf99
Se protéger
- bien choisir son système d'authentification
- bien implémenter son système d'authentification
- ESAPI (The OWASP Enterprise Security API)
- libs & bundles éprouvés
- mettre un nombre d'essais maximum consécutifs
- plugin anti brute force
- wordpress
- drupal
- compléter par des restrictions par IP, voir par blocs d'IPs
- plugin anti brute force
Se protéger
-
instaurer des règles de durcissement au moment du choix du mot de passe
- pas contournable côté client ;)
-
sensibilisez vos utilisateurs
-
mettre en place en deuxième facteur d'authentification
-
utiliser la crypto asymétrique