Los keyloggers han existido durante mucho tiempo. La finalidad de este tipo de malware es la captura de las teclas presionadas por el usuario que se encuentra infectado y así recabar información crítica, como puede ser credenciales de acceso a diferentes servicios, entre otros. Durante este artículo veremos cómo han evolucionado y de qué forma es posible que sea utilizado con fines maliciosos sin requerir la instalación de los mismos en el sistema de la potencial víctima. El código malicioso particular que se tratará en este post es detectado por ESET NOD32 Antivirus como JS/Agent.NGL.
Anteriormente, los keyloggers infectaban el sistema de la víctima y comenzaban a capturar las teclas presionadas del usuario con el objetivo de capturar credenciales e información crítica. Asimismo, para enviar la información al ciberdelincuente, generalmente se optaba por el envío de correos electrónicos cada un cierto período de tiempo. De esta forma, el atacante recopilaba la información necesaria para analizarla.
Existieron diferentes keyloggers cada vez más complejos que incluso captaban los eventos del mouse. De esta forma compilaban información que el usuario ingresaba a través del teclado y las coordenadas de la pantalla en donde habían hecho clic. Algunos keylogger obtenían capturas de la pantalla cada vez que la víctima hacía clic con el mouse. El objetivo de este comportamiento era el de capturar las contraseñas que la víctima ingresaba en los teclados virtuales de las entidades bancarias.
Actualmente, existen otro tipo de keyloggers. En este caso, estaremos analizando uno que ya no necesita instalación. Lo único requerido es poseer una navegador (actualmente es uno de los tipos de aplicaciones más utilizados) y Javascript habilitado. De esta forma, si en un sitio existen las etiquetas <script></script> que ejecuten un script malicioso, el keylogger funcionará a partir del ingreso al sitio web. Específicamente, en la siguiente captura puede visualizarse la llamada al script “js” que captura los eventos del teclado:
Analizando el propio script “js”, se puede observar el agregado de los eventos del teclado, entre los que se encuentran “Keypress” y “Keydown”, entre otros. Esto puede visualizarse en la siguiente captura:
De esta forma se capturan todos los eventos del teclado, y además se proveen ciertas funciones para generar el documento de captura más ordenado. Por ejemplo, en la siguiente función evalúa el presionado de la tecla <ENTER> para separar las capturas en el documento generado. Además, se puede ver la dirección IP del servidor remoto donde se aloja el script:
Cabe destacar que a diferencia de aquellos keyloggers que son instalados en el sistema, este sólo captura los eventos del teclado que tengan el foco sobre la página web. En otras palabras, si se saca el foco del navegador o se cambia de pestaña, aquellas teclas presionadas en ese contexto no serán capturadas, por lo tanto, el alcance de este keylogger es menor a aquél que infecta el sistema.
A pesar del menor alcance, este tipo de código malicioso puede capturar información crítica. Si un ciberdelincuente logra inyectar el código que llame al script “js” alojado en un servidor remoto, podría capturar todos los datos que ingrese la potencial víctima. En otras palabras es posible que un atacante inserte código en un sitio legítimo en aquellas páginas web que contengan formularios de acceso a algún servicio. De esta forma, cuando la víctima ingresa tanto el nombre de usuario como la contraseña, estas son capturadas previo al propio acceso. De esta forma, con que un ciberdelincuente pueda inyectar el código en un sitio web, sería capaz de obtener credenciales.
A continuación se especifica un panel de control que contiene el script y el archivo generado que ve el atacante. Como puede apreciarse en la captura, además, se obtiene información sobre el sistema de la víctima, partir de código en Javascript:
Finalmente, es recomendable que todos los usuarios cuenten con un software de protección antivirus con capacidad de detección proactiva para estar protegidos frente a esta amenaza. De esta forma, el código en Javascript será bloqueado previo a que comience a capturar los datos del usuario.
Fernando Catoira
Analista de Seguridad