Ständig Login Versuche mit erfundenen Usernames

Rund um die Sicherheit des Systems und die Applikationen
web-gear
Posts: 59
Joined: 2003-03-15 00:25

Ständig Login Versuche mit erfundenen Usernames

Post by web-gear » 2005-02-01 18:13

Hallo,

mir sind heute einige Einträge in meiner /var/log/messages Datei aufgefallen, die mir nicht gerade gefallen:
Feb 1 11:08:52 linux sshd[23898]: Invalid user magic from ::ffff:69.10.152.93
Feb 1 11:08:55 linux sshd[23900]: Invalid user lion from ::ffff:69.10.152.93
Feb 1 11:08:58 linux sshd[23902]: Invalid user david from ::ffff:69.10.152.93
Feb 1 11:08:59 linux sshd[23907]: Invalid user jason from ::ffff:69.10.152.93
Feb 1 11:09:01 linux sshd[23909]: Invalid user ben from ::ffff:69.10.152.93
Feb 1 11:09:02 linux sshd[23912]: Invalid user carmen from ::ffff:69.10.152.93
Feb 1 11:09:04 linux sshd[23914]: Invalid user justin from ::ffff:69.10.152.93
Feb 1 11:09:06 linux sshd[23916]: Invalid user charlie from ::ffff:69.10.152.93
Feb 1 11:09:07 linux sshd[23919]: Invalid user steven from ::ffff:69.10.152.93
Feb 1 11:09:09 linux sshd[23923]: Invalid user brandon from ::ffff:69.10.152.93
Feb 1 11:09:10 linux sshd[23929]: Invalid user brian from ::ffff:69.10.152.93
Feb 1 11:09:12 linux sshd[23931]: Invalid user stephen from ::ffff:69.10.152.93
Feb 1 11:09:14 linux sshd[23933]: Invalid user william from ::ffff:69.10.152.93
Feb 1 11:09:16 linux sshd[23935]: Invalid user angel from ::ffff:69.10.152.93
Das ist nur ein kleiner Ausschnitt. Die IP 69.10.152.93 konnte ich auf England lokalisieren, ebenfalls sehr ungewöhnlich da dies Daten auf meinem Server nur für den deutschsprachigen Raum interessant sein dürften. Das muss natürlich gar nichts heißen. Es gibt auch Versuche von anderen IP-Adressen, also bestimmte IP's zu blocken würde nichts bringen.

Ich vermute stark, dass jemand mit irgendeinem Tool versucht, Zugang zu meinem Server zu erlangen.
Bevor der Angreifer vielleicht noch ärgerliche Tools auffährt, möchte ich versuchen, das ganze möglich rigoros zu unterdrücken.

Ich habe als Betriebssystem SuSE 9.2. Ich würde den SSH Zugang natürlich selbst gerne noch weiternutzen. Ansonsten benötige ich auf dem Rechner nur noch einen Port für den Webserver und evtl. einen für den Nameserver.

Hat hier vielleicht jemand eine Idee, was ich machen könnte? Ist es z.B. möglich, dass ich SSH unter einem anderen Port laufen lasse und Port 22 schließe? Oder gibt es da bessere Lösungen?

Im Moment bin ich ziemlich ratlos, da ich nicht weiß wie ich die Situation einschätzen soll.

Ã?ber jegliche Ratschläge wäre ich sehr dankbar.

Vielen, vielen Dank schon im Voraus!

MfG
Hermann

h0nig
Posts: 51
Joined: 2004-07-14 17:03
Location: /dev/null

Re: Ständig Login Versuche mit erfundenen Usernames

Post by h0nig » 2005-02-01 19:11

iptables restriction
ssh port umlegen
vll ssh keys benutzen

chris76
Moderator
Moderator
Posts: 1878
Joined: 2003-06-27 14:37
Location: Germering

Re: Ständig Login Versuche mit erfundenen Usernames

Post by chris76 » 2005-02-01 19:14

web-gear wrote:Hat hier vielleicht jemand eine Idee, was ich machen könnte? Ist es z.B. möglich, dass ich SSH unter einem anderen Port laufen lasse und Port 22 schließe? Oder gibt es da bessere Lösungen?
h0nig wrote:ssh port umlegen
Davon halte ich nichts, wenn es wirklich einer auf dich geziel absieht, findet er den sshd auch auf nem anderen Port.
Wie sagt der CaptainCrunch immer so schön, "Security by obscurity" nützt nix.

IMHO die Authentifizierung umstellen das du dich mit key authentifizierst und gut isses.
Gruß Christian

BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error

ffl
Userprojekt
Userprojekt
Posts: 269
Joined: 2002-10-23 08:28
Location: Karlsruhe

Re: Ständig Login Versuche mit erfundenen Usernames

Post by ffl » 2005-02-01 19:15

Security by obscurity :( (macht man nicht)

kuntho
Posts: 149
Joined: 2004-10-27 14:22
Location: Küps

Re: Ständig Login Versuche mit erfundenen Usernames

Post by kuntho » 2005-02-01 19:23

Vielleicht hilft Dir das hier weiter:

http://www.rootforum.org/forum/viewtopic.php?t=31784

Hab den Skript von Alexander Newald am Laufen und bin sehr zufrieden damit.

smurge
Posts: 8
Joined: 2005-02-26 10:50

SSH-Patch

Post by smurge » 2005-02-26 14:10

Hi,

eine andere Möglichkeit, die ebenfalls auf Security by Obscurity basiert, aber vielleicht etwas weniger auffällig ist:

- Bisherigen SSH-Daemon auf anderen Port verlegen
- Zusätzlichen SSH-Daemon auf Port 22 mit Option "DenyUsers *".

Wer dann Deinen Port 22 abklopft und glaubt, dort den Eingang vor sich zu haben, wird generell abgeblockt, auch, wenn das Passwort stimmt.

Natürlich hilft Dir auch das nicht weiter, wenn der "echte" SSH-Port durch einen Scan gefunden wurde, aber das Risiko sinkt etwas, und während sich der Angreifer auf Port 22 austobt und Log-Einträge hageln, kannst Du ggf. schon Gegenmaßnahmen einleiten.

Ich habe dieser Tage einen OpenSSH-Patch geschrieben, der den SSHd um eine Kommandozeilenoption "-T" hinzufügt, die genau das auch ohne Config-Parameter macht, aber ob der angenommen wird, ist noch fragwürdig.

SSH-Brute-Force-Angriffe sollte man m.A.n. übrigens melden. Zum Beispiel dem Provider (Strato/1&1/...), bei dem der Server im RZ steht. Oft sind die Kisten, von denen die Angriffe ausgehen, selbst nur gehackt worden.

niemo
Posts: 5
Joined: 2002-06-10 10:39

Re: Ständig Login Versuche mit erfundenen Usernames

Post by niemo » 2005-03-13 15:59

Ich habe dafür das Script von Alexander Newald (gefunden bei Google: http://linux.newald.de/downloads/check_logins) etwas modifiziert, so dass es die IP für alle Zugriffe auf den Server für 5 Minuten sperrt. Angepasst auf Strato Rootserver:

Ablegen in /root und Cron jede Minute:

Code: Select all

#!/usr/bin/perl
#
# Check bad login attemps
# Original by Alexander Newald 2004

my %config = ();

# Config settings

$config{"logfile"} = "/var/log/messages";                       # Logfile
$config{"datadir"} = "/root/.check_ips";                        # Store pos in this file
$config{"posfile"} = "/root/.check_ips/pos";                    # Store pos in this file
$config{"statdir"} = "/root/.check_ips/ip_block";               # Store ips in this dir
$config{"timeout"} = 300;                                       # Free again if no bad attemps after this sec
$config{"whitelist"} = "127.0.0.1";                             # Never block this ip
$config{"min_failed"} = 3;                                      # Failed login attemps


# System settings
my $iptables = "/usr/sbin/iptables";

# Check if all is setup
if (!-d $config{"datadir"}) { mkdir $config{"datadir"}; }
if (!-d $config{"datadir"}) { die "Data dir ".$config{"datadir"}." could not be created."; }

if (!-d $config{"statdir"}) { mkdir $config{"statdir"}; }
if (!-d $config{"statdir"}) { die "Config dir ".$config{"statdir"}." could not be created."; }


# Set some vars
my %last = ();
my %dat = ();
my $file = $config{"logfile"};
my $posfile = $config{"posfile"};


# Get old logfile status
$pos = (stat($file))[7];
open(FILE,"<$posfile");
while(<FILE>) { chomp($oldpos = $_); }
close(FILE);
if ($oldpos > $pos) { $oldpos = 0; }
$pos = $oldpos;


# Main Routine
open(FILE,"<$file");
seek(FILE,$pos,0);
while(<FILE>) {
        chomp($tmp = $_);
        $tmp =~ s/[t ]{1,}/ /g;
        @tmp = split(/ /,$tmp);
        my $date = $tmp[0]." ".$tmp[1]." ".$tmp[2];
        my $host = $tmp[3];
        my $client = undef;
        if ( ($tmp[5] eq "Failed") and ($tmp[6] eq "password") and ($tmp[8] eq "illegal") ) {
                $client = $tmp[12];
                $client = substr($client,rindex($client,":")+1,length($client)-rindex($client,":")-1);
                $user = $tmp[10];
        }
        if ( ($tmp[5] eq "Illegal") and ($tmp[6] eq "user") ) {
                $client = $tmp[9];
                $client = substr($client,rindex($client,":")+1,length($client)-rindex($client,":")-1);
                $user = $tmp[7];
        }
        if ( ($tmp[5] eq "Failed") and ($tmp[6] eq "password") and ($tmp[8] ne "illegal") ) {
                $client = $tmp[10];
                $client = substr($client,rindex($client,":")+1,length($client)-rindex($client,":")-1);
                $user = $tmp[8];
        }
        if ( ($tmp[5] eq "Received") and ($tmp[6] eq "disconnect") and ($tmp[10] eq "No") and ($tmp[11] eq "supported") and ($tmp[12] eq "authentication") ) {
                $client = $tmp[8];
                $client =~s/[^d.]//g;
                $user = '-unknown-';
        }

        if ($client) {
                $dat{$client}++;
                $last{$client} = time;
        }
}

$pos = tell(FILE);

close(FILE);
open(FILE,">$posfile");
print FILE "$posn";
close(FILE);


#
# Block / unblock
#

my $statdir = $config{"statdir"};
my @ips = local_filelist($statdir);
foreach my $ip (@ips) {
        if (!$dat{$ip}) {
                if ( time - (stat("$statdir/$ip"))[9] > $config{"timeout"} ) {
                        print "Freigabe von $ipn";
                        system("$iptables -D INPUT -s $ip -j DROP");
                        unlink "$statdir/$ip";
                        $dat{$ip} = undef;
                        $last{$ip} = undef;
                }
        }
}


foreach my $ip (keys %last) {
        if (time - $last{$ip} > $config{"timeout"}) {
                $dat{$ip} = undef;
                $last{$ip} = undef;
        }
}


foreach my $ip (keys %dat) {
        my $flag = 0;
        if ($dat{$ip}) {
                if (!-e "$statdir/$ip") {
                        if ($dat{$ip} >= $config{"min_failed"}) {
                                print "Sperre von $ipn";
                                system("$iptables -I INPUT -s $ip -j DROP");
                                open(FILE,">$statdir/$ip");
                                print FILE "n";
                                close(FILE);
                } else {
                        $flag = 1;
                }
        }

        if ($flag) {
                if ($ip ne $config{"whitelist"}) {
                        open(FILE,">$statdir/$ip");
                        print FILE "n";
                        close(FILE);
                } else {
                        print "$ip nicht gesperrt (Whitelist)n";
                }
        }
}




sub local_filelist {

        #
        # Get a local filesystem dir list and return this as an array
        #

        my $curdir = $_[0];
        my @dirs = ();
        opendir(TMPDIRLIST,"$curdir");
        while (defined($_=readdir(TMPDIRLIST))) {
                if ((!-d "$curdir/$_") and ($_ ne ".") and ($_ ne "..")) {
                        push(@dirs,$_);
                        }
                }
        return @dirs;
        }
}


tcs
Posts: 107
Joined: 2003-11-16 12:05
Location: Woodcastle

Re: Ständig Login Versuche mit erfundenen Usernames

Post by tcs » 2005-03-14 13:16


web-gear
Posts: 59
Joined: 2003-03-15 00:25

Re: Ständig Login Versuche mit erfundenen Usernames

Post by web-gear » 2005-03-23 10:54

Danke für alle Tipps!
Ich denke das wird für mich am besten geeignet sein. Ich habe das bereits erfolgreich unter SuSE Linux 9.1 durchgeführt. Unter 9.2 gibt es leider Schwierigkeiten. Ich habe dazu einen bereits bestehenden Thread gefunden:
http://www.rootforum.org/forum/viewtop ... 843#218843

MfG
Hermann

ticool
Posts: 37
Joined: 2002-08-20 18:34
Location: Hamburg

Re: Ständig Login Versuche mit erfundenen Usernames

Post by ticool » 2005-03-26 14:54

Ich hatte die selben Probleme, SSH port auf irgendeinen exotischen verlegt und schon bin ich der einziege, der per SSH auf den Server möchte ;)