Hemos sido muchos los taringueros que alguna vez, por supuesto, con fines educativos y el consentimiento de la víctima , hemos crackeado alguna red WiFi que usaba WPS utilizando Walsh, Reaver, Bully u otras herramientas incluidas en Wifilax o Kali Linux. ¿Pero sabemos en qué se basa esta vulnerabilidad?
Antes de nada un poco de historia:
WiFi Protected Setup (WPS) es un estándar creado en 2007 para añadir dispositivos a redes WiFi, protegidas con protocolos WPA o WPA2, de forma rápida y segura.
Fue creada por la WiFi Alliance, una asociación de cientos de fabricantes y empresas de software que cuenta con 10 laboratorios independientes de pruebas encargados de certificar todos sus productos .
Los primeros en adaptar sus dispositivos para recibir la certificación oficial fueron Broadcom, Atheros, BUFFALO, Conexan, Intel y Railink. Pero en poco tiempo cientos de fabricantes se sumaron a esta iniciativa implementando esta tecnología: craso error.
En diciembre de 2011, tan sólo 4 años después de la aparición de WPS, Stefan Viehböck, un experto en seguridad informática, publicó wpscrack, un programa para Linux hecho en Python después de descubrir y reportar una vulnerabilidad en WPS. Este programa, de tan sólo 621 líneas, demostraba la existencia de una gravísima brecha de seguridad en WPS al usar el método PIN. (WPS contempla el uso de los métodos Push-Button y PIN como obligatorios y los métodos USB y Near-Field como opcionales)
Breve explicación técnica del método PIN:
El router puede dar acceso a a red mediante la introducción desde un dispositivo de un PIN de 8 cifras. En principio un PIN de 8 cifras daría un total de 10⁸ posibilidades (100 millones), que es una cifra nada despreciable, pero se debe tener en cuenta que el último dígito corresponde a un hash (dígito de control) muy simple y además público, por lo que únicamente quedarían 10⁷ posibilidades (10 millones).
Nota: Dejo en C# la función para calcular el checksum y obtener el último dígito por si a alguien le pueda interesar:
Si alguien quiere echarlo un vistazo, he subido el pdf de las especificaciones técnicas de WPS a Dropbox .
Cómo funciona el ataque:
El método PIN tiene un error de diseño. En un momento divide el PIN en 2 mitades, y el router que implementa WPS informa cuando la 1ª o la 2ª mitad es incorrecta. Esto hace que las posibilidades se reduzcan drásticamente. Recordemos que sólo tenemos 7 dígitos (el último es de control y se obtiene de forma sencilla)
Por tanto, con 1 número de 7 dígitos dividible en 2 mitades, tenemos:
Son un total de 11.000 posibilidades; una cifra final muy inferior a los 100 millones de posibilidades iniciales. 11.000 posibles claves son perfectamente asequibles para un ataque de fuerza bruta.
Contrataque:
Muchos de los fabricantes, al comprobar que la seguridad del método PIN estaba rota, decidieron implementar una nueva medida de seguridad para intentar paliar la grave vulnerabilidad de WPS utilizando un sistema de bloqueo por el cual, después del ingreso de X intentos fallidos (normalmente 3) el router bloquea nuevos intentos de ingreso del PIN por determinado tiempo (pueden ser desde minutos hasta horas) dificultando así los accesos no deseados.
Esto que en principio puede parecer una medida insuperable no lo es tanto. Existen numerosos scripts y programas que almacenan bases de datos con PIN's conocidos asociados a determinadas marcas y modelos de routers. Normalmente dependiendo del lugar de procedencia del desarrollador del script se tiene más o menos suerte, pero si se trata de un router conocido no es difícil obtener el PIN entre el primer y 5º intento.
Se descubre una nueva vulnerabilidad: Pixie Dust
Durante la conferencia PasswordsCon Las Vegas 2014 el investigador y experto en seguridad Dominique Bongard anuncia el descubrimiento de un nuevo fallo en WPS que reduce la obtención de la clave a unos pocos segundos. En realidad no se trata de una nueva brecha de seguridad en el protocolo WPS, sino en la mala implementación que de éste hacen algunos fabricantes; concretamente TPLINK y Broadcom.
Dominique Bongard no publica el código del exploit, pero da las claves suficientes como para que soxrok2212 , un miembro de Kali Linux, abra una investigación paralela y publique un fork de Reaver que aprovecha esta nueva vulnerabilidad.
El descubrimiento de Bongard se basa en que estos 2 fabricantes utilizan un PRNG (Pseudo Random Number Generator) para cifrar la clave pública. Analizando cómo se realiza consigue saber qué números se utilizan, así que por tanto, dejan de ser aleatorios.
Quien quiera saber qué dispositivos son susceptibles a un ataque Pixie Dust, puede consultar la base de datos hecha por el equipo de Kali Linux .
Cómo protegerse contra estos ataques
La única forma realmente efectiva es desactivar WPS desde la configuración del router. En caso de que esto no sea posible, es recomendable cambiar el PIN utilizando un número que no cumpla con las especificaciones técnicas; es decir: 7 dígitos + 1 dígito de control. Algunos scripts, no todos, son incapaces de operar con un dígito de control incorrecto. ¿Cómo se hace esto? Es sencillo, al pulsar "Generar PIN" el sistema generará un PIN de 8 dígitos (el último dígito corresponderá a un hash correcto). Lo único que hay que hacer es cambiar el último número. Por ejemplo, si el sistema genera el PIN 12345678, habría que sustituir el último dígito, quedándolo: 12345679
Fuentes:
Antes de nada un poco de historia:
WiFi Protected Setup (WPS) es un estándar creado en 2007 para añadir dispositivos a redes WiFi, protegidas con protocolos WPA o WPA2, de forma rápida y segura.
Fue creada por la WiFi Alliance, una asociación de cientos de fabricantes y empresas de software que cuenta con 10 laboratorios independientes de pruebas encargados de certificar todos sus productos .
Los primeros en adaptar sus dispositivos para recibir la certificación oficial fueron Broadcom, Atheros, BUFFALO, Conexan, Intel y Railink. Pero en poco tiempo cientos de fabricantes se sumaron a esta iniciativa implementando esta tecnología: craso error.
En diciembre de 2011, tan sólo 4 años después de la aparición de WPS, Stefan Viehböck, un experto en seguridad informática, publicó wpscrack, un programa para Linux hecho en Python después de descubrir y reportar una vulnerabilidad en WPS. Este programa, de tan sólo 621 líneas, demostraba la existencia de una gravísima brecha de seguridad en WPS al usar el método PIN. (WPS contempla el uso de los métodos Push-Button y PIN como obligatorios y los métodos USB y Near-Field como opcionales)
Breve explicación técnica del método PIN:
El router puede dar acceso a a red mediante la introducción desde un dispositivo de un PIN de 8 cifras. En principio un PIN de 8 cifras daría un total de 10⁸ posibilidades (100 millones), que es una cifra nada despreciable, pero se debe tener en cuenta que el último dígito corresponde a un hash (dígito de control) muy simple y además público, por lo que únicamente quedarían 10⁷ posibilidades (10 millones).
Nota: Dejo en C# la función para calcular el checksum y obtener el último dígito por si a alguien le pueda interesar:
byte hashWPS(uint PIN)
{
if (PIN > 9999999 || PIN < 1000000) throw new OverflowException("El PIN debe ser un número entero positivo de 7 cifras");
byte accum = 0;
PIN *= 10;
accum += (byte)(3 * ((PIN / 10000000) % 10));
accum += (byte)((PIN / 1000000) % 10);
accum += (byte)(3 * ((PIN / 100000) % 10));
accum += (byte)((PIN / 10000) % 10);
accum += (byte)(3 * ((PIN / 1000) % 10));
accum += (byte)((PIN / 100) % 10);
accum += (byte)(3 * ((PIN / 10) % 10));
byte digit = (byte)(accum % 10);
return (byte)((10 - digit) % 10);
}
// Algoritmo obtenido de las especificaciones técnicas de WPS,
Si alguien quiere echarlo un vistazo, he subido el pdf de las especificaciones técnicas de WPS a Dropbox .
Cómo funciona el ataque:
El método PIN tiene un error de diseño. En un momento divide el PIN en 2 mitades, y el router que implementa WPS informa cuando la 1ª o la 2ª mitad es incorrecta. Esto hace que las posibilidades se reduzcan drásticamente. Recordemos que sólo tenemos 7 dígitos (el último es de control y se obtiene de forma sencilla)
Por tanto, con 1 número de 7 dígitos dividible en 2 mitades, tenemos:
- 1ª mitad del PIN con 4 dígitos: 10⁴ posibilidades (10.000)
- 2ª mitad del PIN con 3 dígitos: 10³ posibilidades (1000) Por eso la 2ª parte del ataque dura mucho menos que la primera.
Son un total de 11.000 posibilidades; una cifra final muy inferior a los 100 millones de posibilidades iniciales. 11.000 posibles claves son perfectamente asequibles para un ataque de fuerza bruta.
Contrataque:
Muchos de los fabricantes, al comprobar que la seguridad del método PIN estaba rota, decidieron implementar una nueva medida de seguridad para intentar paliar la grave vulnerabilidad de WPS utilizando un sistema de bloqueo por el cual, después del ingreso de X intentos fallidos (normalmente 3) el router bloquea nuevos intentos de ingreso del PIN por determinado tiempo (pueden ser desde minutos hasta horas) dificultando así los accesos no deseados.
Esto que en principio puede parecer una medida insuperable no lo es tanto. Existen numerosos scripts y programas que almacenan bases de datos con PIN's conocidos asociados a determinadas marcas y modelos de routers. Normalmente dependiendo del lugar de procedencia del desarrollador del script se tiene más o menos suerte, pero si se trata de un router conocido no es difícil obtener el PIN entre el primer y 5º intento.
Se descubre una nueva vulnerabilidad: Pixie Dust
Durante la conferencia PasswordsCon Las Vegas 2014 el investigador y experto en seguridad Dominique Bongard anuncia el descubrimiento de un nuevo fallo en WPS que reduce la obtención de la clave a unos pocos segundos. En realidad no se trata de una nueva brecha de seguridad en el protocolo WPS, sino en la mala implementación que de éste hacen algunos fabricantes; concretamente TPLINK y Broadcom.
Dominique Bongard no publica el código del exploit, pero da las claves suficientes como para que soxrok2212 , un miembro de Kali Linux, abra una investigación paralela y publique un fork de Reaver que aprovecha esta nueva vulnerabilidad.
El descubrimiento de Bongard se basa en que estos 2 fabricantes utilizan un PRNG (Pseudo Random Number Generator) para cifrar la clave pública. Analizando cómo se realiza consigue saber qué números se utilizan, así que por tanto, dejan de ser aleatorios.
Quien quiera saber qué dispositivos son susceptibles a un ataque Pixie Dust, puede consultar la base de datos hecha por el equipo de Kali Linux .
Cómo protegerse contra estos ataques
La única forma realmente efectiva es desactivar WPS desde la configuración del router. En caso de que esto no sea posible, es recomendable cambiar el PIN utilizando un número que no cumpla con las especificaciones técnicas; es decir: 7 dígitos + 1 dígito de control. Algunos scripts, no todos, son incapaces de operar con un dígito de control incorrecto. ¿Cómo se hace esto? Es sencillo, al pulsar "Generar PIN" el sistema generará un PIN de 8 dígitos (el último dígito corresponderá a un hash correcto). Lo único que hay que hacer es cambiar el último número. Por ejemplo, si el sistema genera el PIN 12345678, habría que sustituir el último dígito, quedándolo: 12345679
Fuentes:


