SSH - automatisch bannen

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
BoKn
Beiträge: 3
Registriert: 02.03.2010 19:50:40

SSH - automatisch bannen

Beitrag von BoKn » 02.03.2010 21:00:00

SSH - automatisch bannen

Tag liebes Forum!

Das ist mein erster Post hier.
Ich habe auf meinen eigenen Rechnern (Squeeze) den SSH-Port auf 11111 gelegt und hatte damit bisher keine Vorkommnisse, zumal die nicht statisch am Netz hängen.
Nun habe ich aber Produktivserver zur Verwaltung bekommen (alle Lenny), die alle 22 nutzen und bei denen der Port gewollt vom Internet aus zu erreichen ist. Ich hab in die Logs geschaut und einen Haufen Loginversuche gefunden. Das geht ja gar nicht.

Ich habe mich also mit dem o.g. Thema befasst und war sehr erstaunt:
Zuerst kommt man auf Seiten, die fail2ban oder DenyHost propagieren. Howtos mit allem drum und dran sind da. Aber beide Werkzeuge suchen in einem festgelegten Zeitabstand die Logdateien nach fehlerhaften Logins ab. Das resultiert dann in IP-Sperren. Da habe ich mich doch gefragt: Selbst wenn ich eines dieser Skripte alle 5 Minuten laufen lasse, hat ein Angreifer immernoch 5 Minuten Zeit, so viele Angriffe wie möglich laufen zu lassen. Er wird erst im Nachhinein entdeckt. Zudem wird eine IP permanent gebannt, obwohl wir doch in einer Welt leben, in der sich die IP-Adressen von Privatrechnern bei jeder Einwahl ändern. So werden die Bann-Listen immer länger, veralten aber sofort.
Ich habe in der Vergangenheit immer wieder erkennen müssen, dass sich User auf Werkzeuge versteifen, nur weil es sie gibt. Dann wird viel über diese Tools gepostet und der Suchende gelangt über google und Co. zu genau diesen.

Ich fragte mich: Was ist denn mit PAM, das wird doch eh schon von der Standardconfig des sshd benutzt? Dann bin ich auf viele total abgefahrene Config-Beispiele für PAM_tally gestoßen, wo der SSH-Benutzername nach soundsovielen fehlerhaften Loginversuchen gesperrt wird und vom Admin wieder freigeschaltet werden muss. Wenn man nun ein sich selbst wartendes System haben möchte (ihr wisst, was ich meine), wird folgendes Angeboten: Per Cronjob alle paar Stunden ein Reset der Sperren durchführen.

Das ist doch kacke. (Kacke adjektivisch - geht das? :? )

Da hab ich mir die Doku zu PAM_tally angeschaut - und siehe da, da gibts eine total einfache Einstellung, die mit einer Zeile in /etc/pam.d/sshd erledigt ist - keine Cron-Jobs, kein garnix:
auth required pam_tally.so lock_time=30
(In der Standard-Config stand noch keine Zeile mit pam_tally.so drin; die 30 ist von mir und heißt 30 Sekunden)
(Nach der Änderung muss sshd neugestartet werden.)
Nach jedem falschen Passwort wird der Benutzername für 30 Sekunden gesperrt. Das bekommt der Angreifer aber nicht mit, da es genauso reagiert, als hätte man einen falschen Benutzernamen oder Passwort eingegeben.
Noch viel besser ist, dass die Sperre nicht ab dem 1. fehlerhaften Login gilt, sondern still nach jedem weiteren falschen Passwort wieder von 0 hochzählt. Der Angreifer schiebt also seine 30 Strafsekunden unendlich vor sich her - deshalb reichen sie meiner Meinung nach völlig aus. (Wenn das nicht so wäre, hätte der erste Loginversuch nach den 30 Sekunden eine geringe Chance, aber immerhin...)
Und ein normaler Benutzer, der sich beim Passwort vertippt, braucht bloß diszipliniert 30 Sekunden warten. (Das sollte man ihm natürlich sagen...sonst rastet er aus.)
Gegen einen Bot reichen wohl auch 10 Sekunden, aber falls einer alle meine Kennwörter weiß und sie von Hand durchprobiert, ist 30 wohl gut.

