bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Lesenswerte Artikel, Anleitungen und Diskussionen
matzb
Posts: 14
Joined: 2004-06-24 13:21

bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by matzb » 2006-01-10 17:31

Hallo zusammen,

auf unserem Server verbuchen wir täglichen einige brute force Attacken mit max. 2000 Anmeldeversuchen. Früher waren das mal 10 oder 15 Anmeldeversuche, doch mittlerweile...

Ich möchte gerne, dass die IP des Versuchenden bei 3 erfolglosen Versuchen für eine gewisse Zeit gesperrt wird. Könnt Ihr mir bitte sagen, wie ich dies bewerkstellige?

RedHat 9
Plesk 7

Hier ein Logwatch Auszug:

################### LogWatch 4.3.1 (01/13/03) ####################
Processing Initiated: Mon Jan 9 04:02:03 2006
Date Range Processed: yesterday
Detail Level of Output: 0
Logfiles for Host: XXXXXXXXXXXXXXXXXX
################################################################

--------------------- pam_unix Begin ------------------------

sshd:
Invalid Users:
Unknown Account: 777 Time(s)
Authentication Failures:
news (d-ip-129-15-78-56.cs.ou.edu ): 1 Time(s)
games (d-ip-129-15-78-56.cs.ou.edu ): 1 Time(s)
unknown (d-ip-129-15-78-56.cs.ou.edu ): 777 Time(s)
mail (d-ip-129-15-78-56.cs.ou.edu ): 1 Time(s)


---------------------- pam_unix End -------------------------

--------------------- SSHD Begin ------------------------


Failed logins from these:
1/password from 129.15.78.56: 1 Time(s)
2005/password from 129.15.78.56: 1 Time(s)
20admin/password from 129.15.78.56: 1 Time(s)
20info/password from 129.15.78.56: 1 Time(s)
20jobs/password from 129.15.78.56: 1 Time(s)
20mail/password from 129.15.78.56: 1 Time(s)
20support/password from 129.15.78.56: 1 Time(s)
a.../password from 129.15.78.56: 1 Time(s)
aaa/password from 129.15.78.56: 1 Time(s)
aabusiness/password from 129.15.78.56: 1 Time(s)
aahelp/password from 129.15.78.56: 1 Time(s)
aai/password from 129.15.78.56: 1 Time(s)
aaron/password from 129.15.78.56: 1 Time(s)
abliss/password from 129.15.78.56: 1 Time(s)
abraham/password from 129.15.78.56: 1 Time(s)
absolute/password from 129.15.78.56: 1 Time(s)
abundant/password from 129.15.78.56: 1 Time(s)
abuse/password from 129.15.78.56: 1 Time(s)
access/password from 129.15.78.56: 1 Time(s)
accompong/password from 129.15.78.56: 1 Time(s)
account/password from 129.15.78.56: 1 Time(s)
accounting/password from 129.15.78.56: 1 Time(s)
accounts/password from 129.15.78.56: 1 Time(s)
accountservices/password from 129.15.78.56: 1 Time(s)
accoutn/password from 129.15.78.56: 1 Time(s)
ace/password from 129.15.78.56: 1 Time(s)
achille/password from 129.15.78.56: 1 Time(s)
acosialls/password from 129.15.78.56: 1 Time(s)
action/password from 129.15.78.56: 1 Time(s)


... usw., usw.

Für Hilfe/Tipps bin ich sehr dankbar

Viele Grüße

matzb

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Joe User » 2006-01-10 17:40

[
delthread +1d
]

Nutze bitte die Suchfunktion, das Thema haben wir im letzten Jahr oft genug diskutiert.
Last edited by Joe User on 2006-01-11 12:32, edited 1 time in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

matzb
Posts: 14
Joined: 2004-06-24 13:21

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by matzb » 2006-01-10 17:51

Wäre "snort" eine kluge Wahl für meine weitere Recherche hier im Forum?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Joe User » 2006-01-10 19:07

PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

juergen
Posts: 133
Joined: 2004-03-30 14:44

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by juergen » 2006-01-11 00:45

Falls dein sshd mit tcp-wrappers Unterstütung kommt, kannst du dir mit einem gut konfigurierten host access control file so ziemlich alle Loginversuche ersparen:

man 5 hosts_access

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by daemotron » 2006-01-11 11:02


captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-11 12:07

Noch schöner finde ich den passenden Patch für die OpenSSH-Sourcen:

Code: Select all

