Handige PAM-modules voor authenticatie
Tot nu toe tik je een wachtwoord in om toegang te krijgen tot je Linux-pc. Maar met de juiste Pluggable Authentications Modules krijg je toegang via een pincode, gezichtsherkenning of een universele hardwaretoken
Hoe je programma’s duidelijk maakt hoe ze met de juiste Pluggable Authentications Modules om moeten gaan beschrijven we in het voorgaande artikel. In dit artikel gaan we in op een selectie geteste modules en beschrijven we de eerste stappen van de ingebruikname.
Er zijn kant-en-klare PAM-modules genoeg. Onder Ubuntu krijg je via het commando apt search libpam een hele verzameling modules te zien die direct te installeren zijn. Voor nog meer keuze zijn er de developer repository’s, bijvoorbeeld via GitHub. Kijk eens rond in /lib/security/ en /lib/x86_64-linux-gnu/secu
rity/. Daar staan de .so-bestanden.Let er wel op dat een aantal PAM-modules niet bedoeld zijn voor authenticatie, maar authenticatie-opties uitbreiden.
Met pam_cracklib zijn nieuwe wachtwoorden te vergelijken met een lijst populaire maar zwakke wachtwoorden, waarna ze eventueel afgekeurd worden. pam_ecryptfs mount na een succesvolle authenticatie met een wachtwoord meteen een via eCryptfs versleutelde home-folder.
En met pam_time zijn bepaalde processen waarbij authenticatie verplicht is te beperken tot een tijdsperiode. Op die manier is inloggen buiten kantooruren uit te sluiten, maar worden bestaande sessies niet beeindigd.
De eerste details over het gebruik krijg je naar boven met het aanroepen van man pam_XXXX. De standaardmodule voor het invoeren van een wachtwoord is pam_unix.
Op een aantal Linux-laptops werkt pam_fprintd samen met de ingebouwde vingerafdrukscanner. We hadden geen succes met de voor dit artikel geteste ex
terne usb-sensors. Om die reden noemen we ze in dit artikel niet. De module kan vergelijkbaar met andere modules worden ingezet.
PAM_USERDB
Als je voor het ontgrendelen geen Unix-wachtwoord wilt gebruiken maar bijvoorbeeld een korte pincode, heb je een alternatief nodig voor pam_unix omdat het alleen werkt met in /etc/shadow opgeslagen wachtwoorden.
Dat kan via pam_userdb. Dat bestaat al sinds het begin van de Unix-tijd, maar is slecht gedocumenteerd en wat lastig in gebruik. Maar het doet wat je wilt als je er wat tijd in stopt. De basis voor het authenticeren is een databasebestand in het Berkeley DB-formaat dat combinaties bevat van gebruikersnamen en (versleutelde) wachtwoorden. Voor het instellen moet je speciale tools installeren ( sudo apt install db-util).
Uit de tests kwam naar voren dat in elk geval de versie die met Ubuntu 18.04 LTS wordt meegeleverd kan omgaan met salted SHA 512-hashes zoals ook worden gebruikt bij de normale Unix-authenticatie via /etc/shadow. Voor het aanmaken heb je het whois-pakket nodig dat (sinds jaar en dag) altijd mkpasswd bevat.
Dat regelt dat de pincodes versleuteld op de schijf worden opgeslagen. Je snapt wel dat een pincode van vier cijfers met slechts tienduizend variaties vrij snel wordt gekraakt met brute force proberen. Het is aan te raden de toegangsrechten op het bestand strak in te regelen. Als root-user maak je eerst een pincodebestand aan:
USR=ju
HASH=`mkpasswd -s -m sha-512`
{ echo $USR; echo $HASH; } | db_load -T -t hash /etc/pinlist.db chmod 0600 /etc/pinlist.db
Dit vraagt om een wachtwoord (dat wordt getoond) en maakt de pincode-database /etc/pinlist.db aan. Het afsluitende chmod- commando zorgt dat alleen root het bestand kan lezen. Door herhaald aanroepen van deze reeks commando’s kun je extra gebruikers toevoegen. Als je dit vaker doet, is een script handig (zie de link aan het eind). Aangezien de gebruikersnaam als index dient, kun je de entry’s bijwerken. Het commando db_dump -p pinlist.db toont de actuele inhoud. Een PAM-entry zoals auth required pam_userdb.so crypt=crypt db=/etc/pinlist
zorgt voor een authenticatie met de nieuwe pincodedatabase.
Het is wat vreemd en slecht gedocumenteerd, maar bij het aangeven van het database-bestand moet je .db weglaten. Al met al is pam_userdb een volwassen module, die je zonder al te veel zorgen kunt inzetten als je een op wachtwoorden of pincodes gebaseerde authenticatie wilt opzetten.
Op GitHub staat ook een PAM-module voor een SQLite-database. Deze kan alleen met verouderde versleuteling als DES en MDS overweg, en om die reden laten we deze buiten beschouwing.
PAM_MYSQL
Een ander alternatief is een MySQL-database inzetten voor de authenticatie. Om dat te regelen geef je pam_ mysql.so de informatie over de database mee als parameters ( host, user, passwd, db, table, usercolumn, passwdcolumn, crypt).
Verder heb je een MySQL-server nodig op het opgegeven adres die de inlogdata beschikbaar maakt. Dit is binnen bedrijven nuttig, maar voor een enkele pc is het overkill. Om die reden houden we het bij een verwijzing naar een howto via de link aan het eind.
HOWDY
Biometrische authenticatie heeft veel handige voordelen: je gezicht of je duimen kun je niet vergeten. Het is vergeleken met het invoeren van een lang wachtwoord erg snel.
De nadelen zijn niet zo zichtbaar. Vingerafdruksensors, gezichtsherkenning en andere biometrische systemen zijn door hackers al vaker om de tuin geleid. Als je wachtwoord is gelekt, kies je een nieuwe. Met je gezicht of je vingers wordt dat wat lastiger.
Het is slim om biometrische kenmerken niet in te zetten voor zeer hoge beveiligingsniveaus, maar alleen als handige functie voor een beperkter scenario. Denk aan het ontgrendelen van een pc, vergelijkbaar met het plaatsen van je vinger op een vingerafdrukscanner of een blik in de camera voor het ontgrendelen van je smartphone. Na elke reboot kun je ook een wachtwoord of code ingeven.
Het Howdy-project maakt ontgrendelen onder Linux vergelijkbaar met Windows Hello met gezichtsherkenning van Microsoft. Infraroodbeelden van een met Windows Hello compatibele camera worden gebruikt en geanalyseerd met behulp van de Machine Learning-bibliotheek DLib.
De gebruikte modellen worden als onderzoeksprojecten voor gezichtsherkenning openbaar gemaakt (zie de link aan het eind). Ook al doorstond Howdy meerdere eenvoudige functietests zonder morren, dit
betekent nog niet dat het in de buurt komt van de gezichtsherkenning van Windows Hello.
Zelfs de maker van Howdy waarschuwt heel duidelijk dat het nooit zo veilig is als een wachtwoord. Zelfs mensen met een vergelijkbaar uiterlijk of een foto kunnen de beveiliging omzeilen.
Daar komt nog bij dat Howdy zeer laks met problemen omgaat. Dat kan wat ergernis opleveren. Howdy is geschreven in Python en gebruikt als bridge pam_python.so. Diens makers verklaren dat het uit performance-oogpunt niet de beste optie is voor modules die veel worden gebruikt.
Uitvoerige checks van de veiligheid zijn er niet volgens de Howdy-maker. Je kunt niet uitsluiten dat het gebruik tot veilgiheidsproblemen leidt, bijvoorbeeld in de vorm van Privilege Escalation-aanvallen. De Pythoncode draait namelijk met rootrechten.
Howdy moet met alle met Windows Hello-compatibele camera’s werken. Veel daarvan zitten in laptops ingebouwd.
Een externe usb-camera haal je vanaf zo’n 70 euro in huis. De camera’s hebben twee modi: bij normale videostreaming licht een klein blauw ledje op. Een rode led geeft aan dat de infraroodcamera actief is.
Volgens veel bronnen werken een aantal Hello-compatibele camera’s onder Linux out-of-the-box. Een getest noname-product werkte niet zo soepel.
De camera gaf in het systeemlogboek fouten aan (uvcvideo: Unknown video format). Hij werkte wel als webcam, maar de infraroodmodus haperde bij gebrek aan een speciaal 8bit-videoformaat van Microsoft dat pas standaard aanwezig is sinds Linux-kernel 4.19.
Ubuntu levert 10.04 standaard uit met een kernel-versie 4.18. Door de mainline kernel 4.19 te installeren kregen we de modus alsnog aan de praat. Dit is makkelijk te doen met de tool ukuu.
Maar niet iedereen wil graag een niet-officiële Ubuntu-kernel gebruiken. Bij problemen en updates ben je dan helemaal op jezelf aangewezen.
Controleer eerst met de simpele webcam-app cheese in de instellingen of er een tweede camera staat aangegeven die een streperig grijstinten-beeld biedt. Anders heeft het geen nut Howdy te installeren.
De stappen volgens de handleiding doorlopen verliep probleemloos, Howdy vindt zelfs op eigen houtje de infraroodcamera. De gezichtsherkenning van Howdy voegt zichzelf als standaard aanmeldprocedure toe aan /etc/pam.d/common-auth in de vorm van: auth [...] pam_python.so /lib/security/howdy/pam.py
We raden aan dit direct uit te schakelen door aan het begin van deze regel een commentaarteken (#) toe te voegen. Hoe je een handige en veilige PAM-configuratie met Howdy voor elkaar krijgt, hebben we in het voorgaande artikel beschreven.
Na de installatie test je via sudo howdy test of je beeld krijgt. Als het venster leeg blijft, kan het de moeite van het proberen waard zijn X11-Shared Memory-gebruik voor de QT toolkit uit te zetten:
QT_X11_NO_MITSHM=1 howdy test
Als je het opgevraagde testbeeld te zien krijgt, is het volgens de Howdy-ontwikkelaar handig om dit vast in je systeem in te stellen via QT_X11_NO_MITSHM=1 in / etc/environment.
Dit kan vervelende bijwerkingen hebben dus een wat minder rigoureuze oplossing zou fijn zijn. Daarna moet je Howdy nog je eigen gezicht ‘aanleren’:
sudo howdy add
Het is verstandig om dit bij verschillende lichtomstandigheden te herhalen, om zo de herkenningsrate te verbeteren.
Als je een bril draagt is het handig om ook nog een shot zonder bril vast te leggen. howdy list toont de gezichten die al zijn geleerd en aan welke gebruikers ze zijn toegewezen.
Howdy wordt nog volop ontwikkeld. Er is een actieve community en de ontwikkelaar reageert vlot op feedback. Al met al is Howdy een leuk speeltje met een hoge nerdfactor. We raden het in de huidige staat niet aan binnen live-omgevingen.
PAM_BEACON
Je smartphone ligt eigenlijk altijd binnen handbereik. Dan klinkt het logisch om geslaagde login te koppelen aan het binnen bereik zijn hiervan.
De module pam_beacon maakt het mogelijk om bluetooth-adressen vast te leggen, die horen bij je smartphone of een speciale beacon aan je sleutelbos en die bij het inloggen binnen zendbereik moeten zijn.
Helaas hadden we bij het testen continu last van crashes. De ontwikkelaar gaf aan dat hij de D-buscommunicatie onder Ubuntu nog beter moet bestuderen. Tot die tijd gaat het hem niet worden, jammer.
U2F
Universal 2nd Factor Authentication (U2F) is een standaard voor hardwaretokens voor veilige identificatie. Het U2F-concept is eigenlijk bedoeld voor het aanmelden bij webdiensten. Het kan problemen als phishing en massale wachtwoorddiefstal vanaf servers uit de wereld helpen.
De opvolger FIDO2 maakt kans om samen met WebAuthn (Web Authentication) in een nabije toekomst wachtwoorden overbodig te maken. Dat is stof om nog eens op terug te komen in een volgende c't.
U2F werkt met een slim challenge/response-systeem en per dienst specifieke public/private sleutelparen. De token geeft via knipperen aan dat hij een challenge heeft ontvangen.
Maar pas als je als gebruiker de knop of toets aanraakt seint het een response terug en krijg je toegang. De ingezette sleutels zijn gebaseerd op een secret die
Het Howdy-project maakt ontgrendelen onder Linux vergelijkbaar met Windows Hello van Microsoft
fysiek aan de token is gekoppeld en niet uit te lezen is. U2F-compatibele tokens zijn al vanaf zo’n 10 euro te krijgen. Het is slim om er eentje te halen die ook al met FIDO2 overweg kan.
De tokens zijn erg robuust en overleven zonder zorgen meerdere jaren aan je sleutelbos of een ongeplande schoonmaakronde in de wasmachine. Standaard wordt er een usb-connector gebruikt. Een aantal modellen hebben al NFC of bluetooth, maar dit hebben we nog niet getest.
Linux ondersteunt U2F via libpam_u2f. Deze PAM-module is door de bekende token-fabrikant Yubico ontwikkeld. Tijdens de tests werkte het prima samen met tokens van andere merken.
Na de installatie van libpam_u2f via apt hoef je alleen nog maar het systeem te leren welke token bij welke gebruiker hoort. Daar maakt een tool de juiste configuratieregel voor aan: pamu2fcfg > ~/.config/Yubico/u2f_keys
De map Yubico moet je in veel gevallen nog zelf aanmaken. u2f_keys kan entry’s voor meerdere keys bevatten, en ze werken dan allemaal. Voor U2F-kenners: standaard registreert de PAM zich voor het domein en app-ID: pam://$HOSTNAME.
Een PAM-instructie als auth required pam_u2f.so
dwingt de U2F-check af. Voor de eerste tests kun je dat zoals we beschreven in het voorgaande artikel toevoegen aan /etc/pam.d/sudo.
Het omgaan met een U2F-token is zeer praktisch. Als een sudo- call een authenticatie-request triggert, knippert het token subtiel en geeft daarmee aan dat de challenge beantwoord kan worden.
Pas na het aanraken of knop induwen worden de opgevraagde data doorgegeven. De module is op zo’n manier geïmplementeerd dat hij eerst checkt of er wel een passende token voor de gebruiker beschikbaar is. Is dat niet het geval, dan kapt de PAM-call meteen af. Op die manier krijg je geen last van vervelende time-outs als er geen token beschikbaar is.
U2F is robuust en veilig. Je kunt het zonder problemen als enige authenticatiemethode gebruiken. Je token aan de sleutelbos moet je dan altijd bij je dragen, maar met de fiets- of autosleutel er naast zul je hem niet snel vergeten. Het geeft een veilig gevoel dat er geen malware is die daar iets aan kan lopen rommelen.
De handicap van U2F is dat je er eigenlijk twee van moet hebben en die bij elke dienst moet aanmelden. Want het authenticatieconcept is gebaseerd op een in het token opgeslagen secret. Die is niet uit te lezen, ook niet voor het maken van een back-up. Als je je token kwijtraakt, is ook de secret weg en daarmee de toegang tot de diensten en systemen die er gebruik van maken.
Dan is de enige optie de veilig opgeborgen en eerder als back-up ingestelde token. Het in het vorige artikel omschreven scenario is een andere oplossing: daarbij werkt het aanmelden met een wachtwoord altijd nog als fallback, ook zonder token.
Mocht je hier dus serieus mee gaan experimenteren, haal dan een 4-pack tokens in huis en zorg dat je altijd 2 actieve (geregistreerde) tokens op elk moment beschikbaar hebt. In combinatie met een extra factor zoals een pincode of gezichtsherkenning is een U2F-token een optie voor zelfs de meest strenge veiligheidseisen.
DE JUISTE COMBINATIE
Een wachtwoord, pincode, je gezicht en een hardwaretoken zijn dus geschikte authenticatie-opties voor je Linux-desktop. Met de juiste combinatie kun je het complete spectrum afdekken van simpel en makkelijk tot zeer veilig en toch nog redelijk bruikbaar. En met bruikbaar bedoelen we beter dan elke zoveel minuten zuchtend een wachtwoord van 12 tekens inkloppen.
De gezichtsherkenning met Howdy is cool en simpel, maar enorm veilig is het niet. Een combinatie van Howdy met een pincode is voor veel gevallen wel een goede optie. Bij gezichtsherkenning plus een U2F-token heb je een zeer veilige oplossing. Maar het gebruik van Howdy in scenario’s die om strenge veiligheid vragen raden we nog wel af.
We zijn wel fan geworden van U2F. Het veiligheidsconcept is overtuigend en het gebruik is praktisch. De tokens zijn ook veel goedkoper dan camera’s en zijn op meerdere pc’s tegelijk te gebruiken.
U2F wint het wat ons betreft van pincode in combinatie met gezichtsherkenning. Bij de gezichtsherkenning is de veiligheid niet hoog en continu een camera op je gezicht gericht hebben gaat op den duur ook wel irriteren. Wel geeft die duidelijk met een lampje aan dat hij ingeschakeld wordt. We raden aan om te kiezen voor een combinatie van pincode en U2F of (in bepaalde situaties) alleen U2F. Grote kans dat we er in een toekomstig artikel nog verder op ingaan met wat meer complete PAM-configuraties.