C’t Magazine

Handige PAM-modules voor authentica­tie

Tot nu toe tik je een wachtwoord in om toegang te krijgen tot je Linux-pc. Maar met de juiste Pluggable Authentica­tions Modules krijg je toegang via een pincode, gezichtshe­rkenning of een universele hardwareto­ken

- Jürgen Schmidt en Alieke van Sommeren

Hoe je programma’s duidelijk maakt hoe ze met de juiste Pluggable Authentica­tions Modules om moeten gaan beschrijve­n we in het voorgaande artikel. In dit artikel gaan we in op een selectie geteste modules en beschrijve­n we de eerste stappen van de ingebruikn­ame.

Er zijn kant-en-klare PAM-modules genoeg. Onder Ubuntu krijg je via het commando apt search libpam een hele verzamelin­g modules te zien die direct te installere­n zijn. Voor nog meer keuze zijn er de developer repository’s, bijvoorbee­ld 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 authentica­tie, maar authentica­tie-opties uitbreiden.

Met pam_cracklib zijn nieuwe wachtwoord­en te vergelijke­n met een lijst populaire maar zwakke wachtwoord­en, waarna ze eventueel afgekeurd worden. pam_ecryptfs mount na een succesvoll­e authentica­tie met een wachtwoord meteen een via eCryptfs versleutel­de home-folder.

En met pam_time zijn bepaalde processen waarbij authentica­tie verplicht is te beperken tot een tijdsperio­de. Op die manier is inloggen buiten kantoorure­n 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 standaardm­odule voor het invoeren van een wachtwoord is pam_unix.

Op een aantal Linux-laptops werkt pam_fprintd samen met de ingebouwde vingerafdr­ukscanner. 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 vergelijkb­aar met andere modules worden ingezet.

PAM_USERDB

Als je voor het ontgrendel­en geen Unix-wachtwoord wilt gebruiken maar bijvoorbee­ld een korte pincode, heb je een alternatie­f nodig voor pam_unix omdat het alleen werkt met in /etc/shadow opgeslagen wachtwoord­en.

Dat kan via pam_userdb. Dat bestaat al sinds het begin van de Unix-tijd, maar is slecht gedocument­eerd en wat lastig in gebruik. Maar het doet wat je wilt als je er wat tijd in stopt. De basis voor het authentice­ren is een databasebe­stand in het Berkeley DB-formaat dat combinatie­s bevat van gebruikers­namen en (versleutel­de) wachtwoord­en. Voor het instellen moet je speciale tools installere­n ( sudo apt install db-util).

Uit de tests kwam naar voren dat in elk geval de versie die met Ubuntu 18.04 LTS wordt meegelever­d kan omgaan met salted SHA 512-hashes zoals ook worden gebruikt bij de normale Unix-authentica­tie 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 versleutel­d op de schijf worden opgeslagen. Je snapt wel dat een pincode van vier cijfers met slechts tienduizen­d variaties vrij snel wordt gekraakt met brute force proberen. Het is aan te raden de toegangsre­chten op het bestand strak in te regelen. Als root-user maak je eerst een pincodebes­tand 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 afsluitend­e 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 gebruikers­naam 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 authentica­tie met de nieuwe pincodedat­abase.

Het is wat vreemd en slecht gedocument­eerd, 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 wachtwoord­en of pincodes gebaseerde authentica­tie wilt opzetten.

Op GitHub staat ook een PAM-module voor een SQLite-database. Deze kan alleen met verouderde versleutel­ing als DES en MDS overweg, en om die reden laten we deze buiten beschouwin­g.

PAM_MYSQL

Een ander alternatie­f is een MySQL-database inzetten voor de authentica­tie. Om dat te regelen geef je pam_ mysql.so de informatie over de database mee als parameters ( host, user, passwd, db, table, usercolumn, passwdcolu­mn, crypt).

Verder heb je een MySQL-server nodig op het opgegeven adres die de inlogdata beschikbaa­r 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

Biometrisc­he authentica­tie 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. Vingerafdr­uksensors, gezichtshe­rkenning en andere biometrisc­he 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 biometrisc­he kenmerken niet in te zetten voor zeer hoge beveiligin­gsniveaus, maar alleen als handige functie voor een beperkter scenario. Denk aan het ontgrendel­en van een pc, vergelijkb­aar met het plaatsen van je vinger op een vingerafdr­ukscanner of een blik in de camera voor het ontgrendel­en van je smartphone. Na elke reboot kun je ook een wachtwoord of code ingeven.

Het Howdy-project maakt ontgrendel­en onder Linux vergelijkb­aar met Windows Hello met gezichtshe­rkenning van Microsoft. Infraroodb­eelden van een met Windows Hello compatibel­e camera worden gebruikt en geanalysee­rd met behulp van de Machine Learning-bibliothee­k DLib.

De gebruikte modellen worden als onderzoeks­projecten voor gezichtshe­rkenning openbaar gemaakt (zie de link aan het eind). Ook al doorstond Howdy meerdere eenvoudige functietes­ts zonder morren, dit

betekent nog niet dat het in de buurt komt van de gezichtshe­rkenning van Windows Hello.

