Andries filmer

Feel free with Open Source Software

Andries Filmer - Internet professional sinds 1996.
Ik ben groot voorstander van Free- en Opensource Software (FOSS) en laat deze site jouw overtuigen waarom dit goed is.
Home Over deze website Kennisbank Ezelsoren Freelancer Online gereedschap

2 factor authenticatie met Yubikey en OATH - Installatie op Ubuntu

Inhoud
  1. Lokale authenticatie
    1. Yubikey configuratie
    2. PAM hotp module
  2. Pam configuratie
  3. Publiek authenticatie
    1. Nieuwe AES sleutel uploaden naar Yubico
  4. Resources
  5. Commentaren

Om 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 authenticatie

In 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 configuratie

Nu 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 module

Om 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 configuratie

Pas 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 authenticatie

OpenID 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 Yubico

Als je de publiek server van Yubico (weer) wilt gebruiken moet je de tweede AES-sleutel uploaden bij Yubico. Dat gaat als volgt:

  • Ga naar: https://yms.yubico.com/upload-aes-key/
  • Your e-mail address: Vul hier je email adres in.
  • Serial number: Hier mag je gewoon 0 invullen
  • Yubikey prefix: Dit is de 12 letterige code die je achter -ofixed= hebt ingevuld en moet beginnen met vv
  • Internal identity: Wanneer je deze niet veranderd hebt is deze 12 nullen, dus 000000000000
  • AES Key: Dit is de sleutel die je hebt aangemaakt in dit artikel ook wel genoemd
  • Vul daarna de woorden van de recapcha in
  • Zet de cursor in het vak na OTP from the YubiKey: en druk op je Yubikey om hier de code in te voeren

Na ongeveer 5 minuten kun je je weer valideren op de site: http://www.yubico.com/demo/one_factor.php

Resources

Deze pagina is gemaakt op 2010-06-22 en aangepast op 2010-07-06

Ik zou heel leuk vinden als je laat weten wat je van deze pagina vindt. Plaats gerust commentaar.
Je e-mailadres wordt niet gepubliceerd het is alleen om eventueel contact met je op te nemen.

 
Jouw naam
Jouw e-mailadres
Om te voorkomen dat robots dit formulier gebruiken vraag ik vriendelijk of je de volgende karakters wilt over typen.
 

 


Mijn Curriculum vitae | De content op deze website heeft de Creativecommons 3.0 licentie | © 2011
Andries Filmer | http://andries.filmer.nl | andries@filmer.nl | © 2011
Deze website wordt gerealiseerd met Free- en Open Source Software: | | | | | |