Skip to content
Snippets Groups Projects

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

Google Authenticator

https://www.google.com/landing/2step/

Yubikey

Ubikey

quelques techniques

du world wide web

A base de login / mot de passe

apache & .htaccess

$ 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

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

HTTP basic auth

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é
$ sudo a2enmod auth_digest
$ sudo service apache2 reload

auth digest

"Basic Digest Auth"

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

HTTP digest auth

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 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

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

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

jwt auth

force brute

  • par dictionnaires
    • 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

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

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
  • 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

Se protéger