C’t Magazine

Makkelijk veilige beeldscher­mvergrende­ling

Met Pluggable Authentica­tion Modules (PAM) kun je redelijk eenvoudig het irritante herhaaldel­ijk invullen van je wachtwoord vervangen door gezichtshe­rkenning. Om te zorgen dat dit werkt, moet je wel even een beetje klussen.

- Jürgen Schmidt en Daniel Dupré

Bij Ubuntu en de meeste andere Linux-distributi­es wordt de Gnome-shell gebruikt als de standaard interface. De shell bepaalt wie er toegang tot het systeem krijgt. Daarvoor authentice­ert deze de gebruiker volgens de PAM-instelling­en die in /etc/pam.d/ gdm-password staan. De instelling­en daarin worden toegepast wanneer een gebruiker zich op een systeem aanmeldt, maar ook wanneer het scherm moet worden ontgrendel­d. Je kunt geen wijziging voor het ontgrendel­en instellen zonder de instelling­en van het aanmelden te wijzigen (zie ook 'Aanmelden versus ontgrendel­en').

En precies dat is het uitgangspu­nt van deze serie artikelen: veilig aanmelden met een sterk wachtwoord en gemakkelij­k ontgrendel­en, bijvoorbee­ld via gezichtshe­rkenning en pincode. In de vorige twee artikelen hebben we laten zien hoe je dat in PAM omzet. In dit artikel gaat het er specifiek om hoe je de schermverg­rendeling van de Ubuntu-desktop goed inricht.

Om de ontgrendel­functie van het wachtwoord los te kunnen koppelen, moet je een aparte screensave­r installere­n. Het zou voor de hand liggen om gewoon de Gnome-screensave­r te gebruiken die toch al in Ubuntu zit. Maar die is inmiddels alleen nog maar een dummy die weliswaar nog wel een PAM-bestand installeer­t, maar dat doet verder niets. Het ontgrendel­en gaat zoals gebruikeli­jk met gdm-password.

Als vervanging is XScreenSav­er een goede optie. De ontwikkela­ar hiervan, Jamie Zawinski, is opensource­royalty. Hij was de oprichter van Netscape en later Mozilla, en zijn project heeft jarenlang gediend als basis voor de screensave­r van Gnome. Zijn voorgeschi­edenis geeft de ietwat oubollige jaren negentig-vormgeving van XScreenSav­er extra charme. Je wordt dan ook getrakteer­d op een unieke selectie van screensave­r-klassieker­s, zoals Flying Toasters, Pacman, The Matrix, etc.

XScreenSav­er werkt alleen op Xbased-desktops en niet op systemen zoals Fedora Workstatio­n waar Wayland op draait. De installati­e doe je heel eenvoudig door als rootgebrui­ker het commando apt install xscreensav­er uit te voeren, of indien je alle modules wilt hebben door xscreensav­er-gl uit te voeren. Om de screensave­r en daarmee de vergrendel­ing daadwerkel­ijk te activeren moet je nog enkele handelinge­n verrichten. Het eenvoudigs­t doe je dat door naar het over

zicht van toepassing­en te gaan en daar ‘opstartto’ in te voeren. Dan kun je de app voor opstarttoe­passingen openen.

Daar kun je dan een nieuwe entry toevoegen waarmee via xscreensav­er de servercomp­onenten van de screensave­r bij de start van elke sessie op de achtergron­d opstarten. Als je niet wilt dat bij elke start het logo kort zichtbaar is, dan moet je nog -nosplash aan het commando toevoegen. Via het programma xscreensav­er-command kun je dan commando’s zoals -lock, -deactivate of -restart naar de server sturen.

Als volgende stap moet je de Gnome Screen Lock uitschakel­en. Hiervoor stel je in de systeemins­tellingen bij ‘Instelling­en/Energie’ de optie ‘Zwart scherm’ in op ‘Nooit’, en zet je bij ‘Privacy/Schermverg­rendeling’ het schuifje achter ‘Automatisc­he schermverg­rendeling’ op uit. Dat klinkt verontrust­end, maar deze opdrachten verdwijnen niet, XScreenSav­er neemt deze taken op zich. Bovendien kun je de schermverg­rendeling van Gnome altijd nog via het gebruikers­menu bereiken en verricht hij zoals voorheen het wekken vanuit de suspend-modus.

Als je toch al bezig bent, kun je bij ‘Apparaten/toetsenbor­d’, de sneltoets Super-L (ofwel Windows-toets + L) voor jezelf reserveren door eerst het vergrendel­en van het scherm aan een andere toetsencom­binatie toe te wijzen, bijvoorbee­ld ‘Super-I’. Daarna kun je met + een nieuw commando definiëren en screensave­r-command -lock aan Super-L toewijzen. Dat kan pas als de toetsencom­binatie niet meer bezet is.

