15 de mayo de 2011

FireSheep vs FireSheperd

FireSheperd es un programa que se supone que "mata" los FireSheeps que se encuentren capturando credenciales en nuestro segmento de red.

De su autor, "FireShepherd, a small console program that floods the nearby wireless network with packets designed to turn off FireSheep, effectively shutting down nearby FireSheep programs every 0.5 sec or so, making you and the people around you secure from most people using FireSheep."

La herramienta puede ser descargada desde http://notendur.hi.is/~gas15/FireShepherd/FireShepherd.cpp.

Cabe decir que esta aplicación está pensada para funcionar bajo windows :-S.

Si echamos un ojo al código de FireSheperd.cpp, en la funcion "int requester()", a partir de la linea 97 se puede observar lo siguiente:


97 request+="GET /packetSniffingKillsKittens HTTP/1.1\r\n";
98 request+="Host: www.facebook.com\r\n";
99 request+="User-Agent: Mozilla\r\n";
100 request+="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
101 request+="Accept-Language: is,en;q=0.7,en-us;q=0.3\r\n";
102 request+="Accept-Encoding: gzip,deflate\r\n";
103 request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
104 request+="Keep-Alive: 115\r\n";
105 request+="Connection: keep-alive\r\n";
106 request+="Referer: http://www.facebook.com/\r\n";
107 request+="Cookie: lsd=spsse; c_user=666660000; sct=01010101; sid=0; xs=3randomhashyes666666666; asdf=??????????????!!!!!!!!!!!!!!!!!!!!%<95>e<9d>ë^QÒ<88>Y¼¥­Á<8f>øþh¡ F4£A<80> º¦^WSÍÂÝåt¹Òv5þhè<9f>Ë&%^V%¥Ô^R^K$FsnÄ<8b>x^QÏÏvVfi6<83>^PÊìÈ^W_7νçÜ^[Q^?lXË^[Fÿë~~½¹ùÉ^KÛ,÷7¬ù^Oü^?yóÇ^[^^>hº^__o<9a><9f>¿ÄGÜ5¼yy{ÃZÆ|øË,þÊ<9d>j^Uo¬´­W¢y¹¹y5ù|Êmk¤ P<93>Ãt¦[%´Ô<93>û)7­°f²<9b>ÎDk¹0vò<80>_yk^YW<93>ÛÝ=þ<8b>ËV^[©&«þ×åtf^Xç­ðÔS{/Z9Yà^Cé½n­<9d>lãï¬ÅÇÛåô^O/^?u#8<93>´Ã<97>¯±<9a>ÿìÇúyøëO^<88>n73®¥<93><8d>Ð<8a>·LÄÏ^?1MKºGGÖ: Íìd3 MÇiñ_õ{[Ïs§<87>0^EgÂë´ <9e>»°n~)ºù<85>áF7ÂKÙzG_O~9}ùöÆ1XÓ<99>4ÀwSA»Ó<Ø®ûu<85>ß<93><99>×SÕ2ã^Y<9f>,¦®åÒ11ÙçN<87>Ý|<97>×ÿI·^DÍâ^R<9c>a<98><8a>Ã^FÞg^Ct^]çÓ´Áeþm?å¢^U0Éb:K<93>^ ^RÛv:KÓ¯º£øìåÍïoð¡nþtÃ-Ó<80>@c^Ló­tͦo±^Z^V^PÍúæó³^PL+><85> 5-^N ÃÒX&bð³l<88>[ $¯DZ^BJ\r\n\r\n";
108 request+="\r\n";

Podemos ver el código de la petición que Firesheep se quede colgado justo en la línea 107. El payload esta justo en al parámetro asdf=????????!!!!!!!!!... de dicha petición.

Ya que el entorno de desarrollo que yo uso suele ser Linux, lo primero que voy a hacer es portar esta aplicación a Linux.

Podéis descargar el código de Firesheperd-Linux desde aquí: http://pastebin.com/YXtmV4ny

Para realizar la prueba, pasamos a ejecutar el backend de Firesheep con los parametros y 'tcp port 80' al mismo tiempo que ejecutamos el binario de FireSheperd.

Aquí podemos ver cómo funcionan a la vez:



Para saber que es lo que esta pasando, usaremos nuestro querido Wireshark.



Si exportamos los bytes del payload con Wireshark, veremos cual es la petición que realiza. Aquí podemos ver el payload con hexer:



Tras un rato flodeando la red con el payload que envía FireSheperd, podemos comprobar como efectivamente causa un error en FireBird.




Tras comprobar como FireSheperd puede hacer que un proceso FireBird pare de capturar credenciales, es necesario que saquemos algunas conclusiones.

En primer lugar, basta con reiniciar el proceso de FireSheep para continuar esnifando; esto se puede automatizar, lo que daría lugar a un juego del gato y el raton entre FireSheep y FireSheperd.

En segundo lugar, no es una buena idea floodear la red con peticiones HTTP falsas, ya que puedes sobrecargar el router, el servidor web destino, o incluso hacer saltar algún IDS que haya por el camino. El punto de inflexión que proporciona FireSheperd se basa en para FireSheep, ya que si esto no sucede (o mientras esta teniendo lugar, ya que el ataque tarda unos segundos), Firesheep sera capaz de detectar todas las peticiones de FireSheper y las LEGITIMAS TAMBIÉN.

Existen otras alternativas para proteger de Firesheep, como usar VPN, HTTPS-everywhere, la extension force-tls, Blacksheep o reglas para el IDS Bro


Como ultimo punto, dejo una pregunta en el aire: cual es realmente la causa por la cual el payload cause el "JSON error" de FireSheep? Que error de FireSheep permite que FireSheperd funcione? Quizá responderemos a todo en el siguiente post.