Parę słów i przykładów z działania klucza Yubikey NEO, który nie tylko przypomina pamięć USB a pomaga chronić dostępu do najpopularniejszych serwisów internetowych.

Jesteśmy w czasach kiedy hasło do konta pocztowego nie zapewnia wystarczającej ochrony. Na każdym kroku zwiedzania internetu czy korzystania z komputera użytkownik jest narażony na niebezpieczeństwo utraty hasła. Świadomość, że atakujący mógłby przejąć  konto pocztowe na którym opieramy wszelkie inne dostępy w sieci na napawa optymizmem. Jeśli jesteś posiadaczem konta np. Google mail to masz możliwość włączenia dwuskładnikowego logowania przy pomocy Google authenticator lub tokena U2F. Utrudniło by to potencjalnym włamywaczom przejęcie konta. W pierwszym przypadku Google authenticator jest instalowany na telefonie w drugim trzeba posiadać fizyczny klucz. Niestety telefony też posiadają systemy które są podatne na zagrożenia. Dlatego do dwuskładnikowego uwierzytelnienia używam Yubikey. Poniżej opiszę trochę jak działa klucz Yubikey i co można z nim zrobić.

Jest wiele ważnych serwisów które przydało by się dodatkowo zabezpieczyć. Dla mnie ważne są lastpass, droppbox, gmail, github, digitalocean, openvpn, wordpress. Tak się składa, że je wszystkie mogę zabezpieczyć dwuskładnikowym logowaniem przy pomocy google authenticator (GA). Taka opcja przydała by się  jeszcze w bankach lub takich serwisach jak eBay lub PayPal. Skoro jestem przy GA, to generalnie jego używanie na pewno podwyższa poziom bezpieczeństwa. I jeśli ktoś używa to plus dla niego. Jest bezpiecznie, fanie. Co ma do tego Yubikey? I co to jest w ogóle Yubikey??

techfreak_Yubikey_neo_nfc_token_linux_131

Yubikey jest prostym i bezpiecznym kluczem chroniącym przeróżne konta w internecie. Najprostszym przykładem jest dwuskładnikowa ochrona gmaila za pomocą standardu Universal 2nd Factor (U2F). Która polega na wsadzeniu klucza do portu usb po podaniu loginu i hasła. Ciekawe jest to, że przy chęci włączenia U2F w danym serwisie, Yubikey generuje parę kluczy które nie są przetrzymywane na nim samym lecz w serwisie w którym się rejestruje. Co pozwala na wykorzystanie klucza Yubikey w dowolnej ilości serwisów online. Ciekawe co? Przy rejestracji token generuje klucz prywatny przy pomocy secp256r1 który jest szyfrowany głównym hasłem urządzenia i jest wysyłany do serwisu online. Przy próbie logowania yubikey rozszyfrowuje zapytanie w którym jest zawarty wcześniej wygenerowany klucz. Jest fajnie ale nie do końca. Obsługa U2F jest dostępna tylko w przeglądarce Chrome. Firefox się ociąga.

Pierwszy przykład użycia za nami ale nie napisałem ogólnie o co chodzi w Yubikeyu. Cały pic polega na dotknięciu złotego kółeczka aby w danym czasie uruchomić token. Nie jest tak, że wkładam w USB token i on już działa. Za każdym razem kiedy chce go użyć muszę go dotknąć. Zaświeci się diodka i akcja została wykonana. W przypadku logowania do strony z U2F po dotknięciu zostaniemy przeniesieni do żądanej treści. Yubikey ma jeszcze inne funkcje kryjące się pod magicznym guziczkiem. Posiada dwa sloty przetrzymujące hasła. Przy przytrzymaniu palca około sekundy zostanie wklejone hasło ze slotu pierwszego. Jeśli zrobię to trzy sekundy zostanie wklejone hasło z drugiego slotu. Yubik jest wykrywany jako klawiatura i działa jako klawiatura. Jednym tapnięciem wkleja 32 znakowe hasło np. do last passa lub do dysku. Nie przetrzymuje żadnych innych informacji o użytkoniwku więc nawet jak go zgubie nikt nie będzie wiedział gdzie go użyć. Z tą opcja mam niestety problem bo po prostu pamiętam swoje 32 znakowe hasło.

