Niebezpieczeństwo!

Trochę informacji dotyczących doświadczeń związanych z bezpieczeństwem mojego serwera.

28.03.2020 21:00 Deuter Chat

To pytanie prawdopodobnie zadaje sobie każda osoba, która zajmowała się kiedykolwiek prowadzeniem własnego serwera internetowego. Oczywiście odpowiedź na to pytanie jest prosta i brzmi: "Nie!" :P Praktycznie nigdy nie można być tego pewnym, ponieważ cały czas ktoś może próbować znaleźć jakąś lukę w bezpieczeństwie.

Tym "kimś" nie koniecznie musi być konkretna osoba. Większość niezabezpieczonych serwerów jest znajdowana przez skrypty "robaki", albo narzędzia do tego służące, które robią to automatycznie. Ja chciałbym opisać kilka przypadków, które zauważyłem podczas prowadzenia mojego serwera z czatem.

Od czasu do czasu staram się z ciekawości przeglądać logi mojego serwera szukając jakichś ciekawych/niepokojących zapytań. Pewnego razu znalazłem zapytanie które idealnie pasowało do tego opisu. Oczywiście wcześniej przeglądając logi też widziałem dziwne zapytania, ale one nie były aż tak niepokojące. Zwykle były to zapytania szukające jakichś znanych słabości popularnych systemów takich jak phpMyAdmin itp. Ja mój projekt pisałem samemu, więc takie rzeczy nie były dla mnie zbyt groźne, bo większość z tych poszukiwanych plików i tak nie istniała na moim serwerze.

Jakie zapytanie było zatem tak intrygujące? Było to jakieś dziwne zapytanie type GET, które zawierało w sobie ewidentne instrukcje, które być może w jakiś sposób miały by się wykonać jeśli serwer byłby na to podatny. Instrukcje zawierały kod, który za pomocą wget miał pobrać plik z jakiegoś serwera, a następnie skopiować go do innej lokalizacji i uruchomić.

Byłem ciekawy co to może być za plik, zatem przygotowałem "bezpieczne" środowiski i sam pobrałem plik podany w instrukcjach. Oczywiście nie byłem na tyle szalony żeby go uruchamiać, ale postanowiłem trochę go poanalizować. Jak się okazało był to wykonywalny plik binarny, spakowany za pomocą jakiegoś open source-owego programu (tak, ktoś zapomniał usunąć string, który jest dodawany do binarki przy pakowaniu XD). Był on przeznaczony na urządzenia z procesorem ARM, więc raczej celem ataku było jakieś urządzenie mobilne/wbudowane jak zakładam. Aczkolwiek to tylko jedna z historii, które mam do napisania.

Kolejną ciekawą rzecz zauważyłem przeglądając pewnego razu logi dotyczące logowania do systemu. Zobaczyłem w nich pełno wpisów o niepowodzeniu autoryzacji użytkownika... Tak naprawdę to autoryzacji masy różnych użytkowników.

Pierwsze co rzuciło mi się w oczy to to, że logowania te były w rzeczywistości próbą logowania na mój serwer poczty e-mail. Ktoś bezczelnie próbował zalogować się testując wszystkie możliwe loginy! Na początku wydawało mi się to trochę dziwne, bo... no wiecie, szukanie hasła buruteforce-m bym jeszcze zrozumiał, ale loginu? Przecież to zajęło by wieki!

Co ciekawe skrypt (bo jakże by inaczej) który to robił, był sprytnie zaprojektowany. Nie wykonywał dużej ilości prób w jednej chwili, ale robił to powoli. Oczywiście serwer ma ochronę DDoS, więc jeśli ktoś wysyłałby za dużo rządań zostałby zablokowany, dlatego też skrypt robił to skrupulatnie, ale powoli. Moje rozwiązanie może nie najbardziej wymyślne, ale działające polegało na zablokowaniu adresów z których wykonywany byłÂ ten powolny atak (który i tak raczej nie miał szansy na powodzenie).

Kolejnym ciekawym przypadkiem, który niedawno odnotowałem, był flooding na moim serwerze do czatu. Ktoś postanowił chyba zrobić sobie żarty i zaczął zakładać pokoje w których wysyłał po 1600 wiadomości w ciągu 1 sekundy! Bardzo jestem ciekawy po co ktoś w sumie to robił, bo nie wiem jaki sens jest w wysyłaniu takiej ilości wiadomości w pustym pokoju do którego i tak nikt inny nie ma dostępu? Cóż, to pytanie pewnie zostanie bez odpowiedzi.

Początkowo w moim czacie nie przewidywałem specjalnych zabezpieczeń na takie sytuacje, ponieważ to zawsze sprawia, że korzystanie z czatu przez zwykłych użytkowników jest bardziej uciążliwe, ale niestety jako obrona przed takimi żartownisiami musiałem wprawadzić ochronę przed floodingiem, więc od teraz jeśli ktoś będzie chciał szybko wysyłać duże ilości wiadomości zostanie po prostu rozłączony.

Jak można zobaczyć nigdy serwer nie jest do końca bezpieczny, ale to raczej było wiadome od dawna. Ja sam czasem zastanawiam się nad sensem niektórych ataków. Pomijam tutaj strikte ataki, które mają na celu przynieść zyski atakującemu (np. przejęcie serwera żeby kopać bitcoin-y). Bardziej zastanawia mnie motyw ataków, które nie wiem w sumie jaki mają cel (np. wyżej wspomniany flooding pustego pokoju?).

Jak widzicie dawno już tu nic nie pisałem, ale postanowiłem się zebrać i coś jednak napisać, więc jeśli ktoś tu w ogóle zagląda, to się (może) zdziwi :P Przy okazji jeśli nie wiesz czym jest DeuterChat możesz przeczytać o nim w poprzednim poście.

To wszystko jak na razie. Postaram się wrzucić coś jeszcze już niedługo. Trzymajcie się! :)