Ich schreibe das, weil ich glücklich bin, so eine einfache Lösung gefunden zu haben, und ich sie mitteilen möchte.
Aber, da ich kein Profi bin, möchte ich auch wissen: Habe ich einen Denkfehler gemacht? Gibt es einen anderen Aspekt, an den ich nicht gedacht habe?

Edit: Mir ist grade eingefallen: Ohne IP-Bann kann jemand das Einloggen eines bestimmten Users verhindern, in dem er extra falsche Loginversuche macht.

Edit: Hab grade gemerkt, dass sich die Sperrzeit auch dann verlängert, wenn innerhalb der Sperrfrist das richtige Passwort eingegeben wird.
Zuletzt geändert von BoKn am 02.03.2010 23:27:43, insgesamt 1-mal geändert.

yeti

Re: SSH - automatisch bannen

Beitrag von yeti » 02.03.2010 22:31:49

Mir reicht die dummdussigele IPTables-recent-Lösung... wer (IP-Adresse) sich zu oft binnen zuwenig Zeit mit meinem SSH-Port verbindet wird eine Zeit lang gesperrt. Ohne Ansehen des Users, einfach die komplette Adresse...

Ein paar bekannte Systeme kann man ja vorher explizit als immer ungefiltert passieren lassen.

Such mal hier im Forum nach "ssh iptables recent" oder auch global mit zB ixquick.de (\o/ Schleichwerbung!)...

BoKn
Beiträge: 3
Registriert: 02.03.2010 19:50:40

Re: SSH - automatisch bannen

Beitrag von BoKn » 02.03.2010 22:55:58

Ich verstehe das Konzept.
Hier habe ich aber Vorteile:
Wenn jemand 10 Passwörter hat, von denen eines das richtige ist (er hat sie in deinem schwarzen Büchlein gefunden), dann hat er die Chance 1/10, dass er in mein System kommt, da er, wenn seine erste Eingabe falsch war, nicht merkt, dass eines der weiteren 9 das richtige war. Er geht alle durch, es sind mit einer Chance von 90% alle falsch - das sieht er jedenfalls.
Bei dir macht er den ersten Connect, dann kann er standardmäßig 3 Passwörter probieren, bis die Verbindung vom Host getrennt wird. Dann versucht er's wieder und kann die nächsten 3 eingeben. Für dein iptables waren das bisher nur zwei Verbindungen. Selbst wenn du bei der dritten sperrst, hatte er eine Chance von 60%, dass das richtige dabei war. Und vor allem: Er merkt, dass er gesperrt ist. Dann probiert er es mit den restlichen Passwörtern, nachdem er sich neu eingewählt hat.

Das ist ein blödes Gedankenspiel, aber ich bin ja auf der Suche nach einen möglichst umfassenden Schutz, der möglichst einfach ist. Ich habe auch wahrgennommen, dass du "mir reicht" geschrieben hast, will dich also keinesfalls verbessern.

suno
Beiträge: 354
Registriert: 25.07.2008 17:33:40

Re: SSH - automatisch bannen

Beitrag von suno » 02.03.2010 23:35:54

Der typische Dreisprung geht so (Sicherheit/Komplexität steigt nach unten an):
- passphrase (standard) [0]
- PKA [1]
- PKA mit dezentralem management [2]

Wenn du folgendes beantwortest kann ich dir kurz und einfach sagen was du machen sollst (die richtige Mischung aus Komplexitaet/Sicherheit/Wartbarkeit):

- wie viele User?
- Art der User (versiert im Umgang mit Linux/Unix und der Command Line)?
- Topologie der Infrastruktur?

Von Dingen wie fail2ban rate ich eher ab. Jemand der Ahnung von der Materie hat kann so gezielt dein SSH Service unzugänglich machen; z.B. ein wennig siffen der source IPs die sich connecten, dann massig IP Pakete mit gespoofter Source IP schicken und dein Service ist nicht mehr erreichbar.


[0] http://sunoano.name/ws/public_xhtml/ssh ... onfig_file
[1] http://sunoano.name/ws/public_xhtml/ssh ... entication
[2] http://sunoano.name/ws/public_xhtml/ssh ... nkeysphere
Zuletzt geändert von suno am 02.03.2010 23:55:49, insgesamt 1-mal geändert.

