Statistik: Per SSH versuchte Benutzernamen: Raketenzugriffskontrolleur

Beitrag lesen

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.)