ssh gpg et ta nouvelle carte de credit

Update 22/11/2016 : rajouts des liens sur le hardware + une section fun sur l’abus d’une fonctionnalite de l’implementation d’un HSM (heureusement qu’il est open cela dit…)

C’est quoi l’histoire?

Crise de la trentaine..

Comme beaucoup de bouseux/geeks de l’opensource (dont je fais partie), j’ai beaucoup de machines qui “traînent” et servent sporadiquement pour certains trucs elec-digitale/FPGA/OTG/ARM/decouverte/blabla (comme le novena) ou certaines “tâches”/“test” (comme bientôt l’ORWL), j’ai plusieurs “laptops” selon que je bosse (et sur quoi) ou que je “traîne” sur mes projets persos (ah ça je traîne..) ou de l’apprentissage (yeelong pour le MIPS ou le novena pour l’arch ARM).

Le truc relou c’est que je voulais pouvoir me logguer (ah mon IRC…) souvent depuis la machine où je suis sur le moment (OS hétérogènes: bsd, linux, os/x) mais sans transférer/laisser trainer la/les clefs SSH et/ou GPG et en limitant (un peu, faut pas rêver non plus.) les risques qu’un putain de malware/bouseux concurrent (oui on sait jamais) me les tapent simplement…

Alors j’ai juste cherché, vite fait, comment je pourrais faire.. je me suis aussi demandé pourquoi je l’ai pas fait avant… je me forçais à me logguer depuis UNE seule machine trusted blablabla… bref.

Comment?

Y a pleins d’approches “potentielles”:

  • un disque externe/USB chiffré qui se monte automagiquement, mais c’est relou selon les FS/crypto supportés, pas multiplateforme et bon on peut encore te taper ta clef privée (genre en mémoire) meme si elle est chiffrée avec ta gentille passphrase.
  • un HSM, une variante du FS qui te file une interface d’accès qui “devrait” marcher partout.. mais bon.. on sait ce que c’est.. driver, interface peu/pas portables/etc.. ou qui finalement se comporte comme un FS avec une interface pseudo-custom..
  • keybase.io qui te propose un moyen de dealer avec tes clefs GPG (mais pas que..) de manière (IMHO) assez bordelique (mais pas que..) et complexe, mais avec une jolie CLI et une jolie interface yoyoyo-je-suis-une-startup-à-SF-donc-jai-forcément-la-solution-to-build-a-better-world
  • smartcards (hmm?! comment ça marche?)
  • copier-partout-et-croire-en-dieu-ou-des-esprits-que-tu-te-feras-jamais-défoncer
  • what else? (vous pouvez commenter!)

Apres une brillante analyse (qui me caractérise bien moi, le bon et prétentieux bouseux opensourceux), la définition d’un threat model, le calcul du risque associé et la production de slides incroyables pour la prochaine conf à la con ou j’irais vomir/étaler ma mediocrite pour me vendre un peu plus en tentant de changer de statut (e.g. passer du cassoulet LIDL au cassoulet Williams Saurin, c’est une évolution en soi).

J’en suis venu aux smartcards, qui loin d’être parfaites, proposent quand même un compromis “sympa” pour peu que l’on TRUSTE le hardware, le protocole (CCID) et son implementation (il y a des choses intéressantes d’ailleurs.. ;)), finalement, je truste mon laptop et tous ses composants même les plus “blobesques” (hélas..) et critiques (ethernet / BIOS / etc..?!).

Setup..

Honnêtement, je vais pas reprendre le setup pas à pas, j’ai compilé une serie de liens qui m’ont aidé à piger/faire mon setup, ca devrait largement suffire pour démarrer.

Voilà les liens qui m’ont aidés:

En ce qui concerne les smartcards, voila ce que j’ai listé:

  • Yubikey v4, elles ont plusieurs mode de fonctionnement qui collaborent (FIDO/U2F/CCID/HSM blablabla), en gros yubikey (si vous les ouvrez) c’est 2 MCU, un “secure” MCU qui gère la crypto/storage, NXP chaisplus combien et un MCU qui gère la comm USB/CCID, quelqu’un l’avait fait avant moi, ça ne m’a pas empêché de l’ouvrir… oui, vous avez compris j’adore ouvrir les boîtes de cassoulets mais lui au moins, il a pris/poste des photos.
  • OpenPGP card v2.1 on les trouve un peu partout, un peu lentes mais marchent très bien (recommandées par la FSF).
  • Nitrokey, une implementation “opensource”/freemium d’une smartcard à base de MCU / gnuk.
  • Gnuk, MCU avec le code opensource Gnuk, qui utilise une lib de threading comme OS et fait tourner les opérations de crypto et la minipile USB/CCID pour repondre comme une smartcard.
  • what else?

