Outils pour utilisateurs

Outils du site


cryptographie:x509

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

cryptographie:x509 [2017/03/31 12:43] (Version actuelle)
arkinar créée
Ligne 1: Ligne 1:
 +**Certificat SSL - X509**
 +
 +X.509 est une norme spécifiant les formats pour les certificats à clé publique.
 +
 +Un certificat SSL atteste l'​identité d'une entreprise et est utilisé afin de chiffrer les données échangées sur un réseau.
 +
 +Les certificats SSL sont soumis à la norme X509.
 +
 +**1.Présentation**
 +
 +Lors d'un échange HTTPS par exemple, les données sont chiffrés à l'aide du certificat.
 +
 +{{ :​cryptographie:​schema-requete-https.jpg?​nolink |}}
 +
 +Si notre échange est intercepté par un attaquant , il est chiffré et donc incompréhensible.
 +
 +Comme on peut le voir ci-dessus à l'​initialisation de l'​échange le certificat est envoyé en clair à travers le réseau.
 +
 +
 +**2.Exploitation**
 +
 +Le but de l'​exploitation est de recréer la clé privé qui a permis d'​émettre le certificat(clé publique) pour pouvoir déchiffrer l'​ensemble de la capture réseau.
 +
 +__2.1 Méthode 1 : Attaque par factorisation__
 +
 +** Étape 1 : Extraction du certificat**
 +
 +Ouvrir la capture avec Wireshark (attention la version 1 semble avoir des problèmes)
 +
 +{{ :​cryptographie:​export_certificat.png?​nolink |}}
 +
 +
 +Sur le paquet 6 : "​Server Hello , Certificate , Server Hello Done"
 +
 +Dans la catégorie "​Secure Socket Slayer"​ du paquet ​
 +
 +On fait un clique droit sur "​Certificate"​ => "​Export selected packets bytes" et on enregistre en cert.der
 +
 +Attention lors de l'​extraction du certificat le fichier est bien en .der et non en pem
 +
 +** Étape 2 : convertir le .der en .pem**
 +
 +On utilise Openssl pour effectuer la conversion :
 +<code bash>
 +openssl x509 -inform der -in cert.der -out pubkey.pem
 +</​code>​
 +
 +L'​option :
 +  - -inform : permet de stipuler le type de fichier donné en input
 +  - -in : permet de donné le fichier en input
 +  - -out : permet de donnée le nom du fichier de sortie
 +
 +Il faut ensuite extraire le modulo de la clé publique :
 +
 +<code bash>
 +openssl x509 -in pubkey.pem -text -modulus -noout
 +</​code>​
 +
 +L'​option :
 +  - -text : permet d'​afficher la sortie
 +  - -modulus : permet d'​afficher le modulo ​
 +
 +<​code>​
 +Certificate:​
 +    Data:
 +        Version: 1 (0x0)
 +        Serial Number: 1000 (0x3e8)
 +    Signature Algorithm: sha1WithRSAEncryption
 +        [...]
 +            Public Key Algorithm: rsaEncryption
 +                Public-Key: (4096 bit)
 +               ​Modulus:​
 +                    00:​86:​98:​65:​48:​c0:​2b:​2d:​6b:​04:​61:​a7:​4a:​09:​a5:​
 +                    [...]
 +                Exponent: 65537 (0x10001)
 +               ​Signature Algorithm: sha1WithRSAEncryption
 +                   ​31:​17:​4a:​f4:​96:​40:​0e:​8d:​56:​f7:​3f:​46:​1d:​cf:​0b:​9d:​25:​5f:​
 +                    [...]
 +
 +Modulus=86986548C02B2D6B0461A74A09A5EE4EFA07882D5C610BDB14D1BA3044EFFD5570E4C509D116ACA992A342CF52ED0463DB6D4648A3013BA8219C3A72B1998796253DD11ECC536087E6E5BD207C1387AF9DF6BF875AB319556DCC0BAD6A90F017459760EE7D274FE6046E7599385F7607D29ED235477695E3365FC6B9F5270183E9C4C2C118AA676C1D9CBE06864507E4310D85B8CACFF9F5A3EED487B71D2D75B00943D7EDA9AAF5B2BB69271625DE2469D6A7C4F50C4EEAC54B1605793CC0F7FE9167452FF5FEF3647C9EEC8866730732C05DCA4C56F393CA2E61E7D76442822B9DA56D96F67BBA9F6095F761D0F2A3DE62EA8C6FC7AC2FA7B727684947F7640711B700F40A1799D0265EEFE94952B50E5E10B15BEC14CC1664714C6C1FF1C16454F4A912EC19760D80C4759FF3130DA43B13E7967D5CEA526402CF2B566653C0CD5D7D0995357661C0308CBD11AAEB832CA9093DC3981D1FB6B62FD98A883E8D4C1548521C3E2F0BEF76C7220D8093C2BDB1AE017F2E48D0DEFE42CE5713955AE294BEC2B5DA9B81CF9BB1D8CA5E5DCC9BF930EDB7A3F6D2D350D2AA478E01070DBC151D6F9F6DBA473EC001432DE4E2CED4611955F294B3D48631DD51EB7C50A97F5165731D597129D3335F4C994234D89095335C705F075A1BA08A0F5CF383D65CD424524A48A415CE2CA5A34B4287E4EFACB243E68B9C90A3679BEF2757
 +</​code>​
 +
 +
 +Il faut passer le modulo de l'hexa au décimal : [[http://​www.mobilefish.com/​services/​big_number/​big_number.php | ICI]]
 +
 +On regarde si le modulo est connu sur factor-db :
 +
 +<​code>​
 +http://​factordb.com/​index.php?​query=549100898763808112064590568096509639806005267015788479836998648112330729762142760306265813195181231930171220686827142359040315653020182064933039077953579528749272321744478656324986362155106653831095037724728643255316641716947998245610175805278242802144980117927688674393383290354985820646326870614197414534217177211618710501438340081867982883181358830449072661742417246835970022211465130756382481343160426921258769780282358703413114522476037306476452786236456339806564839822630841425055758411765631749632457527073092742671445828538125416154242015006557099276782924659662805070769995499831691512789480191593818008294274869515824359702140052678892212293539574359134092465336347101950176544334845468112561615253963771393076343090247719105323352711194948081670662350809687853687199699436636944300210595489981211181100443706510898137733979941302306471697516217631493070094434891637922047009630278889176140288479340611479190580909389486067761958499091506601085734094801729179308537628951345012578144960250844126260353636619225347430788141190654302935255862518781845236444151680147886477815759103864509989480675169631226254252762579781553994364555800120817100328166428687776427164098803076677481602221304265962340500651339469391627432175447
 +</​code>​
 +Le modulo est entièrement factorisé sur le site , ces composantes sont disponibles.
 +
 +On a donc :
 +<​code>​
 +e=65537
 +
 +p = 2758599203
 +
 +q= 199050626189790903113151725251371951406311367304411013359159100762029303668345459282823483508119186508070350039475140948570888009866572148405365532164833126992414461936781273087675274788769905198546175946505790118332257676994622928414648644875376193656132263418075334807302665038501361680530751104620475935886499714767992159620130246904875540624651891646715835632182355428589610236128648209568297096024509697960196858754170641081387466229916585122877955908862176165344465889280850859817985096316883025515924332365977538735425288433292357532172467247159245727072344354499113900733623716569924461327947462469348798798400461045817375922057805611166274339541877392159201774893120311667898551312256530117094221191204981071357303328506659872809131929265966688409379037586014938643190675726674943253875287765020503118408406103824607730713529079962656130622218633922911733000466212212532871890933508287965723844399784165195088175666883742686183165151553009638524764735387233844317375317153437534933611361683136151569588355535831475925641431859231311079029505004457816932257031352498323214304125608733640306746900473758755832661915903475867854937735150255829715879232213599597863424779218670961633567259935246911742292942052832671549
 +
 +
 +n= 549100898763808112064590568096509639806005267015788479836998648112330729762142760306265813195181231930171220686827142359040315653020182064933039077953579528749272321744478656324986362155106653831095037724728643255316641716947998245610175805278242802144980117927688674393383290354985820646326870614197414534217177211618710501438340081867982883181358830449072661742417246835970022211465130756382481343160426921258769780282358703413114522476037306476452786236456339806564839822630841425055758411765631749632457527073092742671445828538125416154242015006557099276782924659662805070769995499831691512789480191593818008294274869515824359702140052678892212293539574359134092465336347101950176544334845468112561615253963771393076343090247719105323352711194948081670662350809687853687199699436636944300210595489981211181100443706510898137733979941302306471697516217631493070094434891637922047009630278889176140288479340611479190580909389486067761958499091506601085734094801729179308537628951345012578144960250844126260353636619225347430788141190654302935255862518781845236444151680147886477815759103864509989480675169631226254252762579781553994364555800120817100328166428687776427164098803076677481602221304265962340500651339469391627432175447
 +</​code>​
 +Ici on remarque clairement le problème d'​implémentation , p ne fait que 10 digits.
 +
 +** Étape 3 : Reconstruire la clé privé**
 + 
 +On reconstruit la clé privé avec [[https://​github.com/​ius/​rsatool|rsatool]]
 +
 +<code bash>
 +python rsatool.py -n <n> -p <p> -q <q> -e <e> -v PEM -o privkey.pem
 +</​code>​
 +
 +** Étape 4 : Déchiffrer la capture**
 +
 +Pour ce faire il faut aller dans "​Edition"​ => Préférences => Protocols => SSL
 +
 +{{ :​cryptographie:​ssl_pref.png?​nolink |}}
 +
 +On ajoute une nouvelle clé dans "RSA Keys Lists"​.
 +
 +On remplit les champs comme ceci :
 +<​code>​
 +ip adresse : 192.168.1.27
 +port : 443
 +Protocol : http
 +et on met notre fichier keypriv.pem
 +</​code>​
 +{{ :​cryptographie:​rsa_key.png?​nolink |}}
 +
 +Une fois que c'est fait on obtient : 
 +
 +{{ :​cryptographie:​rsa_key_2.png?​nolink |}}
 +
 +On fait "​Appliquer"​ et la capture se déchiffre :
 +
 +On obtient notre capture http en clair : 
 +
 +{{ :​cryptographie:​decrypt.png?​nolink |}}
 +
 +
 +**3.Comment se protéger**
 +
 +Il faut respecter les normes de sécurité et ne pas implémenter des algorithmes dépréciés comme le DES ou le 3DES.
 +
 +
 +
 +
  
cryptographie/x509.txt · Dernière modification: 2017/03/31 12:43 par arkinar