Grüße!
Wirklich sichere Authentifizierungsverfahren gibt es nicht, klar. Daher versucht man es immer so sicher wie möglich zu halten. Doch bringen die in Online- und Printmedien vorgeschlagenen Methoden wirklich mehr Sicherheit?
Das habe ich mich gefragt, als ich neulich einen Artikel[1] im Linux-Magazin[2] gelesen habe.
Die Rede ist da von Public-Key-Authentifizierung[3] welche “einen deutlich besseren Schutz” bieten soll als “das beste Passwort”.
Ein Passwort habe ich im Kopf und ich gebe es direkt ein. Dabei kann man mir über die Schulter gucken oder einen Keylogger verwenden. Schreibe ich das Passwort irgendwo hin ist das natürlich risikobehaftet.
Eine Public-Key-Authentifizierung dagegen basiert auf 2 Dateien im Homeverzeichnis. Einem privaten und einem öffentlichen Schlüssel. Dem Server wird der öffentliche Schlüssel bekannt gemacht, indem er in die Datei ~/.ssh/authorized_keys geschrieben wird. Das geht sehr komfortabel über das Kommando ssh-copy-id. Mit diesem öffentlichen Schlüssel chiffriert der Server beim Loginversuch nun eine Nachricht an den Client, die dieser nur mit dem zum öffentlichen Schlüssel passenden privaten Schlüssel dechiffrieren kann. Der Client sendet die entschlüsselte Nachricht zurück und damit weiß der Server, dass der Empfänger im Besitz des privaten Schlüssels ist.
Den privaten Schlüssel kann ich zwar mit einem Passwort schützen, das lässt sich aber wesentlich einfacher und unbemerkter knacken als bei der Variante per Bruteforce oder eine Wörterbuchattacke über Loginversuche auf dem Server an das Passwort zu kommen. Und das eigentliche Problem an der Sache ist eben, dass diese beiden Dateien für mich lesbar in meinem Homeverzeichnis liegen. Kriegt jemand diese Datei, dann hat er quasi gewonnen. Und das lässt sich dann auch super zuhause beim Angreifer knacken – da gibt es nirgendwo eine Logdatei, die fehlerhafte Login-Versuche aufzeichnet, so wie es bei dem fehlerhaften Versuch an meinem SSH-Login passiert.
Jetzt mag der ein oder andere sagen, dass die /etc/shadow auch nur eine Datei ist die man, wenn man sie kopiert hat, lokal beim Angreifer bearbeiten kann, aber dazu sind eben in den allermeisten Fällen root-Rechte auf dem Rechner notwendig, auf dem die Datei liegt. Bei meinem privaten Schlüssel in /home/cisa/.ssh/ sieht das anders aus: Eine geeignete Sicherheitslücke in dem Browser meiner Wahl oder irgend einer anderen Software, die einen Zugriff auf meine Dateien via Internet bietet, reicht aus.
Noch größer schätze ich das Problem ein, dass man mit einem privaten Schlüssel meistens Zugriff auf mehrere Systeme hat, während viele (sicherheitsbewusste) Personen für verschiedene Systeme auch verschiedene Passwörter benutzen. Man kann bei einem Login via SSH und Public-Key-Authentifizierung zwar auch einen anderen privaten Schlüssel, der mit einem anderen Passwort geschützt sein kann, angeben (das geht sogar recht komfortabel über die ~/.ssh/config mit IdentityFile, damit man nicht jedes mal die Kommandozeilenoption eintippen muss), doch macht man das wenn man sich erstmal mit dieser Methode in Sicherheit wiegt?
Jetzt bin ich natürlich super gespannt auf die Meinung meiner Leser. Also husch husch einen oder mehrere Kommentare oder Blog-Einträge verfassen. E-Mails sind natürlich auch OK.
[1] Linux-Magazin, Ausgabe 08/09, S. 90 “Grundlagen: Sichere Remote-Logins”
[2] http://www.linux-magazin.de/Heft-Abo/Ausgaben/2009/08
[3] http://de.wikipedia.org/wiki/Public-Key-Authentifizierung