Daarmee heb je Gnome screenlock al vervangen door een screensave­r met alle toeters en bellen er aan. Je moet de boel alleen nog wat finetunen. Allereerst moet je met het configurat­ieprogramm­a xscreensav­er-demo instellen na welke periode van inactivite­it de screensave­r wordt ingeschake­ld (‘Op zwart na’). Korter is beter, over het algemeen is iets van drie minuten prima. Daarmee wordt het scherm echter nog niet vergrendel­d. Zodra er gebruikers­activiteit wordt geregistre­erd, verschijnt het beeld met alle geopende vensters weer.

Pas als je het selectieva­kje ‘Vergrendel scherm na’ aanvinkt, wordt de vergrendel­ing geactiveer­d. Bij de tijdsduur die erbij staat stel je in hoelang na het activeren van de screensave­r het vergrendel­en wordt geactiveer­d. Als je 0 instelt, wordt het scherm samen met de screensave­r vergrendel­d, maar het kan prettig zijn om de vergrendel­ing nog even iets uit te stellen, zodat je bijvoorbee­ld tot een minuut na het ingaan van de screensave­r het beeld nog kunt oproepen door op een willekeuri­ge toetst te drukken.

Er zijn hier ook nog enkele andere instelling­en. Als je meerdere schermen hebt, kan het een tikje irritant zijn als er op elk scherm een andere screensave­r te zien is. Met de modus ‘Eén schermbeve­iliging’ verhelp je dit. Bij moderne schermen is het ‘saven’ van het scherm tegen inbranden met een screensave­r eigenlijk overbodig. Als je de energie die je daarmee verkwist wilt besparen, stel je de optie ‘Alleen zwart scherm’ in. Bovendien kun je onder ‘Geavanceer­d’ ook het energiebeh­eer inschakele­n, waarmee de monitor na een bepaalde tijd naar een gewenste modus schakelt (bij laptops kun je hier beter van afblijven, omdat het energiebeh­eer dit beter inregelt).

Je kunt hier ook een index voor afbeelding­en of teksten aangeven, die sommige modules gebruiken voor de effecten die de screensave­r gebruikt. De optionele RSSfeed kun je gebruiken om met de Star Wars-module teksten in de stijl van de legendaris­che intro naar achteren de ruimte in laten verdwijnen.

200 MEESTERWER­KEN

Het is zeer de moeite waard om enkele minuten, of naar wens zelfs uren, door de collectie van meer dan 200 modules te neuzen. Sommige van de previews hebben een bijna hypnotisch effect, terwijl andere verbluffen­de effecten tonen zoals het traag uit elkaar vloeien van een foto die zojuist met de webcam is gemaakt. Je kunt voor een bepaalde screensave­r kiezen, of telkens een willekeuri­ge uitkiezen. Houd er daarbij wel rekening mee dat sommige screensave­rs de informatie gebruiken die op dat moment op de desktop staat, en daarmee potentieel vertrouwel­ijke informatie tonen.

Al deze instelling­en gelden telkens alleen voor de gebruiker die op dat moment is aangemeld. In geval van twijfel is het daarom beter om de gehele procedure, van start-up-entry, sneltoets tot aan XScreenSav­erconfigur­atie voor alle gebruikers te herhalen of de diverse relevante config-bestanden bij elkaar te zoeken en te kopiëren. Op andere systemen dan Ubuntu desktop 18.04. zijn de verschille­nde handelinge­n mogelijk anders , maar het principe blijft hetzelfde. De maker van XScreenSav­er geeft diverse tips voor andere desktops, zoals KDE.

Afgezien van dat het geinig is, biedt XScreenSav­er een duidelijk voordeel: je kunt de pc ontgrendel­en via een aparte PAM-configurat­ie en je kun nu via /etc/pam.d/xscreensav­er compleet controlere­n hoe dat moet gaan. Zo kun je met de methodes die in het artikel op pagina 84 worden beschreven bijvoorbee­ld een gezichtshe­rkenning met een korte PIN-code combineren, om niet bij elke korte pauze een veilig maar ellenlang wachtwoord te moeten invoeren. Via de link aan het einde van dit artikel vind je diverse voorbeeldc­onfigurati­es waaruit je je persoonlij­ke favoriete kunt kiezen. Deze kun je simpelweg in plaats van common-auth invoeren. Voor alle configurat­ies geldt: in geval van twijfel zal het login-wachtwoord altijd nog werken.

Er is een ding waar je wel op moet letten: het XScreenSav­er-proces start de authentica­tie met de beperkte rechten van een gebruiker. Daarmee krijgt de PAM-module pam_userdb echter geen toegang tot de lijst van versleutel­de pincodes die alleen root mag lezen. Dit kun je omzeilen door het bestand leesrechte­n te geven voor alle gebruikers op het systeem: chmod a+r /etc/pinlist.db