techfreak_Yubikey_neo_nfc_token_linux_yubico_letter.jpg

Yubico Authenticator

Pomijając U2F i wklejanie haseł. Wspominałem o Google Authenticator który instaluje się na telefonie i generuje  co minutę nowe hasło – token do wybranego serwisu. Generowanie tokena opiera się na funkcji HMAC-SHA1, która generuje sześcio znakowe hasła na podstawie głównego hasła które jest zapisane w serwisie jak i w Google Authenticator. Yubikey posiada swoją własną aplikację Yubico Authentocator która w pełni zastępuje GA. Klucz Yubikey posiada opcje kontenera który trzyma w sobie te wszystkie główne hasła i po wsadzeniu go do komputera, czy przyłożeniu go do telefonu z NFC pokażą się tokeny do serwisów. Tak, Yubikey może być odczytywany poprzez NFC. Oczywiście dostęp do tego kontenera jest zabezpieczany osobnym hasłem. Aby korzystać na telefonie z tej funkcjonalności trzeba zainstalować darmowy program Yubico Authentocator. Nie ma problemu aby odczytać kody na komputerze z różnymi systemami operacyjnymi ale potrzeba do tego aplikacji. Zapewnia to pewną elastyczność użytkowania. Użytkownik nie jest przywiązany do swojego telefonu i nie jest zależny od niego.

techfreak_Yubikey_neo_nfc_token_linux_yubico_authentocator_ubuntu

Yubico Authentoicator na Xubuntu
techfreak_yubikey_yubico_authenticator
Yubico Authentocator na Androidzie

Przykłady użycia Yubico Authentocator który w pełni zastępuje Google Authenticator

Yubico Authentocator z powodzeniem zastępuje w pełni Google Authenticator w takich aplikacjak jak google, lastpass, github, wordpress, dropbox. Pełna lista znajduje się pod tym linkiem.

techfreak_yubikey_yubico_authenticator_wordpress

Yubico Authenticator wordpress
techfreak_yubikey_yubico_authenticator_gmail
Yubico Authenticator gmail
techfreak_yubikey_yubico_authenticator_lastpass
Yubico Authentocator LastPass

Jak zabezpieczyć stronę www prywatnym kluczem który znajduje się na Yubikey?

Poniżej pokaże bardzo fajny przykład jak zabezpieczyć stronę www certyfikatem, który jest przetrzymywany na Yubikey. Kiedyś napisałem krótką instrukcję jak włączyć takie zabezpieczenie na apache2, można znaleźć ją pod tym linkiem. Zostały opisane tam cztery punkty a wynikiem ostatniego jest certyfikat o nazwie public_client.p12 zabezpieczony hasłem. Teraz aby wgrać taki certyfikat na Yubikey trzeba włączyć obsługę CCID (smartcard) w samym kluczyku. Do tego służy program YubiKey NEO Manager

techfreak_yubikey_ccid_1 techfreak_yubikey_ccid_2

Następnym programem który będzie potrzebny jest Yubico PIV tool którym importuje do Yubikey’a certyfikat klienta (hasło exportowe q1w2e3r4)

techfreak_yubikey_piv_ccid_2

Warto wiedzieć z jakimi hasłami domyślnie przychodzi klucz, dotyczą one tylko modułu CCID

  • default pin: 123456
  • default unblock pin: 12345678
  • default admin key : 010203040506070801020304050607080102030405060708

Na testy zabezpieczyłem stronę mojego projektu nettemp. Nic się nie wyświetla ponieważ przeglądarka firefox nie jest skonfigurowana do używania smartcard.

techfreak_yubikey_piv_ccid_1

W zakładce Preferences > Adwanced > Certificates > Security Devices trzeba dodać moduł opensc wraz ze scieżką do pliku /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so. Do poprawnego działania wymagany jest program Opensc który odpowiada za komunikację z kartami smartcard.

