„Allrequestsallowed.com”… Próba włamania?

11

Mam wiele prób na moim (małym, osobistym i absolutnie nieistotnym) serwerze sieciowym, a apache i fail2ban zwykle wykonują swoją pracę poprawnie. Ale martwi mnie wpis w dzienniku:

xx.yy.www.zzz - - [9/Jul/2011:12:42:15 +0100] "GET http://allrequestsallowed.com/?PHPSESSID=5gh6ncjh00043YVMWTW_B%5CFAP HTTP/1.1" 200 432 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"

Problem polega na tym, że odpowiedzią nie był kod 404, lecz 200. Czy to jest ok? Wydaje mi się to dziwne, ale moja wiedza w tej dziedzinie (i wielu innych) jest, delikatnie mówiąc, ograniczona.

luri
źródło
1
Wygląda na to, że nie wolno mi pisać nową odpowiedź, ale okazało wpisu takiego w naszych dziennikach, a my byliśmy w stanie zweryfikować, że to nie było niebezpieczne odtwarzając żądanie z dyni: curl -v http://allrequestsallowed.com/?PHPSESSID=5gh6ncjh00043YVMWTW_B%5CFAP -x www.example.com:80. Domyślna konfiguracja wydaje się zwracać stronę „Witamy w nginx” bez znaczącej zawartości w naszym systemie Ubuntu. Jest to więc odpowiedź 200, ale jest to prosta strona typu catch-all - właściwie nie zastępujemy żądania w innym miejscu ani nic takiego.
Frank Farmer

Odpowiedzi:

12

Po pierwsze, nie wiem, co rzekomo atakujący stara się osiągnąć. Może istnieje skrypt PHP lub wersja PHP podatna na dziwny atak identyfikacyjny sesji, nie wiem. Prawdopodobnie nie masz się czym martwić.

Twój serwer zachowywał się dokładnie tak, jak oczekiwano. 200 jest oczekiwanym kodem w tej konkretnej sytuacji ze względu na to, jak Apache interpretuje przekazywany do niego adres URL.

Po pierwsze, http://allrequestsallowed.comjest traktowany jak zwykły nagłówek „Host:” ( zauważ, że nie sądzę, że jest to określone w RFC, a inne serwery mogą nie interpretować tego w ten sposób, że się myliłem, jest to określone w RFC 2616 w sekcji 5.1. 2, chociaż klienci rzadko używają tej formy. Przepraszam, muszę naprawić implementację serwera HTTP, o której pisałem jakiś czas temu ...).

Teraz prawdopodobnie nie masz witryny o nazwie „allrequestsallowed.com”. Co się stanie, gdy Apache otrzyma Host:nagłówek (lub odpowiednik) dla nazwy hosta, której nie rozpoznaje? Domyślnie wybiera pierwszego wirtualnego hosta. Jest to dobrze zdefiniowane i udokumentowane zachowanie Apache. Niezależnie od tego, jaki jest Twój pierwszy wirtualny host (lub tylko główna konfiguracja serwera, jeśli nie ma żadnych vhostów), niezależnie od tego, jak się nazywa.

Teraz reszta podanego adresu URL składa się z dwóch części - ścieżki /i parametru GET ( ?PHPSESSID...bit).

Teraz ścieżka /powinna być obecna na prawie każdym serwerze WWW. W większości przypadków, mapuje do czegoś podobnego index.html, a może w index.phpskrypcie, choć można przesłonić tego oczywiście.

Jeśli jest mapowany na statyczny plik HTML, absolutnie nic się nie dzieje - zawartość pliku jest zwracana, i to po prostu parametr jest ignorowany. (Zakładając, że nie masz określonych zaawansowanych dyrektyw konfiguracji i prawie na pewno nie masz.)

Z drugiej strony, jeśli jest to jakiś skrypt, PHPSESSIDzmienna zostanie przekazana do skryptu. Jeśli skrypt faktycznie używa tej zmiennej (w tym konkretnym przypadku prawdopodobnie tylko skrypty PHP korzystające z wbudowanej obsługi sesji PHP), jego zachowanie będzie zależeć od zawartości.

