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 Passwortanteil 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.
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.
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.
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.