Hardware:

les merdes, y a toujours des merdes…

  • keytocard ca MOVE (donc efface) les clefs privées de votre keyring et les remplace par un stub, rappelez vous en (genre avant le backup).
  • gnupg v1 VS gnupg v2.0 VS gnupg v2.1 ça cohabite, mais pas très bien, il y a des VRAIES différences et ça peut causer quelques emmerdes, ne vous faites pas avoir. En gros démarrez avec avec 2.1.X et stick to it now… c’est pas parfait mais ça évolue…
  • gnupg 2.1.15 l’avant dernière release (celle avec laquelle je me suis battu…) avait un bug où la wrapper lib de threading (npth) etait utilisée AVANT d’être d’initialisée et gpg-agent, scdaemon, dirmngr se mangeaient un bel assert() et donc ne fonctionnaient pas, mais ça compilait sans soucis, du coup la release était une release… mais inutilisable.. j’ai fait un patch, mais 2.1.16 a été releasé entre temps qui resoud ce BUG mais n’est pas encore forcément dans tous les repositories de packages.
  • gnupg v2.1 crée des stubs des clefs privée À CHAQUE instanciation de l’agent (–card-status par exemple), si vous avez plusieurs smartcards avec la MÊME clef, oubliez pas de tuer l’agent et de “cleaner” (rm -rf $HOME/.gnupg/private-keys-v1.d/*) sinon il va associer/garder les stubs de la smartcard précédente et au moment de l utilisation vous demander d’insérer la dite smartcard.
  • impossible d’avoir le pinentry au moment de mon ssh, il me faut “préparer” l’agent, un petit gpg2 –card-status, suivi d’un gpg2 -d le tout avec ma carte insérée (+ le bon PIN) et juste apres je peux faire mon ssh et ça passe.
  • $HOME/.gnupg/scd-events peut être exécuté à chaque instanciation de l’agent et/ou insertion d’une SC, attention, le lecteur SC standard USB et une yubikey ne se comportent pas de manière identique, pour avoir un comportement consistant (genre killer l’agent ou cleaner les stubs est pas évident) il faut travailler un peu..
  • veillez comme toutes les docs le disent à BIEN FAIRE DES BACKUPS apres les différentes étapes, création masterkey, subkeys, etc.. et à mettre ces backups safe et offline, sinon tout ça ne sert à rien.

Encore des emmerdes…

Le probleme est toujours le meme, le TRUST sur une plateforme hardware dont vous ne connaissez RIEN et ou le joli autocollant SECURE est appose pour bien vous faire sentir au chaud, je crois qu’il serait sympa d’avoir une review de plus des implementations ouvertes et peut-etre proposer des updates (soft ET hard) afin d’avoir des “smartcards” qui tiennent le coup.

On nous a gentillement signale cette “attaque”, ce “post” interessant, mais c’est plutot un l’abus d’une fonctionnalite qui a mon HUMBLE avis ne devrait pas etre implementee.

Ce monsieur s’est bien amuse, d’abord il joue avec son device.., puis il gratte un peu, par curiosite, puis la encore plus a droite, plus a droite, un peu a gauchhhheee, laaaaaaaaaaaaaAAAAaaaa et hop decouvrir une belle croute de fonctionnalite.

Ca laisse reveur quand on reflechit un tout petit peu a l’utilite d’un HSM (je rappelle ce n’est pas une SmartCard CCID bla)

Conclusion

Mon français sent des pieds mais ça marche, mes clefs ne sont plus “online”, à part sur mes 2 SC, la SC donne une interface pour signer/chiffrer (via CCID) mais ne permet pas de récupérer les clefs privées directement (comme sur un FS), je peux plugger ma SC sur différents systèmes (BSD, Linux, OS/x) mon auth est faisable sans pour autant compremettre aussi facilement mes clefs, je n’ai rien à copier et j’ai un élément hardware en plus de mon PIN, pour chiffrer mes datas et pour m’auth sur mes machines, plus feignant que ça tu meurs.

Un seul bémol, il faut un gnupg 2.0.X ou 2.1.16+ et c’est pas encore super “smooth”, voilà en vous remerciant.

 
comments powered by Disqus