--- auth-passwd.c	Sun Aug 28 17:22:46 2005
+++ auth-passwd.me	Sun Aug 28 17:23:05 2005
@@ -87,6 +87,19 @@
 		/* Fall back to ordinary passwd authentication. */
 	}
 #endif
+	/* if the user id is invalid sleep for 30 seconds. While this could be annoying for interactive users. */
+	if (!authctxt->valid){
+		syslog(3,"BE:sshd invalid user:%sn",pw->pw_name);
+		sleep(30);
+	}
+
+	/* if someone tries to connect as the same username and password, we dont allow it, and log it, with a nice delay. */
+       if (!strcmp(pw->pw_name,password)){
+	        syslog(3,"BE:sshd Username:%s tried with same passwordn",pw->pw_name);
+       	sleep(30);
+        	ok = 0;
+        }
+
 	return (sys_auth_passwd(authctxt, password) && ok);
 }
 
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

lord_pinhead
RSAC
Posts: 830
Joined: 2004-04-26 15:57

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by lord_pinhead » 2006-01-11 15:41

Glaub den Patch werd ich heut nachmittag mal testen, thx CC

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-11 15:47

In dem Fall schau dir direkt mal den aktuellen CVS-HEAD an. Die neuen Tunneling-Möglichkeiten sind der Knaller. OpenVPN und Co. willst du danach nur noch für "echte" Sachen benutzen. ;)

EDIT: Hier ist dann auch der passende Patch für die aktuellen OpenSSH-Versionen:

Code: Select all

--- auth-passwd.c.orig  2005-07-26 13:54:12.000000000 +0200
+++ auth-passwd.c       2006-01-11 16:59:54.732522830 +0100
@@ -116,6 +116,17 @@
        result = sys_auth_passwd(authctxt, password);
        if (authctxt->force_pwchange)
                disable_forwarding();
+        /* if the user id is invalid sleep for 30 seconds. While this could be annoying for interactive users. */        if (!authctxt->valid){
+            syslog(3,"Invalid user:%sn",pw->pw_name);
+            sleep(30);
+       }
+
+        /* if someone tries to connect as the same username and password, we dont allow it, and log it, with a nice delay. */
+        if (!strcmp(pw->pw_name,password)){
+            syslog(3,"Username:%s tried with same passwordn",pw->pw_name);
+            sleep(30);
+            ok = 0;
+        }
        return (result && ok);
 }

DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by alexander newald » 2006-01-11 23:47

Wobei ich mir mit dem Patch vorstellen könnte, dass man damit den SSHD plattmachen kann - Werde ich mal testen...

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-12 07:29

Dann bin ich mal gespannt auf deine Ergebnisse. ;)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by alexander newald » 2006-01-12 15:25

Wenn man sich versucht anzumelden und dabei eine UserID verwendet, die es nicht gibt, bleibt ein SSH (bzw. 2) Prozess zurück, auch wenn man die Verbindung schon wieder abgebrochen hat:

Code: Select all

1007     31228  0.0  0.1  2576  804 ?        S    Jan11   0:00 /home/alexander/temp/sbin/sshd
1007     31378  4.2  0.2  3948 1276 ?        S    15:14   0:00  _ sshd: unknown [priv]
1007     31379  2.7  0.2  3952 1276 ?        S    15:14   0:00      _ sshd: unknown [net]
In 30 Sekunden hat man da schnell die Prozesstabelle zugehauen.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-12 15:48

Dafür gibt's dann wiederum die MaxStartup-Funktion des sshd. Damit wäre das schlimmste, das passieren kann, dass neue Anmeldungen via SSH nicht mehr möglich sind. Spätestens durch eine serielle Konsole ist aber auch das kein Problem mehr.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Joe User » 2006-01-12 15:54

CaptainCrunch wrote:Damit wäre das schlimmste, das passieren kann, dass neue Anmeldungen via SSH nicht mehr möglich sind.
Was einem SelfDOS gleichkommt...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-12 16:02

Richtig, daher hatte ich ja auf die Konsole hingewiesen. ;) Whatever, ich find's ne nette Spielerei.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Joe User » 2006-01-12 16:22

CaptainCrunch wrote:Whatever, ich find's ne nette Spielerei.
ACK, sofern man mindestens eine Zugriffsalternative hat. Die Gleiche Funktion wurde aber beispielsweise auch in der aktuellen Version von phpBB (2.0.19) integriert und es würde Dir sicherlich nicht gefallen, wenn ich mal eben Deinen RF-Account per Bot lahmlegen würde ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