suno
Beiträge: 354
Registriert: 25.07.2008 17:33:40

Re: SSH - automatisch bannen

Beitrag von suno » 02.03.2010 23:47:59

borisknoedel hat geschrieben: Da hab ich mir die Doku zu PAM_tally angeschaut - und siehe da, da gibts eine total einfache Einstellung, die mit einer Zeile in /etc/pam.d/sshd erledigt ist - keine Cron-Jobs, kein garnix:
auth required pam_tally.so lock_time=30
(In der Standard-Config stand noch keine Zeile mit pam_tally.so drin; die 30 ist von mir und heißt 30 Sekunden)
(Nach der Änderung muss sshd neugestartet werden.)
Nach jedem falschen Passwort wird der Benutzername für 30 Sekunden gesperrt. Das bekommt der Angreifer aber nicht mit, da es genauso reagiert, als hätte man einen falschen Benutzernamen oder Passwort eingegeben.
Noch viel besser ist, dass die Sperre nicht ab dem 1. fehlerhaften Login gilt, sondern still nach jedem weiteren falschen Passwort wieder von 0 hochzählt. Der Angreifer schiebt also seine 30 Strafsekunden unendlich vor sich her - deshalb reichen sie meiner Meinung nach völlig aus. (Wenn das nicht so wäre, hätte der erste Loginversuch nach den 30 Sekunden eine geringe Chance, aber immerhin...)
Und ein normaler Benutzer, der sich beim Passwort vertippt, braucht bloß diszipliniert 30 Sekunden warten. (Das sollte man ihm natürlich sagen...sonst rastet er aus.)
Gegen einen Bot reichen wohl auch 10 Sekunden, aber falls einer alle meine Kennwörter weiß und sie von Hand durchprobiert, ist 30 wohl gut.
meeeeh ... Viel Spass das alles über lange Zeit zu warten. User vergessen Ihre Passphrasen, verlassen das Unternehmen, neu kommen hinzu usw. Plus, aus Kryptographischer Sicht ist ein Passwort einem binary key immer weit unterlegen. Dann sind da ganz praktische Dinge wie z.B. der typische Fall mit den Post-its am Bildschirmrand, daneben Visitenkarte (jetzt hat man Passphrase und Unternehmen; der Rest ist nicht mehr so hart), eine nettes Photo von der ein-bisschen-illegalen 5-Mann/Frau Officeparty gemacht, auf Facebook/Flickr/you-name-it-social-site geben *peng* :D.

Die Loesung von oben mag funktionieren ist aber eher was fuer die 2-3 Server im Bastelkeller. Wenn du eine Loesung haben willst die skaliert und wartbar ist dann verwende zumindest PKA.

suno
Beiträge: 354
Registriert: 25.07.2008 17:33:40

Re: SSH - automatisch bannen

Beitrag von suno » 03.03.2010 00:01:33

borisknoedel hat geschrieben:SSH - automatisch bannen
Der Titel ist schon mal falsch. Warum will man sich damit beschäftigen was ist wenn man HIV hat. Ich will ja lieber gar keines bekommen. Einfach nur dem erlauben sich zu verbinden von dem man sicher ist er ist einer von den Guten (whitelisting). Geht z.B. mit PKA oder der AllowUsers Direktive unter Einschraenkung auf IP.

uname
Beiträge: 12077
Registriert: 03.06.2008 09:33:02

Re: SSH - automatisch bannen

Beitrag von uname » 03.03.2010 08:27:46

Hier vielleicht ein etwas anderer Ansatz:
/etc/pam.d/sshd:

Code: Alles auswählen

auth        required    pam_listfile.so item=user sense=allow file=/etc/ssh_allow_list onerr=fail
In der Datei /etc/ssh_allow_list werden dann die berechtigten Benutzer eingetragen. "root" hat natürlich nur Zugriff per SSH-Key (Definition in /etc/ssh/sshd_config), muss aber in die allow-Datei eingetragen werden.
Tja 90 Prozent der Angriffe gehen scheinbar auf leerern Benutzer (uid=0) sowie auf "root". Meine berechtigten Benutzer tauchen in der Statistik erst gar nicht auf.

