One-time-Passwörter mit dem Open-Source-Backend LinOTP

Doppelt gesichert

Wer seinen Rechner richtig absichern will, muss zu Einmalpasswörtern greifen. Da finden sich diverse proprietäre Backends, die mit Radius kommunizieren. Feature-technisch ist LinOTP das einzige freie Pendant. Auch wenn es sich noch in einem frühen Stadium befindet, hat es doch das Zeug zur ernsthaften Lösung.
Mit ausführlichen Workshops und Tipps unserer Autoren aus der Praxis sichern Sie Netzwerke und Server gegen Angriffe ab. ADMIN erklärt, wie man den eigenen ... (mehr)

Wissen ist Macht, das gilt auch heute noch für viele sicherheitsrelevante Systeme. Dabei bietet der bloße Passwort-Sicherheitsmechanismus bei genauerer Betrachtung nur in den wenigsten Fällen ausreichende Sicherheit. Jedermann könnte sich durch bloße Kenntnis der Benutzer-Passwort-Kombination gegen das Zielsystem authentifizieren. Angriffsvarianten wie Brute Force, Sniffing, Replay Attacks oder das Benutzen eines Hard- oder Software-basierten Keyloggers stellen für sensible Datenbestände eine ernsthafte Bedrohung dar. Üblicherweise erweitern Admins in solchen Bereichen die Sicherheit ihrer Systeme durch eine zusätzliche Komponente, den physischen Besitz eines Hard- oder Software-Token.

Neben zahlreichen proprietären Varianten steht seit Kurzem auch das freie LinOTP[1] des Darmstädter Herstellers Lsexperts zur Verfügung. Der Software-Architektur entsprechend funktioniert es mit allen HMAC-OTP-Tokens [2], offiziell unterstützt es die Hardware des Marktführers Aladdin, Etoken-NG OTP [3], Etoken PASS [4], auch das Safeword Alpine [5] ist erfolgreich im Einsatz.

Nahezu jedes Mobiltelefon mit Java-Unterstützung lässt sich darüber hinaus mit Mobile OTP von LSE in ein Token verwandeln. Die Authentifikation geschieht durch zwei Faktoren: den festen Passwort­anteil und den vom Token generierten OTP-Wert. HMAC-OTP ist ein in RFC 4226 [2] definierter Standard, nach dem LinOTP unter Zusammenarbeit von Hashfunktionen, eines Counters und eines geheimen Schlüssels das Einmalpasswort generiert. Sowohl der geheime Schlüssel als auch der Counter für jeden Benutzer landen im Backend, aber auch auf dem mobilen Token für die Initialisierung.

Der Aufbau von LinOTP ist in der aktuellen Form noch recht statisch (siehe Abbildung 1) und setzt einen Open-LDAP-Server voraus. Das Freeradius-Modul »rlm_linotp« nutzt das LDAP-Backend als Informationsträger und stellt gleichzeitig den Authentifikationsmechanismus für die Applikationen bereit.

Abbildung 1: LinOTP in Version 1.3: Otpadm verwaltet die Tokens und speichert die Daten in Open LDAP. Freeradius erledigt die Authentifizierung für Applikationen gegen das LDAP-Verzeichnis.

Als Administrationswerkzeug kommt bei der Enterprise Edition das CLI-basierte »otpadm« zum Einsatz, das die Tokens initialisiert, resynchronisiert und sperrt. Bei der Community Edition hilft das Python-Skript »pyotpinit« bei der Initialisierung. Dem sicherheitsbewussten Administrator sollte es jedoch lediglich als Beispiel dienen, da dabei der HMAC-Key in der Prozessliste erscheint. Andere Benutzer auf dem System könnten diesen allzu leicht abfangen.

Die Nutzer der Community Edition werden daher bei intensivem Einsatz um ein eigenes Scripting-Framework um das LDAP-Schema nicht herumkommen, da hier alle Daten zur Generierung des OTP (HMAC) vorhanden sind, ebenso diverse andere Attribute zum Aktivieren oder Deaktivieren von OTP-Benutzern.

Radius