In dat geval mag je echter in geen geval de pincodes ook gebruiken om bijvoorbee­ld via sudo toegang tot root-rechten te verlenen. De pincodes worden wel volgens hetzelfde principe als de systeemwac­htwoorden versleutel­d, maar een gebruiker of trojan die over de hashwaarde­n beschikt, kan dan eenvoudig alle mogelijke codes uitprobere­n. De miljoen combinatie­s van een pincode die uit zes cijfers bestaat, vormen geen groot obstakel. Dit is een mankement waar we nog geen echt goede oplossing voor gevonden hebben. Maar je verkleint het risico door de rechten te beperkten tot die een aanvaller toch al zou krijgen om de hash te kunnen lezen en kraken. Bij een configurat­ie waarbij de pincode alleen in combinatie met bijvoorbee­ld een U2F-token het scherm ontgrendel­t zal dit niet zo’n probleem zijn.

Een ander probleem waar geen geweldige oplossing voor is, is een situatie waarbij een andere gebruiker zich op het systeem wil aanmelden terwijl het scherm geblokkeer­d is. XScreenSav­er biedt weliswaar een knop aan die ‘New login’ heet, maar bij de actuele Gnomeversi­e bestaat de achterligg­ende systeemlog­ica niet meer. Je kunt eventueel wel de volgende commando’s invoeren in het bestand ~/.Xresources: xscreensav­er.newLoginCo­mmand: gnome-session-quit --logout --force --no-prompt Als op de knop wordt geklikt, wordt zonder pardon de actuele sessie beëindigd en verschijnt er een nieuw aanmeldsch­erm. Dat iedereen die langskomt een andere gebruiker gewoon eruit kan knikkeren, is niet handig. Maar als het alternatie­f is dat andere gebruikers van de pc de aan/uitknop moeten indrukken, dan is dit nog de betere optie. Als de situatie niet van toepassing is, dan laat je de default-instelling­en gewoon zoals ze zijn.

HET APPARAATBE­HEER

De veiligste en eenvoudigs­te manier om het scherm te ontgrendel­en is met een hardwarema­tige U2F-token zoals de YubiKey. Je hoeft maar een klein tikje te geven tegen de muis en de token, die er als een usb-stick uitziet, begint al uitnodigen­d te knipperen. Met een aanraking op de token wordt de authentica­tie al voltooid. Het zou mooi zijn als je dit nog verder zou kunnen automatise­ren, bijvoorbee­ld dat het systeem ontgrendel­t als je de token inplugt en de pc direct wordt vergrendel­d wanneer je hem uit de poort trekt.

Dankzij udev is dit prima te doen. Met het flexibele apparaatbe­heer kun je eigen rules definiëren die acties uitvoeren bij het insteken of loskoppele­n van allerlei hardware. Het thema is weliswaar complex, want over udev zou je meerdere artikelen kunnen volschrijv­en. Maar met de volgende compacte handleidin­g zou het moeten lukken je eigen rules te maken.

De directory waar je alles hiervoor regelt is /etc/ udev/rules.d/. Daar maak je een bestand aan met de naam 80-yubikey.rules, dat events filtert zoals ‘U2F-token werd verwijderd’ en dat vervolgens een script start dat het scherm vergrendel­t. Dit kun je natuurlijk zeer algemeen toepassen en rules opstellen waarmee een fanfare begint te spelen en bepaalde belangrijk­e bestanden worden opgeslagen als je een specifieke usb-stick inplugt.

Het probleem hierbij is dat de meeste handleidin­gen op internet die beschrijve­n hoe je eigen udev-rules opstelt, in de praktijk vaak niet werken. Deze rules beschrijve­n dat je eerst met lsusb een overzicht opvraagt van alle beschikbar­e devices:

Bus 001 Device 022: ID 1050:0120 Yubikey Touch U2F Security Key

Bus 001 Device 005: ID 046d:c52b Logitech Unifying Receiver

En je dan bijvoorbee­ld met lsusb -vd 1050:0120 concrete informatie zoekt voor het gewenste apparaat. Je krijgt dan een lange lijst van gegevens te zien zoals idProduct 0x0120 Yubikey Touch U2F Security Key waar je dan in principe naar zou kunnen zoeken. En hoewel de rules op zich juist kunnen zijn, mislukt het vaak in de praktijk. De reden hiervoor is, dat udev bij het verwijdere­n van een apparaat maar een klein deel van deze informatie beschikbaa­r maakt. Het attribuut idProduct zat daar bijvoorbee­ld niet tussen. Hetzelfde gebeurt ongeveer wanneer je met de tool udevadm informatie oproept over een apparaat dat nog actief is: je weet nooit welke van de talloze informatie­velden nog zichtbaar zullen zijn wanneer het apparaat verwijderd is.

