All links of one day
in a single page.
<Previous day - Next day>

rss_feedDaily RSS Feed
floral_left The Daily Shaarli floral_right
——————————— August 8, 2018 - Wednesday 08, August 2018 ———————————

Il existe deux formats pour stocker une clé SSH privée chiffrée. L'un d'eux repose sur une clé de chiffrement symétrique dérivée de la phrase de passe via la fonction cryptographique MD5 utilisée avec un sel, ce qui peut être compromis par une attaque par force brute ou par dictionnaire.

Il n'y a pas lieu de s'alarmer car la faiblesse de ce format de stockage d'une clé SSH, connue depuis plus de 6 ans, est très théorique, car :

  • 1) qui, en 2018, ne chiffre pas sa partition (ce qui protège contre le vol quand la machine est éteinte) ? ;

  • 2) qui met un mot de passe simpliste qui se casse facilement sur sa clé SSH privée (ou ailleurs, d’ailleurs) ? Quand on utilise de la crypto, on utilise une phrase de passe robuste ;

  • 3) qui ne révoque pas sa clé privée SSH au moindre soupçon de compromission ?

Note : si t'as une clé SSH ed25519, alors tu utilises forcément le nouveau (2013 tout de même) format de stockage, qui n'est pas vulnérable (car il repose sur bcrypt et 16 itérations). C’est le man ssh-keygen qui le dit.


Théorie

The private key is an ASN.1 data structure, serialized to a byte string using DER, and then Base64-encoded.

[…]
cat test_rsa_key
[…]

We’ve gained two header lines, and if you try to parse that Base64 text, you’ll find it’s no longer valid ASN.1. That’s because the entire ASN.1 structure we saw above has been encrypted, and the Base64-encoded text is the output of the encryption. The header tells us the encryption algorithm that was used: AES-128 in CBC mode. The 128-bit hex string in the DEK-Info header is the initialization vector (IV) for the cipher. This is pretty standard stuff; all common crypto libraries can handle it.

But how do you get from the passphrase to the AES encryption key? I couldn’t find it documented anywhere, so I had to dig through the OpenSSL source to find it:

  1. Append the first 8 bytes of the IV to the passphrase, without a separator (serves as a salt).
  2. Take the MD5 hash of the resulting string (once).

[…]
The digest algorithm is hard-coded to be MD5, which means that without changing the format, it’s not possible to upgrade to another hash function (e.g. SHA-1). This could be a problem if MD5 turns out not to be good enough.


Pratique

Vérifier le format de stockage utilisé

grep 'BEGIN OPENSSH' $cheminVersLaCleÀTester

Si cette commande retourne rien : la clé utilise le nouveau format. Si elle retourne une ligne, la clé utilise l'ancien format qui est vulnérable.


Retrouver la passphrase d'une clé privée SSH

Alors, alors, alors, comment on casse la passphrase d'une clé privée SSH ? J'actualise ce tutoriel : Recover Your GPG Passphrase using 'John the Ripper' trouvé via How to bruteforce an RSA private-key's passphrase?.

  • On installe la version jumbo de John The Ripper. Il s'agit d'une version améliorée par la communauté : « "Community enhanced" -jumbo versions add support for many more password hash types, including […] lots of other hash types, as well as many non-hashes such as OpenSSH private keys, S/Key skeykeys files, Kerberos TGTs, PDF files, ZIP (classic PKZIP and WinZip/AES) and RAR archives. » :

    $ git clone https://github.com/magnumripper/JohnTheRipper
    $ cd JohnTheRipper/src
    $ ./configure
    $ make -s clean && make -sj4
    $ cd ..


  • On convertit les infos contenues dans le fichier stockant la clé privée en un hash compréhensible par John : run/ssh2john.py ~/.ssh/id_rsa > maclessh.hash ;

  • On lance la recherche de la passphrase (ici, j'utilise la technique lente de la force brute, mais il est possible d'utiliser une attaque par dictionnaire de la manière habituelle avec John) :

    $ run/john --incremental maclessh.hash
    Using default input encoding: UTF-8
    Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
    Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
    Cost 2 (iteration count) is 1 for all loaded hashes
    Will run 4 OpenMP threads
    Note: This format may emit false positives, so it will keep trying even after
    finding a possible candidate.
    Press 'q' or Ctrl-C to abort, almost any other key for status
    tooree           (/home/guigui/.ssh/id_rsa)


