SSH, of de "veilige shell", is een netwerkprotocol voor het opzetten van een beveiligde verbinding tussen hosts, standaard via poort 22 (die beter veranderd kan worden). SSH-clients en SSH-servers zijn beschikbaar voor de meeste besturingssystemen. Binnen SSH kan praktisch elk ander netwerkprotocol functioneren, wat betekent dat je op afstand op een andere computer kunt werken, audio- of videostreams via een versleutelde verbinding kunt verzenden, enzovoorts. Daarnaast, kan je je verbinden met andere hosts onder de naam van deze externe host.
Authenticatie vindt plaats via een wachtwoord, maar ontwikkelaars en systeembeheerders maken traditioneel gebruik van SSH-sleutels. Het probleem is dat de privé-sleutel gestolen kan worden. Het toevoegen van een wachtwoordzin beschermt theoretisch tegen de diefstal van de privé-sleutel, maar in de praktijk kunnen ze . Twee-factor-authenticatie lost dit probleem op.
Hoe een twee-factor-authenticatie te implementeren
Ontwikkelaars van het bedrijf Honeycomb hebben onlangs , gepubliceerd over hoe je de bijbehorende infrastructuur op de client en server kunt opzetten.
De handleiding gaat ervan uit dat je een basis host hebt die toegankelijk is via het internet (bastion). Je wilt verbinding maken met deze host vanaf laptops of computers via het internet en toegang krijgen tot alle andere apparaten die zich erachter bevinden. 2FA garandeert dat een aanvaller hetzelfde niet kan doen, zelfs als hij toegang heeft gekregen tot je laptop, bijvoorbeeld door malware te installeren.
De eerste optie is OTP
OTP zijn eenmalige digitale wachtwoorden die in dit geval zullen worden gebruikt voor SSH-authenticatie samen met de sleutel. De ontwikkelaars melden dat dit niet de ideale optie is, omdat een aanvaller een valse bastion kan opzetten, je OTP kan onderscheppen en gebruiken. Maar dit is beter dan niets.
In dit geval staan de volgende regels in de Chef-configuratie op de serverzijde:
metadata.rbattributes/default.rb(vanattributes.rb)files/sshdrecipes/default.rb(kopie vanrecipe.rb)templates/default/users.oath.erb
Aan de clientzijde installeer je een willekeurige OTP-applicatie: Google Authenticator, Authy, Duo, Lastpass, waarbij je brew install oath-toolkit of apt install oathtool openssl, vervolgens wordt er een willekeurige base16-string (sleutel) gegenereerd. Deze wordt geconverteerd naar het Base32-formaat dat mobiele authenticatoren gebruiken, en wordt rechtstreeks in de applicatie geïmporteerd.
Uiteindelijk kunt u verbinding maken met de bastion en verifiëren dat deze nu niet alleen om een wachtwoordzin vraagt, maar ook om een OTP-code voor authenticatie:
➜ ssh -A bastion
Voer wachtwoordzin in voor sleutel '[snip]':
Eenmalig wachtwoord (OATH) voor '[user]':
Welkom bij Ubuntu 18.04.1 LTS...De tweede optie is hardware-authenticatie
In dit geval hoeft de gebruiker niet elke keer een OTP-code in te voeren, aangezien het tweede factor een hardwareapparaat of biometrie wordt.
Hier is de Chef-configuratie iets gecompliceerder, en de configuratie van de clients hangt af van het besturingssysteem. Maar na het uitvoeren van alle stappen kunnen clients op MacOS authenticatie in SSH bevestigen met de wachtwoordzin en door hun vinger op de sensor te plaatsen (tweede factor).
Eigenaren van iOS en Android bevestigen de login . Dit is een speciale technologie van Krypt.co, die zelfs veiliger is dan OTP.
Op Linux/ChromeOS is er een optie om met USB-tokens van YubiKey te werken. Natuurlijk kan een aanvaller uw token stelen, maar hij kent nog steeds de wachtwoordzin niet.
Bron: habr.com
