Monitorowanie błędnych prób logowania po SSH

Przeglądając logi serwera natknąłem się ostatnio na wiele błędnych prób logowania po SSH. Dostęp do mojego serwera jest skonfigurowany na logowanie po kluczu, więc nie jest to dla mnie problematyczne, aczkolwiek zawsze warto ulepszać swoje zabezpieczenia oraz wyrabiać dobre praktyki, więc w ramach rozwoju przyjrzałem się bliżej co tam się dzieje…

W logach co kilka minut przewijały się wpisy typu:

/var/log/secure
Dec 16 11:28:54 wombat sshd[7175]: Invalid user debian from 82.66.6.133 port 45216
Dec 16 11:28:54 wombat sshd[7175]: reverse mapping checking getaddrinfo for bas33-1_migr-82-66-6-133.fbx.proxad.net [82.66.6.133] failed - POSSIBLE BREAK-IN ATTEMPT!
Dec 16 11:28:54 wombat sshd[7175]: input_userauth_request: invalid user debian [preauth]
Dec 16 11:28:55 wombat sshd[7175]: Connection closed by 82.66.6.133 port 45216 [preauth]

Można przeglądać logi co trochę i obserwować co się dzieje, ale żeby mieć realny i przejrzysty wgląd w sytuację najlepiej przejrzeć się wykresom, które podsumują sytuację. Dlatego, też utworzyłem dashboard podsumowujący nieudane logowania po SSH wykorzystując do tego platformę New Relic.

Logi można zaprezentować na wykresie wyciągając konkretne wartości z każdego z wpisów. Wymaga to odpowiednio filtrowania oraz parsowania wpisów, które zebrał nam New Relic z pliku /var/log/secure.

Filtrowanie logów

Jeśli chodzi o samo filtrowanie to można zrobić to bardzo prosto, wystarczy ustawić zapytanie NRQL z klauzulą WHERE na przykład:

  • WHERE hostname='nazwa_hosta'
  • WHERE filePath='/var/log/secure'
  • WHERE logtype='linux_secure'

Parsowanie logów

Sytuacja jest bardziej skomplikowana w przypadku parsowania, w przedstawionym na początku fragmencie logów mamy kilka linijek, aczkolwiek najbardziej informacyjna jest pierwsza. Największą trudnością może być zbudowanie odpowiedniego wyrażenia RE2, które to jest wykorzystywane przez funkcję capture umożliwiającą wyciąganie podciągu znaków z atrybutu New Relic. Więcej o funkcji capture oraz składni RE2 możecie poczytać na stronach:

Funkcje capture + RE2

Ja do wyciągnięcia informacji ułożyłem sobie następujące parametry funkcji capture:

  • Filtrowanie po nazwach użytkowników:

    1
    capture(message,r'(.+) Invalid user (?P<user>\S+)*.+') as user
  • Filtrowanie po adresach IPv4:

    1
    capture(message,r'(.+) Invalid user (.+) from (?P<ip>\S+)*.+') as ip
  • Filtrowanie po portach:

    1
    capture(message,r'(.+) Invalid user (.+) from (.+) port (?P<port>\S+)*.+') as port
  • Głowny pattern RE2 dla wpisu o błędnej próbie logowania:

    1
    (.+) Invalid user (?P<user>\S+) from (?P<ip>\S+) port (?P<port>\S+)*

Tabele i wykresy

NRQL dla tabeli podsumowującej:

1
SELECT capture(message,r'(.+) Invalid user (?P<user>\S+)*.+') as user, capture(message,r'(.+) Invalid user (.+) from (?P<ip>\S+)*.+') as ip, capture(message,r'(.+) Invalid user (.+) from (.+) port (?P<port>\S+)*.+') as port FROM Log WHERE message like '% sshd[%]: Invalid user % from % port %' LIMIT MAX

Tworząc z podanych wcześniej funkcji capture oraz zapytań NRQL można stworzyć dashboard dający nam wgląd w przejrzystą historię prób logowań. Dzięki temu mogę w szybki i łatwy sposób zobaczyć ile dokonywano prób włamania się na mój serwer. Efekt końcowy jest według mnie przejrzysty i miły dla oka. A ty drogi czytelniku jak monitorujesz tego typu aktywności? 😄 Napisz w komentarzu.

Źródła:

Monitorowanie błędnych prób logowania po SSH

http://blog.grala.dev/56f4a130-80d7-11ed-b158-157b8d52a22d/

Author

Gracjan Grala

Posted on

2022-12-16

Updated on

2022-12-21

Licensed under

Komentarze

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×