Algunos problemas de Windows, sin posible solución

Una aplicación que se ejecuta en Windows básicamente lo que hace es
procesar los mensajes que va recibiendo.

Una aplicación que se ejecuta en Windows básicamente lo que hace es

procesar los mensajes que va recibiendo. Cualquier programa tiene la

capacidad de enviar mensajes a otros programas y no existe ningún

sistema de autenticación, lo que abre la posibilidad a un nuevo mundo de

vulnerabilidades de seguridad.

Exploiting design flaws in the

Win32 API for privilege escalation – or Shatter Attacks – How to break

Windows es un artículo que presenta un nuevo método para atacar los

sistemas basados en Win32 (y con la posibilidad que otros entornos

basados en el proceso de mensajes se ven igualmente afectados). Lo más

importante de esta vulnerabilidad es que no tiene una solución fácil. Al

menos no mediante la aplicación de un simple parche, ya que se trata de

un problema en el propio diseño del entorno.

Es posible que

los lectores recuerden que hace unos meses, en pleno proceso

antimonopolio, un vicepresidente de Microsoft indicó que no era posible

publicar el código fuente de Windows ya que esto pondría al descubierto

la existencia de algunos problemas de seguridad, especialmente en la

gestión de mensajes por parte del núcleo. De ser identificados estos

problemas, argumentaba, se pondría la seguridad nacional (de los EE.UU.)

en compromiso.

Si bien las declaraciones de este vicepresidente

fueron rápidamente desmentidas, el autor del artículo al que hacemos

referencia, empezó a investigar como funciona la gestión de mensajes en

los sistemas operativos Windows.

La estructura de un programa

Windows se puede simplificar, muy superficialmente, de la siguiente

forma: el programa está constantemente recibiendo mensajes que son

enviados por el núcleo y los otros programas en ejecución. Su misión

consiste en procesar todos aquellos para los que el programador ha

incluido alguna acción. Por ejemplo, cada vez que se pulsa una tecla,

Windows envía el mensaje WM_KEYDOWN a la aplicación que está en primer

plano. Todos los mensajes generados se sitúan en una cola y son

procesados de forma secuencial por cada aplicación.

El

problema de seguridad se encuentra en el hecho que Windows permite a una

aplicación en ejecución enviar un mensaje a cualquier ventana abierta en

el mismo ordenador (o escritorio, para ser más exactos), con

independencia de si la ventana receptora tiene alguna relación con la

aplicación que emite el mensaje o de sí el receptor de mensajes desea

recibir los mensajes que le son enviados. Adicionalmente, Windows no

facilita a las aplicaciones ningún mecanismo para determinar la

autenticación del emisor del mensaje.

Es justamente esta

falta de funciones de autenticación la que puede ser aprovechada en este

tipo de ataques. Una aplicación maliciosa puede enviar un mensaje a un

programa que se está ejecutando con el que puede manipular las ventanas

y los procesos del programa receptor del mensaje.

La buena

noticia es que este tipo de ataques, hoy por hoy, sólo pueden realizarse

en local.