Wer ein öffentlich erreichbares (Unix-) System betreibt, kennt die Problematik der diversen gescheiterten Anmeldeversuche per SSH. Hervorgerufen durch Bots, die triviale Kombinationen und Passworten durchprobieren, müllen sie Logfiles zu, und finden schlimmstenfalls sogar wirklich einen Luser, der ein leicht zu erratendes Passwort nutzt.
Lösungen für dieses Problem sind (nicht nur hier) bereits mehrfach angesprochen worden; angefangen bei einfachen Maßnahmen wie der Verlegung des Port von 22 auf einen anderen, nicht standardgemäßen. Nutzung von SSH-Public Keys. Weiter über Paketfilter und eigens hierfür entwickelte Tools wie z.B.
denyhosts oder
fail2ban.
Eine gänzlich andere Möglichkeit, die darüber hinaus noch weitere Vorteile bietet ist die Authentisierung über
Einmalpassworte. In Verbindung mit einer Zwei-Faktorauthentisierung (wie sie z.B. RSA mit den
SecureID-Tokens) vormacht kommt zusätzlich zum Passwort noch eine Besitzkomponente hinzu. Ohne Token, das das OTP anzeigt, ist kein Zugang möglich.
Leider lohnen sich der Kauf dieser Token für den "Privatgebrauch" nicht wirklich, immerhin existieren mittlerweile (freie) Projekte, die diese Technik sehr kostengünstig ermöglicht. Das wohl vielversprechendste ist hier wohl
FreeAuth.
Statt eines Hardwaretokens kommt hier das (in den allermeisten Fällen eh vorhandene) Handy zum Einsatz, das mit Hilfe eines kleinen Stückchen Java-Software die Funktion schnell und einfach nachbildet.
Zur Nutzung von FreeAuth sind also zwei Komponenten nötig:
- Auf dem Server kommt ein entsprechendes PAM-Modul zum Einsatz, das (je nach Konfiguration auch zusätzlich) für die Anmeldung via OTP zuständig ist
- Auf dem Client (Handy) läuft ein kleines Midlet, das die OTP (geschützt durch einen mindestens 8-stelligen PIN-Code) berchnet und anzeigt
Da
PAM sehr generisch ist, und selbst auf anderen Unices (
Solaris,
FreeBSD,
AIX, ...) zum Einsatz kommt, kann das System auf einer Vielzahl von Systemen zum Einsatz kommen. Es ist jedoch so flexibel, dass es sich auch in
RADIUS-Umgebungen einsetzen lässt, z.B. um User im
WLAN zu
authentifizieren.
Da wohl die wenigsten Distributionen das Paket mitliefern, steht zunächst manuelles Kompilieren auf dem Programm. Hierzu werden zunächst die PAM-Header benötigt (Debian und Ubuntu: libpam0g-dev, CentOS: pam-devel). Ist das
pam_freeauth-Modul heruntergeladen und entpackt, lässt es sich mit Hilfe eines einfachen "
make; make install" kompilieren und installieren. Das mitgelieferte Configfile "
freeauth.conf" ist daraufhin nach
/etc/security zu kopieren und mit den passenden Rechten (0600) zu versehen, weiterhin ist das Verzeichnis
/var/cache/freeauth (Rechte 0700) zu erstellen.
Zu guter Letzt geht an an die PAM-Konfiguration. Unter Debian / Ubuntu sind folgende Änderungen an zwei Dateien nötig:
/etc/pam.d/common-authauth sufficient pam_unix.so nullok_secure
auth required pam_freeauth.so use_first_pass
/etc/pam.d/common-passwordpassword sufficient pam_unix.so nullok obscure min=4 max=8 md5
password required pam_freeauth.so use_first_pass
Dies stellt jedoch die einfachste Möglichkeit dar: der jeweilige User kann sich entweder mit seinem althergebrachten Passwort oder dem OTP anmelden. PAM ist jedoch dementsprechend flexibel, auch andere Möglichkeiten zuzulassen.
Kleiner Hinweis: selbst PAM-Kundige tuen gut daran, mindestens eine mit entsprechenden Rechten ausgstattete Session noch vor den Versuchen offen zu lassen.
Die Clientkomponente lässt sich einfach via Handy
herunterladen und darauf installieren (Beispiel mit
Screenshots). Bei der ersten Verwendung ist ein (8-stelliger) PIN anzugeben, der die auf dem Handy gespeicherten Daten absichert.
Anhand eines 20-stelligen Hashes, der als nächstes einzugeben ist, wird ein entsprechendes "shared secret" erzeugt, das für den entsprechenden User in die
/etc/security/freeauth.conf einzutragen ist. Sehr praktisch ist die Möglichkeit, verschiedene Secrets für den gleichen User eintragen zu können. Somit ließe sich selbst das Rootpasswort an entsprechend vertrauenswürdige Personen weitergeben, da ein potentieller Angreifer nun nicht nur dessen Handy, sondern auch seine PIN bräuchte.
Da die gesamte Technik stark von der Zeit auf dem System und dem Client abhängt, ist man gut beraten einen NTP-Client auf dem Server zu installieren, und die Zeit möglichst genau mit dem Handy abzugleichen. Sofern hier eine Abweichung von (standardmäßig) +-3 Minuten ist, wird die Anmeldung fehlschlagen.
Im großen und ganzen wirkt das Projekt sehr vielversprechend. Die Sicherheit wird durch die Besitzkomponente ein Stückchen erhöht, und ein Java-fähiges Handy dürfte mittlerweile jeder haben. Dank der Flexibilität des Systems ist die Anzahl an Systemen, die sich nicht daran authentisieren können (spätestens durch Einbindung in eine RADIUS-Umgebung) doch sehr gering, und selbst Webanwendungen lassen sich dank des Apachen
anflanschen. Man darf also gespannt sein, was die Zukunft an dieser Stelle noch so bringt.