Jednak najprawdopodobniej nawet jeśli /zdarzy się, że mapujesz skrypt PHP za pomocą sesji, nic niezwykłego się nie wydarzy. Identyfikator sesji prawdopodobnie i tak nie będzie istniał i albo zostanie zignorowany, albo skrypt wyświetli błąd.

W mało prawdopodobnym przypadku, gdy istnieje identyfikator sesji, osoba atakująca może przypuszczalnie przejąć sesję innej osoby. To byłoby złe, ale tak naprawdę nie jest to luka w zabezpieczeniach sama w sobie - dziura byłaby wszędzie tam, gdzie atakujący uzyskał informacje o identyfikatorze sesji (wąchanie sieci bezprzewodowej jest dobrym kandydatem, jeśli nie używasz HTTPS). Nie byliby w stanie nic zrobić, czego nie mógł zrobić użytkownik, którego sesja pierwotnie była.

Edycja: Dodatkowo „% 5C” wewnątrz SESSIONID odwzorowuje znak odwrotnego ukośnika. To wydaje się być testem na ataki na katalogi na hosty Windows.

Nicholas Knight
źródło
Miałem podobne żądania 404, 500, 403 i 20x na moich uruchomionych serwerach nginxlub lighttpd, a po wysłaniu adresów IP / hostów źródłowych do firmy zajmującej się analizą cybernetyczną potwierdzono, że między innymi próbowano wykorzystać dziury w serwerze . Podobne żądania, jak to określone przez PO, różne hosty. Czy mówisz, że należy je całkowicie zignorować? Ponieważ jeśli są naprawdę zaniepokojeni, mogą zablokować hosta (hosty) iptables.
Thomas Ward
@ The Evil Phoenix: Host w adresie URL nie jest miejscem, z którego pochodzi żądanie, jest to tylko odpowiednik nagłówka „Host:”. Rzeczywisty adres IP klienta, który OP przesłaniał, mógłby zostać zablokowany za pomocą iptables, gdyby chciał, ale jeśli nie zostanie zalany żądaniami, to naprawdę nie ma znaczenia. To, że ktoś próbuje wykorzystać dziurę, nie oznacza, że ​​dziura jest obecna. Zarządzam wieloma serwerami (Linux), które rejestrują wiele dziwnych żądań mających na celu wykorzystanie dziur każdego dnia - większość z nich to dziury w Windows / IIS! To tylko ślepe skanowanie. Jeśli nie otrzyma trafienia, przechodzi do następnego adresu IP.
Nicholas Knight
@The Zło Phoenix: Ponadto, jeśli dziura były obecne, blokowanie adresu IP, który wykorzystać nie byłoby zrobić jeden bit dobra. Twój serwer byłby już zagrożony i nadal byłby narażony na ten sam atak z innych źródeł - i jest wiele źródeł. Każdy system zombie (i jest ich wiele milionów) jest potencjalnym źródłem złośliwych skanów.
Nicholas Knight
Ładne i dokładne wyjaśnienie .... Wielkie dzięki. I przysłonił obrażając IP w przypadku on / ona IP-ego surfes :). My / mapuje na domyślny apache „To działa” (wiem, jak nieprofesjonalne ... ale powiedziałem, że to osobiste, lol). Zakładam więc, że nie muszę nic robić, chyba że ten sam adres IP stanie się problemem, w takim przypadku zablokuję go za pomocą iptables (a nawet hostów.deny?). Dzięki jeszcze raz.
luri
1

Mam wszystko, o co prosiłem, zalogowałem się na ip, który jest używany jako rekord dla wszystkich naszych domen parkingowych.

Moje podejście polega na tym, że ta nazwa hosta jest używana w połączeniu z lokalnym plikiem hosta „atakującego” wskazującym na host docelowy.

Rzeczywisty serwer na 31.44.184.250 służy tylko do obsługi zewnętrznych żądań.

Moja opinia: całkowicie nieszkodliwa. Nie widzę w tym żadnej wartości dodanej, z wyjątkiem rzeczy, które można zrobić z dowolną inną fałszywą nazwą domeny w pliku hosta.

Kajje
źródło