![]() |
Feel free with Open Source SoftwareAndries Filmer - Internet professional sinds 1996.
|
|
|
|
2 factor authenticatie met Yubikey en OATH - Installatie op UbuntuOm de veiligheid via een login te verbeteren is het verstandig om in te loggen met één wachtwoord die je wel weet en één wachtwoord die je niet weet een zgn. One Time Password (OTP). Dan spreek je over een goede 2 factor authenticatie.
Ik heb een paar Yubikeys gekocht. Deze sleutels geven eenmalige wachtwoorden (OTP). Het is een USB-stick die op elke computer gebruikt kan worden zonder drivers te installeren. Je kunt in de yubikey twee privesleutels configureren. Ik heb er één geconfigureerd met een lokale privesleutel voor mijn eigen servers en één met privesleutel die ik op de Yubico servers heb staan. Hierdoor kan je ook op publieke (web)applicaties de Yubikey gebruiken. Omdat de nieuwe yubikeys OATH-HOTP ondersteunen, een van de authenticatie mechanismen van de Open Authentication initiatief, wil ik deze graag gebruiken voor lokale verificatie op mijn Ubuntu servers. Met de eerste methode (lokale authenticatie) kan je via ssh inloggen zonder OTP en mét OTP. Dat kan dus handig zijn als je weet dat je via een veilige omgeving in kan inloggen of je Yubikey niet bij je hebt (of verloren bent). Tevens kunnen normale ssh-users zonder Yubikey ook inloggen.
Lokale authenticatieIn deze setup gaan we werken met een wachtwoord dat je moet onthouden én het gegenereerd (OTP) wachtwoord van de Yubikey. Dit is de zgn 2 factor authenticatie met één login prompt. Yubico-pam en Yubipam is alleen geschikt voor 1 factor authenticatie tenzij je ook je locale (linux) login als tweede authentiecatie inzet. Maar dan kan je dus niet zonder yubikey inloggen. Als je dan de Yubikey door diefstal of verlies kwijt bent kan je niet meer inloggen.
Yubikey configuratieNu gaan we het eerste slot van de Yubikey voorzien van een nieuwe configuratie. Om een willekeurig AES-sleutel te maken is het volgende commando handig. Als voorbeeld verder in dit artikel gebruiken we de AES-sleutel 00000000000000000000000000000000.
dd if=/dev/urandom count=16 bs=1 2>/dev/null | od -x | tr -d ' ' | sed -n '1s/^0000000//p' We hebben hier het programma ykpersonalize voor nodig. Deze is ook aanwezig in Ubuntu 10.04 (lucid Lynx), maar deze ondersteund (nog) niet versie 2.x van de firmware die op de nieuwe yubikeys aanwezig is. Daarom installeren we deze handmatig.
Na de installatie kunnen we ykpersonalize gebruken. De optie -1 bij ykpersonalize betekend dat we de eerste (standaard) sleutel configuren. Later gebruiken we bij de publieke sleutel configuratie optie -2. De optie -a met de nullen erachter is de AES-sleutel. De opties -ooath-hotp en -ooath-hotp8 zijn de ticket- en configuratie opties waarmee we aangeven dat we het Open Authentication initiatief willen gebruiken.
ykpersonalize -1 -ooath-hotp -ooath-hotp8 -a00000000000000000000000000000000 Je krijgt nu ongeveer de volgende feedback.
Firmware version 2.1.2 Touch level 1793 Program sequence 1 Configuration data to be written to key configuration 1: fixed: m: uid: h:000000000000 key: h: jouw AES sleutel acc_code: h:000000000000 ticket_flags: APPEND_CR|OATH_HOTP config_flags: SHORT_TICKET|OATH_HOTP8 Bevestig het bovenstaande commando met 'y' en de nieuwe sleutel staat in je Yubikey.
Bewaar deze gegevens!
PAM hotp moduleOm op de server de OTP te gebruiken installeren we pam_hotp module. Ik gebruik hier de aangepaste versie van Dan Anderson die is aangepast waardoor je mét en zonder OTP kan inloggen. Ik heb deze versie ook op mijn server beschikbaar gemaakt voor als Dan Anderson deze niet meer beschikbaar stelt. Om de module te compileren heb je de volgende progamma's op je systeem nodig.
sudo apt-get install build-essential autoconf automake gengetopt libpam-dev libtool git-core
git clone git://github.com/danderson/hotp-toolkit.git cd hotp-toolkit autoreconf --install ./configure && make && sudo make install Make een symbolische link
cd /lib/security && ln -s /usr/local/lib/security/pam_hotp.so . Foutje: Het installatie script vergat de library libhotp.so.0 te copieëren naar /lib/libhotp.so.0, dat heb ik handmatig gedaan.
Libary's gebruiken zonder te compileren. Als je meerdere servers wilt configureren dan kan je volstaan met het kopieëren de volgende bestanden (Ubuntu/Debian i386):
wget http://andries.filmer.nl/pub/apps/hotp-toolkit/pam_hotp.so && sudo mv pam_hotp.so /lib/security/ wget http://andries.filmer.nl/pub/apps/hotp-toolkit/libhotp.so && sudo mv libhotp.so /lib/libhotp.so.0
Pam configuratiePas het bestand /etc/pam.d/common-auth aan en verander de regel auth [success=1 default=ignore] pam_unix.so nullok_secure met volgende regels (pam_ldap.so staat er ook bij omdat ik dan ook ldap authenticatie kan gebruiken, maar dat hoeft dus niet).
auth sufficient pam_unix.so nullok_secure auth sufficient pam_ldap.so use_first_pass auth sufficient pam_hotp.so usersfile=/etc/users.hotp window=10 digits=8 debug In het bestand '/etc/ssh/sshd_conf' is het nodig om Challenge and Response Authentication aan te zetten.
ChallengeResponseAuthentication yes Daarna moet de ssh-server de configuratie opnieuw inlezen.
kill -HUP `cat /var/run/sshd.pid`
Lokale wachtwoord waar we de AES-sleutel voor de OTP geheimen opslaan. Maak een bestand '/etc/users.hotp'. Bij jouwpass geeft je een zelf verzonnen wachtwoord op en de nullen vervang je met jouw AES-sleutel.
HOTP/E/8 root jouwpass 00000000000000000000000000000000 Daarna zorgen we ervoor dat alleen root dit bestand kan lezen of kan aanpassen.
chmod 600 /etc/users.hotp chown root:root /etc/users.hotp Je kan nu in een terminal met su root worden met jouwpass met direct er achteraan het OTP uit de Yubikey.
sudo su
password: jouwpassOTP Als dit gelukt is dan kan je in /etc/pam.d/common-auth debug weglaten. Kijk anders even op het weblog van Dan Anderson hij heeft deze procedure in stappen omschreven. Maak daarna eventueel andere gebruikers aan in /etc/users.hotp op een nieuwe regel.
HOTP/E/8 andries anderepass 00000000000000000000000000000000
Publiek authenticatieOpenID is een gedecentraliseerd authenticatiemechanisme om Single Sign-on op het Internet mogelijk te maken. Als je gebruik wilt maken van OpenID maak dan een account aan. Kies dan als authentication provider Clavid.com. Dit is een bedrijf die het mogelijk maak om met een YubiKey in te loggen in combinatie met OpenID. Configureer nu het tweede slot op de Yubikey. Eerst maken we een andere AES-sleutel met het al eerder gebruikte commando.
dd if=/dev/urandom count=16 bs=1 2>/dev/null | od -x | tr -d ' ' | sed -n '1s/^0000000//p' Daarna zetten we deze AES-sleutel in slot 2 van de Yubikey.
ykpersonalize -v -2 -a00000000000000000000000000000000 -ofixed=vvdccbbjltfi \
-o -static-ticket -o -strong-pw1 -o -strong-pw2 -o -man-update
De optie -ofixed= is de publieke identiteit van de sleutel van 12 karakters lang. Je kunt niet alle karakters gebruiken omdat dit systeem onafhanklijk is van Besturingsystemen en taalsettings. Sommige toetsenborden wisselen soms van toetsen. Een duisttoetsenboord heeft bijvoorbeeld de Z and Y omgewisseld. Je kunt alleen de letters “cbdefghijklnrtuv” gebruiken zodat de Yubikey alle (westerse) toetsenboorden kan simuleren. De andere opties moet je opgeven omdat deze in slot 2 leeg zijn.
Vanaf nu kan je een OTP uit het tweede slot krijgen door je vinger tussen de 1.5 en 3 seconden op de Yubikey te houden.
Nieuwe AES sleutel uploaden naar YubicoAls je de publiek server van Yubico (weer) wilt gebruiken moet je de tweede AES-sleutel uploaden bij Yubico. Dat gaat als volgt:
Na ongeveer 5 minuten kun je je weer valideren op de site: http://www.yubico.com/demo/one_factor.php
Resources
Ik zou heel leuk vinden als je laat weten wat je van deze pagina vindt. Plaats gerust commentaar. |
|
Andries Filmer | http://andries.filmer.nl | andries@filmer.nl | © 2011
|