HTTPS n’aura plus de secret pour vous

Grégory Paul - Mappy

HTTPS n’aura plus de secret
pour vous

par Grégory Paul -

Présentation

HTTPS ?

SSL/TLS
HTTP

Sommaire

Pourquoi
HTTPS

Dans un réseau typique...

Réseau normal

Pour éviter l’interception de traffic

Réseau anormal au niveau du point d’accès
donotbeevil

Pour éviter l’interception de traffic

détails et implémentation de cet exemple, vol de cookie

Pour éviter l’interception de traffic

Réseau anormal au niveau du point d’accès
donotbeevil

Pour se protéger des FAI malveillants

Réseau anormal au niveau du FAI

Pour se protéger des FAI malveillants

Pour se protéger du Grand Canon Chinois

grand canon

en avril 2015

Pour le SEO, HTML5 et iOS/OS X

Google préfère un site en HTTPS.

Sans HTTPS, Firefox et Chrome (50) bloquent certaines API JavaScript :

Apple force HTTPS avec AppTransportSecurity depuis iOS 9.0 et OS X v10.11.

Pour bénéficier de HTTP/2.0

It looks like major browsers (Firefox & Chrome) may be limiting the HTTP/2 support for TLS connections only, in order to push for a more secure web (SSL/TLS everywhere).

Architecting Websites For The HTTP/2 Era, TLS in HTTP/2

Pour respecter la vie privée de vos utilisateurs

Dire que vous vous n'en avez rien à faire de la vie privée parce que vous n'avez rien à cacher, c'est comme dire que vous n'en avez rien à faire de la liberté d'expression parce que vous n'avez rien à dire.

Edward Snowden : about Privacy

Convaincu

Objectifs
d’HTTPS

Objectifs

Confidentialité :
Les données échangées sont chiffrées par une clé et ne peuvent être déchiffrées que par les 2 parties.
Authentification :
Le client vérifie que le serveur à qui il s’adresse est bien celui qu’il prétend être (cela évite les attaques d’homme du milieu). Éventuellement, le client peut s’authentifier auprès du serveur.
Intégrité :
Les parties vérifient que les données reçues n’ont pas été altérées.
Transparence :
Aucun changement nécessaire dans le protocole applicatif englobé.
Spontanéité :
Un client peut spontanément se connecter à un serveur (pas de pré-requis).

Versions

Versions

Poignée de main

Quelques rappels cryptographiques...

Chiffrement symétrique

chiffrement symétrique

Chiffrement asymétrique

chiffrement asymétrique
  • nombres premiers via RSA (1024, 2048, 4096 bits) et courbes elliptiques (EC)

Fonction de hachage

            $ echo -n "Hello World" | sha1sum
            0a4d55a8d778e5022fab701977c5d840bbc486d0
            $ echo -n "Hello World." | sha1sum
            b701146cf2c1262a6385c8b1fb1db98f05820499
            $ sha1sum ubuntu-12.04.3-desktop-amd64.iso
            0c06d876dabb4403cede1245e3b0bf1d81afd497
       

MD5, SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384 et SHA-512), SHA3.

HMAC

Influencé par une clé

            echo -n "Hello World" | openssl dgst -sha1 -hmac "key"
            cc24f1acdb06cf429bcf9861b6d708b6ec20a8fa
       

Permet de vérifier l’intégrité des données.

HMAC_MD5, HMAC_SHA1, HMAC_SHA256.

Signature numérique

signature numérique

Poignée de main
(en détails)

1. « Client hello »

handshake : client hello

en clair

TCP 443
wireshark : client hello

2. « Server hello »

handshake : server hello

en clair

server hello

2. Certificat(s) & « Server hello done »

handshake : server certificates

en clair

  • certificat du domaine (X.509)
server certificates

3. Pré-clé chiffré avec la clé publique du serveur

handshake : key exchange

chiffrement asymétrique

                    preMasterSecret = random()
                    encrypt(certicate.publicKey, preMasterSecret)
                
key exchange

4. Échange terminé

handshake : key exchange

chiffrement asymétrique

change cipher spec
            ms = PRF(client.preMasterSecret, client.random, server.random)
            // ms = masterSecret
             
            [ clientCipherKey, serverCipherKey ] = extractCipherKeys(ms)
            [ clientHMACKey, serverHMACKey ] = extractHMACKeys(ms)
        

5. Place au traffic chiffré

poignée de main

chiffrement symétrique

