Apprendre la cryptographie par l'attaque - Devoxx FR 2016

911 vues

Publié le

Apprendre la cryptographie par l'attaque - Devoxx FR 2016

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
911
Sur SlideShare
0
Issues des intégrations
0
Intégrations
35
Actions
Partages
0
Téléchargements
22
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Apprendre la cryptographie par l'attaque - Devoxx FR 2016

  1. 1. #DevoxxFR 1 Apprendre la cryptographie par l’attaque ! Thierry Abalea CTO @Fluo @ThierryAbalea
  2. 2. #DevoxxFR 2  Cryptographie : le maillon le plus fort de la chaine   La cryptographie est un problème résolu  “  „  “  „ 
  3. 3. #DevoxxFR 3  Cryptographie : le maillon le plus fort de la chaine   La cryptographie est un problème résolu  “  „  “  „ Ces personnes se trompent
  4. 4. #DevoxxFR 4 ๏ Algorithmes ๏ Conception des protocoles ๏ Implémentation ๏ Conception des API/Bibliothèques ๏ Déploiement et usage correct ✔ confiance décroit
  5. 5. #DevoxxFR 5  AES SHA RSA
  6. 6. #DevoxxFR 6  AES SHA RSA sûrs mais pas directement
  7. 7. #DevoxxFR 7  Oracle Padding Attack  Démonstration sur AES “  „ 
  8. 8. #DevoxxFR 8 La méthode suivante est parfaitement sûre en terme de cryptographie import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.GeneralSecurityException; public static byte[] decrypt(byte[] cipherText, byte[] iv) throws GeneralSecurityException { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(KEY, "AES"), new IvParameterSpec(iv)); return cipher.doFinal(cipherText); }
  9. 9. #DevoxxFR 9 … mais elle n’est pas sûre si elle est appelée par la méthode suivante : public int processEncryptedMessage(byte[] cipherText, byte[]) int httpStatusCode; try { decrypt(cipherText, iv); httpStatusCode = OK_CODE; // 200 process(plaintext); } catch (GeneralSecurityException exc) { httpStatusCode = INTERNAL_ERROR_CODE; // 500 } return httpStatusCode; }
  10. 10. #DevoxxFR 10 Démo
  11. 11. #DevoxxFR 11 Explication de l’attaque
  12. 12. #DevoxxFR 12 https://fr.wikipedia.org/wiki/Mode_d%27op%C3%A9ration_(cryptographie)
  13. 13. #DevoxxFR 13 Problème des modes ECB ( Electronic CodeBook ) Image originale Image chiffrée en mode ECB Image chiffrée en un autre mode que ECB
  14. 14. #DevoxxFR 14 Mode d’opération CBC ( Cipher Block Chaining ) Chiffrement Déchiffrement
  15. 15. #DevoxxFR 15 Ajout du padding au chiffrement longueur 1 => … XX XX XX 01 longueur 2 => … XX XX 02 02 longueur 3 => … XX 03 03 03
  16. 16. #DevoxxFR 16 Padding valide (au déchiffrement) … XX XX XX 01 => longueur 1 … XX XX 02 02 => longueur 2 … XX 03 03 03 => longueur 3 … XX XX 01 01 => longueur 1
  17. 17. #DevoxxFR 17 Padding invalide (au déchiffrement) … XX XX XX 00 … XX XX 01 02 … XX FE 03 03
  18. 18. #DevoxxFR 18 xx xx xxxxxx xx Avant dernier bloc chiffré xx xx xxxxxx xx Dernier bloc chiffré Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx xx xx xxxxxx xx + Déchiffrement du bloc + Bloc intermédiaire Bloc clair
  19. 19. #DevoxxFR 19 xx xx xxxxxx xx xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx xx xx xxxxxx xx + Déchiffrement du bloc + Connu Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair
  20. 20. #DevoxxFR 20 xx xx xxxxxx xx xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx xx xx xxxxxx xx + Déchiffrement du bloc + ConnuAvant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair
  21. 21. #DevoxxFR 21 xx xx xxxxxx xx xx xx xxxxxx xx Déchiffrement du bloc ?? ?? ?????? ?? xx xx xxxxxx xx xx xx xxxxxx xx + Déchiffrement du bloc + Inconnu Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair
  22. 22. #DevoxxFR 22 xx xx xxxxxx xx xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx ?? ?? ?????? ?? + Déchiffrement du bloc + Inconnu A déterminer Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ?? ?? ?????? ??
  23. 23. #DevoxxFR 23 xx xx xxxxxx xx xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx ?? ?? ?????? ?? + Déchiffrement du bloc + Cible immédiate Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ?? ?? ?????? ??
  24. 24. #DevoxxFR 24 RR RR RRRRRR RR xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx RR RR RRRRRR RR + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ?? ?? ?????? ??
  25. 25. #DevoxxFR 25 RR RR RRRRRR RR xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR RR + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair
  26. 26. #DevoxxFR 26 RR RR RRRRRR ?? xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR 01 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Objectif A déterminer
  27. 27. #DevoxxFR 27 RR RR RRRRRR 00 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Inconnu
  28. 28. #DevoxxFR 28 RR RR RRRRRR 00 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Padding KO≠ 1
  29. 29. #DevoxxFR 29 RR RR RRRRRR 01 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair 2ème essai
  30. 30. #DevoxxFR 30 RR RR RRRRRR 01 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Padding KO 2ème essai ≠ 1
  31. 31. #DevoxxFR 31 RR RR RRRRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair 3ème essai
  32. 32. #DevoxxFR 32 RR RR RRRRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Inconnu Padding OK 3ème essai
  33. 33. #DevoxxFR 33 RR RR RRRRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR RRRRRR 01 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ? Padding OK 3ème essai
  34. 34. #DevoxxFR 34 RR RR RRRRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR 02RRRR 02 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ? Padding OK 3ème essai
  35. 35. #DevoxxFR 35 RR RR RRRRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR 0303RR 03 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ? Padding OK 3ème essai
  36. 36. #DevoxxFR 36 RR RR RR’RRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR XXRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ? Validation
  37. 37. #DevoxxFR 37 RR RR RR’RRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx 03 xx xx xxxxxx xx RR RR XXRRRR 01 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair = 1 Validation Padding OK
  38. 38. #DevoxxFR 38 RR RR RR’RRRR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR XXRRRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair ≠ 1 Validation Padding KO
  39. 39. #DevoxxFR 39 RR RR RRRR’RR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx RR RR ??XXRR ?? + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Validation
  40. 40. #DevoxxFR 40 RR RR 05RR’RR 02 xx xx xxxxxx xx Déchiffrement du bloc xx xx 07xxxx 00 xx xx xxxxxx xx RR RR 02YYRR 02 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair = 2 Padding OK
  41. 41. #DevoxxFR 41 RR RR RRRRRR RR xx xx xxxxxx xx Déchiffrement du bloc xx xx 07xxxx 00 xx xx xxxxxx xx RR RR 0303RR 03 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Cible padding de 3
  42. 42. #DevoxxFR 42 RR RR 04??RR 03 xx xx xxxxxx xx Déchiffrement du bloc xx xx 07xxxx 00 xx xx xxxxxx xx RR RR 0303RR 03 + Déchiffrement du bloc + Avant dernier bloc chiffré Dernier bloc chiffré Bloc intermédiaire Bloc clair Cible padding de 3
  43. 43. #DevoxxFR 43 xx xx xxxxxx xx Avant dernier bloc chiffré xx xx xxxxxx xx Dernier bloc chiffré Déchiffrement du bloc xx xx xxxxxx xx xx xx xxxxxx xx xx xx xxxxxx xx + Déchiffrement du bloc + Bloc intermédiaire Bloc clair Et ce bloc ?
  44. 44. #DevoxxFR 44 Solution : Authentifier le message
  45. 45. #DevoxxFR 45 MAC : Message Authentication Code Message MessageMessage MAC Algorithm MAC MAC MAC MAC Algorithm MAC =? Secret Key Secret Key =? Message is authentic Message has bean altered Y N
  46. 46. #DevoxxFR 46 MAC = SHA-256 (Key || m)
  47. 47. #DevoxxFR 47 MAC = SHA-256 (Key || m) ⤬
  48. 48. #DevoxxFR 48  Length Extension Attack  Démonstration sur SHA “  „ 
  49. 49. #DevoxxFR 49 Objectif : Authentifier les requêtes sur une API
  50. 50. #DevoxxFR 50 http://dashboard.fluo.com/?role=admin& user=alice&mac=e3fd4….4D SHA-256 ( Key || http://dashboard….alice )
  51. 51. #DevoxxFR 51 Les 3propriétés de cryptanalyse d’une fonction de hachage cryptographique (MD5, SHA, …)
  52. 52. #DevoxxFR 52 Résistance à la pré-image h m, h = hash(m) impossible * 1 * sur le plan pratique
  53. 53. #DevoxxFR 53 Résistance à la seconde pré-image m1 m2, hash(m1) = hash(m2) impossible * ∀ 2 * sur le plan pratique
  54. 54. #DevoxxFR 54 Résistance aux collisions m1, m2 tel que hash(m1) = hash(m2) impossible * ∃ 3 * sur le plan pratique
  55. 55. #DevoxxFR 55 Construction de Merkle–Damgård F Finalisation Bloc Message 1 Bloc Message 2 Bloc Message N Longueur du padding F F F HashIV
  56. 56. #DevoxxFR 56 http://dashboard...alice %80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00 %00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00 %00 %00%A8&user=eve&mac=5af4...fc
  57. 57. #DevoxxFR 57 HMAC (k,m) = SHA-256 ( k || SHA-256(k || m)) Solution :
  58. 58. #DevoxxFR 58 Revenons sur AES & CBC
  59. 59. #DevoxxFR SSL / TLS PaddingTexte Clair MAC CBC Clé IV Handshake 59
  60. 60. #DevoxxFR 60  Lucky 13 Attack  “  „  attaque temporelle (timing attack) Février 2013
  61. 61. #DevoxxFR 61 Solution AEAD Authentication Encryption with Associated Data
  62. 62. #DevoxxFR 62 Encrypt-then-MAC (EtM) 1
  63. 63. #DevoxxFR 63 Mode d’opération GMC, EAX, … 2
  64. 64. #DevoxxFR 64 3 Bibliothèques au bon niveau d’abstraction (KeyCzar, cryptlib, …)
  65. 65. #DevoxxFR 65 Attaque liée à la compression TLS
  66. 66. #DevoxxFR 66 gzip
  67. 67. #DevoxxFR 67 Site sous le contrôle de l’attaquant https:// www.google.com Navigateur de la Victime Vecteur de l’attaque en Javascript GET /image
  68. 68. #DevoxxFR 68 GET /images/logo.png HTTP/1.1 Host: www.google.com (...) Cookie: secret=7xc89f+94/wa (...)
  69. 69. #DevoxxFR 69 GET /images/logo4e8.png HTTP/1.1 Host: www.google.com (...) Cookie: secret=7xc89f+94/wa (...)
  70. 70. #DevoxxFR 70 GET /images/logo7xc.png HTTP/1.1 Host: www.google.com (...) Cookie: secret=7xc89f+94/wa (...)
  71. 71. #DevoxxFR 71 Solution désactiver la compression TLS & SPDY
  72. 72. #DevoxxFR 72 2011 BEAST 2013 BREACH 2013 LUCKY 13 2012 CRIME 2013 Attaques sur RC4 2014 Apple’s goto fail 2014 Heartbleed 2014 POODLE 2015 FREAK 2015 logjam 2016 DROWN Attaques SSL/TLS
  73. 73. #DevoxxFR 73 2011 BEAST 2013 BREACH 2013 LUCKY 13 2012 CRIME 2013 Attaques sur RC4 2014 Apple’s goto fail 2014 Heartbleed 2014 POODLE 2015 FREAK 2015 logjam 2016 DROWN Attaques SSL/TLS OPA OPA OPA & + Compression Compression
  74. 74. #DevoxxFR 74 Une attaque pour conclure
  75. 75. #DevoxxFR 75 GnuPG
  76. 76. #DevoxxFR 76 gpg -d your_archive.tar.gpg | tar xz
  77. 77. #DevoxxFR 77 gpg -d your_script.sh.gpg | bash
  78. 78. #DevoxxFR 78 $ gpg -d my_secure_script.sh.gpg | bash gpg: AES encrypted data gpg: encrypted with 1 passphrase gpg: Signature made Sun Apr 17 21:59:14 2016 CEST using RSA key ID E625A4BB gpg: BAD signature from "Alice <alice@victime.com>” gpg: WARNING: message was not integrity protected … exécution de code “aléatoire” …
  79. 79. #DevoxxFR 79 echo "J'ai hacké la machine de `whoami`" Script malveillant
  80. 80. #DevoxxFR 80 echo "echo "J'ai hacké la machine de `whoami`"" | gpg --encrypt -o my_secure_script.sh.gpg --recipient alice@victime.com Le Hacker
  81. 81. #DevoxxFR 81 gpg --passphrase=secret --decrypt my_secure_script.sh.gpg | bash La victime
  82. 82. #DevoxxFR 82 gpg --passphrase=secret --decrypt my_secure_script.sh.gpg | bash You need a passphrase to unlock the secret key for user: "Alice <alice@victime.com>" 2048-bit RSA key, ID 7EFCB32A, created 2016-04-17 (main key ID E625A4BB) gpg: encrypted with 2048-bit RSA key, ID 7EFCB32A, created 2016-04-17 “Alice <alice@victime.com>" J'ai hacké la machine de alice La victime
  83. 83. #DevoxxFR 83 Question ?
  84. 84. #DevoxxFR 84 Références Les slides de ce talk: http://bit.ly/crypto-devoxx Blog de Matthew Green (cryptologue) http://blog.cryptographyengineering.com/ Blog d’Adam Langley (cryptologue), https://www.imperialviolet.org/ Talk de Matthew Green, https://www.youtube.com/watch?v=uP6np_oKVCk Talk d’Adam Langley, https://www.yahoo.com/news/video/yahoo-trust-unconference- tls-adam-223046696.html?ref=gs Post lié au talk précédent, https://www.imperialviolet.org/2015/05/16/aeads.html Code de l’Oracle Padding Attack: http://bit.ly/oracle-padding-attack

×