Statistik: Per SSH versuchte Benutzernamen: Raketenzugriffskontrolleur

Vor ein paar Tagen ist mir in einer Diskussion aufgefallen, dass da jemand den Benutzername "pi" in seiner (Raspian?)-Installation belassen hat.

Heute habe ich mal mit PHP und einem schellem Skript nachgesehen, was diesbezüglich wirklich abgeht. Die Nachricht ist:

Ändert die Default-Benutzernamen!

Die folgenden Daten betreffen die letzten 4 Wochen. Ich dürfte lerrdings nur noch wenige Angriffe haben, weil ich etliche, teils sehr große Blöcke (z.B. aus China, Russland, der Türkei, Bulgarien bzw. auch von Rechenzentren ( Microsoft, Amazon, OHV...) und natürlich ganz besonders auffällige IP-Adressbereiche (auch von gewissen, selbst ernannten Marktführern) längst dauerhaft gesperrt habe.

Der (stark gekürzte) Abschnitt mit der Statistik für die versuchten Benutzernamen:

    [pi] => 139
    [admin] => 102
    [student] => 22
    [ubuntu] => 19
    [user] => 16
    [ubnt] => 13
    [oracle] => 12
    [from] => 10
    [debian] => 9
    [guest] => 8
    [tech] => 7
    [avanthi] => 5
    [test] => 5
    [anonymous] => 5
    [vnc] => 5
    [rootadmin] => 4
    [0] => 4
    [1] => 4
    [2] => 4
    [3] => 4
    [4] => 4
    [bdos] => 4
    [smmsp] => 3
    [nagesh] => 3
    [supervisor] => 3
    [Administrator] => 3
    [support] => 3
    [zookeeper] => 3
    [es] => 2
    [kafka] => 2
    [jenkins] => 2
    [jira] => 2
    [zhouh] => 2
    [admin1] => 2
    [hadoop] => 2
    [webadmin] => 2
    [scan] => 2
    [ntps] => 2
    [5] => 2
    [redis] => 2
    [rpm] => 2
    [tit0nich] => 2
    [user3] => 2

Preisträger des Monats ist der Typ, der versuchte, mit dem Benutzername "noligin" (sic!) einzudringen.

Das schnelle Skript:

<?php

$csv=`grep 'Invalid user' /var/log/auth.log.* /var/log/auth.log  | awk '{ print $8";"$10}' | grep -v '^TTY=pts'`;
$perIP_User    = [];
$uniuqeIPs     = [];
$perUser_IP    = [];
$uniuqeUsers   = [];
$UsersAbsolute = [];
$IPsAbsolute   = [];

foreach ( explode( "\n", $csv ) as $line ) {
	
	$line=trim($line);
	if (''==$line) break;
	
	list( $user, $ip) = explode( ';', $line );

	if ( ! isset( $IPsAbsolute[$ip] ) ) {
		$IPsAbsolute[$ip]=1;
	} else {
		$IPsAbsolute[$ip]++;
	}
	
	if ( ! isset( $UsersAbsolute[$user] ) ) {
		$UsersAbsolute[$user]=1;
	} else {
		$UsersAbsolute[$user]++;
	}	

	if ( ! isset( $IPsAbsolute[$ip] )) {
		$IPsAbsolute[$ip]=1;
	} else {
		$IPsAbsolute[$ip]++;
	}

	if ( isset( $uniuqeIPs[$ip] ) ) {
		$uniuqeIPs[$ip]++;		
	} else {
		$uniuqeIPs[$ip]=1;
	}
	
	if ( isset( $uniuqeUsers[$user] ) ) {
		$uniuqeUsers[$user]++;		
	} else {
		$uniuqeUsers[$user]=1;
	}
	
	if ( ! isset ( $perIP_User[$ip] ) ) {
		$perIP_User[$ip] = [];
	}

	if ( ! isset ( $perIP_User[$ip][$user] ) ) {
		$perIP_User[$ip][$user]=1;
	} else {
		$perIP_User[$ip][$user]++;
	}
	
	if ( ! isset ( $perUser_IP[$user] ) ) {
		$perUser_IP[$user] = [];
	}
	if ( ! isset ( $perUser_IP[$user][$ip] ) ) {
		$perUser_IP[$user][$ip]=1;
	} else {
		$perUser_IP[$user][$ip]++;
	}	
}

asort($perIP_User);
asort($uniuqeIPs);
asort($perUser_IP);
asort($uniuqeUsers);
asort($UsersAbsolute);
asort($IPsAbsolute);

echo PHP_EOL.'$UsersAbsolute:'.PHP_EOL;
print_r( array_reverse( $UsersAbsolute ) );

echo PHP_EOL.'$IPsAbsolute:'.PHP_EOL;
print_r( array_reverse( $IPsAbsolute ) );


echo PHP_EOL.'$uniuqeIPs:'.PHP_EOL;
print_r( $uniuqeIPs );

echo PHP_EOL.'$uniuqeUsers:'.PHP_EOL;
print_r( $uniuqeUsers );

echo PHP_EOL.'$perIP_User:'.PHP_EOL;
print_r( $perIP_User );

(Ich hätte auch alles mit dem AWK machen können.)

  1. Hallo,

    Vor ein paar Tagen ist mir in einer Diskussion aufgefallen, dass da jemand den Benutzername "pi" in seiner (Raspian?)-Installation belassen hat.

    ja, das ist der voreingestellte Benutzername von Raspbian. Und wer den beibehält, der verdient's nicht besser.
    Wer allerdings auch noch das voreingestellte Passwort raspberry unverändert lässt, der gehört drei Tage lang erschossen. Mit Katzendreck.

    Heute habe ich mal mit PHP und einem schellem Skript nachgesehen, was diesbezüglich wirklich abgeht. Die Nachricht ist:

    Ändert die Default-Benutzernamen!

    Zusätzlich dazu: Sorgt dafür, dass selbst eingerichtete Büchsen wie etwa ein Raspberry Pi, die man gern mit ssh bedient, wenigstens nur aus dem privaten Netz erreichbar sind und nicht von außerhalb!

    Der (stark gekürzte) Abschnitt mit der Statistik für die versuchten Benutzernamen:

        [...]
    

    Keiner dieser Einträge ist bei mir irgendwo ein gültiger Benutzername (soweit ich weiß).

    Preisträger des Monats ist der Typ, der versuchte, mit dem Benutzername "noligin" (sic!) einzudringen.

    ;-)

    Guten Start ins neue Jahr,
     Martin

    --
    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
    1. Zusätzlich dazu: Sorgt dafür, dass selbst eingerichtete Büchsen wie etwa ein Raspberry Pi, die man gern mit ssh bedient, wenigstens nur aus dem privaten Netz erreichbar sind und nicht von außerhalb!

      Naja. Ich will ja zugreifen. Allerdings weiß ich auch halbwegs genau ich da mache

      1. Hallo,

        Zusätzlich dazu: Sorgt dafür, dass selbst eingerichtete Büchsen wie etwa ein Raspberry Pi, die man gern mit ssh bedient, wenigstens nur aus dem privaten Netz erreichbar sind und nicht von außerhalb!

        Naja. Ich will ja zugreifen.

        natürlich - aber doch nicht "out of the wild", sondern nur aus dem internen, vertrauenswürdigen Netz.

        Allerdings weiß ich auch halbwegs genau ich da mache

        Ich würde meine Maschinen trotz aller Sorgfalt nicht von extern administrierbar machen. Wie leicht geht da mal was schief ...
        Es ist schon Horror genug, dass einige Internet-Provider ihren Kunden einen vorkonfigurierten DSL-Router (z.B. eine Fritzbüx) zur Verfügung stellen, der dem Anbieter den vollen Zugriff auf die Konfiguration erlaubt. Sowas habe ich bisher immer sofort abgestellt.

        So long,
         Martin

        --
        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
  2. Hello,

    ich vermisse da [root].

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. ich vermisse da [root].

      Ich nicht:

      PermitRootLogin prohibit-password
      

      Für alle anderen gilt übrigens:

      PasswordAuthentication no
      #…
      Match Address 192.168.1.0/24
              PasswordAuthentication yes
      
      1. Hello,

        ich vermisse da [root].

        Ich nicht:

        PermitRootLogin prohibit-password
        

        Für alle anderen gilt übrigens:

        PasswordAuthentication no
        #…
        Match Address 192.168.1.0/24
                PasswordAuthentication yes
        

        Das hat aber nichts damit zu tun, dass im auth.log auch Einträge mif [root] auftauchen können.

        Dec 29 06:43:25 bitworks-4309-1 sshd[11437]: Failed password for root from 148.204.211.136 port 57260 ssh2  
        Dec 29 06:43:30 bitworks-4309-1 sshd[11439]: Failed password for root from 192.228.100.249 port 49601 ssh2
        Dec 29 06:43:36 bitworks-4309-1 sshd[11441]: Failed password for invalid user DUP from 192.228.100.249 port 49886 ssh2
        Dec 29 06:43:41 bitworks-4309-1 sshd[11443]: Failed password for root from 192.228.100.249 port 50132 ssh2
        Dec 29 06:46:29 bitworks-4309-1 sshd[11490]: Failed password for root from 197.211.9.62 port 45660 ssh2
        Dec 29 06:49:26 bitworks-4309-1 sshd[11517]: Failed password for invalid user jane from 51.255.161.25 port 57742 ssh2
        Dec 29 06:51:11 bitworks-4309-1 sshd[11555]: Failed password for invalid user dmara from 190.128.158.26 port 9049 ssh2
        Dec 29 06:51:50 bitworks-4309-1 sshd[11557]: Failed password for root from 136.228.161.67 port 46300 ssh2 
        Dec 29 06:51:53 bitworks-4309-1 sshd[11559]: Failed password for root from 139.9.124.204 port 51644 ssh2
        Dec 29 06:52:48 bitworks-4309-1 sshd[11561]: Failed password for invalid user w3master from 118.187.5.37 port 46518 ssh2
        Dec 29 06:53:41 bitworks-4309-1 sshd[11566]: Failed password for invalid user filip from 177.76.215.147 port 47080 ssh2
        Dec 29 06:58:33 bitworks-4309-1 sshd[11609]: Failed password for invalid user fv from 188.165.252.24 port 35562 ssh2                                                                                                Dec 29 07:02:05 bitworks-4309-1 sshd[11653]: Failed password for invalid user seniuk from 85.25.192.141 port 40974 ssh2
        Dec 29 07:10:44 bitworks-4309-1 sshd[11756]: Failed password for invalid user firdau from 149.202.52.221 port 39875 ssh2
        Dec 29 07:11:10 bitworks-4309-1 sshd[11765]: Failed password for invalid user hotlist from 83.238.12.80 port 44666 ssh2
        Dec 29 07:11:58 bitworks-4309-1 sshd[11772]: Failed password for invalid user guard from 203.6.224.84 port 46578 ssh2
        Dec 29 07:20:13 bitworks-4309-1 sshd[11886]: Failed password for invalid user borobia from 122.51.142.251 port 35752 ssh2
        

        Root-Login per Name ist bei uns auch verboten. Trotzdem wird es aber von Hackern versucht.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Es vermag aufzutauchen. Aber ich greppte nach:

          $csv=`grep 'Invalid user'…
          

          Ein Logeintrag lautet wegen

          PermitRootLogin prohibit-password
          

          bei mir aber:

          Dec 31 18:48:55 raspi4 sshd[12920]: Connection closed by authenticating user root 81.xx.xxx.xx port 51932 [preauth]

          1. Übrigens: 102 Versuche mit "root" (dto "admin"). Aber 139 waren es mit "pi"

    2. Heute liegt "root" (insgesamt 923 Versuche in den letzten beiden Wochen) weit vor "pi" (145). Das ist aber das Ergebnis der Bemühungen eines einzelnen "Hackers", dessen Kiddie-Skript nicht begreift, dass für die Anmeldung ein Key und also kein Passwort benötigt wird.

      Ich schau mir jetzt mal an, was für eine Regel fail2ban wohl fehlt um solche Idioten zu blockieren.