Aufgrund der Radius-Kopplung unterstützt LinOTP automatisch jeden Dienst, der mit dem Authentifizierungsserver sprechen kann. Das reicht von VPNs bis zur Wireless-Authentifikation. Mit Radius Gina oder dem Radius Credential Provider (beides Non-OSS-Komponenten von LSE) ist es möglich, normale WindowsWorkstations (Radius Gina: XP; Credential Provider: Vista, Windows 7) per OTP zu versorgen (Abbildung 2). Mit einer Samba-Konfiguration als PDC lässt sich auf diese Weise ein vollständiger Authentifikations-Stack mit Einmalpasswörtern auf Linux-Basis realisieren. Durch das bei der Anmeldung simultan eingegebene Domänen-Kennwort funktionieren alle üblichen Windows-Mechanismen und Protokolle wie zum Beispiel Kerberos/SSO weiter.

Abbildung 2: Die Windows-Anmeldung an der Samba-Domäne mit dem Client Radius Gina.

Installation

Aktuell existieren lediglich für die Enterprise Edition von LinOTP Debian-Pakete, die Community Edition muss der Interessierte noch mit Mercurial aus den Re-positories auschecken und kompilieren. Wer Aladdin-USB-Tokens einsetzen will, hat für deren Initialisierung Aladdins offiziellen PKI-Client zu verwenden, weil nur dieser (in der Enterprise Edition) die Bibliotheken zum Zugriff auf die Tokens bietet.

Die folgende Installationsprozedur knüpft einen groben Leitfaden zur Kompilierung der LinOTP-Komponenten auf Debian Lenny. Es empfiehlt sich immer, vor der Installation die jeweils mitgelieferten Readme-Dateien sowie das LinOTP-Manual [5] zu konsultieren. Als Basis verwendet dieser Artikel Freeradius 1.1.7. Freeradius 2 ist für LinOTP ab Version 1.3. jedoch getestet und unterstützt. Im ersten Schritt erfolgt das Auschecken der aktuellen Repositories

hg clone http://opensource.lsexperts.de/hg/linotp/libotpdb
hg clone http://opensource.lsexperts.de/hg/linotp/utils
hg clone http://opensource.lsexperts.de/hg/linotp/rlm_linotp

Der Copy-Befehl sorgt für das Mergen von »rlm_linotp« in den Freeradius-Build-Tree. Das benötigte LDAP-Schema findet sich im Utils-Repository, das sich mit der Include-Direktive in ein bestehendes Open-LDAP-Verzeichnis einbinden lässt. Jetzt sind schon alle Grundkomponenten verfügbar und die Konfiguration von LinOTP kann ihren Lauf nehmen. Nach einer erfolgreichen Konfiguration schaut der Eintrag eines Benutzeraccounts so aus wie in Listing 1.

Listing 1

Ein LinOTP-Benutzer in LDAP

dn: uid=mkromer,ou=otp,dc=linux-magazin,dc=de
cn: mkromer
sn: kromer
mail: medozas@medozas.de
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: LinOtpAccount
LinOtpMaxfail: 3
LinOtpIsactive: TRUE
LinOtpFailcount: 1
LinOtpCount: 151
LinOtpPinHash:: bFd5J8oDJew+NIeoiRR5t2Rsmsv8rJEG6kuX09lU48mhasdf8sd67678a998sd09d=
LinOtpPinSeed:: du4sxh8oFWQ=
LinOtpKeyEnc:: ukocZfH5CmroTpClSD8Aok60zLUhpkr4YSkoyHV8asdfjdYXVCOasdfsdfDFJlciv878659897899=
LinOtpKeyIV:: 6m4zQpstoJ4P4BCyew9HnQ==

Diese Konfiguration sperrt ab dem dritten Misslingen jeden weiteren Loginversuch (Attribut »LinOtpMaxFail« ). Die für die OTP-Generierung erforderlichen Werte sind im verschlüsselten Format abrufbar. Für die Nutzung des Backends ist jedoch in jedem Falle das Erzeugen eines getrennten Freeradius-Benutzers mit korrekt limitierenden ACLs zu empfehlen. Da dies jedoch kein traditioneller Bind ist, sind in der Konfiguration für den Freeradius-Benutzer »write« -ACLs zu definieren:

access to attrs="@LinOtpAccount" by dn="cn=root,dc=linux-magazin,dc=de" write
by dn="cn=otpadmin,dc=linux-magazin,dc=de" write by * none

Die Hochkommata um »@LinOtpAccount« stehen so zwar nicht im Handbuch, sind aber in einigen Szenarien notwendig. Für die Absicherung des LDAP-Transportwegs erscheint TLS in jedem Fall zwingend erforderlich.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019