Brute-Force-Angriffe auf SSH abwehren
Auf heise bin ich über einen interessanten Artikel gestolpert. Dort werden drei verschiedene Möglichkeiten erklärt, wie man Brute-Force-Angriffe auf SSH und andere Dienste verhindern kann. Bei einem Brute-Force-Angriff wird versucht ein Passwort und meist auch den Benutzernamen durch probieren zu erraten. So einen Angriff kann man abwehren, indem man nach einer bestimmten Anzahl von Fehlversuchen weitere Anmeldeversuche unterbindet.
Mit denyhosts, dass in den Ubuntu-Quellen enthalten ist, kann man Brute-Force-Angriffe verhindern. Installieren kann man den Dienst wie gewohnt über:
aptidute install denyhosts
denyhosts überprüft ständig die Einträge in /var/log/auth.log. Dort werden alle Anmeldeversuche über SSH protokolliert. Wenn ein Angreifer nun versucht durch Probieren Zugangsdaten zu erraten, so setzt denyhosts ihn nach einigen Fehlversuchen auf die Sperrliste unter /etc/hosts.deny. Dadurch werden weitere Verbindungen zwischen der IP-Adresse des Angreifers und dem Server unterbunden. Über die Datei /etc/denyhosts.conf noch genaue Einstellungen vornehmen. Hier kann man zum Beispiel einstellen, nach wievielen Fehlversuchen gesperrt werden soll. Nach Änderungen an der Konfiguration sollte man den Dienst neustarten:
/etc/init.d/denyhosts restart
denyhosts bietet keine 100%ige Sicherheit vor Brute-Force-Angriffen. Denn solch ein Angriff kann natürlich auch verteilt von 1.000enden Rechner erfolgen. Dennoch erschwert denyhosts solch einen Angriff enorm und sollte daher auf keinem Server mit offenem SSH fehlen.
Photo: eriwst, Creative Commons
Du kannst alle Antworten zu diesem Eintrag via RSS 2.0 Feed erfolgen. Du kannst einen Kommentar hinterlassen, oder einen Trackback von deiner eigenen Seite.
Hi,
denyhosts ist nett, aber meine Erfahrung zeigt, das die meisten Angriffe aus dem tor Netzwerk kommen (nichts gegen tor, ist eine tolle Sache). Da bei tor die IP-Adressen wechseln, greift denyhosts ins Leere (IMHO). Als 2. Linie (zusätzlich zu denyhosts) würde ich empfehlen den SSH-Port nicht auf 22 zu lassen, sondern einen beliebigen Port über 1024 zu wählen. Dies hat die Angriffe bei meinen Servern von >25 pro Tag, die denyhosts gesperrt hat, auf 0 verringert.
In der persönlichen ssh_config kann man pro Host den Port einstellen (siehe man ssh_config).
Gruß
byte-man
Ich selbst verwende auf meinem Server keine solche Technik. Warum auch, in der Regel sollte man eh keine Passwort Logins auf dem Server aktiv haben.
So hat man außer etlichen Fehlermeldung nichts im Syslog, den wo kein Passwort erlaubt ist kann man auch keines knacken.
mfg Betz Stefan
@byte-man: Stimmt, ist eine gute Möglichkeit seinen SSH-Server nicht auf Port 22 lauschen zu lassen. Es hat jedoch auch Vorteile, wenn man den Standard einhält. Es gibt sogar Anwendungen, die sich darauf verlassen (auch wenn ich das nicht sinnvoll finde).
@Betz Stefan: Naja, ich bevorzuge auch Login per Keys, aber das ist eben nicht für alle Anwendungsfälle zu gebrauchen. Man verliert dadurch nämlich auch Flexibilität. Sicherer ist es natürlich.
Wer sichere Passwörter und/oder Public-Keys verwendet, braucht so einen zusätzlichen “Schutz” nicht. Sinnvoll ist das höchstens, wenn man irgendwelchen Kunden oder anderen Benutzern SSH-Zugänge zur Verfügung stellt, auf deren Passwortsicherheit man sich nicht verlassen kann.
Ansonsten besteht der einzige “Sicherheitsgewinn” darin, dass das Log aufgeräumter aussieht, und ein Angreifer das Tool vielleicht derart austricksen kann, dass es dich selber DoSt.
Beispiele aus der Vergangenheit:
https://bugs.launchpad.net/ubuntu/+source/denyhosts/+bug/163257
https://bugs.launchpad.net/ubuntu/+source/denyhosts/+bug/162406
permit rootlogin sollte man auch noch abstellen. und es gibt noch die moeglichkeit AllowUsers zu definieren, was auch wieder ein wenig mehr Sicherheit bringt