In der Theorie haben wir ja alle mal gelernt, dass eine sichere Authentifizierung über zwei Nachweise möglich ist: WISSEN (ich kenne eine geheime Parole) und BESITZEN (ich habe einen Schlüssel oder ein königliches Siegel oder sowas).
In der Praxis verlassen sich die meisten Systeme nur auf den Faktor WISSEN (ich kenne das Passwort. ich komme rein). Nur einige wenige spezialisierte Anwendungen für den Hochsicherheitsbereich erweitern das um BESITZEN, wie zum Beispiel die securID-Tokens von RSA, oder irgendwelche Nerds, die ihre mit Passphrase geschützten OpenSSH-Keys auf einem USB-Stick mit sich herumtragen. Sicher, aber wenig praktikabel.
Jetzt kam neulich Google auf die Idee, für die Konten ihrer Kunden eine Zwei-Faktor-Authentifizierung anzubieten. Da wird im Prinzip ein geheimer Schlüssel generiert, und zwischen Google und einer Mobile App (Android, IPhone) geteilt. Nach Aktivierung kann man sich an seinem Google-Konto nur noch anmelden, wenn man sein Passwort kennt, und das Android-Phone dabei hat, das einem einen gültigen Einmal-Code generiert. Telefon wird geklaut: Ist nicht schlimm, der Dieb kennt ja das Passwort nicht. Das Passwort wird kompromittiert (Trojaner, Keylogger, …): Nicht schlimm, der Angreifer hat ja mein Phone nicht. Es müssen also für einen erfolgreichen Angriff auf mein Google-Konto zwei Schranken überwunden werden, was es Angreifern schwer macht.
Der eigentliche Clou an der der Sache ist mir aber erst heute Abend aufgefallen: Google ist ja bekanntlich nicht evil, und darum haben die freundlicherweise einen offenen Standard dafür verwendet, die mobilen Apps als Open Source angelegt, und genialerweise noch ein PAM-Modul dafür entwickelt.
Man muss sich nur
- beim Google Code Project das PAM-Modul herunterladen,
- mit make install compilieren und installieren,
- eine Zeile in der PAM-Config hinzufügen (auth required pam_google_authenticator.so)
- eine Zeile in der sshd_config anpassen (ChallengeResponseAuthentication yes)
- per mitgeliefertem Tool einen Schlüssel generieren und den per QR-Code auf die App kopieren.
Und schon wird man bei einem SSH-Login nach einem Verification Code gefragt, den man per Handy erstellen kann. Das Handy dient dann als Token Generator sowohl für das Google-Konto, als auch für die privaten SSH-Kisten:
kf@schnism:~$ ssh kf@schnism.homelinux.net -p [...]
Verification code: 582124
Password:
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
Last login: Mon Aug 8 00:18:53 2011 from localhost
kf@schnism:~$
Die generierten Tokens sind für ein Zeitfenster von 4 Minuten gültig (wenn sowohl Server als auch Handy exakt zeitsyncron laufen, z.B. via NTP, dann kann man das auch noch kürzer machen), und nach einem Loginversuch ungültig. Zusammen mit ein paar weiteren Sicherheitsmaßnahmen (geheimer Port, der nicht auf Knocking reagiert, fail2ban, sichere Passworte) ist man dann auch schon im privaten Umfeld ohne Geld auszugeben im Bereich militärischer Sicherheit.
Recent Comments