Code: Alles auswählen

002137;
000771;root
000084;test
000042;nagios
000010;games
000008;irc
000007;mysql
000007;gnats
000006;backup
000003;www-data
000003;mail
000002;uucp
000002;sync
000002;sshd
000002;proxy
000002;nobody
000002;news
000002;man
000002;lp
000002;list
000002;bin
000001;sys
000001;libuuid
000001;daemon
000001;Debian-exim
TOP-Angriffs-Hosts:

Code: Alles auswählen

001548;ip-34.net-89-2-94.rev.numericable.fr
000642;76-9-199-142.beanfield.net
000460;adsl-99-52-223-251.dsl.lsan03.sbcglobal.net
000178;12.148.70.99

BoKn
Beiträge: 3
Registriert: 02.03.2010 19:50:40

Re: SSH - automatisch bannen

Beitrag von BoKn » 05.03.2010 14:55:05

Ok, ihr wollts echt wissen :-)

Vielen Dank für die Antworten.
Das bei mir ist ein Sonderfall, den ich kurz umreißen werde:
- Mehrere Server
- Mehrere User sollen Root-Zugriff haben. Und damit meine ich nicht Adminrechte, sondern Root-Zugriff.
- Root im Moment nur über Keyfiles. Zum Glück. Aaaaber: Es ist wahrscheinlich, dass viele Keys unverschlüsselt sind und dass sie auch auf Windowsnotebooks rumliegen sowie auf unverschlüsselten Mac.
- Viele Benutzerkonten auf den Systemen für Skripte, die sich mit Kennwort einloggen sollen.
- Berechtigte Nutzer eintragen bringt keine Verbesserung, da so gut wie alle Benutzerkonten berechtigt sind.
- IP-Whitelisting ausgeschlossen, da auch mobile Zugriffe.
- Manche der Server sind nur per VPN auf der 22 offen. Aber eben nicht alle. Das ist so gewünscht, da auch Zugriff von Internetcafes aus möglich sein soll - da gabs anscheinend Probleme.
- Kein ernsthaftes Sicherheitskonzept umsetzbar.

Ich merke gerade, dass mein Anspruch für die gegebene Situation einfach zu hoch gesteckt war.

uname
Beiträge: 12077
Registriert: 03.06.2008 09:33:02

Re: SSH - automatisch bannen

Beitrag von uname » 06.03.2010 08:24:09

Du könntest eine mehrstufige Sicherheitsstrategie implementieren, welche jedoch Automatisierungen wahrscheinlich nicht ermöglicht. Außerdem kostet es Arbeit und Geld.

Benutzer darf sich dann nur noch auf einen am besten doppelt ausgelegten Zwischenserver anmelden, der nur unter deiner Kontrolle steht. Dieser sollte gut überwacht werden. Natürlich darf von außen nur mit entsprechenden SSH-Key auf die Benutzer-Accounts (nicht root) zugegriffen werden, wenn es sein muss auf Port "22". Von diesen Server erreicht der Benutzer über einen neuen SSH-Key (spätestens diesmal mit SSH-Passphrase) die echten Server als "root". Durch Firewalls, Anpassungen im SSH-Server oder über serverseitige /root/.ssh/.authorized-Keys - Parameter "from=" kann man den Zugriff entsprechend einschränken. Die Frage ist noch, inweit man zur Vereinfachung ssh-agent oder auch /usr/bin/screen erlauben darf. Auch kann man für Automatisierungen SSH-Tunnel erlauben oder verbieten.
Vor allem siehst du jedoch welche Person sich überhaupt anmeldet. Auch können SSH-Keys somit besser kontrolliert und somit verworfen werden. Nachteil wäre, dass ein Angriff auf die Zwischenserver evtl. alle Server gefährdet. Daher auf jeden Fall an dieser Stelle Passphrases.

Flynn
Beiträge: 110
Registriert: 15.04.2009 22:00:49
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: SSH - automatisch bannen

Beitrag von Flynn » 06.03.2010 10:37:04