Zelfs de maker van Howdy waarschuwt heel duidelijk dat het nooit zo veilig is als een wachtwoord. Zelfs mensen met een vergelijkb­aar uiterlijk of een foto kunnen de beveiligin­g 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 performanc­e-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 veilgiheid­sproblemen leidt, bijvoorbee­ld in de vorm van Privilege Escalation-aanvallen. De Pythoncode draait namelijk met rootrechte­n.

Howdy moet met alle met Windows Hello-compatibel­e 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 videostrea­ming licht een klein blauw ledje op. Een rode led geeft aan dat de infraroodc­amera actief is.

Volgens veel bronnen werken een aantal Hello-compatibel­e camera’s onder Linux out-of-the-box. Een getest noname-product werkte niet zo soepel.

De camera gaf in het systeemlog­boek fouten aan (uvcvideo: Unknown video format). Hij werkte wel als webcam, maar de infraroodm­odus haperde bij gebrek aan een speciaal 8bit-videoforma­at 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 installere­n 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 instelling­en of er een tweede camera staat aangegeven die een streperig grijstinte­n-beeld biedt. Anders heeft het geen nut Howdy te installere­n.

De stappen volgens de handleidin­g doorlopen verliep probleemlo­os, Howdy vindt zelfs op eigen houtje de infraroodc­amera. De gezichtshe­rkenning van Howdy voegt zichzelf als standaard aanmeldpro­cedure 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 commentaar­teken (#) toe te voegen. Hoe je een handige en veilige PAM-configurat­ie met Howdy voor elkaar krijgt, hebben we in het voorgaande artikel beschreven.

Na de installati­e 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 opgevraagd­e testbeeld te zien krijgt, is het volgens de Howdy-ontwikkela­ar handig om dit vast in je systeem in te stellen via QT_X11_NO_MITSHM=1 in / etc/environmen­t.

Dit kan vervelende bijwerking­en 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 verschille­nde lichtomsta­ndigheden te herhalen, om zo de herkenning­srate 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 ontwikkela­ar 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 ontwikkela­ar gaf aan dat hij de D-buscommuni­catie onder Ubuntu nog beter moet bestuderen. Tot die tijd gaat het hem niet worden, jammer.

U2F

Universal 2nd Factor Authentica­tion (U2F) is een standaard voor hardwareto­kens voor veilige identifica­tie. Het U2F-concept is eigenlijk bedoeld voor het aanmelden bij webdienste­n. Het kan problemen als phishing en massale wachtwoord­diefstal vanaf servers uit de wereld helpen.

De opvolger FIDO2 maakt kans om samen met WebAuthn (Web Authentica­tion) in een nabije toekomst wachtwoord­en 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 sleutelpar­en. 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 ontgrendel­en onder Linux vergelijkb­aar met Windows Hello van Microsoft

fysiek aan de token is gekoppeld en niet uit te lezen is. U2F-compatibel­e 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 schoonmaak­ronde 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 ondersteun­t 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 installati­e 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 configurat­ieregel 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 registreer­t 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 authentica­tie-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 opgevraagd­e data doorgegeve­n. De module is op zo’n manier geïmplemen­teerd dat hij eerst checkt of er wel een passende token voor de gebruiker beschikbaa­r 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 beschikbaa­r is.

U2F is robuust en veilig. Je kunt het zonder problemen als enige authentica­tiemethode gebruiken. Je token aan de sleutelbos moet je dan altijd bij je dragen, maar met de fiets- of autosleute­l 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 authentica­tieconcept 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 experiment­eren, haal dan een 4-pack tokens in huis en zorg dat je altijd 2 actieve (geregistre­erde) tokens op elk moment beschikbaa­r hebt. In combinatie met een extra factor zoals een pincode of gezichtshe­rkenning is een U2F-token een optie voor zelfs de meest strenge veiligheid­seisen.

DE JUISTE COMBINATIE

Een wachtwoord, pincode, je gezicht en een hardwareto­ken zijn dus geschikte authentica­tie-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 gezichtshe­rkenning 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 gezichtshe­rkenning 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 veiligheid­sconcept is overtuigen­d 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 gezichtshe­rkenning. Bij de gezichtshe­rkenning 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 ingeschake­ld 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-configurat­ies.

 ??  ??
 ??  ?? Met Howdy en een compatibel­e camera is een eenvoudige gezichtshe­rkenning voor Linux in te stellen.
Met Howdy en een compatibel­e camera is een eenvoudige gezichtshe­rkenning voor Linux in te stellen.
 ??  ?? U2F-tokens zijn er al vanaf een tientje en zijn in meerdere verschille­nde vormen en (luxere) uitvoering­en te krijgen.
U2F-tokens zijn er al vanaf een tientje en zijn in meerdere verschille­nde vormen en (luxere) uitvoering­en te krijgen.
 ??  ?? Als de authentica­tie wordt gestart, licht het token subtiel op. Pas als je je vinger op de toets legt of een knop indrukt gaat het aanmelden verder.
Als de authentica­tie wordt gestart, licht het token subtiel op. Pas als je je vinger op de toets legt of een knop indrukt gaat het aanmelden verder.

Newspapers in Dutch

Newspapers from Netherlands