lord_pinhead
RSAC
Posts: 830
Joined: 2004-04-26 15:57

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by lord_pinhead » 2006-01-12 16:26

LOL, mit ein einfachen Script killst du jemanden seinen Zugang. Mal die Sourcen durchsuchen ob sich nicht noch der Aufruf findet zum Beenden, nicht jeder hat ne Konsole.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-12 18:52

<rumspinnerei>
Alternativ ließe sich ein solche speziell gepatchter sshd ja ausschließlich auf Port 22 betreiben, um sich und anderen (durch Tarpitting) die Bots und Kiddies etwas besser vom Hals zu halten. Stattdessen läuft dann ein per Portknocking geschützter weiterer SSH-Daemon auf einem anderen Port (wie wär's mit 23? ;) ). :twisted:
</rumspinnerei>

Ich weiß, ich klingt fast schon so wie die ganzen "leg den sshd auf einen anderen Port"-Poster, aber irgendwie finde ich die Idee ganz lustig. ;)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Roger Wilco » 2006-01-12 19:37

Teergrubing ist doch langweilig. Schreib doch einfach ein nettes Modul für mwcollect oder honeyd. Das macht mehr Spass. ;)

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Joe User » 2006-01-12 19:38

CaptainCrunch wrote:<rumspinnerei>
Das ist IMHO eine der sinnvollesten Anwendungsmöglichkeiten dieses Features. BTW: Ist das Feature ohne Patchen deaktivierbar?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-12 23:05

Was genau meinst du mit dem "sinnvollsten Feature"? Das rumspinnen? ;)

Ohne patchen der Sourcen ist die Sache bislang nicht zu deaktivieren, da der Patch bislang mehr oder weniger aus Langeweile heraus enstanden ist. Sofern Interesse bestünde, würde ich das mal zum Anlass nehmen, meine kümmerlichen C-Kenntnisse wieder auf Vordermann zu bringen und das z.B. als Option (z.B. per sshd_config) einzubringen.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Roger Wilco » 2006-01-13 00:10

Ich habe mich mal an dem Patch versucht und eine Option (TarpitDelay) für die sshd_config hinzugefügt. Default ist ein Wert von 0, was die Teergrube deaktiviert. Alle Werte >0 lassen den Client für die eingestellte Anzahl Sekunden in der Teergrube. Das Problem mit dem möglichen DoS besteht immer noch. Da könnte man evtl. noch eine Abfrage einführen, dass immer mind. 1 Prozess "frei" ist, wenn Clients in der Teergrube hängen.

Code: Select all

diff -u openssh-4.2p1/auth-passwd.c openssh-4.2p1-RW/auth-passwd.c
--- openssh-4.2p1/auth-passwd.c 2005-07-26 13:54:12.000000000 +0200
+++ openssh-4.2p1-RW/auth-passwd.c      2006-01-12 23:54:07.878456500 +0100
@@ -116,6 +116,25 @@
        result = sys_auth_passwd(authctxt, password);
        if (authctxt->force_pwchange)
                disable_forwarding();
+
+       if (options.tarpit_delay > 0)
+       {
+               /* if the user id is invalid sleep for 30 seconds. While this could be annoying for interactive users. */
+               if (!authctxt->valid){
+                       logit("Invalid user:%s",pw->pw_name);
+                       logit("Tarpitting client for %i seconds",options.tarpit_delay);
+                       sleep(options.tarpit_delay);
+               }
+
+               /* if someone tries to connect as the same username and password, we dont allow it, and log it, with a nice delay. */
+               if (!strcmp(pw->pw_name,password)){
+                       logit("Username:%s tried with same password",pw->pw_name);
+                       logit("Tarpitting client for %i seconds",options.tarpit_delay);
+                       sleep(options.tarpit_delay);
+                       ok = 0;
+               }
+       }
+
        return (result && ok);
 }
diff -u openssh-4.2p1/servconf.c openssh-4.2p1-RW/servconf.c
--- openssh-4.2p1/servconf.c    2005-08-12 14:11:37.000000000 +0200
+++ openssh-4.2p1-RW/servconf.c 2006-01-12 23:34:37.483835250 +0100
@@ -49,6 +49,7 @@
        options->server_key_bits = -1;
        options->login_grace_time = -1;
        options->key_regeneration_time = -1;
+       options->tarpit_delay = -1;
        options->permit_root_login = PERMIT_NOT_SET;
        options->ignore_rhosts = -1;
        options->ignore_user_known_hosts = -1;