borisknoedel hat geschrieben: Ich merke gerade, dass mein Anspruch für die gegebene Situation einfach zu hoch gesteckt war.
...Sicherheit ist so stark wie das schwächste Glied in der Kette. Bei deinem Vorhaben kannst du für Millionen Euro Sicherheitstechnik holen und die Wahrscheinlichkeit, dass jemand mit minimalen Mitteln trotzdem rein kommt ist immer noch hoch :mrgreen:

Überleg erstmal in wie weit dein Szenario so Sinn macht. Wenn sich ein Script als root einloggen kann, dann läuft was grundlegend falsch. Und sag nicht es gibt keine Alternativen - die gibt es sehr wohl...
So I guess this is where I tell you what I learned - my conclusion, right? Well, my conclusion is: Hate is baggage. Life's too short to be pissed off all the time. It's just not worth it.
American History X

inta
Beiträge: 255
Registriert: 11.05.2005 12:35:50
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: SSH - automatisch bannen

Beitrag von inta » 14.04.2010 20:19:52

Ich wärme das hier einfach nochmal auf.

Wenn man (aus welchen Gründen auch immer) das Login mittels Passwort erlauben muss oder will, dann ist die tally-Methode meiner Auffassung nach effektiver als hier mit Hilfe der Iptables zu blocken. Der Angreifer erzeugt zwar mehr Traffic, aber bei dieser Methode werden selbst korrekte Passwörter abgelehnt, wenn ein falsches vorangegangen ist.

Ich nutze jetzt diese Zeile in /etc/pam.d/sshd:

Code: Alles auswählen

auth required pam_tally2.so lock_time=30
Weiß jemand den genauen Unterschied zwischen tally und tally2? Ich nehme mal an letzteres ist der Nachfolger, aber ich hab im Netz nichts dazu gefunden, was sich konkret geändert hat.

Nach 3 fehlerhaften Loginversuchen wird die Verbindung aktuell geschlossen (das scheint zumindest bei Squeeze standardmäßig so zu sein), beim nächsten Versuch scheint das lock von tally noch aktiv zu sein, bei dem darauf folgenden Versuch kann ich mich wieder einloggen (wobei zumindest seit dem letzten Fehlschlag keine 30 Sekunden vergangen sind). Unterwandert das nicht die gesamte Strategie mit diesem tally-Modul den Angreifer im Glauben zu lassen, er würde gerade tatsächlich Passwörter gegen das System testen?

Danke auf jeden Fall für diesen Tipp, der Ansatz klingt sehr vielversprechend. :)

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Re: SSH - automatisch bannen

Beitrag von mistersixt » 15.04.2010 08:12:52

Beim pam_tally kannst Du auch noch sowas angeben:

Code: Alles auswählen

deny=2 quiet unlock_time=600
Dann kommt keine Meldung der Art "Account temporary locked", es gibt nur 2 Versuche und der Account ist dann für 10 Min. gesperrt.

Gruss, mistersixt.
--
System: Debian Bookworm, 6.5.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 4.0 Ghz., Radeon RX 5700 XT, 16 GB Ram, XFCE

inta
Beiträge: 255
Registriert: 11.05.2005 12:35:50
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: SSH - automatisch bannen

Beitrag von inta » 15.04.2010 09:42:48

Danke, bis auf "quiet" habe ich die Parameter gestern noch gefunden. :)
Quelle: http://www.kernel.org/pub/linux/libs/pa ... ally2.html

Setzen tue ich sie aber eigentlich nur aus einem Grund: In der oben verlinkten Beschreibung steht, dass ein Account dauerhaft gesperrt bleibt, wenn "unlock_time" nicht gesetzt ist. Ich vermute mal, dass dies nur der Fall ist, wenn "deny" tatsächlich angegeben wurde, aber zur Sicherheit setze ich lieber beides. "deny" steht bei mir aktuell allerdings auf 10 und damit recht hoch. Ich bin mir noch unschlüssig, ob ich den Zugriff so schnell wie möglich sperren soll und den Angreifer somit darauf aufmerksam mache, oder ob ich ihn lieber endlos Passwörter probieren lasse, welche alle einem fehlgeschlagenen Versuch folgenden (selbst wenn eines davon stimmen würde) aufgrund der "lock_time" abgelehnt werden.

Antworten