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 Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    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, muß 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 GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.