encrypted data
            encrypt(request, clientCipherKey, clientHMACKey) // client
            decrypt(request, clientCipherKey, clientHMACKey) // server
            encrypt(response, serverCipherKey, serverHMACKey) // server
            decrypt(response, serverCipherKey, serverHMACKey) // client
        

Suites de chiffrement (cipher suites)

Échange de clé, authentication (asymétrique), chiffrement (symétrique), MAC/HMAC

Confidentialité persistante parfaite (PFS)

Algorithme de Diffie Hellman

La conversation reste secrête même si la clé privée a fuité grâce à l’échange de clés Diffie-Hellman.

Suites "Ephemeral Diffie-Hellman" : DHE-RSA-AES128-SHA, EDH-RSA-DES-CBC-SHA, ECDHE-RSA-AES128-SHA, ...

La poignée de main est légèrement différente.

Authentification

Domain, Organization et Extended Validation

Domain validation
Simple vérification sur l’appartenance du domaine
Organization validation
Vérification de l’identité du propriétaire (carte d’identité, SIRET, etc)
Extended validation
Enquête sur le propriétaire (vérification d’une présence physique, opérationnelle et juridique), permet l’affichage du propriétaire dans la barre d’adresse : barre verte

Un certificat X.509

            $ openssl x509 -in GandiStandardSSLCA2.pem -inform pem -noout -text
            Certificate:
            Data:
                Version: 3 (0x2)
                Serial Number: 05:e4:dc:3b:94:38:ab:3b:85:97:cb:a6:a1:98:50:e3
            Signature Algorithm: sha384WithRSAEncryption
                Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
                Validity Not Before: Sep 12 00:00:00 2014 GMT   Not After : Sep 11 23:59:59 2024 GMT
                Subject: C=FR, ST=Paris, L=Paris, O=Gandi, CN=Gandi Standard SSL CA 2
                Subject Public Key Info:
                    Public Key Algorithm: rsaEncryption
                        Public-Key: (2048 bit)
                        Modulus: 00:94:04:2d:a6:79:95:74:ff:d5:00:3c:f5:ae:d8:...
                        Exponent: 65537 (0x10001)
                X509v3 extensions:
                    X509v3 Authority Key Identifier:
                        keyid:53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
                    X509v3 Subject Key Identifier:
                        B3:90:A7:D8:C9:AF:4E:CD:61:3C:9F:7C:AD:5D:7F:41:FD:69:30:EA
                    X509v3 Key Usage: critical
                        Digital Signature, Certificate Sign, CRL Sign
                    X509v3 Basic Constraints: critical
                        CA:TRUE, pathlen:0
                    X509v3 Extended Key Usage:
                        TLS Web Server Authentication, TLS Web Client Authentication
                    X509v3 Certificate Policies:
                        Policy: 1.3.6.1.4.1.6449.1.2.2.26
                        Policy: 2.23.140.1.2.1
                    X509v3 CRL Distribution Points:
                        Full Name: URI:http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl
                    Authority Information Access:
                        CA Issuers - URI:http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt
                        OCSP - URI:http://ocsp.usertrust.com
            Signature Algorithm: sha384WithRSAEncryption
                 58:67:fd:72:b2:6a:d7:7c:61:96:19:7e:d9:43:46:d1:26:7d:...
        

Infrastructure de clé publique (PKI)

Hiérarchie des Autorités de Certifications
Autorité de certification racine (AC racine ou root CA)
Certificat auto-signé ; 200~400 CA chez : Mozilla, Apple, Microsoft ou Google
Autorité de certification intermédiaire (intermediate CA)
Autorité d’enregistrement (issuing CA)
Alternative
DANE : certificat dans DNSSEC.

La vie des CA n’est pas un long fleuve tranquille...

Certificate Transparency

Problèmes :

Une réponse : certificate transparency

Let’s encrypt

Autorité de certification + Protocole ACME + Agent OSS = Certificat DV à jour

Nombre de certificats issus par letsencrypt

filtre les domaines (Safe Browsing API) et soumission dans Certificate Transparency

Révocation : CRL, OCSP et Chrome CRLSet

Certificate Revocation Lists (CRL) :
Liste de n° de certificat invalide ; fichier potentiellement conséquent ; mis à jour tous les 7~14 jours ; confiance "par défaut"
Online Certificate Status Protocol (OCSP) :
Requête par certificat ; confiance "par défaut"
OSCP Stampling :
Le serveur joint une preuve valable quelques minutes avec son certificat ; TLS 1.2 seulement
Google Chrome CRLSet :
Liste de 250 Ko de n° de certificat invalide ; régulièrement mise à jour par Chrome ; ne contient qu’une infime partie des certificats révoqués...