@@ -140,6 +141,8 @@
                options->login_grace_time = 120;
        if (options->key_regeneration_time == -1)
                options->key_regeneration_time = 3600;
+       if (options->tarpit_delay == -1)
+               options->tarpit_delay = 0;
        if (options->permit_root_login == PERMIT_NOT_SET)
                options->permit_root_login = PERMIT_YES;
        if (options->ignore_rhosts == -1)
@@ -271,7 +274,7 @@
        sHostbasedUsesNameFromPacketOnly, sClientAliveInterval,
        sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
        sGssAuthentication, sGssCleanupCreds, sAcceptEnv,
-       sUsePrivilegeSeparation,
+       sUsePrivilegeSeparation, sTarpitDelay,
        sDeprecated, sUnsupported
 } ServerOpCodes;

@@ -295,6 +298,7 @@
        { "serverkeybits", sServerKeyBits },
        { "logingracetime", sLoginGraceTime },
        { "keyregenerationinterval", sKeyRegenerationTime },
+       { "tarpitdelay", sTarpitDelay },
        { "permitrootlogin", sPermitRootLogin },
        { "syslogfacility", sLogFacility },
        { "loglevel", sLogLevel },
@@ -512,6 +516,10 @@
                intptr = &options->key_regeneration_time;
                goto parse_time;

+       case sTarpitDelay:
+               intptr = &options->tarpit_delay;
+               goto parse_time;
+
        case sListenAddress:
                arg = strdelim(&cp);
                if (arg == NULL || *arg == '\0')
diff -u openssh-4.2p1/servconf.h openssh-4.2p1-RW/servconf.h
--- openssh-4.2p1/servconf.h    2005-01-20 00:57:56.000000000 +0100
+++ openssh-4.2p1-RW/servconf.h 2006-01-12 23:31:26.439895750 +0100
@@ -51,6 +51,7 @@
        int     login_grace_time;       /* Disconnect if no auth in this time
                                         * (sec). */
        int     key_regeneration_time;  /* Server key lifetime (seconds). */
+       int     tarpit_delay;   /* Delay for tarpit (seconds). */
        int     permit_root_login;      /* PERMIT_*, see above */
        int     ignore_rhosts;  /* Ignore .rhosts and .shosts. */
        int     ignore_user_known_hosts;        /* Ignore ~/.ssh/known_hosts
Disclaimer: Der Patch funktioniert bei mir. Von der Nutzung in Produktivsystemen rate ich jedoch nachdrücklich ab, er ist nur eine Spielerei. Der Patch könnte den sshd dazu bringen, deinen Server niederzubrennen, hässliche Mails an deine Liebsten zu schicken und dein erstgeborenes Kind dem Teufel opfern.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by captaincrunch » 2006-01-13 02:57

Spassbremse. ;)

Sieht doch prima aus, werde ich später direkt mal austesten, und mich dann immerhin wenigstens mal an die Abfrage begeben.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by Roger Wilco » 2006-01-13 10:35

CaptainCrunch wrote:Spassbremse. ;)
Spätzünder. :P

matzb
Posts: 14
Joined: 2004-06-24 13:21

Re: bei erfolglosen ssh Anmeldungen ip für x Minuten sperren

Post by matzb » 2006-01-13 12:14

Ich freue mich mit meiner Frage zu solch amüsantem Austausch und gepatche geführt zu haben.

@ Joe User: Vielen Dank für die Links. Alle drei sehr informativ.
Auch den anderen vielen Dank für die Kreativität.

Bei allen Vorschlägen muss ich entweder Python aktualisieren oder Ip-Tables aktualisieren oder module nachinstallieren. Gepaart mit überdeutlichen Disclaimern unter den Scripten ist das schon ein gewisses Hindernis.

Gibt es nicht einfach eine Confdatei, in der ich ein paar Werte setze und schon läuft's?

Im Stile von:
Timeout=5M
Logins=3

Da muss es doch irgendeine Standardsoftware geben, die bereits in jeder Distribution integriert ist oder?

Alternativ könnt Ihr mir jetzt den Gnadenstoß geben und sagen nein, das ist klickibunti, wer keine Ahnung hat sollte sich keinen Root-Server anschaffen, Du musst sowieso Deine Kiste aktuell halten, etc...
Das wird mir aber nicht helfen, Euch aber vielleicht amüsieren.

:lol:

Spass beiseite.
Standardsoftware?