USB-Stick als Authentifizierungs-Token

vorhergehende Artikel in: Linux Security
28.04.2016

Im Netz kursieren Anweisungen, wie man einen normalen USB-Stick zu einem Authentifizierungs-Token umwidmet. Ich habe diese Anweisungen nachvollzogen und dabei einige Fragen beantwortet, die ich in diesem Kontext hatte.

Zunächst möchte ich hier die Fragen zusammenfassen, die ich mir im Vorfeld der Tests gestellt hatte:

Funktioniert es?

Funktioniert es als 2-Faktor-Authentifizierung?

Funktioniert es für sudo?

Was passiert, wenn man in einer remote-Sitzung sudo startet und an dem Rechner der Stick angeschlossen ist?

Kann man diese Mechanik so instrumentalisieren, daß nur Nutzer, die sudo-Rechte haben, eine 2-Faktor-Authentifizierung benötigen, alle anderen aber nicht?

Einleitung

Ich beschreibe hier das Vorgehen unter Ubuntu 12.04 LTS - andere Distributionen können davon abweichen...

Einrichtung

Wie in mehreren guten Tutorials (siehe unten) beschrieben, müssen zunächst die Voraussetzungen geschaffen werden. Das geschieht mittels
sudo apt-get install pamusb-tools libpam-usb
Anschließend kann man das potentielle Token anschließen und richtet es mit
sudo pamusb-conf --add-device <name>
ein, wobei man einen sinnvollen Namen wählen sollte. An dieser Stelle sei darauf hingewiesen, daß pamusb den Stick über sie UUID der darauf befindlichen Partition identifiziert. Einen anderen USB-Stick mit derselben UUID zu erzeugen und damit die Absicherung zu durchbrechen, gelingt auch einem Angestellten oder WG-Kumpel, daher sollte man hier unbedingt einen Stick ohne Partition benutzen - dann nämlich identifiziert pamusb den Stick über seine Seriennummer. Auch das ist relativ einfach auszuhebeln: es existieren diverse Tools zum USB-Debugging, die beliebige Protokolle emulieren können, unter anderem könnte man mit einem solchen Werkzeug auch einen bestimmten USB-Stick bis zur Seriennummer hin vorspiegeln. Allerdings ist der Aufwand dazu schon deutlich größer.

Danach wird der oder die Nutzer festgelegt, die sich dieses Authentifizierungsmodus bedienen können sollen:

sudo pamusb-conf --add-user <username>
Wichtig ist als Referenz noch diese Seite hier.

Nunmehr muß das PAM-System noch über die neue Methode informiert werden:

sudo joe /etc/pam.d/common-auth
Wichtig hierbei ist, daß man auf jeden Fall während der Tests eine Session offen hält, in der ein Nutzer angemeldet ist, der über ausreichend Rechte verfügt, die Änderungen wieder rückgängig zu machen, falls beim Editieren etwas schief läuft. Anderenfalls kann es passieren, daß man mit einem System belohnt wird, in das man sich nicht mehr einloggen kann. Daher ist es auch wichtig, daß man ein Backup von /etc/pam.d/common-auth anlegt!! In dieser Datei kann man jetzt wahlweise eine von zwei Zeilen einfügen:
auth    sufficient      pam_usb.so
sorgt dafür, daß für die Anmeldung der korrekte Stick am Rechner ausreicht.
auth    required      pam_usb.so
wiederum legt fest, daß für die Anmeldung der korrekte Stick am Rechner nur mit der Eingabe des korrekten Passwortes ausreicht.

Damit ist auch gleich die Frage nach 2-Faktor-Authentifizierung beantwortet.

sudo

Die Antwort ist: ja. Hat man das System so konfiguriert, daß der Stick als Authentifizierung reicht, braucht man für sudo nie wieder ein Passwort eingeben. Auch die 2-Faktor-Variante funktioniert so.

Remote sudo

Die Variante, bei der der Stick alleine ausreicht, um sich zu authentifizieren, klingt in folgendem Szenario gefährlich: Der Stick steckt am Rechner. Ein Nutzer mit Rechten zur Benutzung von sudo meldet sich per ssh an. Er verlässt sein Terminal. Ein anderer Nutzer kommt und versucht, einen potentiell gefährlichen Befehl mittels sudo zu starten. Jetzt wäre es fatal, wenn der Stick sudo tatsächlich freischalten würde.

Die gute Nachricht ist: so funktioniert es nicht: in remote-Sitzungen muß man sudo trotzdem per Passwort freischalten. Allerdings gibt es auch eine schlechte Nachricht: nutzt man den 2-Faktor-Modus, scheint es so zu sein, daß remote-sudo gar nicht mehr funktioniert.

Selektiv pro Nutzer

Dafür muss man einfach das entsprechende Modul in /etc/pam.d/common-auth überspringen - etwa so:
auth [success=1 default=ignore] pam_succeed_if.so user in <Liste:von:Nutzernamen>
auth    required      pam_usb.so

Aktualisierung vom 28. April 2016

Mit einem neu installierten Ubuntu funktioniert diese Anleitung wie hier beschrieben nicht: UDisks wurde durch UDisks2 ersetzt (das könnte auch andere Distributionen betreffen). Daher existiert das Paket auch nicht mehr in den Ubuntu- bzw. Debian Repositories. Es ist ein entsprechendes Issue eingerichtet worden und es kümmerte sich bereits jemand darum, der einen Fork angelegt hat - dieser Fork hat bei mir funktioniert - er wird eventuell demnächst gemergt, sobald der Maintainer Zeit dafür findet....

Links

Artikel, die hierher verlinken

Vier-Augen-Prinzip bei Login mit PAM

16.01.2016

Zwang zur Anwesenheit mehrerer Personen zur Anmeldung als Systemuser - beispielsweise zur Verwaltung einer CA.

mOTP, PAM und OpenSSH

29.08.2014

Nach meinen erfolgreichen Versuchen zum Thema 2-Faktor-Authentifizierung und PAM habe ich nochmals eine Extraschicht eingelegt und eine "echte" Lösung ausprobiert.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Multi-User-WebDAV, Docker, GitHub

    17.11.2019

    Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...

    Weiterlesen...

Neueste Artikel

  • Migration der Webseite und aller OpenSource Projekte

    In eigener Sache...

    Weiterlesen...
  • AutoHideToolbar für Java Swing

    Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.

    Weiterlesen...
  • Integration von EBMap4D in die sQLshell

    Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.