Attaques

Le chiffrement, c’est solide ?

Bruce Scheier

Can the NSA break AES? My guess is that they can't.

Still, I trust the mathematics.

Bruce Schneier : Can the NSA Break AES?, The NSA's Cryptographic Capabilities
Edward Snowden

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it.

Edward Snowden : Encrypting Your Email Works

Pure force brute ?

type algo crack et aujourd’hui ?
RSA 512 1999 entre 7 heures et 2,5 jours via EC2
RSA 768 2009
RSA 1024 1 an via Conficker (9~15M PC, 100 000 $ à la clé)
RSA 2048 232 plus (200 000 $ à la clé)
DES 56 1997 < 24 heures
AES 128 (2304 bits) avec 1 000 000 000 PC, 660 x l’age de l’univers
AES 256 8 octodecillion $ (ou 1044 le PIB mondial)

S’attaquer à la cryptographie ?

xkcd
Pourquoi s’attaquer à la cryptographie alors qu’il existe d’autres moyens ?

Attaques « faciles »

Pour éviter l’interception de traffic

Réseau anormal au niveau du point d’accès
donotbeevil

Interception via un point d’accès malveillant

détails et implémentation de cet exemple

Bugs

xkcd

Les attaques connues

Générer des faux certificats

Quelques autres attaques

Après HTTPS

Pensez à renouveler vos certificats !

Quelques échecs :

Mixed content

Chrome page security icon
Simplifying page security icon in Chrome

HSTS : Http Strict Transport Security RFC6797

Strict-Transport-Security: max-age=16070400; includeSubDomains

CPKP : Certificate Public Key Pinning RFC7469

Public-Key-Pins: pin-sha256=""; pin-sha256=""; max-age=259200

Subresource integrity

            <script src="https://example.com/jquery.js"
                    integrity="sha384-oqVuAfX542FR..."><script>
        

CSP : Content Security Policy

            Content-Security-Policy:default-src 'none';
                 script-src 'self'; style-src 'self';
                 upgrade-insecure-requests; block-all-mixed-content;
       

Performances

Performances

SSL/TLS accounts for less than 1% of the CPU load, less than 10KB of memory per connection and less than 2% of network overhead

Migration de gmail en 2010 - Adam Langley (Google)

We have found that modern software-based TLS implementations running on commodity CPUs are fast enough to handle heavy HTTPS traffic

Doug Beaver (Facebook)

Performances

Pour tester le nombre de "poignées de main/seconde" :

$ openssl speed rsa

Sur ce Thinkpad t440s (fin 2013 - Intel Core i7-4600U @ 2.10GHz) :

                             sign    verify    sign/s verify/s
            rsa  512 bits 0.000051s 0.000005s  19514.8 220139.1
            rsa 1024 bits 0.000193s 0.000013s   5182.2  79873.9
            rsa 2048 bits 0.001312s 0.000040s    762.3  25034.3
            rsa 4096 bits 0.009250s 0.000145s    108.1   6889.3
        

Facteur 7 entre 1024 et 2048, 2048 et 4096

Performances

Conclusion

Conclusion

Questions & réponses

Ressources

Références

Annexes

Fonctionnement de l’attaque (mitmproxy)

Fonctionnement de l’interception
pour construire le même...

Poignée de main via l’échange de clé Diffie-Hellman (détails)

1. « Client hello »

handshake : client hello
wireshark : client hello

2. « Server hello »

handshake : server hello
server hello

2. Certificat(s)

handshake : server certificates
server certificates

3. « Server Key Exchange » & « hello done »

handshake : key exchange
key exchange

4. Échange de clé

handshake : key exchange
key exchange

5. Fin de l’échange de clé

handshake : key exchange
change cipher spec

6. Place au traffic chiffré

poignée de main
encrypted data
            
        

DNS-based Authentication of Named Entities (DANE)

4 types :

BEAST: Browser Exploit Against SSL/TLS

CRIME: Compression Ratio Info-leak Made Easy

BREACH: Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext

POODLE: Padding Oracle On Downgraded Legacy Encryption

FREAK: Factoring RSA EXPORT Attack Keys

Logjam

DROWN: Breaking TLS using SSLv2

Fork me on Github