Comment se protéger de cette vulnérabilité ?

En utilisant le nouveau format de stockage qui repose sur bcrypt() et 16 itérations. Cela se fait en utilisant la commande suivante : ssh-keygen -p -o -f <fichier_clé_privée_actuelle>.

Via https://twitter.com/aeris22/status/1025769363935252481 .

Un documentaire de 2017 qui fait le bilan de la première année de la présidence Trump :

  • Travelban : suspendu par la justice puis restreint par la Cour suprême (moins de pays et moins de voyageurs concernés) ;

  • Mur avec le Mexique : trop coûteux, mais des barrières en métal ont déjà été posées sur 1/3 de la distance ;

  • Diplomatie : le canal dissident, qui permet aux diplomates américains d'exprimer leur désaccord avec leur gouvernement a été utilisé plus d'une centaine de fois, ce qui est inédit ;

  • Collusion avec la Russie : au départ, Trump n'était pas concerné par l'enquête, il s'est mis lui-même en porte-à-faux en limogeant Comey, le directeur du FBI. La défiance publiquement exprimée de Trump envers les services secrets à attiser la colère de ses derniers, qui ne vont pas le lâcher comme ça ;

  • Armes : les afro-américains et les femmes craignent pour leur vie, notamment à la position ambiguë de Trump sur les incidents de Charlottesville. On constate une hausse de l'achat d'armes, notamment des fusils automatiques 15 mm, et de la présence à des formations de maniement des armes.

  • Droits des femmes : l'interdiction des subventions publiques aux cliniques qui pratiquent l'IVG a été adopté. Le planning familial a vu son budget fondre de moitié (500 millions de dollars/an). Notons que, même avant Trump, l'accès à l'IVG n'est pas aussi facile qu'en France : il y a 5 cliniques pour la superficie du Colorado, de l'Utah, du Nevada et du Nouveau-Mexique. :O Mais depuis l'élection de Trump, certains États ont renforcé leur législation : les femmes doivent demander la permission d'aborter à leur partenaire sexuel (y compris violeur), le fœtus peut être représenté par un avocat, et les médecins peuvent mentir aux parents en ne les prévenant pas des malformations du fœtus ;

  • Santé : les tentatives de supprimer l'Obamacare (équivalent de la CMU, système de santé pour 23 millions d'américains les plus pauvres) ont échoué** à cause de division au sein même du parti présidentiel majoritaire au Congrès. Le documentaire évoque que le prix des mutuelles peut s'élever jusqu'à 900 dollars par mois. :O J'ai du mal à y croire, mais waoooh ;

  • Environnement : retrait de l'accord de Paris sur le climat et baisse des dotations de l'Agence pour la Protection de l'Environnement. Des États résistent et annoncent la hausse de la part d'énergies renouvelables dans leur mix énergétique ;

  • Destitution ? Improbable avec les deux chambres du Congrès qui sont à majorité du parti présidentiel, sauf si des démocrates accèdent au pouvoir aux élections de mi-mandat de fin 2018.

Un outil sans dépendance pour gérer la mise en cache en RAM des fichiers par Linux.

Visualiser si une arborescence ou un fichier est en cache (et quelles parties d'un fichier le sont) : vmtouch -v.

Mettre un fichier en cache : vmtouch -vt. Attention : Linux peut retirer le fichier de la RAM s'il l'estime nécessaire.

Mettre un fichier en cache et le verrouiller pour pas que Linux le retire : vmtouch -dl.

Apparemment, il sera packagé dans la prochaine version stable de Debian, buster / 10. \o/

-