durcissement de la sécurité avec une nitrokey
Wed, 17 Jul 2024 18:15:50 +0200J’ai gardé un souvenir amer d’une certaine époque où la sécurité n’était pas vraiment dans mes priorités perso, aussi ai-je décidé de prendre cela au sérieux en investissant dans une clé de sécurité. J’ai hésité à prendre une Yubikey 5 mais j’ai finalement préféré prendre Européen (Allemand) avec possibilité de mise à jour du firmware opensource. J’ai donc pris une Nitrokey 3C NFC.
Je possède déjà une YubiKey NEO, elle permet de sécuriser l’accès à mon compte bitwarden mais rien de plus. En effet elle ne gère pas la norme FIDO2 qui permet entre autre la gestion des clés ssh par une clé matérielle.
Comme pour la Yubikey il est nécessaire d’être physiquement présent devant le PC pour appuyer légèrement sur la Nitrokey lorsque demandé. Ainsi si au pire un attaquant réussi a pénétrer votre PC il lui sera impossible d’agir à distance sur la Nitro. Cela ne protège évidement pas d’un attaquant qui pénètre physiquement chez vous, mais dans ce cas vous aurez d’autres soucis auquels penser.
Nitrokey propose une application desktop de gestion des mises à jour du firmware : Nitrokey App 2 , elle permettra dans une prochaine mise à jour d’appliquer un code PIN en cas de perte/vol si vous vous déplacez avec vous la clé.
Elle gère aussi le NFC ce qui est bien utile avec un smartphone.
J’ai regénéré récement une clé ssh en utilisant le format de cryptographie ed25519
bien plus sûr que le bon vieux RSA
ssh-keygen -t ed25519
L’idée est d’utiliser la clé matériel comme 2FA pour se connecter, ainsi lors de la connexion ssh il sera demandé en plus du mot de passe d’appuyer légèrement sur la clé USB pour authentifier la connexion. Pour cela il suffit de regénérer la clé en ajoutant -sk
:
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519-sk
ssh demande alors de toucher la clé physique puis de saisir un mot de passe
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ed25519-sk
Your public key has been saved in id_ed25519-sk.pub
Dans certaines docs certains ajoutent l’option -O resident
au ssh-keygen afin de stocker complètement la clé ssh dans la Nitrokey ce qui vous permet de vous connecter en ssh depuis n’importe quel PC. Perso je préfère ne pas le faire, j’utilise qu’un unique PC pour cet usage chez moi.
Il faut bien sûr ajouter la clé publique dans le fichier .ssh/authorized_keys
sur le serveur.
⚠️
Attention si comme moi vous utilisez des serveurs chez Scaleway il est nécessaire d’ajouter votre clé publique dans la console web d’admin dans la section
Clés SSH
et de lancer le scriptscw-fetch-ssh-keys --upgrade
sur le serveur.
⚠️
Il faut ensuite modifier la config du serveur sshd /etc/ssh/sshd_config
pour accepter ce type de clé
PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com
systemctl restart ssh
Lorsque vous connectez en ssh, la Nitro affiche une lumière bleu lorsqu’il faut appuyer dessus. Par contre si vous avez oublié de l’insérer, ssh renverra cette erreur
sign_and_send_pubkey: signing failed for ED25519-SK "user" from agent: agent refused operation
user@domain: Permission denied (publickey).
Bitwarden le gestionnaire de mot de passe que j’utilise est bien entendu critique. Par sécurité j’ai ajouté la Nitrokey comme 2ème moyen 2FA alternatif de la Yubikey. Je peux m’authentifier par l’une ou l’autre de ces clés. Pour cela il faut aller dans les paramètres de sécurités, onglet “Authentification à deux facteurs” et cliquer sur WebAuthn qui est la norme FIDO2 géré par la Nitrokey.
Ensuite par défaut Bitwarden demandera la Nitrokey lors de la connexion. Si vous souhaitez utiliser la Yubikey ou une autre méthode il faut alors cliquer sur “Utiliser une autre méthode d’authentification à deux facteurs”
Et choisir la Yubico.
D’autres services sont critiques comme la forge logicielle et le mail. Codeberg mais aussi Github supportent les clés de sécurité ainsi que Protonmail, Gmail, Paypal, Gandi, …
Il ne faut pas hésiter à les sécuriser. A noter que le service le plus critique entre tous ne les gère pas (voir plus bas).
Voilà deux cas d’usage de la Nitrokey, mais elle peut gérer d’autres choses comme gpg, le stockage de mot de passes, etc. A terme j’en prendrais sans doute une 2ème en cas de perte/destruction de la première.
A noter qu’il est surprenant (ou pas) que la plupart des banques ne proposent pas le standard WebAuthn et qu’ils imposent toujours un mot de passe à 6 chiffres 🤡
Pourquoi s’en faire ils gèrent juste nos sousous ?! 🤬