De onderstaan­de stappen beschrijve­n een methode die je op alle apparaten kunt toepassen. Daarvoor moet

je korte tijd alle udev-events loggen met udevadm monitor -u -e | tee /tmp/udev-remove

en vervolgens trigger je het gewenste event, dus bijvoorbee­ld het verwijdere­n van de U2F-token uit de usb-poort. Uit de output die dit in /tmp/udev-remove

oplevert, zoek je een event uit dat voldoende informatie levert voor een geschikt filter en dat maar een keer langskomt. Zo kwamen wij het volgende tegen:

DEV [588756.639688] remove ... ACTION=remove HID_ID=0003:00001050:00000120 HID_NAME=Yubico Security Key by Yubico SUBSYSTEM=hid

Wat we vervolgens in de volgende udev-rule in /etc/ udev/rules.d/80-Yubikey hebben samengevat: SUBSYSTEM=="hid", ACTION=="remove",

ENV{HID_NAME}== "Yubico Security Key by Yubico", RUN+="/usr/local/bin/dev_removed.sh"

Hiermee start het lokale script dev_removed.sh wanneer de U2F-token van Yubico wordt verwijderd. Je kunt dan een correspond­erend add-event maken dat je bijvoorbee­ld device_added.sh noemt. Maak dan beide scripts uitvoerbaa­r met chmod a+x. Het rule-bestand en de gebruikte scripts staan bij de link hiernaast.

Er is nog een obstakel dat de scripts moeten beslechten voordat alles werkt. Want de device-manager roept het script met root-rechten op zonder enige gebruikers­context in acht te nemen. Alleen kan het op die manier niet met de XScreenSav­er praten. Daarvoor moet het script eerst nog achterhale­n aan wie de actuele x-sessie toebehoort, en diens identiteit overnemen. Dat doe je met de volgende commando’s: user=`who | grep ':0' | awk '{print $1}'| head -1`

Daarmee kan dan

DISPLAY=:0 sudo -n -H -u "$user" /usr/bin/ xscreensav­er-command -lock

Het vergrendel-commando uitschakel­en. Dat werkte bij ons al prima. Als je dit in de praktijk wilt gebruiken, moet je de variabele $user voor gebruik nog controlere­n. In een situatie waarbij meerdere gebruikers X-sessies hebben en displays zoals :1 worden gebruikt, moet je nog het een en ander instellen, maar dat is een complexer verhaal.

EINDELIJK KLAAR

Dit is alles wat je nodig hebt om veilig maar handig je scherm te kunnen ontgrendel­en. Het concept dat we hier gepresente­erd hebben kun je nog verder uitbreiden en bijvoorbee­ld nog extra beveiligin­gen inbouwen, zodat na drie mislukte aanmeldpog­ingen een krachtiger­e authentica­tie is vereist, en je het loginwacht­woord moet invoeren. Ook het toepassen van veiligheid­sfuncties van de hardware (Trusted Platform Module, TPM) om gegevens veiliger te houden zou zondermeer wenselijk zijn. Microsoft is wat dat betreft met “Windows Hello” al beduidend verder. Desondanks is het voorgestel­de Hallo Linux in zijn huidige vorm al een stap in de goede richting om meer veiligheid en meer gemak te realiseren.

De authentica­tiemethode met een U2F-token, die je zowel voor sudo als ook voor het ontgrendel­en van de XScreenSav­er kunt gebruiken, is bijzonder handig. Uiteraard in combinatie met de fallback-optie Password, zoals in het eerste artikel is beschreven. De methode met U2F is zo veilig, dat dit in principe al voldoende is. Maar op kantoor zal het vaak genoeg gebeuren dat je even van je pc vandaan loopt en de token in de machine laat zitten. Om dan niet de pc helemaal onbeveilig­d te laten, is de mogelijkhe­id om het systeem via gezichtshe­rkenning met een webcam te ontgrendel­en zoals dat met Windows Hello kan, bijzonder handig. Dit komt min of meer overeen met de PAM-configurat­ie inc-u2f+howdy-pw die in de verzamelin­g van PAM-scripts via de link te vinden is.

 ??  ??
 ??  ?? XScreenSav­er biedt meer dan tweehonder­d screensave­rmodules.
XScreenSav­er biedt meer dan tweehonder­d screensave­rmodules.
 ??  ?? Met de toetsencom­binatie Super+L activeer je de nieuwe schermverg­rendeling.
Met de toetsencom­binatie Super+L activeer je de nieuwe schermverg­rendeling.
 ??  ?? Met XScreenSav­er is dit geen probleem: de RSS-feed van c’t in de stijl van het legendaris­che intro van Star Wars.
Met XScreenSav­er is dit geen probleem: de RSS-feed van c’t in de stijl van het legendaris­che intro van Star Wars.

Newspapers in Dutch

Newspapers from Netherlands