techfreak_yubikey_piv_ccid_3

techfreak_yubikey_piv_ccid_4

Przy ponownym wejściu na stronę tym razem firefox znalazł moje urządzenie i zostałem poproszony o hasło.

techfreak_yubikey_piv_ccid_5 techfreak_yubikey_piv_ccid_6 techfreak_yubikey_piv_ccid_7

Yubikey i ssh?

Mi osobiści pierwsze co przyszło do głowy po otrzymaniu Yubikey’a to czy będzie on przetrzymywać on moje hasła do ssh. Nie udało mi się wgrać moich obecnych kluczy ale bez problemu można wygenerować nowy klucz SSH za pomocą Yubikey a następnie wgrać na pamięć Yubikey. I w tym przypadku CCID musi być włączone. Poniżej procedura generowanie kluczy dla ssh.

Generowanie prywatnego klucza, Yubikey musi być włożony w slot USB.

yubico-piv-tool -s 9a -a generate -o public.pem

Generowanie certyfikatu na podstawie powyższego klucza

yubico-piv-tool -a verify-pin -P 123456 -a selfsign-certificate -s 9a \
      -S "/CN=SSH techfreak/" -i public.pem -o cert.pem

Inportowanie certyfikatu na klucz yubikey

yubico-piv-tool -a import-certificate -s 9a -i cert.pem

Wyświetlenie prywatnego klucza który trzeba umieścić na zdalnej maszynie w pliku ~/.ssh/authorized_keys

ssh-keygen -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Aby ssh szukał klucza na Yubikey przy polaczeniu do serwera ssh trzeba w pliku ssh_config wskazać moduł opensc.

echo "PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so" >> /etc/ssh/ssh_config

Po konfiguracji w ssh_config i dodaniu kluczy publicznych na zdalnym hoscie można łączyć się po ssh nie podając hasła a wsadzając kluczyk do portu USB. Jeśli nie mam akurat go pod ręką. Mogę podać hasło i ile wcześnie nie wyłączyłem tej metody.

Aby wyświetlić zainstalowane certyfikaty:

laps:~$ yubico-piv-tool -a status
Slot 9a:	
	Algorithm:	RSA2048
	Subject DN:	CN=SSH techfreak
	Issuer DN:	CN=SSH techfreak
	Fingerprint:	aed0d2269c768502cf2149092dc7c7ea0cde23ee1df0df3b9c511a9e0d887515
	Not Before:	Aug 24 09:35:52 2015 GMT
	Not After:	Aug 23 09:35:52 2016 GMT
Slot 9c:	
	Algorithm:	RSA2048
	Subject DN:	C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
	Issuer DN:	C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
	Fingerprint:	d91cd1d2f114fe3621d8937d8a0b22bc8a4a805d21effff8516b857256abc114
	Not Before:	Aug 13 11:39:40 2015 GMT
	Not After:	Aug 12 11:39:40 2016 GMT
Slot 9d:	No data available.
Slot 9e:	No data available.
PIN tries left:	3

Yubikey personalization tool

Twórcy Yubikey zapewniają naprawdę dobre wsparcie dla klucza. Między innymi podstawowym programem do konfiguracji jest Yubikey personalization tool w którym odbywa się konfiguracja.

techfreak_Yubikey_neo_nfc_token_linux_4

Podsumowanie

techfreak_yubikey_na_spacerze_w_lesie_hasa

Z tego co widać powyżej z Yubikey jest naprawdę fajnym kluczem i nie wiem czy nie jedynym o takich dużych możliwościach. Ja osobiście na co dzień używam Yubikey Authenticator czy to w telefonie z Androidem czy laptopie z xubuntu. Dokumentacja dostępna na stronie rozwiewa wszystkie wątpliwości a jeśli nie to jest do dyspozycji forum. Nie opisałem wszystkiego co można zrealizować przy pomocy Yubikey NEO ale mam nadzieje to zrobić to jeszcze w paru wpisach. Jeśli ktoś jest ciekawy jak wygląda klucz od środka to polecam obejrzeć fotki ze strony hexview.com.