Español | English
rss facebook linkedin Twitter

Los cinco y el misterio de la doble tilde

A mediados de 2011 el código fuente del troyano bancario ZeuS fue filtrado en Internet. Esto supuso que empezaran a aparecer forks del mismo, entre ellos Citadel y Ice IX.

ZeuS es conocido, dentro de ámbitos profanos de la seguridad informática de habla castellana, como el virus del doble acento o de la doble tilde. La causa reside en el efecto que provoca en aquellos equipos que utilizan la distribución hispana del teclado:

Cuando se intenta escribir una letra con tilde, en vez de incluirla en la letra de manera correcta hace algo como a´´ e imposibilita el escribir correctamente.


Sabiendo que Citadel y ICE IX son evoluciones de ZeuS, quisimos comprobar si seguía ocurriendo.

Windows utiliza mensajes para las comunicaciones entre aplicaciones, como por ejemplo:


WM_SYSCOMMAND
Relacionado con ventanas (se maximiza, se minimiza, se elige algo en el menú, etc.)
WM_DESTROY
Cuando una ventana está a punto de cerrarse.
WM_KEYDOWN
Cuando una tecla se pulsa
WM_KEYUP
Cuando una tecla se suelta.
WM_MOUSEMOVE
Cuando se haya movido el ratón.


Relacionado con el teclado hay un mensaje especial llamado WM_DEADCHAR, generado cuando pulsamos la tecla tilde.


MSDN (Remarks):
“A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key.”




Una traducción aproximada sería: “Un deadkey es una tecla que genera un carácter que combinado con otro carácter, genera un carácter compuesto.”


Viendo los hooks que utiliza Citadel, sospechamos del hook de TranslateMessage, ya que su función es convertir los mensajes de tecla-virtual en mensajes de caracteres.




Repasamos directamente el código fuente filtrado de ZeuS y vemos la función encargada de establecer el hook en la API TranslateMessage.




Por lo visto, los parámetros de TranslateMessage no son modificados. Sin embargo, hace uso de ToUnicode. Vamos a ver que dice Microsoft.


MSDN (Remarks):



“The parameters supplied to the ToUnicode function might not be sufficient to translate the virtual-key code because a previous dead key is stored in the keyboard layout.”




Su traducción sería: “Los parámetros enviados a la función ToUnicode, pueden no ser suficientes para traducir el código virtual de la tecla porque la deadkey anterior es almacenada en la capa del teclado.”
Googleando un poco nos encontramos con varios foros donde la gente anuncia problemas relacionados con hooks y el uso de ToUnicode.




Así que el problema viene de la función ToUnicode, que al tener una tilde en cola provoca el mal funcionamiento. Tanto Citadel como Ice IX hacen uso de la función, con lo que tampoco están exentos del problema, por lo que si un equipo empieza a mostrar el síntoma de la doble tilde, es muy probable que sea provocado por una infección de Citadel, Ice IX o algunos de los “bichos” de la familia de ZeuS.


Como muchos os habréis dado cuenta, el título de la entrada homenajea a la famosa saga de libros de "los cinco" escrita por Enid Blyton y que nos hizo disfrutar mucho a algunos de nosotros de niños.


Jozsef Gegeny y Mario González
S21sec ACSS

2 comentarios:

Anónimo dijo...

Me surgen una serie de duas:
-¿Para que motivo hace un hook a translate, sendmessage? Es absurdo. Puedes pillar las teclas con: GetAsyncKeyState, y no tienes que interactuar con translatemessage, y sólo debes localizar la aplicación que se encuentra en frente (on top). ¿No es así más lógico? ¿Qué se me escapa?

S21sec e-crime dijo...

Hola Anónimo.
Además del keylogging, con TranslateMessage también monitoriza si el usuario haya hecho un clic con el ratón (para que en ese mismo momento pueda capturar la pantalla en caso de teclados virtuales), aunque esa parte del código no se muestra en la imagen del post. En cuanto de la función GetAsyncKeyState, entiendo que habría que llamarla en un bucle en cada X segundos para comprobar el estado de las teclas, lo que puede resultar menos adecuado.
Un saludo.


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login