27 febrero, 2007

Como explotan vulnerabilidades en Wireless

Si se preguntan como es que en el Black Hat del 2006 en Las Vegas, lograron tomar control de una Mac (sirve igual para PCs) en cuestión de segundos (ver video), aquí revisaremos una de las formas en las que se encuentran estas vulnerabilidades.

Nos hemos acostumbrado a proteger las vulnerabilidades en módulos de usuario con técnicas como non-executable pages, address space layout randomization (ASLR) y stack canaries, pero hemos olvidado que a nivel de kernel también existen vulnerabilidades importantes.

Requieren especial atención las vulnerabilidades en los drivers, ya que los programadores de drivers viven en un entorno totalmente diferente a los programadores para usuarios final, desde la diferencia entre los API y el hecho de que a partir de Win NT a la fecha los threads de kernel solo tienen 3 páginas de stack mientras que los de usuario tienen hasta 256KB, sin mencionar el cuidado especial que se debe de tomar en cosas como son performance, error-handling y re-entrancy.

Ya se que deben de estar pensando que es muy poco probable que hagan un ataque en un device driver ya que la mayoría no procesa datos controlados por el atacante. Pero los drivers de red son la excepción. Aunque los driver para ethernet han estado con nosotros por mucho tiempo y no han sufrido vulnerabilidades importantes, no es lo mismo de los wireless. Resulta que los ethernet hacen muy poco de procesamiento mientras que los wireless tienen que manejar una amplia gama de pedidos y exponer su funcionalidad a quien se encuentre en el rango.

Para hacer un ataque en el mundo del 802.11 nos enfocaremos en una device que se encuentre sin autenticar y sin asociar (pueden estar autenticada sin asociarse y autenticada y asociada). En este caso el cliente procesa:
  • Probe Request
  • Probe Reponse
  • Beacon
  • Autenticación
El Probe Response y el Beacon se utilizan para encontrar o publicar las redes inalámbricas locales. Utilizando estos los clientes pueden encontrar las redes de dos maneras, en modo activo el cliente mando un Probe Request con el campo de SSID vacio, cualquier AP que lo escuche responde con un Probe Response con los parámetros de la red. En modo pasivo el cliente esta en escucha de los Beacons y lee los parámetros de la red de estos.

Los paquetes tanto el Probe Response como el Beacon deben contener entre otras cosas un campo para el SSID el cuál según la especificación no debe de ser más de 32 bytes de largo. Sin embargo el largo máximo de cualquier elemento de información es de 255 bytes, lo que deja amplio margen de error en un driver mal escrito.

Para atacar el Beacon de un driver necesitamos una manera de mandar frames al device que se va a atacar. La mejor opción actualmente es la LORCON-library en C (hay una extensión para ruby), desarrollada por Joshua Wright y Michael Kershaw. Una vez familiarizados, podemos implementar un fuzzer que obliga al driver a procesar datos malformados tratando de que con uno de esos se estrelle.

Escojemos un campo en el Beacon o Probe Response que sea de largo variable, como el Information Element. Una vez que se encuentra el problema mediante el uso del fuzzer, iniciamos el proceso de ganar control del pointer de esa instrucción. En el caso de buffer overflows del stack en Windows, el proceso es tan sencillo como determinar el offset de la dirección de regreso y sobreescribirlo con la dirección de una instrucción que haga un "jump" de regreso al stack (ver otro ejemplo). Esta puede ser la parte más compleja de todo el proceso.

Una vez que se gana control del pointer de la instrucción, se hace una ejecución de código arbitrario. Para módulos de usuario este proceso esta totalmente automatizado usando Metasploit. Y en la nueva versión de Metasploit (3.0) ya se pueden implementar exploits del kernel de manera automática.

Si les interesa estudiar a mas detalle todo el proceso les recomiendo que lean un artículo por Johnny Cache, H D Moore, y skape de Metasploit.

Como siempre los invito a que dejen sus comentarios y opiniones y links al respecto .

2 comentarios:

Bieletto dijo...

Es un tema muy interesante que pocas veces nos detenemos a considerar seriamente lo cual es un grave error ya que muchas veces nuestra red no es el objetivo final del atacante si no que mas bien nos utiliza como un vehiculo de transporte para llegar a puntos mas importantes, me gustaría que mas adelante publicaras algo sobre protección en wireless y seguridad en la red.
Muy buen blog ;)
Saludos…

Anónimo dijo...

ovc, dxkav ph sggeamgu d fxfqk.
hapn xfanaiam y sa r!
xqb free xxx vids
, hagb ec un t wupu d.
hcgnbl xcuwmo hnln f iyzt. cay, porn for women
, cida h gewuidvd k ixvjtu ze gkvd ycp.

zoj ma yuy.