Archivar por febrero, 2010

¿Bajará Apple el precio del iPad?

Cito textualmente de la web de Apple:

“Nuestra más avanzada tecnología en un mágico y revolucionario dispositivo a un precio increible”

Si el iPad es la tecnología más avanzada de la que dispone Apple, si realmente Apple cree que es algo mágico y revolucionario, si realmente cree que es un precio increíble… deja mucho que desear de una empresa así.


Aunque el iPad aun no está en el mercado, no pocos han sido sus detractores. Y es normal. Por un lado la supuesta gran espera (que tampoco lo comprendo) sobre un supuesto TabletPC por parte de Apple y al salir… ha desilusionado prácticamente a todo el mundo. Tan solo hay que mirar las encuentas. Las últimas decían que tan solo un 5% de dichas encuentas estarían dispuestos a comprarlo, mientras que un 72% seguro que no. El resto de personas les gustaría tener más información y a otros no les convence pero esperarán.

Cuando datos estadísticos responden con tal crudeza, los de Cupertino están empezando a temerse una debacle. Hay que tener en cuenta que para Apple lo peor no es unas malas ventas, sino una mala reputación. Apple no puede permitir que se critique un producto de ellos o que se pueda pensar que no es lo mejor del mercado. Pero en este caso el “daño” o no “daño” ya se ha hecho. Si los pronósticos se cumplen (siempre hay que esperar), el iPad será un fracaso en ventas tal y como presuponía Apple. Esto en el mundo Apple viene acompañado con desilusión, que es lo que más dinero hace ganar a la empresa de Jobs.

Pero nos encontramos con algo “inédito”, o al menos una práctica no muy extendida. Apple estaría replanteándose acallar la mala prensa y los malos resultados a golpe de bajada de precios. Es evidente que el precio es algo importante, pero no es la cura. Para empezar los que abogan normalmente por tener un producto de Apple suele ser una clase pudiente, los cuales si el producto convenciera no tendrían problema alguno en adquirirlo. Pero lo peor no es eso… lo peor es que se está jugando con los clientes (o futuros clientes). En palabras de Jobs, es un precio fantástico, 500€ por el modelo más básico. 500€ por un iPod Touch de 8GB de gran tamaño, el cual, ni es un tabletPC, ni es un smartphone, ni una PDA, ni un Netbook… desde mi punto de vista y como ya he dicho, un engendro extraño para intentar exprimir aun más a la gallina de los huevos de oro. Lo peor no es esto siquiera. Lo peor son las grandes limitaciones con las que se cuentan, las más criticadas desde la falta de reproducción HD, el no usar e-ink, el no disponer USB, el ser el software que tiene lo más restrictivo del mundo… es evidente que pagar 500€ por algo así es cuanto menos chistoso.

¿Pero cuanto vale? Yo no creo que sea un problema de precio como ya he dicho. ¿Lo comprarían las personas si costase 100€ menos? Personalmente no las tengo todas conmigo. Si fuese un dispositivo impresionante, aunque fuese caro se compraría. 500€ por algo así es una locura. ¿400€? ¿300€? Personalmente ni aun costando 300€ (200€ menos) pensaría en comprármelo. Por barato que sea, si no satisface ninguna necesidad, ¿para que gastarme el dinero? por 300€ podría encontrar un netbook que se adaptase completamente a mis necesidades.

Pero aun hay un punto mucho peor. Casi con toda seguridad Apple no tomará ninguna medida hasta que el iPad esté en la calle y compruebe en números la recepción. Pero… ¿qué pasará entonces si descubre que no se vende como se tendría que vender? ¿Lo rebajará entonces 100€ o 200€? Como le explicas entonces a los que se lo compraron por 100€ o 200€ más que ahora tiene un precio nuevo? Lo intentaría arreglar entonces con cheques regalos para que los usuarios puedan comprar por el Store de Apple por valor de 200€. Es decir, una bofetada con la mano abierta, como se suele decir, a los primeros compradores, como ya sucedió con el iPhone. Es decir, se dará el caso que un comprador de un día para otro pierda 200€ (o la cuantía por la rebaja de Apple).

Lo que si tenemos claro es que aun por ver que sucede en tiendas, ni es mágico, ni es revolucionario, ni tiene un precio increíble, ni es nada nuevo, ni satisface casi ninguna necesidad. Lo que tenemos claro es que incluso antes siquiera de que salga se está pensando en rebajar el precio. Que por cierto… deja claro el margen de beneficio que pueda tener Apple. Es decir… lo que pagas no vale ni de lejos lo que estás comprando.

Ya veremos que sucede… pero mi opinión es aun más clara. Primero la creencia de algo absurdo que no me serviría ni como posa-vasos costase lo que costase. Segundo, que todo aquel que pudiese plantearse el comprárselo, que esperase unos cuantos meses, no creo que le sentase muy bien que al mes siguiente costase sensiblemente menos.

Seguridad: Spoofing. Índice (Actualizado)

Bienvenidos al tema de Hoy: Spoofing, el arte del engaño.

 

Spoofing es un término genérico que puede ser aplicado a un buen número de cuestiones en la red. Todos ellos comparten la misma premisa, por tanto podemos definir el Spoof o la técnica de Spoofing a la falsificación de unos datos, modificándolos de algún modo para obtener por ello un beneficio.

Lo que vamos a intentar hacer aquí es explicar los diferentes ataques de Spoofing que podemos encontrar a día de hoy, intentando mostrar ejemplos de uso real y por tanto como podemos evitarlos:

Herramientas Utilizadas/Material necesario: (No todo es necesario, dependiendo de la plataforma a usar, de cada Spoofing y de lo que a cada cual le sea más cómodo)

  • Windows 7 x64 Ultimate -> OS principal (General)
  • Debian Squeeze x64 -> OS secundario (General)
  • Firefox 3.7a2pre
  • Thunderbird 3.2a1
  • Servidores Whois RIPE, ARIN, APNIC, LACNIC, afriNIC -> También útil usar la linea de comando “Whois” (IP Spoofing)
  • Servidor Proxy anónimo con soporte SSL -> Cientos en Internet (IP Spoofing)
  • NMAP -> Escaner de puertos (IP Spoofing, MAC Spoofing)
  • Winpcap -> Librerías para Windows para capturar frames (IP Spoofing, MAC Spoofing, Header Spoofing)
  • Wireshark ->Sniffer (IP Spoofing, MAC Spoofing, Header Spoofing)
  • Cuenta de Correos Gmail (IP Spoofing, eMail Spoofing)
  • Cuenta de Correos Live/Hotmail (eMail Spoofing)
  • AirCrack Suite (Linux) (MAC Spoofing)
  • Servidor Web con soporte PHP o hosting con iguales características (Web Spoofing)
  • Cliente FTP: WinSCP, FileZilla… (Web Spoofing)
  • Web Spider: HtTrack, wget… (Web Soofing)
  • Apache, PHP (Web Spoofing)
  • NoScript, Cookie Monster, Firebug-> Extensiones para Firefox (Web Spoofing)
  • User-Agent Switcher, Firebug-> Extensión para Firefox (Header Spoofing)
  • Paros Proxy (Header Spoofing)
  • Ncat (incluido en NMAP) ó NetCat, Telnet… (eMail Spoofer)
  • OpenSSL (eMail Spoofer)
  • hMailServer (eMail Spoofer)
  • Dig (eMail Spoofer)

 

Sobre SMS Spoofing, he decidido posponerlo conjuntamente con la versión PDF. Continuaré con la publicación de artículos, y posiblemente sea al final cuando revise todo el material, lo compacte, lo ordene… y lo lance todo como dios manda.

Seguridad: Spoofing. Capítulo Quinto -> eMail Spoofing

ATENCION: Los ejemplos que se van a mostrar y “tutoriales” tan solo tienen carácter educativo. En ningún aspecto comparto filosofías de invasión a la intimidad, ataques contra un sistema informático o cuestiones similares. En la medida que sea posible siempre se usarán ejemplos y formas que puedan ser usados por cualquier persona, de forma que pueda verificar los contenidos escritos. No obstante, por motivos más que obvios, materiales como contraseñas, nombres de usuarios o de hosts, serán omitidos o modificado en las capturas de pantallas realizadas (o las lineas escritas). Es decir, los ejemplos serán completamente reales, los datos mostrados para poder pertrechar estos ejemplos  a vosotros, no siempre lo serán (Sí lo serán los resultados). Para que esto conste de forma clara, todo material sensible modificado o falso estará resaltado en ROJO. Por motivos de seguridad, todo el material que sea expuesto aquí (exceptuando software propietario o libre, citaciones expresas o código de terceros) tanto texto, imágenes y código son propiedad del autor y está completamente prohibido su reproducción completa o parcial en otros lugares, espero que se comprenda.

 

eMail Spoofing

Casi con toda seguridad, conjuntamente con Web Spoofing, es el Spoofing más usado y/o peligroso que podemos encontrarnos estos días. Por otro lado es el Spoofing posiblemente que más personas identifican y tratan con él, aun cuando quizás no sepan que se llame así. Y es que a día de hoy, quien no ha recibido un correo electrónico que parecía venir de él mismo o de cualquier otro usuario, sin que evidentemente fuese dicho usuario quien lo había enviado. Aquí no se debe de confundir eMail Spoofing con virus que usan nuestras cuentas para reenviarse a nusetros contactos. Un virus en nusetro PC que se expande por correo electrónico usando nuestras propias herramientas, no es Spoofing.

¿eMail Spoofing? La técnica de modificar (generalmente) el remitente de un correo electrónico, con el fin de aparentar se un correo electrónico genuino. Esto evidentemente es una suplantación de identidad en toda regla, y es algo completamente ilegal. Para hacerse una idea, clonar una web (Phising) con el objetivo de engañar a alguien para que introduzca unos datos es ilegal porque casi con toda seguridad no tiene derechos de autor para usar el contenido de la web original. Pero nadie puede denunciarte porque una persona sea “estúpida” e introduzca unos datos en una web. En cambio, falsear un correo de forma que el remitente sea suplantado es ilegal. Al menos en españa, es ilegal la suplantación de identidad. Evidentemente el daño que puede causar este tipo de Spoofing es ingente en todos los ámbitos.

Esto crea por ende un debate moral sobre si este tipo de artículos deberían de ser escritos o no. La razón es evidente… de cada 10 personas que puedan leer este artículo, casi con toda seguridad más de la mitad no les importaría poner en práctica lo que aquí se pueda explicar para hacer uso de dichos conocemientos/formas. Similarmente al Phishing, eMail Spoofing es un problema más que real. En la medida que pueda intentaré llevar un compromiso entre lo que es informar y lo que pueda ser dar pautas exactas de como un lector malintencionado podría hacer cosas que no deberían de hacer. Aunque evidentemente no soy el padre ni la madre de nadie. Eso sí… estas prácticas son completamente ilegales y son delito penal. Más vale no jugar con este tipo de técnicas.

Ahora que hablamos de eMail Spoofing, deberíamos de hacer aparecer el término SCAM. En realidad, lo que hemos llamado Phishing anteriormente (a crear una web fraudulenta) lo más correcto es llamarlo SCAM, y llamar Phishing a la suplantación de identidad, generalmente debida al eMail Spoofing. He usado anteriormente Phishing para referirme a la web falsa puesto que el matiz de SCAM es la realización de un Phishing con fines fraudulentos. En mi caso no podría decirse que es un SCAM, dado que tan solo tiene fines didácticos. De cualquier forma ambos términos se suelen cruzar indistintamente, aunque personalmente para mi, la suplantación de identidad por eMail sería realmente el Phishing y el SCAM el Web Spoofing cuando se desea engañar a los usuarios para robar su información. De todos modos visto esto, aquí no voy a hablar de Phishing para no confundir a los lectores, solamente de eMail Spoofing, pero lo explico porque al final de todo hablaremos de Phishing.

Como hemos dicho en otra ocasión, el problema de estos sistemas y/o ataques no reside en que Internet sea más o menos segura, sino en la intención de cada persona. Si diseñas una tecnología basada en la censura y en el recorte de libertades tendrás posiblemente un sistema mucho más seguro… pero que llega a infinitamente menos personas, erradicas la libertad. Internet por ahora (y espero que siempre) es un lugar libre, de tal forma que todo el que quier puede formar parte y construye esa Internet, sin pasar por gobiernos ni leyes absurdas. Esto implica que la mayoría de todos los protocolos en Internet son en su mayoría simples y pensados para ser usados por cualquiera, no están pensados para restringir las libertades, y eso produce que siempre existirán personas que quieran aplicar la tecnología para fines nada éticos o siquiera legales.

Antes de entrar en detalles, hay que comprender como se puede enviar un correo electrónico a Internet. Aunque para muchos un eMail no es más que un texto escrito en el ordenador y enviado a través de nuestro navegador gracias a los portales de Gmail o Live, los correos electrónicos son mucho más que todo ello. SMTP es el responsable de los correos electrónicos, es el protocolo que hace posible este envío de información. La mejor forma de comprender el sistema de eMail, es asimilarlo siempre al correo postal ordinario. Cuando enviamos una carta a un destinatario necesitamos conocer antes que cualquier otra cosa la dirección de dicha persona, su nombre y apellidos, código postal… y del mismo modo escribir un remitente (si queremos) en el sobre. Pues el eMail es exactamente igual, vamos a ver como podrían ser las equivalencias:

 

Correo Ordinario ————————————————–> Correo Electrónico

Destinatario: Nombre y Apellidos ——————————> Destinatario: Nombre y Apellidos (Por ejemplo: Theliel Smith)

Dirección: Calle y Número/bloque —————————–> Dirección: UserID y Realm (Por ejemplo: eMailSpoofing@Theliel.es, eMailSpoofing es el UserID y @Theliel.es el Realm)

Código Postal ——————————————————-> Registro MX en las bases de datos DNS (Por ejemplo: smtp.europe.secureserver.net)

 

Remitente: Nombre y Apellidos ———————————> Remitente: Nombre y Apellidos (Por ejemplo: Sandra Smith)

Dirección Remitente ———————————————–> Dirección: UserID y Realm (Por ejemplo:Sandra@live.com, Sandra es el UserID y @live.com el Realm)

Código Postal Remitente ——————————————> Servidor SMTP (Por ejemplo: smtp.live.com)

 

En realidad como se puede apreciar es simplemente llamar a cada cosa de forma diferente y comprender el esquema básico de esto. Cuando se comprende, se comprende igualmente los fallos de seguridad que podría tener el esquema, pero como digo, no se planeó que fuera un sistema rígido y restrictivo, sino abierto. Esta imagen tomada de la Wiki nos muestra más o menos el proceso:

Anque la jerga pueda ser complicada, es igual que si fuera un correo ordinario. Digamos que Alice quiere enviar un correo ordinario a Bob. Para ello rellena los datos en la carta y la tira al buzón. El cartero la lleva a la oficina postal de su localidad, es decir, la oficina que corresponde al código postal del remitente, que en un correo electrónico correspondería a su servidor SMTP. Una vez en la oficina, esa carta debe de ser procesada para saber su destino. Se comprueban los datos del destino (es decir de Bob), para conocer el destino del código postal escrito en la carta (o la entrada MX en caso de un correo electrónico). El ordenador devuelve al operario la oficina a la que deben de enviar dicha carta, es decir… la dirección de la oficina de correos que se encarga de dicho código postal. En el caso de un corro electrónico el ordenador que procesa dicha información se llama servidor DNS. Una vez que el operario de la oficina postal tiene los datos de a qué oficina enviar la carta (no a que dirección del usuario final) llama al transportista y envía todas las cartas para dicha oficina. En Madrid llegan todas las cartas destinadas a dicha oficina (paso 4 del gráfico). En dicha oficina se verifican las direcciones físicas de los destinatarios para comprobar que no hay errores y el cartero las repartirá de forma correcta. En el caso de un correo electrónico vemos que es exactamente lo mismo, los datos llegan al servidor que gestiona el servicio de correo electrónico del destino, este procesa el correo y lo entrega en la bandeja de entrada de su usuario.

No perdamos de vista el objetivo de esta parte, eMail Spoofing. En el esquema que acabamos de explicar y pensando en la suplantación, ¿Como podríamos modificar el remitente en una carta ordinaria? Es facil, tan solo escribiendo unos datos falsos en el remite de la carta. Con el eMail pasa exactamente lo mismo. ¿Pero entonces es así de simple? Sí y no, como de costumbre.

  • En primer lugar prácticamente ningun programa nos permitiría modificar el remitente del eMail.
  • En segundo lugar en los servidores SMTP existne medidas de seguridad para evitar el SPAM. Siguiendo con la misma analogía, imaginar que yo he puesto de remitente a Julia Robert con residencia en estados unidos. Cuando la carta la recoge el cartero imaginar que mira el remitente y ve algo así. El operario podría automáticamente romper la carta, puesto es imposible que el haya podido recoger una carta del buzón con tal dirección en su oficina postal. Es decir, un método de desechar esos correos fraudulentos sería automáticamente bloquear cualquier remitente que no pertenezca su nombre y apellidos, dirección y código postal de la oficina que recoge la carta. Esta medida es usada casi en el 100% de los proveedores de correo electrónico, de modo que con dicha protección, sería imposible pretender enviar un correo fraudulento usando un servidor SMTP concreto el cual no reconoce el remitente como legítimo.
  • En tercer lugar, la oficina podría ser aun más lista, y simplemente solicitar el carnet de identidad de cada persona que desea enviar una carta. Una vez se presenta el carnet de Identidad, es la misma oficina quien graba el remitente en la carta. Este otro sistema es también ampliamente usado con los correos electrónicos (evidentemente en similitud, no literalmente)

Es decir, aunque el protocolo inicial es simple, a raiz de sus más que normales carencias se han construido filtros y sistemas de seguridad para evitar el uso de la suplantación de identidad. Con todo esto se podría pensar que entonces no es posible realizar un eMail Spoofing, y todos sabemos que no es cierto. ¿Con todas estas medidas es posible realizar eMail Spoofing? Si, y existen 3 formas (que ahora mismo pueda pensar yo). Todas ellas tienen sus pros y sus contras. Antes de entrar en ellas vamos a explicar un poco que es un servidor SMTP relay.

Originalmente, no se contemplaba como hemos dicho problemas de suplantaciones de identidad ni cuestiones similares, y existian los llamados Servidores Relay abiertos. Dado que cualquier persona puede crear un servidor de correos, este servidor de correos se puede configurar como hemos dicho como se desee. Estamos acostumbrados a ver que nuestros servidores SMTP de gmail o de Live requieren de un nombre de usuario o una contraseña. Pero si se desease, podríamos crear un servidor de eMail que no requiriese autentificación de ningún tipo, y simplemente especificásemos remitente y destino (el que quisiésemos). Años atrás, estos relays abiertos eran muy comunes, el problema que tenía por tanto era que cualquier persona podía enviar correos desde estos servidores para crear cantidades ingentes de SPAM. Ante este problema, casi todos los proveedores de eMail actuaron bloqueando en listas negras los correos que proviniesen de ciertos servidores Relay abiertos. Esta fue la primera medida que se comenzó a tomar, y tal es el efecto que a día de hoy no estoy seguro de que quede algún servidor SMTP relay abierto.

Sin embargo, la posibilidad de poder modificar el destinatario de un correo no solo es negativo, muchas veces es una función necesaria. Imaginar por ejemplo cuando tenemos la propiedad de dos cuentas de correos diferentes y preferimos usar un solo servidor SMTP para ambas. Por ejemplo esto lo permite realizar gmail previa verificación de dirección de correo. Otro ejemplo clásico es alguna suscripción a algún servicio, y este servicio envía correos electrónicos directamente a nuestro nombre para que el destinatario pueda siquiere incluso con “responder” alcanzar nuestra dirección. Aun así, existen multitud de ocasiones en las que es deseable poder modificar los remitentes. Ante esta necesidad comenzaron a aparecer los servidores Relay cerrados.

A diferencia de los Relay Abiertos, los Relays cerrados son actualmente los servicios de correo electrónico que con más frecuencia nos son ofrecidos. Muchos quizás no comprendan la diferencia entre un servidor SMTP Relay y no Relay. Cuando usamos el término de Relay, nos referimos a un servidor SMTP que acepta conexiones teóricamente de cualquier usuario. Si pensamos por ejemplo en el servidor SMTP de Gmail: smtp.gmail.com, no deja de ser un servidor Relay, puesto que el mismo servidor SMTP es el que usan todos prácticamente. Lo que sucede es que es un Relay cerrado, con ciertas restricciones. Pero igualmente podemos encontrar servidores SMTP puros, dedicados. El ejemplo más clásico de estos servidores son algunos servidores de correos empresariales o particulares. Normalmente cualquier persona que posea un dominio o un servicio de hosting, puede crear su propio servidor SMTP sin necesidad de un servidor Relay (aunque se puede configurar como tal)

A día de hoy como se ha dicho, la mayoría de los servidores SMTP son relay, y cada uno implementa las medidas que cree necesarias. Por ejemplo, un servidor SMTP relay de una empresa lo normal es que permita el relay local-> local local -> Internet y bloque por defecto cualquier intento de acceso tipo Internet -> Internet Internet -> Local. Es decir, permite a los usuarios dentro de la propia red empresarial a enviar correos, pero dicho servidor relay está bloqueado externamente. Otro ejemplo sería gMail. Gmail permite el acceso local -> local local -> Internet Internet -> Local e Internet -> Internet. Pongo el ejemplo de Gmail a conciencia… si permite todo tipo de usos… ¿no debería de ser un servidor Relay abierto? No. Desde la época de los relay abiertos, muchos proveedores decidieron otra medida, rechazar todos aquellos correos que no realicen proceso de autentificación en su servidor de correos SMTP. Para el servidor destino es facil comprobar esto, tan solo tiene que realizar una conexión a nuestro servidor y comprobar si se requiere o no. La mayoría de los proveedores no permiten circular por sus redes correos que no han sido autentificados, o añadidos a una “lista blanca”. ¿Y que es la autentificación? Ni más ni menos las credenciales que necesitamos para poder enviar o recibir correos. Existen aun muchos servidores SMTP relay los cuales no es necesario realizar una autentificación, pero tienen filtros que impiden el relay de sus servicios Internet – > Internet Internet -> Local. Aunque todo esto suene un poco complicado, todo cobrará sentido más adelante con los ejemplos.

Veamos ahora sí las tres formas que podemos encontrar de eMail Spoofing:

 

Servidor de Email propio:

Como hemos dicho Internet es libre. Tu puedes agradecer a Gmail su servicio gratuito de Internet, pero también te sometes a sus políticas de Spam, a sus restricciones, a sus filtros… a fin de cuentas gMail es tu oficina de correo postal. Pero si internet es libre… ¿puedo construir un servidor de correos yo mismo? Sí. Es decir, es como si pudieses crear tu propia oficina postal. Al ser tu servidor, tu eliges las normas. Internet la construimos todos, el protocolo SMTP es estandar y cualquiera puede usarlo. Por tanto podríamos crear un servidor SMTP en casa y arreglarlo todo de tal forma que prácticamaente podríamos enviar correos desde el remiente que quisiésemos. ¿Por qué? Ya lo hemos dicho, nosotros decimos las normas que queremos. Ojo!! esto no quiere decir que los correos sean completamente anónimos ni mucho más lejos.

Vamos a expandir esto un poco más. Si hemos comprendido el esquema de funcionamiento de un eMail, para crear nuestro propio servidor lo que hay que hacer sería primero crear nusetra “oficina”. Lo segundo para que nuestra oficina sea localizable tener en las bases de datos mundiales nuestro código postal registrado, en nuestro caso, tener registrado nuestro MX en los servidores de DNS. Y nada más.

En realidad no es necesario tener un registro MX si no deseamos recibir correo, el problema de este sistema es que por razones de seguridad y propensión a usar SPAM con estos sistemas muy simples de crear, la mayoría de los servidores destino no permiten correo procedente de aquellos clientes que no posean un registro MX o que procedan de IPs que sean estáticas. Por lo demás todo es muy simple. Tan solo sería cuestión de usar cualquier software servidor de correos, configurarlo y listo. No voy a explicar a hacer esto paso a paso, en este caso tan solo vamos a ver los resultados, pros y contras. En mi caso he usado hMailServer, un servidor de correo gratuito.

Para este primer ejemplo de eMail Spoofing se ha usado el servidor eMail citado. En cada una de las pruebas siempre se han enviado dos copias de los correos con remitentes falsos, una a gmail y otra a live (hotmail). En una de las pruebas se optó por usar una dirección falsa de Hotmail y en el otro caso una dirección falsa de gmail. El tercer test se optó por una dirección prueba test.com.

Los resultados son interesantes, y demuestran puntos a favor y en contra de cada proveedor (gmail y hotmail) a la hora de manejar posibles suplantaciones de identidad. Evidentemente tanto la cuenta de correo theliel@gmail.com y theliel@hotmail.com, no me pertenecen.

 

Prueba 1: Remitente theliel@hotmail.com, destino mis cuentas de gmail y live:

Gmail en este caso si permitió el acceso del correo y este alcanzó la bandeja de entrada.

Hotmail permitió la recepción pero fue filtrado una vez más como Spam -> Ver notas después de las pruebas


Prueba 2: Remitente theliel@gmail.com, destino mis cuentas de gmail y live:

Gmail no permitió siquiera la entrada del correo, dado que verificó que el remitente theliel@gmail.com tan solo podía enviar correos usando el servidor SMTP de gmail, y no uno externo. El correo no llegó a abandonar mi gestor de correos.

Hotmail permitió la recepción del correo, pero en este caso llegó como Spam -> Ver notas después de las pruebas

 

Prueba 3: Remitente theliel@test.com, destino mis cuentas de gmail y live:

Gmail filtró el primer correo como Spam, pero sucesivos correos del mismo destino alcanzaron la bandeja de entrada

Hotmail lo volvió a filtrar como Spam -> Ver notas al final de las pruebas.


Live Spam



Gmail Inbox


En principio se podría pensar que Live tiene un filtrado de Spam mejor que Google. Pero esto esto tiene muchas lecturas. Efectivamente Gmail rechazó de pleno un supuesto correo de gmail (theliel@gmail.com) simplemente presuponiendo que un correo de ellos tiene que provenir de ellos. Pero fracasó en las otras dos pruebas, dando por buenos los correos con los remitentes falsos. Por otro lado Live los categorizó todos como Spam.

Cada proveedor tiene sus propias políticas de que es mejor filtrar o que no. Por ejemplo, es evidente que el correo Theliel@hotmail.com era un remitente suplantado, pero Gmail prefirió no establecerlo a priori como Spam, lo que causa que en ese aspecto debemos de suspender a Gmail. Pero por otro lado bloqueó completamente Theliel@gmail.com. Live por su parte prefirió no bloquear completamente el correo que provenía supuestamente desde sus propios servidores “Theliel@hotmail.com”, lo cual es un punto negativo para Live. No obstante fue capaz de filtrar los otros dos correos falsos.

La política por defecto de Gmail es “Ante la duda, lo permito”. La política de Hotmail es “Ante la duda lo bloqueo”. Esto no solo es una cuestión de políticas por desgracia… sino de dinero. Microsoft con Live presupone que no puedes o no debes de tener un servidor de eMail en tu casa a menos que seas una empresa. En realidad a Microsoft no le importa el remitente del correo, no los detecta como Spam por ello. Si detecta que posees una IP dinámica ellos presuponen que eres un Spammer. Por otro lado, puedes pagar a Microsoft un dinero para que categoricen tu dominio como verificado, para que no sea filtrado como Spam. Esto parece injusto, ya que si Internet es libre, cualquiera podemos querer tener un servidor de Email sin dar cuentas a nadie, y no por ello somos unos Spammers. Google presupone inocencia, y mientras no tenga más datos sobre el origen de dichos correos no lo categoriza como Spam y lo permite, eso sí… bloquea los correos que no proceden de sus servidores y que es de ellos… cosa más que normal.

A todo esto hay que sumarle un gran problema de seguridad respecto al Spam que tiene Live. Quitando alguna que otra dirección, siempre se pasará a la bandeja de entrada (y no se considerará Spam) correos de direcciones que ya se han recibido. Es decir, supongamos que en realidad Theliel@hotmail.com ó Theliel@gmail.com fuese la dirección de un amigo mío y en mi cuenta live ya tuviese algún correo de ellos, ninguno de los dos correos sería filtrado como Spam. Esto es un peligro. Esto es posible pq Live presupone que los correos no marcados como Spam, son remitentes seguros.

En realidad no podemos ni debemos darle un tirón de orejas a ninguno. Cada cual implementa las políticas que creen más acertadas para filtrar la mayor cantidad de Spam posible y no filtrar los correos que crean que son legítimos. Pero como en todo, no hay un sistema que sea realmente mejor que otro.

Este sistema de eMail Spoofing se ha podido ver cuales son sus principales deficiencias. Si bien es algo sencillo y rápido de pertrechar, es muy fácil que cualquier proveedor de servicios pueda detectarnos. Por supuesto, y aunque no haya sido comentado, detectar un usuario este tipo de ataques de eMail Spoofing es muy simple, tan solo tendríamos que acudir a la cabecera del correo entrante:

Delivered-To: xxxxxxx@gmail.com
Received: by 10.103.197.9 with SMTP id z9cs22623mup;
        Sun, 7 Feb 2010 10:54:05 -0800 (PST)
Received: by 10.103.85.4 with SMTP id n4mr3722461mul.128.1265568845523;
        Sun, 07 Feb 2010 10:54:05 -0800 (PST)
Return-Path: 
Received: from localhost (30.Red-79-158-250.staticIP.rima-tde.net [79.158.250.30])
        by mx.google.com with SMTP id u26si17461538mug.45.2010.02.07.10.54.05;
        Sun, 07 Feb 2010 10:54:05 -0800 (PST)
Received-SPF: softfail (google.com: domain of transitioning Theliel@hotmail.com does not designate 79.158.250.30 as permitted sender) client-ip=79.158.250.30;
From: Theliel 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.1.7) Gecko/20100111 Lightning/1.0b2pre Thunderbird/3.0.1
MIME-Version: 1.0
Subject: Test
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Prueba 1

Se puede apreciar perfectamente la IP origen de dicho correo, así como la resolución inversa de ella, que se aprecia claramente como proviene de telefónica. Por otro lado se puede ver el registro de Google sobre si es SPAM o no lo es. Si leemos lo que nos dice, es un aviso. El host citado no está designado como un emisor permitido.

 

Servidor Relay SMTP Sin Autentificación

La segunda opción y posiblemente la más usada a la hora de realizar eMail Spoofing, reside en los servidores Relay. Hemos dicho que prácticamente todos los servidores Relay tienen fuertes medidas de protección para evitar el Spam o la suplantación de identidad. Como hemos dicho a día de hoy continua siendo necesario el papel de los servidores Relay en los cuales NO EXISTE autentificación previa. Lo que sucede es que estos servidores están disponibles normalmente tan solo a grupos de clientes que pagan por usar dichos servicios como servicios de email o de hosting, y normalmente con un número determinado de correos diarios permitidos. Por otro lado, generalmente no se permite su uso externo. El concepto de local o internet se debe de comprender. Si por ejemplo posemos un hosting que nos permite usar su servidor Relay e intentamos hacer uso de él desde nuestro propio equipo, pronto se dará cuenta cualquiera que la conexión es denegada, puesto que nuestro proveedor tan solo permite el uso del Relay en local. ¿Que implica esto? Que no podemos directamente hacer uso de dicho servidor, pero dado que en dicho servidor podemos tener herramientas como SSH, PHP… podemos crear formularios o accesos remotos para poder usar dichos recursos. La idea es claramente poder crear contenido web que nos permita la creación de formularios y otros que llamen a nuestro servidor relay. Dado que el formulario se encuentra en nuestro servidor web, podrá utilizar el servidor Relay de nuestro proveedor.

Esto tiene una ventaja y un inconveniente. Al ser un servidor “abierto” (que no requiere de autentificación) podemos enviar cualquier correo que deseemos en nombre de quien sea sin preocupación alguna, y casi con toda seguridad el correo será entregado y no filtrado como Spam. ¿El problema? Es necesario crear un formulario web para ello o usar SSH para conexión remota o algún sistema similar. Para evitar este tipo de prácticas abusivas de Spam, normalmente existe como he dicho un número finito de correos que pueden ser enviados al día.

Tanto esta sección como la siguiente, realizaremos conexiones directas en terminal para mostrar los ejemplos, esto nos hará comprender de una forma mucho más clara como funciona SMTP y el potencial que tiene. Veamos ahora el uso y conexión de un servidor SMTP Relay sin autentificación. Cualquier respuesta por parte del servidor va antecedida con un código númerico. El resto de texto corre a cargo por el cliente, es decir… tecleado a mano. Recordar que en rojo se resaltará siempre datos modificados por cuestiones de seguridad.

theliel@Anarchy:~$ ncat -C smtp.relay.com 25
220 smtp.relay.relay.com ESMTP
EHLO TEST
250-smtp.relay.relay.com
250-PIPELINING
250 8BITMIME
Mail from:
553 sorry, your mail was administratively denied. (#5.7.1)
mail from: 250 ok
rcpt to: 553 sorry, relaying denied from your location [79.158.250.30] (#5.7.1)
quit
221 smtp.relay.relay.com Goodbye.

Como se puede observar, este servidor relay en concreto tiene una lista negra de hosts que no se pueden especificar como remitentes (a priori). Cualquier intento de crear un remitente gmail, live, hotmail… devolverá el error mostrado. No obstante en principio, cualquier otro host no tan “famoso” es completamente aceptable. Aun así esto no implica nada, ya veremos que el secreto último del Spoofing no se encuentra en la orden “mail from” del protocolo SMTP. Como se puede observar el servidor no solicita ningún tipo de autentificación (vendría listada como se verá más adelante). Por último podemos ver la protección de dicho servidor de no permitir conexiones externas. La IP mostrada es mi IP de telefónica en este momento, y el servidor la rechaza por ser una dirección externa a él. Es decir, para poder usar este servidor relay es necesario usarlo dentro de la misma infraestructura. ¿Como podemos realizar esto? Ya lo hemos dicho, o por medio de PHP y un formulario web por ejemplo, o quizás podamos realizar un telnet al servidor desde dentro del propio servidor mediante una conexión SSH:

-bash-3.2$ telnet smtp.relay.com 25
Trying xxx.xxx.xxx.xxx
Connected to smtp.relay.com (xxx.xxx.xxx.xxx).
Escape character is ‘^]’.
220 smtp.relay.relay.com ESMTP
EHLO TEST
250-smtp.relay.relay.com
250-PIPELINING
250-SIZE 30457280
250 8BITMIME
mail from: 250 ok
rcpt to: <xxx@gmail.com>
250 ok
data
354 go ahead punk, make my day
From: Theliel To: Theliel <xxx@gmail.com>
Subject: Test

Prueba relay
.
250 ok 1265487183 qp 5150 by smtp.relay.relay.com
data
503 MAIL first (#5.5.1)
quit
221 smtp.relay.relay.com Goodbye.
Connection closed by foreign host.

En esta ocasión, el servidor no devuelve un error dado que se está ejecutando en local. El servidor está protegido para que no se acepten identidades (mail from) desde Gmail, pero en cambio, en el mismo cuerpo del mensaje si es posible especificar el remitente con “From”, en el cual si es posible especificar gmail, live o la dirección que se desee. El correo mostrado es entregado a la perfección a la bandeja de entrada de mi cuenta gMail. En este punto hay que recordar algo que se comentó anteriormente. Muchos servidores no aceptan el paso de correos por sus servidores si este no está autentificado. En este caso estamos enviando un correo sin autentificación, lo cual quiere decir que existirán servidores que no permitan la recepción desde este tipo de servidores… este es el ejemplo de live. En realidad es un problema y una falta de respeto por parte de Microsoft, dado que esto es posible usarse con fines legítimos. Por el contrario si pagas a microsoft podrías hacer que el servidor se añadiese a una lista blanca que permitiese su uso sin necesidad de autentificación.

Hay que tener en cuenta que este tipo Spoofing es altamente anónimos. Sí, nuestra IP quedará registrada en el servidor relay, pero ¿qué sucedería si realizáramos la conexión SSH mediante un servidor proxy?

La búsqueda de servidores Relay “abiertos” es algo muy interesante. Permite a los atacantes un alto índice de Spam sin apenas molestarse lo más mínimo aprovechándose de las infraestructuras de terceros. Por otro lado, si se tuneliza el tráfico mediante un servidor proxy, esto brinda un anonimato increíblemente alto. Aquí somos personas de bien, y dado que todo esto tan solo tiene fines didácticos no me importa no tunelizar el tráfico por un proxy. Lo que estábamos comentando es la búsqueda de servidores Relay “abiertos”. ¿Pero como hacerlo? Ya hemos dicho que para que un servidor pueda ser alcanzado, debe de tener un registro MX asociado a él en los servidores de DNS. Estos registros MX nos están diciendo directamente el servidor SMTP “al descubierto” que tienen. Gracias a herramientas como DIG, podemos consultar estos registros e intentar encontrar un relay abierto en dicho servidor:

C:\Users\Theliel>dig gmail.com MX

; <<>> DiG 9.7.0rc2 <<>> gmail.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 85
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;gmail.com. IN MX

;; ANSWER SECTION:
gmail.com. 3008 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 3008 IN MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. 3008 IN MX 30 alt3.gmail-smtp-in.l.google.com.
gmail.com. 3008 IN MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. 3008 IN MX 40 alt4.gmail-smtp-in.l.google.com.

Un buen punto de partida sería comenzar por el servidor SMTP con una preferencia menor (supuestamente el primero a usarse). A continuación comprobar si se puede hacer algo con dicho servidor:

C:\Users\Theliel>ncat -C gmail-smtp-in.l.google.com 25
220 mx.google.com ESMTP 31si565032vws.79
EHLO TEST
250-mx.google.com at your service, [79.158.250.30]
250-SIZE 35651584
250-8BITMIME
250-ENHANCEDSTATUSCODES
250 PIPELINING

Bingo!! El servidor no responde con ninguna línea de que necesite autentificación, luego a priori podríamos pensar que hemos encontrado un buen objetivo. Si profundizamos un poco más:

250 PIPELINING
mail from: 250 2.1.0 OK 31si565032vws.79
rcpt to: 550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient’s email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 31si565032vws.79
rcpt to: 250 2.1.5 OK 31si565032vws.79

Con lo que nos muestra, ya podemos hacernos una idea de lo que está pasando. Efectivamente es un servidor relay abierto, pero tan solo permite conexiones local -> local internet -> local. Es decir, podemos falsear como deseemos con él nuestra identidad, pero el destinatario tan solo puede ser un correo “gmail”, es decir, una dirección local. Si llegamos a enviar el correo a nusetra cuenta de gmail, efectivamente el correo es recivido por nuestra bandeja de entrada, dependiendo de la IP desde donde lo hagamos, será filtrado como Spam o no.

Lo importante en este caso no es si el correo se filtra como SPAM o llega, lo importante es ver como con dos simples pasos es posible “apropiarse” de un servidor relay. No es malo, solamente sucede que todo puede ser usado para fines buenos o fines malos. Por último veamos que sucede si hacemos lo mismo con live:

C:\Users\Theliel>ncat -C mx1.hotmail.com 25
220 bay0-mc3-f33.Bay0.hotmail.com Sending unsolicited commercial or bulk e-mail to Microsoft’s computer network is prohibited. Other restrictions are
found at http://privacy.msn.com/Anti-spam/. Violations will result in use of equipment located in California and other states. Mon, 8 Feb 2010 04:18:2
6 -0800
EHLO
250-bay0-mc3-f33.Bay0.hotmail.com (3.10.0.73) Hello [79.158.250.30]
250-SIZE 29696000
250-PIPELINING
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-AUTH LOGIN
250-AUTH=LOGIN
250 OK

En este caso el servidor con el que hemos dado requiere autentificación, luego tan solo podríamos usarlo en caso de tener unos credenciales válidos. Aun así, se podría comprobar su seguridad, pero por ahora estamos buscando servidores sin autentificación, y en este caso es un palo de ciego (pero si no se intenta, no se puede saber). En teoría, cuando se solicita autentificación se dice… pero que suceed si intentamos forzar aun así?:

mail from:
250 test@hotmail.com….Sender OK
rcpt to:
250 test@live.com
data
354 Start mail input; end with .
From: Theliel
To: Theliel
Subject: TEST

Prueba 10
.
250 mail from IP 79.158.250.30 soft failed sender ID check. Please ensure this IP is authorized to send mail on behalf of [hotmail.com]

Bueno… se ha intentado. Efectivamente contra todo pronóstico, el servidor no nos ha expulsado por no estar autentificado, pero aun así los servidores de MS no permiten usar dicho relay si no se tiene una IP autorizada para ello… y evidentemente la mía no lo es.

Prácticamente cualquier registro MX que veamos puede ser susceptible a ser utilizado por un atacante, el problema es que normalmente tendrán alguna política de restricción. Otras veces podemos comprobar que existen diferentes registros MX. Que un registro MX nos lleve a un servidor SMTP más protegido, no implica que otro pueda no pueda llevarnos a un servidor menos desprotegido. Estos servidores no es que sean todos inseguros, lo que sucede como ya dijimos en su momento, es que siempre se presupone un uso debido de las tecnologías actuales. Aunque aquí pueda mostrar los riesgos que pueden existir, siempre defenderé un Internet limpia y libre. La mejor forma de evitar estos ataques es el conocimiento, por parte de los administradores de sistemas y por parte de los usuarios que pueden ver comprometida su seguridad.

 

Servidor SMTP Con Autentificación

El uso de servidores de correo propios tiene el problema de que casi todo el contenido será marcado como Spam. El uso de servidores Relay sin autentificación tiene el problema de que muchos proveedores filtran dichos correos. Lo ideal por lo tanto sería poder contar con servidores Relay los cuales podamos acceder con autentificación y que no estén filtrados por nadie. El problema de este tipo de servicios es que si te autentificas en un sistema, es mucho menos anónimo, por no decir que estos servidores puedan implementar grandes medidas de seguridad para evitar el Spoofing.

Lo primero que podríamos intentar es realizar lo que se hizo con anterioridad pero usando nuestra cuenta de gmail. El arte del “hacking” es presuponer que en algún momento los programadores metieron la pata, y esa metedura de pata se usa para lograr los fines. Un atacante esta premisa la conoce bien. Podemos presuponer que gmail es completamente invulnerable y no intentarlo, o tener la esperanza de hacer saltar por los aires la seguridad de ellos, buscando un olvido de los programadores. Vamos a presuponer que no conocemos en absoluto el sistema de correos de gmail ni de live, y queremos simplemente investigar un poco. En este caso lo más probable es que una búsqueda por registros MX no nos devuelva nada interesante, y dado que estamos buscando servidores SMTP con autentificación, vamos a tener que usar o partir de algún servidor del cual tengamos unas credenciales.

Primero vamos a ver como se comporta gmail. Necesitamos por lo cual los datos de acceso al servidor SMTP de gmail para ello:

Servidor: smtp.gmail.com, Puertos 25, 465, 587. En teoría, sabemos que el puerto por defecto es 25 y es el puerto por defecto también de STARTTLS. Por otro lado sabemos que normalmente 465 se usa para SMTP sobre TLS, y 587 suele ser usado para lo mismo. Visto esto, lo normal sería intentar acceder por puerto 25 para evitar TLS:

C:\Users\Theliel>ncat -C smtp.gmail.com 25
220 mx.google.com ESMTP 16sm3074639ewy.6
EHLO TEST
250-mx.google.com at your service, [79.158.250.30]
250-SIZE 35651584
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 PIPELINING
mail from:
530 5.7.0 Must issue a STARTTLS command first. 16sm3074639ewy.6

Lo cual nos está indicando claramente que por ese puerto tan solo podremos acceder mediante STARTTLS (un sistema similar a TLS… por así decirlo). Vemamos que obtenemos por los otros dos puertos:

C:\Users\Theliel>ncat -C smtp.gmail.com 465

C:\Users\Theliel>ncat -C smtp.gmail.com 587
220 mx.google.com ESMTP 24sm11618069eyx.6
EHLO TEST
250-mx.google.com at your service, [79.158.250.30]
250-SIZE 35651584
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 PIPELINING
mail from:
530 5.7.0 Must issue a STARTTLS command first. 24sm11618069eyx.6
quit
221 2.0.0 closing connection 24sm11618069eyx.6

En el primer caso se queda esperando… esto es normal. Mientras que STARTTLS inicia una sesión encriptada dentro de la propia sesión ya establecida, TLS/SSL desde el momento de la conexión se realiza una sesión encriptada. Por tanto se queda esperando a recibir los certificados e iniciar el proceso de encriptación del canal. En el segundo caso podemos compronar que el puerto 587 se está usando igualmente para STARTTLS.

Por tanto vamos a intentar conectar al servidor SMTP mediante STARTTLS y mediante TLS. Una vez establecido el canal seguro, deberíamos de poder hablar con el servidor SMTP como hemos estado haciendo anteriormente:

theliel@Anarchy:~$ openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:25
CONNECTED(00000003)
[ELIMINADO POR ACORTAR]
Start Time: 1265640813
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)

250 PIPELINING
EHLO TEST
250-mx.google.com at your service, [79.158.250.30]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
AUTH LOGIN
334 VXNlcm5hbWU6 <- Significa “Usuario”, codificado en base64 -> $echo “dGVzdEBnbWFpbC5jb20=” | openssl enc -base64 -d
dGVzdEBnbWFpbC5jb20= <- Significa “test@gmail.com” condificado en base 64 -> $echo -n “test@gmail.com” | openssl enc -base64
334 UGFzc3dvcmQ6
Y29udHJhc2XDsWFwcnVlYmE=
235 2.7.0 Accepted
mail from:
250 2.1.0 OK 26sm6346727fks.37
rcpt to:
250 2.1.5 OK 26sm6346727fks.37
data
354 Go ahead 26sm6346727fks.37
From: Theliel
To: Theliel <test@live.com>
Subject: Test

Prueba 1
.
250 2.0.0 OK 1265640966 26sm6346727fks.37
quit
221 2.0.0 closing connection 26sm6346727fks.37

Es necesario usar OpenSSL para poder iniciar la sesión y continuar con STARTTLS. En este caso Gmail acepta cualquier origen especificado en “mail from”. Esto podría ser un paraíso para los Spammers. Y es que aunque todo el proceso parezca que funciona perfectamente bien, cuando acudimos a la bandeja de entrada vemos que los servidores de Gmail han modificado el remitente, de forma que coincida con los datos de la autentificación. Es decir, da igual que se especifique en “mail from” ó “from”, gmail usará nuestra verdadera identidad. Luego mediante este servidor no es posible realizar un Spoofing. He optado por la autentificación “LOGIN”, la cual nos muestra por pantalla que introduzcamos el usuario y la contraseña. Tanto las peticiones como las respuestas se deben de hacer en base64

Podemos intentarlo por el puerto 465 y usando TLS:

C:\Users\Theliel>ncat -C –ssl smtp.gmail.com 465
220 mx.google.com ESMTP 23sm11723882eya.3
EHLO TEST
250-mx.google.com at your service, [79.158.250.30]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
AUTH PLAIN
334
AHRlc3RAZ21haWwuY29tAGNvbnRyYXNlw7FhcHJ1ZWJh
235 2.7.0 Accepted
mail from:
250 2.1.0 OK 23sm11723882eya.3
rcpt to: <test@live.com>
250 2.1.5 OK 23sm11723882eya.3
data
354 Go ahead 23sm11723882eya.3
from: Theliel
to: Theliel <test@live.com>
subject: Test

Prueba 2
.
250 2.0.0 OK 1265642518 23sm11723882eya.3
quit
221 2.0.0 closing connection 23sm11723882eya.3

Como podemos comprobar, obtenemos exactamente lo mismo. Aun así me ha servido el ejemplo para mostrar en este caso la conexión mediante SSL (se puede usar si se prefiere openSSL) y como en esta ocasión hemos preferido usar autentificación “PLAIN”. En este caso, se debe de introducir las credenciales en base 64 pero con un formato específico. La mejor forma de llevar a cabo esto es quizás utilizar algún lenguaje de scripting para que nos haga la labor más simple. Se podría componer pasando a base64 primero por un lado el ID, despues la arroba, despues el realm, despues la contraseña… es más comodo hacer lo siguiente en Perl:

“perl -MMIME::Base64 -e ‘print encode_base64(“\000test\@gmail.com\000contraseñaprueba”)'”

Nos quedaría otro método de autentificación por ver, que sería CRAM-MD5, el más seguro. De todos modos dado que que gmail solo permite mediante la creación de una sesión encriptada, no importa usar CRAM-MD5, el cual suele usarse cuando no es posible una comuncación cifrada.

En esta ocasión ninguna de las pruebas realizadas ha tenido ningún tipo de éxito, pero tan solo hemos probado con Gmail. Esto mismo podríamos hacerlo con cualquier servidor SMTP al cuan tengamos acceso. Como último ejemplo vamos a ver que sucedería con Live (hotmail):

ehlo test
250-BLU0-SMTP59.blu0.hotmail.com Hello [79.158.250.30]
250-TURN
250-SIZE 35840000
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-AUTH LOGIN PLAIN
250 OK
auth login
334 VXNlcm5hbWU6
xxxxxxxx
334 UGFzc3dvcmQ6
xxxxxxxx
235 Authentication succeeded
mail from:
250 2.1.0 test@hotmail.com….Sender OK
rcpt to:
250 2.1.5 test@live.com
data
354 Start mail input; end with .
from: Theliel
to: Theliel
Subject: TEST

Prueba 2
.
250 2.6.0 Queued mail for delivery

Bingo!! En un principio se podría pensar que sucede exactamente lo mismo que con gmail. En cambio, si miramos la bandeja de entrada ahora si que nos topamos con una interesante noticia… el mensaje llega correctamente a la bandeja de entrada y con el remitente completamente suplantado!! Vemos aquí un grabe agujero de seguridad por parte de MS, dado que cualquier usuario con una cuenta live unos cuantos conceptos podría suplantar cualquier identidad que quisiese y sin que el correo sea considerado SPAM. Evidentemente no es oro todo lo que reluce y si se mira un poco más a fondo uno comprobaría el origen REAL del correo. Pero en principio pasaría completamente por real.

Como hemos visto, es raro encontrar un sistema que sea completamente confiable y segudo. Cuanto más experimentas y pruebas, te das cuenta que prácticamente los fallos en la seguridad están a la orden del día. Muchos de dichos problemas son más que sabidos, pero quizás se necesitan tal y como están por otros motivos.

 

Hemos visto como un atacante podría crear un servidor de correo. Hemos visto como un atacante podría buscar y utilizar servidores relay. Hemos visto como podemos incluso usar nuestros propios servicios de correo para estos fines. Es decir, por desgracia es muy fácil a día de hoy suplantar una identidad. Esto sumado al Web Spoofing o URL Spoofing, es un arma terrible para los Spammers, Hackers… y toda la prole.

En la creación de esta parte, Email Spoofing, además de los datos suministrados, casi todos los servidores que he puesto a prueba con fines de redacción, antes o después mostraban una vulnerabilidad, un acceso, algo que podría mejorarse considerablemente.

Por tanto… ¿como podemos defendernos ante esta más que visible amenaza? Teniendo los ojos abiertos. No hay una norma… quizás la única es desconfiar, y cuando algo nos hace sospechar acudir a las cabeceras de los correos para ver la verdadera procedencia de este. En el mejor de los casos nos podrá decir el correo original, en el peor de los casos tendremos que conformarmos con la IP del remitente real. El peor escenario? que estén usando contra nosotros un servidor SMTP relay al cual se haya accedido mediante proxy, en cuyo casi no tendríamos prácticamente nada.

Es evidente que no se puede sospechar del 100% de los correos, pero si tener presente que en cualquier momento un correo de nuestra paraje, amigo, familiar… puede que no sea realmente de ellos. Por supuesto hay que tener en cuenta, que las personas no se dedican a esto para molestar, y que el 90% de este uso es con fines de SPAM, a fin de cuentas, tal y como comencé al inicio… ¿Quien no ha recibido alguna vez un correo falso?

Seguridad: Spoofing. Capítulo Cuarto -> Header Spoofing

ATENCION: Los ejemplos que se van a mostrar y “tutoriales” tan solo tienen carácter educativo. En ningún aspecto comparto filosofías de invasión a la intimidad, ataques contra un sistema informático o cuestiones similares. En la medida que sea posible siempre se usarán ejemplos y formas que puedan ser usados por cualquier persona, de forma que pueda verificar los contenidos escritos. No obstante, por motivos más que obvios, materiales como contraseñas, nombres de usuarios o de hosts, serán omitidos o modificado en las capturas de pantallas realizadas (o las lineas escritas). Es decir, los ejemplos serán completamente reales, los datos mostrados a vosotros necesarios para poder pertrechar estos ejemplos no siempre lo serán (Sí lo serán los resultados). Para que esto conste de forma clara, todo material sensible modificado o falso estará resaltado en ROJO. Por motivos de seguridad, todo el material que sea expuesto aquí (exceptuando software propietario o libre, citaciones expresas o código de terceros) tanto texto, imágenes y código son propiedad del autor y está completamente prohibido su reproducción completa o parcial en otros lugares, espero que se comprenda.

 

Header Spoofing

En un principio, cuando puse en mente esta serie de artículos, tenía pensado hablar tan solo de Referred Spoofing, pero por extender un poco más esto y que se comprenda mejor, vamos a expandirlo a todo el Header.

En realidad no estoy seguro si el término Header Spoofing existe o no. Ya sabemos que es el Spoofing y ha quedado más o menos claro. Pero que es ¿Header? Header (o Cabecera) pueden ser muchas cosas (Perdonarme y permitirme muchas veces los términos anglosajones, soy un férrimo defensor de nuestra lengua castellana y comprendo que para la mayoría de toda esta jerga existen términos castellanos para ellos. No obstante la costumbre de trabajar con ellos siempre en ingles te crea el hábito).

Una cabecera en una carta sirve para especificar por ejemplo la fecha. En informática un header suele ser lo mismo, una serie de datos que preceden a otros. Nosotros nos vamos a centrar en el header de una web, pero como digo el ámbito es muy grande. Más adelante, en eMail Spoofing por ejemplo veremos el header de un correo.

Cuando accedes desde el navegador a cualquier web, se ponen en marcha una serie de procesos que son completamente transparente para el usuario. Primero peticiones DNS y después el request (o petición) de la web al servidor. Este recuest explicado en simple sería algo así como enviar por ejemplo a google un mensaje que diga: “Quiero acceder a tu buscador”, y google con un response (contestación) contestaría algo así como: “Este es mi buscador…..” y la web se visualizaría. En cada petición que se envía hacia un servidor web, así como en cada respuesta de estos a nuestro PC, existe una cabecera con una serie de datos muy interesantes. Estos datos son preconfigurados por nuestro navegador (en caso de los request) en función de las opciones propias del navegador o de la web que estamos en ese momento visitando. Por su parte, los headers de los response de los servidores están igualmente preconfigurado por los servidores de ellos en función de su configuración o de nuestros propios request.

El secretismo en todo esto está en que a efectos prácticos para el usuario, estos headers no los verá jamás, en cambio, sin darse cuenta, la visualización de una web puede ser completamente diferente, así como otro millar de cosas tan solo por esa cabecera. Luego… que sucedería si modificamos nosotros a voluntad esa cabecera? Si modificamos los request, podemos producir un comportamiento interesante por parte del servidor objetivo. Del miso modo si modificamos el header de un response, estaremos modificando el comportamiento de nuestro propio navegador ante un request. ¿Que utilidad tiene esto?:

  • Acceso a webs sin autorización
  • Acceso a webs alternativas
  • Búsqueda de exploits en Webs
  • Cheats para juegos online
  • Etc…

 

¿Que aspecto tienen? Eso ya lo sabemos… en estas páginas por ejemplo se han publicado headers. Pero vamos a ser más concretos. Vamos a ver cual sería el header de una petición desde mi navegador Firefox a www.google.es:

GET / HTTP/1.1
Host: www.google.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1pre) Gecko/20100203 Minefield/3.7a1pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.google.es/ig?hl=es
Cookie: PREF=ID=XXXXXX
Cache-Control: max-age=0

Cada una de las etiquetas mostradas (Host, User-Agent, Accept…) tiene su propia utilidad y es igualmente importante. Y todas ellas son establecidas por el navegador que estemos usando. Si realizamos exactamente la misma petición, pero desde Internet Explorer esto es lo que tendríamos:

GET / HTTP/1.1
Accept: */*
Accept-Language: es-ES
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)
Accept-Encoding: gzip, deflate
Host: www.google.es
Connection: Keep-Alive
Cookie: PREF=ID=XXXXXX

Todas estas etiquetas de la cabecera de request, serán procesadas y/o ignoradas por el servidor destino, y este responderá con uno u otros datos de una u otra forma en correspondencia a estas cabeceras. Hay que decir que aunque estas cabeceras sean especificadas por el navegador, no quiere decir que sean inmutables. Las propias webs que se reciben, formularios que se rellenan… dan instrucciones también al navegador de como deben de solicitar dichos request. Es decir, es un círculo vicioso. El navegador es el primero en establecer una cabecera, y el servidor responde con una web. En dicha web, dependiendo de donde pulsemos o las acciones que llevemos a cabo, nuestro request incluirá información de estado de esta web y el servidor destino responderá del modo acordado a esa petición.

Por otro lado, también tenemos las cabeceras que son enviadas por parte del servidor a nuestro navegador. Su importancia suele ser menor, dado que lo que logran es modificar el comportamiento de nuestro navegador, algo que suele importar menos. No obstante también puede tener su utilidad como veremos más adelante. Vamos a ver los response de las peticiones anteriores:

HTTP/1.1 304 Not Modified
Content-Type: text/html
Date: Fri, 05 Feb 2010 15:40:46 GMT
Set-Cookie: IGTP=LI=1:LM=XXXXXXXXXX; expires=Sun, 05-Feb-2012 15:40:46 GMT; path=/ig; domain=www.google.es
Expires: Fri, 05 Feb 2010 15:40:46 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Fri, 05 Feb 2010 15:40:46 GMT
ETag: XXXXXXXXXXXXXXXXX
Server: igfe
X-XSS-Protection: 0

Algunas de las cabeceras son ellas mismas descriptivas y no hay que entrar mucho en detalle para comprender que significan o que función realizan, pero no por ello no dejan de ser importantes. Vamos a ver algunas de ellas:

 

-Etiquetas de Metodos y Etiqueta Host

Es la primera etiqueta que aparece, y es la única que podríamos decir que no es una etiqueta. No especifica ninguna cualidad del navegador, sino más bien como se han de obtener los datos, la URI de acceso y la versión del protocolo al que se está accediendo. Mi intención no es dar un repaso completo de cada una de las etiquetas de los headers, para eso tan solo tenemos que acudir a las especificaciones del protocolo. Por tanto vamos a centrarnos tan solo en lo que pueda ser más significativo, los métodos GET y POST. Aunque no sea una definición correcta, podemos decir que GET lo usará el navegador para obtener datos desde un servidor y POST cuando nuestra petición incluye datos que puedan ser significativos para el servidor, por ejemplo los formularios rellenos, credenciales de acceso…

En los dos ejemplos anteriores, la URI es “/”, es decir, se está obteniendo (GET) la ubicación raiz “/” del host especificado en la etiqueta “host”, en este caso “www.google.es”. No obstante la URI podría haber sido algo así como “/es” por ejemplo, para especificar el contenido dentro de “www.google” a recibir. Con esto hemos dicho también el significado de la etiqueta “Host”. Especifica el servidor al cual se desea realizar el acceso. La respuesta de la etiqueta Host por parte de response, podría venir dada pro la etiqueta Server, que especifica el servidor usado. En este caso “igfe” un servidor (software) propio de Google.

En el caso de los response, no aparecerá POST ni GET (entre otros), sino la respuesta a estos. Para ello, se especifica del mismo modo la versión HTTP que usará el servidor y un código que especificará información sobre el site que se ha solicitado. En el ejemplo anterior se contesta con un código 304 -> Not Modified. Es decir, en este caso implicaría que el contenido ha sido encontrado pero no ha sido modificado desde la ultima petición de este, posiblemente porque se ha realizado un refresh de la misma web. Como digo, podemos acudir a las especificaciones HTTP para conocer esto en detalle.

 

-Etiqueta User-Agent

Posiblemente una de las primeras etiquetas Spoofeadas en la historia. El User-Agent es un string, un identificador del navegador que estamos usando. Es una etiqueta fundamental, es la única forma que tiene el servidor de conocer el navegador que estamos usando. Esto es evidente tiene una importancia mayúsculas. ¿Por qué? Es obvio, cada navegador es diferente y usa tecnologías diferentes. Gracias a los User-Agent puedes especificar por ejemplo que tipo de contenido quieres para unos o para otros, puedes simplemente filtrar todas las peticiones de clientes específicos. Es decir, sin que lo sepamos, muchos contenidos que vemos en cada momento está dependiendo exclusivamente de dicho User-Agent. En los dos ejemplos, evidentemente cada User-Agent es completamente diferente.

Normalmente el User-Agent no solo brinda información de la versión del navegador o de su layout, sino incluso del OS que se está usando. En el primer caso, tenemos desde la versión de Firefox, la compilación, la versión del kernel NT (6.1 = Windows 7), incluso el lenguaje de Firefox. En el caso de IE los datos son similares, pero evidentemente referentes a IE.

 

-Etiquetas Accept y Accept Language

La primera especifica los tipos de archivos que aceptará, y si hay más de un tipo especificado, la preferencia de un tipo de contenido respecto a otro. La segunda el lenguaje aceptado, e igualmente que con Accept, si se especifica más de uno cada uno tiene una preferencia diferente. Normalmente esta última etiqueta la podemos nosotros modificar seleccionando otro idioma en las opciones de configuración del navegador. Ojo!! no tiene nada que ver el idioma del navegador, sino el lenguaje solicitado por el navegador. Si el servidor dispone de diferenciación de idiomas nos dirigirá al nusetro, sino, nos devolverá el idioma por defecto que tenga configurado el servidor.

La contestación por parte del servidor en su response de Accept, vendrá dada por la etiqueta Content-Type que especifica precisamente el tipo de contenido que será transferido.

-Etiquetas Accept-Encoding y Accept-Charset

La primera es importante, especifica el tipo de compresión soportada por nuestro navegador. Nuestro navegador envía al servidor una serie de parámetros (las etiquetas) y según estos el servidor podrá seleccionar que web mostrar. Si el servidor está usando compresión y nuestro cliente la soporta, el servidor enviará la información comprimida, ahorrando ancho de banda.

La segunda etiqueta simplemente especifica el conjunto de caracteres que se usará

 

-Etiqueta Cookie

Antes de comenzar… ¿que es una Cookie además de una galleta? Es un pequeño archivo de texto que almacena normalmente unos cuantos datos que son reutilizados después por las webs. Es la única forma que tiene una web de guardar datos en el PC del usuario. Estas Cookies son las que se encargan por ejemplo (normalmente) de mantener una sesión abierta en aquellos sitios que requieren una autentificación, o guardar un pequeño registro sobre algo. Pero por dichos motivos son también un objetivo muy importante. Si una Cookie se usa para que podamos acceder por gmail (por ejemplo), si esa cookie se traspasase a otro usuario, es posible que ese otro usuario pudiese acceder a la misma cuenta de correos que el otro, sin necesidad de conocer las credenciales (usuario y contraseña). Es decir, una cookie puede ser una llave a cualquier sitio que sea necesario autentificarse. Por esta razón, dichas cookies suelen tener una caducidad, así tenemos cookies de sesion (que son eliminadas cuando salimos del navegador) o cookies que son permanentes (o se borran). Por desgracia estas Cookies son usadas demasiado asiduamente para espiarnos o guardar un seguimiento nuestro. Dado que la cookie es accedida también por el servidor, se puede usar para contabilizar las veces que se accede a tal página, realizar seguimientos de las personas… en fin… todo tiene siempre un lado negativo.

Por lo tanto, es otra etiqueta de gran importancia. El navegador especificará la cookie de dicho lugar. Si en dicho momento aun no tiene ninguna cookie almacenada, creará una con el objeto de que pueda ser usada por el servidor si así la requiere. La importancia de poder modificarlas es por tanto muy grande. Las cookies, mientras que suelen estar almacenadas en nuestro PC en archivos, estas no se transmiten como archivos, sino en la cabecera, dentro de la etiqueta Cookie. Es decir, esta etiqueta lo que especifica es el contenido de dicho archivo. Modificar esta etiqueta por tanto implica modificar los datos que contiene la cookie. Evidentemente por motivos de seguridad, estos datos suelen ser ilegibles a simple vista, usando Hashes o algun otro sistema para que la información de estas cookies no sea visible de forma simple (o sea imposible).

 

-Etiqueta Referer

Esta etiqueta es fundamental en muchos aspectos. Lo que realiza esta etiqueta es especificar la web desde la que estamos accediendo a la nueva página. Su uso es claro. El servidor puede actuar de una forma u otra dependiendo de cual era el origen. Un ejemplo muy sencillo a esto es cuando accedemos desde Google images a cualquier imagen y el servidos nos devuelve un error diciendo que la imagen no puede mostrarse porque no se permite su “enlazamiento” desde otro lado. ¿Como sabe el servidor que estamos accediendo desde google? gracias a esta etiqueta.

En cambio, posiblemente el uso más extendido de Spoofing de esta etiqueta sea el del acceso sin autorización a sitios de pago, generalmente páginas pornográficas. Estos sites, suelen permitir con la misma inscripción a un site concreto navegar por otros sites que no son de su propiedad. ¿Pero como sabe ese otro site si el usuario puede o no puede acceder? O ese otro site tiene acceso a la misma base de datos para poder reconocer usuario/contraseña, o simplemente permite el acceso siempre y cuando la etiqueta referer provenga de un site pactado. Es decir, modificando a voluntad una etiqueta referer, es posible acceder a muchos sitios pornográficos de pagos, dado que dichos servidores cotejarán dicha etiqueta por si proviene el usuario de un site con acceso dicho contenido.

 

-Etiqueta Cache-Control

Esta etiqueta la encontramos de forma predominante los response por parte del servidor. En teoría es una orden de como el navegador debe de manejar el caché para dicha página. El caché de un navegador guarda en disco ciertos contenidos de una web para poder acceder a ella más adelante de forma más rápida y eficiente. Pero es evidente que todo el contenido no siembre es bueno cachearlo. Si se cachea y usa el contenido de la caché en vez del deservidor siempre se corre el riesgo de que los datos que estemos visualizando no sean correctos. Un buen manejo del caché podría ser por ejemplo marcar el contenido estático como puedan ser imágenes, scripts… con una duración mayor al que pueda tener por ejemplo un html dinámico con contenido de texto que está casi continuamente cambiando.

Si controlamos el valor de este campo, podríamos obligar a nuestro navegador que cachease el contenido o que no lo hiciese, ambos casos pueden ser útiles en momentos concretos.

 

Aquí tan solo vamos a dar unas pautas de como modificar estas etiquetas. En teoría se puede modificar cualquier cabecera, lo que no quiere decir que pueda ser útil. Por ejemplo, la utilidad de modificar la etiqueta “Accept Language” sería un poco absurdo, dado que puede ser modificada a voluntad en el mismo navegador. Por cuestiones evidentes no puedo poner un ejemplo de Referer Spoofing de una web adulta, pero puedo poner otros ejemplos que pueden extrapolarse a cualquier uso real. Recordar que Spoofing es engañar, modificar… y eso es lo que pretendemos. Vamos a ver ejemplos de Referer Spoofing, Cookie Spoofing y User-Agent Spoofing. Las herramientas que podamos usar para estas prácticas pueden ser más o menos las mismas siempre. Ya que lo que vamos a realizar es modificar estos headers, necesitaremos algo que nos permita interceptar estos datos, y básicamente vamos a encontrar dos formas: La primera con alguna herramienta del mismo navegador web (Bienvenido sea Firefox). La segunda por medio de un Proxy que nos permita modificación “al vuelo”. Para ello vamos a usar algunas extensioens de firefox y como Proxy por ejemplo Paros.

 

User-Agent Spoofing:

Vamos a ver un ejemplo simple de como afecta en el navegador este User-Agent. Lo bueno para muchos es que para aquellas prácticas que están relativamente expandidas existen utilidades para realiza dicha tarea de forma simple. Por ejemplo tenemos herramientas en Firefox que nos permiten especificar directamente que User-Agent queremos usar.Vamos a hacerlo de las dos maneras. Para ello vamos a ver que ocurre cuando llamamos a “www.google.es” con el User-Agent por defecto de mi navegador y que ocurre si invocamos la misma página con el User-Agent del iPhone 3.1.3:

Mi User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1pre) Gecko/20100205 Minefield/3.7a1pre

iPhone 3.0 User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16

 

Trabajando solo con Firefox (Firebug+User-Agent Switcher):

Ventana de Firebug -> Net -> HTML -> Headers

Configuración User-Agent Switcher

En las dos primeras imágenes podemos comprobar perfectamente como sería una petición básica a www.google.com y como se configuraría un User-Agent dentro de User-Agent Switcher. Firebug es sin duda una herramienta potentísima que puede hacer las delicias de muchos, es una de esas herramientas que cuanto más usas, más aprecias, capaz de hacernos la vida mucho más fácil a los programadores/diseñadores webs.

Google para iPhone y nuevo User-Agent

Al establecer el nuevo User-Agent, el servidor www.google.es considera que la petición se está realizando desde un iPhone, y lo resuelve enviando la web específica para dicho dispositivo. Es tan solo un ejemplo de la importancia de este simple identificativo.

Pero al igual que hemos realizado esto con herramientas de andar por casa (a fin de cuenta una extensión en firefox no deja de ser una extensión), la mejor forma de realizar esto (puesto que no solo nos va a servir para este caso concreto) es la utilización de un servidor proxy que nos intercepte todas las peticiones realizadas:

Paros Proxy, examinando una cabecera
Paros Proxy, modificando una cabecera

Paros Proxy es un software gratuito, sin la complejidad de tener que instalar un servidor proxy completo. Como se muestra en la primera imagen tan solo captura las peticiones que se van realizando, y al finalizar la carga es tan simple como examinar las cabeceras. Una vez localizado el objetivo, es tan facil como poner un “cepo” (trap) a los request, de este modo antes de que sea enviado nuestro request, podremos modificarlo a voluntad.

Aunque no se muestra el resultado final, el efecto es exactamente el mismo que el mostrado anteriormente, salvo que queda de manifiesto el potencial de una herramienta así, dado que con ella podremos modificar no solo el User-Agent, sino lo que deseemos, tanto de los request como de los responses.

 

Referer Spoofing

Ya hemos explicado lo que es, y en User-Agent Spoofing se han dado pautas de como podría realizarse cualquier Header Spoofing. Mi objetivo original era explicar un poco por encima tan solo el Referer Spoofing, y al final será el menos especificado.

En realidad la imaginación es el límite.Cuanto más es usada una etiqueta, más beneficioso podría ser poder controlarla. En este caso hemos dicho que Referer Spoofing se suele controlar para conocer la web de procedencia que nos ha originado en dicho lugar. Mi idea originar era poner una web adulta de ejemplo, pero por cuestiones de edad y de privacidad he decidido no hacerlo. Podría mostrar tan solo imágenes de las propias cabeceras… pero entonces no lograría el objetivo de ver un antes o un después, como hemos realizado con el User-Agent.

Otros ejemplos notables del control de esta etiqueta es para filtrar contenido. Esto es muy usado en blogs y otros sites que no desean que su contenido pueda ser enlazado desde el exterior, mostrando una imagen “falsa” (o mejor expresado, diferente de la esperada) en caso de que sea enlazada con una referencia href. A fin de cuenta, cuando se enlazan imágenes u otros tipo de contenido de forma directa, el ancho de banda corre a cargo de la web original. Por parte de los servidores esto se evita con filtrados en el servidor web, y para evitarlo basta con modificar la etiqueta referer.

 

Cookie Spoofing

Esta etiqueta siempre será objetivo de incesantes ataques. Tal es así que prácticamente todas las cookies actualmente tienen algún tipo de encriptación o modificación para que no se pueda apreciar de forma clara que es lo que realiza.

No obstante, muchas veces este “cifrado” puede ser reversible o se puede inferir por el contenido. Otras veces no importa siquiera el contenido de dicha Cookie, y modificándolo a gusto se pueden obtener resultados igualmente satisfactorios.

Un ejemplo aplicado de esto fue usado por ejemplo en mi Artículo sobre Hammerfest, el cual por cierto tengo que rehacer. ¿Por qué fue necesario Cookie Spoofing para dicho artículo? Hammerfest es un juego Online que tan solo permite 3 cuentas máximas asociadas a un mismo PC. Si intentas crear una cuenta para jugar por encima de dicho número, el servidor te lo impedirá. Para poder hacer esto, el servidor tiene algunas opciones. Una podría ser verificando la IP, pero dado que la mayoría de las IPs son dinámicas, no serviría de mucho. La otra opción es por Cookies. El navegador cada vez que intenta acceder envía su cookie al site. El site coteja el ID de dicha cookie (por así decirlo) en su base de datos. Si ya tiene asociada a ella 3 usuarios no permite más. Aunque se elimine la cookie del navegador no ocurre nada, puesto que nada más conectarse el navegador especificará la cookie que usará (aunque esté vacía), la cual tiene el mismo ID, la cual será cotejada. ¿pero que sucede si cambiamos el ID de la cookie? El servidor pensaría que estamos desde otra máquina, almacenaría la nueva ID y nos daría acceso a otras 3 cuentas más para ser creadas.

En el ejemplo puesto, no es necesario siquiera conocer que tipo de ID está usando el servidor, con modificarlo por un valor arbitrario tendremos suficiente.

La importancia del Spoof de cookies tiene mayor importancia cuando conocemos la cookie de sesión de otro usuario, dado que si usamos sus datos para modificar la nuestra, podremos tener acceso a su sesión. Se puede pensar que es complicado conocer la cookie de otro usuario… pero no es complicado en realidad. Formas de obtener estos datos podrían ser mediante Snifers o XSS. En su momento veremos esto, pero por ahora vamos a verificar que puedo iniciar sesión en Internet Explorer en mi cuenta de Gmail sin pasar por el nombre de usuario y contraseña. Esto se puede hacer en dos fases. La primera “espiando la Cookie de Firefox y dirección una vez la cuenta está abierta, y en la segunda parte simplemente usar dicha cookie en IE. Recordar que la cookie en el PC no deja de ser un archivo, pero se especifica directamente en forma de datos en la misma etiqueta Cookie:

Cookie de Sesión y URL gMail

Evidentemente por motivos de seguridad he emborronado los datos propios. Aquí lo importante tan solo es la URL completa y la Cookie. Imaginar ahora que accedemos a IE, pegamos la URL que tenemos en gMail e interceptamos la Cookie enviada por IE y la modificamos por la que obtenemos en Firefox

Inserción Cookie en IE

Aunque pueda verse un error de certificado, esto no es importante. Dado que Gmail usa HTTPS, cualquier modificación en medio (como la realizada al cambiar la cookie) invalida el certificado. Pero si lo aceptamos, vemos como de forma mágica podemos acceder a gMail sin pasar por el nombre de usuario o contraseñas, ya que estos están embutidos de algún modo en la propia Cookie. Es cierto que quizás no seamos capaces de comprender el Hash usado por Google para proteger dicha información, pero no importa, simplemente copiando y pegando tenemos un resultado impecable.

Pensar no solo en las cookies de sesión. Pensar en que pasaría con aquellas cookies que usamos de forma persistentes. Es decir, podemos activar muchas veces las casillas de “Recordarme en cada Visita”, lo cual lo que realiza es que la Cookie usada no se invalida por cada sesión, sino que tiene a lo mejor una validez de una semana.

Sobre la modificación de Cookies que podamos inferir su contenido para especificar otro, será una cuestión que se abordará mejor cuando hablemos de Hashes.

 

Podríamos añadir muchos otros Spoofing dentro de las Cabeceras. Por ejemplo en todos los ejemplos mostrados se presupone que la utilidad es a la hora de los request, pero también puede ser útil modificar los response para producir en aplicaciones Flash por ejemplo un comportamiento completamente diferente. Por ejemplo imaginar que en un response se configuran los datos de una aplicación Flash para tener más vidas (en un juego). Modificando el response podríamos obtener más vidas.

Otra utilidad que se tiene es para modificar los datos enviados por el método POST al servidor. Con POST normalmente se especifican una serie de valores que son especificados en un formulario previamente. Pero muchas veces los valores que podemos introducir en el formulario son muy limitados en correspondencia a los que podríamos introducir directamente realizando Spoof a la cabecera. O por ejemplo pensar en formularios que dependiendo si los rellena un usuario u otro tiene más o menos campos, puesto que es posible que el sistema de procesarlos el servidor sea la misma forma. En dicho caso podríamos añadir “campos” extras con información arbitraria para obtener permisos administrativos por ejemplo u otros menesteres.

 

Seguridad: Spoofing. Capítulo Tercero -> Web Spoofing

ATENCION: Los ejemplos que se van a mostrar y “tutoriales” tan solo tienen carácter educativo. En ningún aspecto comparto filosofías de invasión a la intimidad, ataques contra un sistema informático o cuestiones similares. En la medida que sea posible siempre se usarán ejemplos y formas que puedan ser usados por cualquier persona, de forma que pueda verificar los contenidos escritos. No obstante, por motivos más que obvios, materiales como contraseñas, nombres de usuarios o de hosts, serán omitidos o modificado en las capturas de pantallas realizadas (o las lineas escritas). Es decir, los ejemplos serán completamente reales, los datos mostrados a vosotros necesarios para poder pertrechar estos ejemplos no siempre lo serán (Sí lo serán los resultados). Para que esto conste de forma clara, todo material sensible modificado o falso estará resaltado en ROJO. Por motivos de seguridad, todo el material que sea expuesto aquí (exceptuando software propietario o libre, citaciones expresas o código de terceros) tanto texto, imágenes y código son propiedad del autor y está completamente prohibido su reproducción completa o parcial en otros lugares, espero que se comprenda.

ATENCIÓN!! El Phishing creado para este capítulo tan tiene carácter didáctico, no se permite su uso fuera de este ámbito. El Phishing es completamente ilegal.

 

Web Spoofing

Aunque el Phishing no es más que un tipo de Web Spoofing, podemos afirmar sin duda alguna que es la práctica más común. Por Web Spoofing entendemos la modificación o suplantación de una página web que evidentemente no es nuestra. Phishing es la suplantación de una web con fines íntegramente delictivos, para poder obtener datos de usuarios que infelizmente caen en las redes de estas páginas y no son capaces de diferenciar lo uno de lo otro. Es decir, el Phishing es tan solo una singularidad dentro de Web Spoofing, aunque es sin duda su mayor uso.

Aquí tendríamos que hacer una diferencia muy importante. Desde mi punto de vista, el Spoof implica la modificación de algo que es nuestro, como son los casos que hemos visto: IP Spoofing (Modificamos nuestra IP), MAC Spoofing (Modificamos nuestra MAC), Phishing (Modificamos nuestra web)… pero en ningún caso estamos modificando aquello que no lo és. Es decir, no estamos modificando la IP de un usuario, no estamos modificando la MAC de un usuario, no estamos modificando la Web de un usuario. Esto es algo muy importante de entender, con Spoofing tan solo engañamos. Existen técnicas para modificar aquello que no está bajo nuestra “propiedad”, como pueda serlo XSS, envenamientos… técnicas que serán relatadas en otros artículos. Hablemos por tanto tan solo de Spoofing.

Los objetivos de Web Spoofing son claros:

  • Phishing, obtención de credenciales de otros usuarios
  • Reivindicaciones y Mofa
  • Estafa

Como hemos dicho el objetivo principal y sobre lo que vamos a centrarnos principalmente es el Phishing. Para que un ataque de Phishing se lleve a cabo son necesarias 4 fases. Primero un atacante debe de copiar lo más fidedignamente posible la página web que desea suplantar, al menos tan solo en apariencia, no es necesario un plagio completo de todo el site. Segundo, debe de modificar dicha web para que el usuario al introducir sus datos, estos queden almacenados de algún modo para poder recuperarlos el atacante. La tercera fase es realizar un proceso de URL Spoofing y por último utilizar alguna técnica que le permita engañar a los usuarios para acabar en su web falsa.

Redactar sobre Web Spoofing o Phishing es un problema. Mi intención es la de explicar, enseñar y así poder evitar ataques similares. El problema es que igualmente que esto puede servir con fines didácticos, cualquier persona podría adaptar estas letras sin problema alguno para pertrechar un ataque real, al igual que con los Spoofing expresados anteriormente. A diferencia del resto, hoy en día está de moda el Phishing, y la ingenuidad de las personas es aun demasiado alta. Si combinamos esto con las secciones siguientes (En particular con eMail Spoofing) sería dejar demasiado facil a un usuario mal intencionado poder realizar un ataque efectivo. Por ello al menos, voy a omitir todo código php y realizar algunos pequeños cambios para dejar claro que esto tan solo tiene fines didácticos. Aun así se incluirá al final del todo de esta sección, el enlace a una web creada con fines didácticos de lo que podría ser un Phishing en toda regla, y se incluirá del mismo modo un enlace al archivo donde se podrán obtener las identificaciones introducidas.

Para esta ocasión quería basarme en lo que sería un Phishing sobre

, una red social en España. Me puse en contacto con el gabinete legal de ellos y no les pareció una buena idea. Como les comuniqué, es normal, normalmente se es reacio a que puedan leer vulnerabilidades de sus propios servicios. Así que aunque tenga que modificar el artículo ya redactado, será sobre FaceBoock, la red social mayor que existe ahora mismo.

 

Fase 1: Creación de un site igual al del objetivo

Como ya he explicado, en el Phishing no importa recrear la web (que puede ser compleja) completamente, el objetivo es tan solo engañar al usuario que accede a ella. El hábito de un usuario normal es visitar la web e incresar su usuario y su contraseña para acceder. Si nos equivocamos, lo normal será volver a introducir los datos. Es decir, normalmente no nos preocupamos de ir a otros enlaces como “ayudas”, “Ha olvidado la contraseña” ni similares. Dado qeu ese comportamiento se repite para el 99% de los usuarios, tan solo tenemos que hacer creer al usuario que la web que está visitando es realmente ella. Dado que no tenemos por detrás una base de datos original, es evidente que se introduzcan los datos que se introduzcan, jamás logrará el usuario acceder al site, lo cual hace que sea común redirigir a dicho usuario despues de enviar los datos al site original para que no sospeche.

¿Pero como se puede copiar un site?

Dependiendo del grado de exactitud que necesitemos, puede ser más rápido o más lento el proceso:

  • Clonación de un site completamente independiente (físicamente estéticamente claro, no funcionalmente)
  • Creación de un site completamente dependiente al original, exceptuando la página de acceso.

En primer lugar, la clonación de todo un site de forma manual, o incluso a través del propio navegador, no es factible. Con clonar un site me refiero a crear un site con el mismo contenido que el original, enlaces, imágenes… pero accediendo a todo ese contenido de forma local. Es decir, podemos plasmar una imagen en nuestro Phishing, pero esta puede venir desde nuestro propio host donde tenemos alojados el Phishing o cargarla directamente desde el Host original. Crear una clonación tiene sus ventajas, por ejemplo es independiente a cualquier cambio que pueda realizar el site original, dado que scripts, html, imágenes y otros de tu propio site estarán almacenados en tu host, no en el de ellos. Por otro lado, es posible navegar por las diferentes secciones del site sin redirigirse al site original, que de otro modo produciría que un usuario que accediese a otro enlace perder el Phishing.

Pero todo no es positivo. La creación completa (o al menos lo más fiel posible) de un site (una página web) incluye tener en nuestro host muchísima más información, lo que produce un aumento considerable de espacio en disco, de ancho de banda usado y que además, es posible que el site original tenga conexiones más veloces que las nuetras, lo que haría que la navegación por nuestro site sería mucho más lenta para el usuario víctima. Por supuesto, la clonación, no es tan sencilla de llevar a cabo, y la mejor forma de hacerlo suele ser a través de un Web Spider, o quizás sea suficiente con wget.

Un proceso manual incluiría ir buscando uno a uno cada elemento e ir almacenándolos, después editarlos para que cada ruta especificase una ruta relativa a nuestra clonación y así poder montar la web. Pero esto evidentemente no es muy práctico. Yo voy a usar Teleport en Windows para este caso y para el segundo Firefox en Windows. Tampoco voy a detallar paso a paso que hacer, puesto que si se ha llegado aquí, presupongo que uno sabe más o menos moverse por cualquier programa o al menos comprende lo que está haciendo:

El tamaño de todo el site descargado para Tuenti, no llega a los 3MB y son más de 400 archivos. En el caso de Facebook, son más de 5000 archivos y unos 200MB. Esto os da una idea de lo bueno y malo de este proceso. 3MB pueden ser asumibles, 200MB para un Phishing es algo impensable. En contra partida, podemos navegar por gran parte de la web sin abandonar nuestro site clonado. En la siguiente imagen se puede observar esto:

En el ejemplo se puede ver que no solo se está emulando el site principal, sino que se puede navegar por el site y que al menos aparentemente todo muestra ser exactamente igual al original. Como puede verse en la barra de direcciones se conserva incluso la misma estructura de carpetas y archivos, aunque en el ejemplo se está haciendo una exploración en local, es decir, no se ha subido nada a ningun servidor externo.

Hay que tener en cuenta que la clonación jamás será exacta. Podemos extraer imágenes, contenido audiovisual, scripts… pero todo aquello que queda detrás y procesado tan solo por el servidor (como por ejemplo contenido dinámico, php, bases de datos…) no puede ser emulado de ningún modo. Es decir, podemos calcar pixel a pixel si deseamos el aspecto visual, pero nada más.

En el caso de la clonación de FaceBook, es un site demasiado complejo (sin entrar en bases de datos o PHP), 200MB sería demasiado para un Phishing, y más para un ejercicio. Quizás sea más. Quizás nosotros tan solo necesitamos lo fundamental, es decir, la pantalla de inicio de sesión y nada más. El resto del contenido podría ser simplemente enlazado con la web original, y mantener tan solo en nuestros servidores el html principal. De este modo ganamos en velocidad, comodidad, ahorramos en ancho de banda, en espacio… En contrapartida, estamos a merced de lo que haga el site original o peor aun, que la víctima pueda acceder a algún contenido desvinculado de nuestro site falso, lo que produciría que este se quedase fuera del Phishing.

Dependiendo del site, se podría realizar desde Firefox y usar la opción “Guardar Como…”. Como tan solo sería necesario la “cara”, nos basta con guardar únicamente la página HTML, de forma que los enlaces se conserven tal cual están. Haciendo este procedimiento pasamos a tener tan solo 1 archivo html de 30KB, el resto del contenido se cargaría desde la web original de FaceBook, lo cual es una ventaja. El problema es que si modificasen algo en el HTML, el site falso podría dejar de funcionar correctamente:

Como se puede apreciar tanto en la URL como en el destino del enlace seleccionado (aunque no aparezca, se está señalando la imagen grande de arriba “facebook”, y como se ve, no está apuntando a ninguna ruta local, sino al enlace real. Tan solo con dicho html tenemos lo mínimo necesario para poder realizar el Phishing.

Por otro lado, usar la mínima expresión a la hora de crear el Phishing, tiene la ventaja de que las URL señaladas a cada enlace corresponden a las originales, luego todas ellas no incurren en el problema de tener que usar URL Spoofing (Que se verá en la fase 3º). Una vez terminado este sencilo proceso, deberíamos de tener una copia (ya sea completa o parcial) del site objetivo, en este caso ejemplo, de Facebook. Tan solo bastaría subir nuestro site a cualquier hosting o copiarlo a nuestra carpeta principal de nestro servidor web. Si cualquiera accediese a ella en este punto, tendríamos una pantalla de acceso exactamente igual a la original, aunque si introduciésemos culaquier dato o fuesemos a cualquier enlace, nos redirigiría al site original.

 

Fase 2: Modificación

La segunda fase podría considerarse realmente el Web Soofing o Phishing. En realidad podría crearse la web desde cero si por cualquier aspecto no fuese posible “clonar” la web objetivo. El problema que ello tendría que posiblemente en algún detalle esta sería diferente a la original. Cuanto más fidedigna sea la copia, mejor resultado tendrá para un atacante, puesto a fin de cuentas todo objetivo es que el usuario no se de cuenta del engaño.

Pero tal y como hemos llevado el ejemplo, no serviría de nada. El objetivo es que el usuario cuando introduzca los datos en nuestro site falso, estos de alguna manera puedan ser accedidos después por el atacante. Ahora mismo se me ocurren tres formas para hacerlo:

  • Tener una BD debajo del site donde almacenar los nombres de usuarios y contraseñas
  • Tener un motor SMTP debajo del site para enviar por correo al atacante los datos
  • Escribirlos directamente en un archivo en nuestro servidor

El más eficiente de todos para un atacante sería almacenarlo todo en una base de datos, en la cual podría además registrarse fecha/hora o cualquier otra información de utilidad. La desventaja es que el atacante tendría que tener disponible no solo algún tipo de hosting (ya sea local o no), sino que posiblemente soporte para PHP y bases de datos. No voy a explicar como sería este caso por varias razones. Principalmente porque he dicho que por cuestiones de seguridad no voy a transcribir nada en PHP, luego prácticamente cualquiera de los 3 casos lo veríamos igual. Segundo porque tendríamos que estar manejando bases de datos y sería extendernos más de lo necesario.

En segundo lugar tendríamos una solución mucho más cómoda para el atacante. Cada vez que un usuario cometiese el error de caer en la trampa, el atacante recibiría un correo electrónico con las credenciales de dicho usuario. Esto que puede parecer algo muy complejo no lo es en absoluto, tan solo es necesario usar por debajo php para enviar un correo o programar un pequeño motor SMTP con los datos de nusetro correo gmail (por ejemplo) para realizar la tarea. No pensar en una web como algo estático. Cuando un usuario ingresa los datos, dispararía una serie de acciones que acabarían con el envío de un correo al atacante.

En último lugar y el que usaremos aquí consistiría en registrar los datos introducidos por el cliente en un archivo de texto. Principalmente usaremos este método para que aquél que lo desee, al final de estas letras pueda verificar que efectivamente funciona, y que la única diferencia de un Phishing real a este es el fin por el que se ha creado. Aun así como he dicho no se incluirá le código PHP para ello, sería demasiado fácil para quien pueda tener malas intenciones.

Visto esto, tendríamos que pensar como podríamos realizar esto. En mi caso concreto, las modificaciones realizadas al código fuente de mi Facebook.html han sido mínimas:

  • Modificación de la barra de título para dejar claro que es un Phishing didáctico, sustituyendo “Bienvenido a Facebook en Español (España)!” por “ESTE SITE/PHISHING TAN SOLO TIENE FINES DIDACTICOS”
  • Modificación del valor por defecto de “correo electronico” y “Contraseña” por: “Introduce correo de prueba” y “Introduce contraseña de prueba”
  • Renombrar Facebook.html por index.html para evitar la necesidad de apuntar a un html
  • Modificación de la acción que se realizaría al entrar en facebook por mi propio código
  • Creación e incorporación de mi código php, que escribirá los datos introducidos en un archivo de texto y redirigirá al usuario de nuevo a esta entrada

Mi intención es clara, que nadie pueda usar este Phishing didáctico para otros fines.

Sobre cada uno de los pasos realizados, sería entrar en programación html y php, y para ello ya tenemos innumerables libros que nos explican como hacer lo que deseemos hacer. Es decir, no voy a ir ahora explicando como realizar dichas modificaciones, no es el objetivo de estas letras. La cuestión es que al acabar, deberíamos de tener el Phishing completado. A partir de este momento, tan solo se trataría de aplicar diferentes técnicas para poder engañar de forma más fiel al incauto. ¿Por qué? En este momento lo que tenemos creado es lo siguiente:

Automáticamente nos llama la atención la extraña dirección que he usado. Dado que todo el Phishing lo tengo alojado en un hosting, tengo la posibilidad de crearlo en un subdominio o meterlo dentro de la ruta que yo desee. De este modo primero oculo por ahora la ubicación del Phihing, y la segunda la importancia de la fase 3º que aun no hemos hablado de ella. Tan solo verificar por la imagen que el site es tal y como se ha descrito y a su lado un documento de texto con los 3 primeros datos pruena introducidos.


Fase 3º: URL Spoofing

Podríamos dedicar en este mismo artículo un apartado específico para URL Spoofing, dado que no deja de ser un Spoofing más. Pero creo que su ámbito debe de ser también el de Web Spoofing, a fin de cuenta URL Spoofing podría ser perfectamente otra singularidad más de este. Sea como sea he preferido incluirla aquí.

A fin de no entrar en matices técnicos sobre URI, URL o URN, podemos definir de forma simple que una URL (dentro de internet) no es más que la dirección de un recurso, y el URN el recurso en sí. URI por tanto sería el conjunto entre URL y URN. Esto no tiene mayor complicación:

URI: blog.theliel.es/favicon.ico, URL: blog.theliel.es, URN: favicon.ico

Tener en cuenta que aunque a veces se omita el URN no implica que no exista, tal es el caso de los html tipo index.html, en los que su nombre se omite por defecto, pero están presentes igualmente.

Con esto, el término de URL Spoofing queda claro. Sería la técnica de modificar de algún modo o hacer parecer nuestra URL como otra, con el fin normalmente de aproximar al máximo nuestra URL con la de un site original.

Imaginar por ejemplo que tengo alojado el Phishing en:

“http://blog.theliel.es/docencia/66666666666666666666666666666666666”.

Evidentemente cualquier usuario que accediese a mi Phishing lo primero que podría notar extraño es el por qué está intentando acceder a “facebook.com” y en vez de ello está accediendo a un dominio diferente y una extraña sucesión de seises consecutivos. Evidentemente esto choca enormemente y sería complicado que un usuario pudiese percatarse de la trampa. Con URL Spoofing se trataría de modificar lo máximo posible dicha URL para asemejarse lo más posible al original. Y para esto existen numersas técnicas que son usadas por los atacantes:

  • Uso de nombres de archivos y estructuras de carpetas similares al site original
  • Usar dominios o subdominios lo más aproximados posible al original, o al menos ser inteligentes en su elección, uso de los ccTLD
  • Aprovecharse de los IDN (Nombres de dominios internacionales)
  • Ejecución de Scripts en el site para ocultar la verdadera URL del Phishing
  • Usar técnicas de redirección
  • Envenenamientos DNS

Algunas de dichas técnicas son simples, otras tremendamente complejas o costosas. La mayoría de los Phishers (Si es que ese nombre existe) no suelen complicarse tanto la vida, y tan solo se quedan en los dos primeros puntos. Un ataque más sofisticado posiblemente implicaría el uso de los puntos listados más abajo.

Tal y como estamos exponiendo el problema, lo primero sería reconstruir la URL de forma similar a la de la original. Si miramos la URL de tuenti (la de facebook no tiene ninguna “carpeta” anadidad a ella, tenemos que es la siguiente:

“http://www.tuenti.com/?m=login”

luego tan solo tendría que renombrar o mover los archivos en mi servidor a otra carpeta, siendo esta nueva carpeta llamada “?m=login”

blog.theliel.es/?m=login

Así me he evitado una parte, pero aun queda la otra… que es más complicada de eliminar. Lo cual pasaríamos al punto segundo, como poder modificar el dominio, o como podría un atacante intentar engañarnos. El problema es que un dominio no puede modificarse, con lo que la primera opción a la que se recurre es al uso de subdominios con la esperanza de no notar demasiado el cambio. En nuestro ejemplo podríamos intentar hacer alguna variante tal que así:

“http://tuenti.theliel.es/?=login”, “http://acceso.tuenti.theliel.es/?=login”, “http://www.tuenti.theliel.es/?=login”…

creo que se comprende perfectamente la idea. Evidentemente esto no es demasiado profesional cuando se requierer realizar un Phishing perfecto, pero en cambio es el sistema usado la gran mayoría de las veces, y aunque suene ridículo, suele funcionar bastante bien para los atacantes. Existe multitud de trucos a este aspecto. Por ejemplo otra práctica habitual es sustituir el nombre del dominio por su equivalente en IP, dado que a fin de cuenta un nombre de dominio no es más que una IP asociada a ella. Es decir, se puede expresar la dirección real de “facebook” en este caso de cualquiera de estas dos formas:

http://www.facebook.com

http://69.63.189.11

Las dos formas son completamente válidas, solo que con la segunda forma, el nombre queda completamente oculto. Luego una buena forma de ocultar la URL sería usar su equivalente IP. Y por último, otra técnica para intentar “esconder” la URL o al menos hacerla menos visible sería el uso de la sintaxis para introducir autentificación en una web, FTP… la forma que tendría esta tipo de dirección sería algo así:

http://facebook@theliel.es/

http://acceso:facebook@theliel.es/

Cuando se expresa una URL de dicho modo, lo que se está enviando a la web theliel.es que se desea acceder con el nombre de usuario “facebook”. En el segundo caso sería exactamente lo mismo, solo que en este caso el nombre de usuario sería “acceso” y la contraseña “facebook”. La idea de esto no es iniciar sesión en dicho lugar Phishing con credenciales de ningun tipo, sino de nuevo ocultar en la medida de lo posible la URL para que el objetivo no se percate. Se podría construir una URL con los dos métodos anteriormente explicados:

http://facebook@188.121.46.128/

Otra forma común de intentar engañar es con el uso de caracteres que se traducen por otros en la web. Por ejemplo, el caracter “%20” se traduce en una URL como un espacio. el %20 corresponde al número ascii 0x20, que corresponde al espacio. Es decir, se podría construir la URL de una web, codificada directamente en ASCII, de esa forma se ocultaría también cualquier cosa que no nos gustase

“http://facebook%2E74%68%65%6C%69%65%6C” se podría traducir como “facebook.theliel.es”, claro está que este sería un ejemplo extremo. Esto suele ser muy común más que nada para evitar ver los puntos de separación (Expresados en ASCII como %2E), los espacios (%20), las barras (%2F)….

Otra técnica ampliamente usada es la elección de dominios que puedan llegar a ser confundibles. El dominio no podemos modificarlo, pero que sucede si en vez de registrar theliel.es hubiese registrado el dominio “theliel.com”? Sería ya un paso. Pero y si el dominio registrado es por ejemplo “facebook.co.uk” “facebook.es” (En caso de que facebook.es no estuviese ya registrado), “facebook.org”, “facebook.com.es”… es evidente que el dominio ya se parecería muchísimo más al original, y por consiguiente llamaría menos la atención.Y es que gracias a los dominios ccTLD, aquellos que tienen dos letras tan solo, que son asignados solo uno a cada pais, tienen esta ventaja. ¿Ventaja? Claro. Normalmente registras un dominio. Pero la gran mayoría de TLDs son los ccTLD, si existe uno por cada país, el abanico es mucho más amplio que tan solo los gTLD. Esto quiere decir que aun cuando existan dominios como “facebook.org” “facebook.com” o muchos otros registrados todos a la misma entidad, seguro que tendremos multitud de ellos disponibles en ccTLD. En caso de facebook sin ir mas lejos, creo que tiene registrado a su nombre todos los gTLDs (si no se me escapa alguno), pero ni mucho menos tiene registrados todos los ccTLD. Sería facil mirar alguno que fuese similar.

Para quien no lo sepa, TLD se traduce como Top Level Domain, es decir, la parte más derecha de una URL. Estos se clasifican principalmente en 3. TLDs reservados, TLDs genéricos (gTLD) y TLD de paises (ccTLD). Dentro de los reservados tendríamos .test, .arpa… Dentro de los ccTLD .es, .fr, .gb… Y dentro de los gTLD los clásicos .com, .org, .net…

Una técnica mucho más refinada es aprovecharse del uso de los IDN. Dado que cada país posee un ccTLD, es igualmente razonable que la ICANN no solo permita la escritura o el registro de URL en el alfabeto nuestro, Latino, que posiblemente sea el alfabeto más usado del mundo. Con alfabeto me refiero ni mas ni menos a A B C D… pero incluso en algo tan sencillo como esto, rápidamente recordamos que nosotros tenemos la “eñe”. Sería justo por tanto que la ICANN nos permitiese poder usar la “eñe” en un dominio: “www.coño.es” en vez de “www.cono.es”. Pero esto tan solo es la punta del iceberg. Si se permiten otros alfabetos, podemos pensar que existen URLs en chino, árabe, cirílico…

¿Que importancia tiene esto? Una enorme. Si se permiten caracteres pertenecientes a otros alfabetos, podríamos construir una url incluso IGUAL a una legítima. ¿Como es esto posible? Porque es posible que en un alfabeto una letra tenga la misma representación gráfica que en otro alfabeto, pero en cambio el código UNICODE de dicho caracter sea completamente diferente, con lo que a efectos prácticos ambas direcciones pueden convivir. El mejor ejemplo de esta técnica sería registrar el siguiente dominio:

“fаcebook.com”

A efectos gráficos el nombre es exactamente el mismo!! pero no lo es. La “a” no pertenece a la “a” latina, sino al caracter “a” cirílico. Nuestra “a” corresponde al valor UNICODE U+0061, mientras que la “a” cirílica “а” corresponde al código UNICODE U+0430. Esta técnica es muy sofisticada y como puede apreciarse casi imposible de detectar.

Pero aun podemos complicar más el URL Spoofing y dar un paso más allá. A fin de cuentas el uso de IDN no siempre es posible si no existe algún carácter con correspondencia en un alfabeto u otro o no podemos registrar dicho dominio por la razón que sea. Una solución más compleja pero más versátil sería el uso de Scripts creados en JavaScript, ActiveX, extensiones para firefox… para, de algún modo, evitar que el objetivo de un atacante pueda darse cuenta de la dirección real. Existen 3 prácticas mayoritarias en este aspecto, en los que su efetividad depende más que de cualquier otra cosa del navegador usado y como esté configurado.

La primera sería la clásica apertura de Popups, ventanas emergentes Mediante una simple llamada en JS (No voy a escribir en estos casos código alguno), es posible cerrar la página actual (para que no se pueda leer la URL real) y acto seguido reabrirla sin barra de dirección. Esto la mayoría lo ha visto muchas veces, sobre todos en los tiempos de la hegemonía de Internet Explorer y la publicidad emergente. Gracias a dios, con los navegadores actuales este tipo de prácticas quedan tan solo efectivas para un reducido número de personas.

La segunda opción implicaría haciendo uso de JS algún otro lenguaje, la aplicación de una pequeña “capa” (por así decirlo) a la barra de direcciones. Es decir, literalmente se pegaría una imagen con la URL del sitio original encima de la barra de direcciones de nuestro navegador. De este modo se oculta URL real y aparenta ser la URL legítima. Alguna vez he podido apreciar este tipo de Phishing, pero sinceramente no sabría ahora mismo como crear el código necesario para realizarlo. Pero como hemos dicho, depende enormemente de la configuración de nuestro navegador y de cual usemos.

La tercera opción, es similar a la segunda. En este caso se insertaría un objeto (se llama así) texto en nuestra barra de direcciones, que al tener el fondo blanco y en el texto la URL legítima, a todos los efectos nusetra URL parecería completamente real. Este escenario es peor que el segundo, dado que percatarse de ello sería mucho más complicado. Al final de la sección hablaremos de las medidas a tomar en cada caso.

Llegados a este punto tan solo quedarían dos técnicas para poder realizar un URL Spoofing. Realmente las dos técnicas implicarían algo más que Spoofing. Ya dije que para mi el Spoofing es engaño, modificar algo que tenemos, jugar con nuestras cartas… en cambio las dos técnicas restantes: Redirecciones y Envenenamiento, implicaría cambios más radicales por así decirlo. Sería necesario modificar o inyectar código propio en otro site en el caso de las redirecciones, o modificar el caché DNS de los usuarios. Estas dos cuestiones se tratarán en los envenenamientos y en XSS. En cambio si existe una redirección típica que si podemos comentar aquí, y que por cierto es la más usada. En realidad se aprovecha normalmente de forma conjunta con eMail Spoofing.

En HTML existen formas de poder ir hacia otro lugar, lo conocemos simplemente como enlace. Pero una cosa es el destino al que deseamos llegar y otra el texto del enlace. Así por ejemplo podría escribir:

http://www.facebook.com

http://www.facebook.com

Y aun cuando en las dos direcciones se puede leer exactamente lo mismo, la primera lleva al site original de facebook y la segunda a mi blog. Esto que parece tan simple es usado constantemente, todos los días en millones de correos fraudulentos. Aunque parezca mentira, la gran mayoría de todos los problemas de seguridad existentes son debidos tan solo a la malinformación del usuario, de una mala praxis. Imaginar por ejemplo que en vez del ejemplo mostrado, el segundo enlace en vez de ir a mi blog, fuese a mi Phishing.

 

Fase 4º: El gancho

Aun cuando el atacante tiene todo perfectamente planeado y preparado queda lo más obvio. Que un usuario caiga en la trampa y visite dicho lugar. La forma más simple de producir esto es por medio de eMail Spoofing, que será tratado más adelante. Otros medios usuales es la mensajería instantanea, virus, foros, blogs… Por ejemplo, podría enlazar mi blog a un supuesto enlace a Facebook para promocionarlo, pero la verdad es que iría directo a la trampa. Como digo veremos esto en gran detalle en eMail Spoofing.

 

Llegados a este punto, el atacante comenzaría a recibir nombres y usuarios sin parar de las víctimas, y lo peor de todo es que una vez todo en marcha, el proceso es todo automático. Tan solo la buena educación y el cuidado hacen que este tipo de ataques tenga el menor impacto posible.

Para quien quiera verificar como podría ser un Phshing real, quitando algunos detalles como ya he explicado, puede verlo aquí, así como el documento de texto donde quedarán almacenados los credenciales introducidos:

 

http://theliel.webege.com/DIDACTICO_FACE/

http://theliel.webege.com/DIDACTICO_FACE/fac.txa (es un archivo txt renombrado a txa por razones que ahora no importan)

 

Bueno, pero ahora… ¿como evitar el Phishing?

Evitar el Phishing es algo fundamental estos días de hoy, en los que posiblemente el Phishing se lleve la mayor parte de los actos no civilizados (por así decirlo). Si comprendemos cada paso que debe de dar un atacante para poder realizar un Phishing de forma satisfactoria, podemos ver claramente cada uno de los pasos que podemos realizar nosotros para evitarlo. Es cierto que nosotros como usuarios o como Webmasters, no podemos hacer nada evitar que alguien pueda simplemente copiar un sitio. Es cierto que no podrán montar debajo la base de datos o el código php que sea necesario, pero al menos la apariencia física es imposible de evitar. Por otro lado tampoco podemos evitar que un atacante modifique a su gusto su propio site para intentar que caigamos. Pero a partir de aquí, por listo que pueda ser el atacante, podemos impedir sin mucha complicación cualquier tipo de Phishing, y es aquí donde reside nuestra “defensa”. Al explicar las diferentes técnicas de IP Spoofing o de ganchos, un usuario debería de ser más que capaz por tanto de saber diferenciar un site real de uno que no lo es. Voy a dar algunas indicaciones básicas:

  • Uso de conexiones seguras siempre que sea posible
  • Usar un Navegador que sea fiable
  • Conocer las URL legítimas de los sitios visitados de forma habitual
  • No fiarse de las redirecciones, comprobarlas siempre
  • No permitir por defecto Scripts de ninguna clase
  • No permitir por defecto Cookies de ninguna clase

 

El uso de conexiones seguras a día de hoy es fundamental, sobre todo cuando vamos a ingresar en algúna web que requiera de credenciales. Por regla general soy extremadamente crítico con aquellas web que no usan sistemas de certificados SSL/TLS cuando se trata de datos confidenciales. En caso de Webs como redes sociales parece que aun no está muy implantado el uso de conexiones seguras, pero jamás deberíais acceder a alguna web de banca electrónica si esta no está amparada por un certificado digital que la acredite. De esto hablaremos en otro artículo.

Un navegador fiable es fundamental. Muchas web de Phishing pueden aprovechar agujeros de seguridad o vulnerabilidades de estos por ejemplo para poder modificar la URL que aparezca en nuestro navegador. Cualquier truco es válido a la hora de que el site falso pase por el original. Actualmente el navegador más veloz a la hora de renderizar una web es Chrome (De Google) con mucha diferencia. No obstante Firefox es un navegador mucho más sofisticado y con posibilidades, maduro y con una escalada imparable en su gran uso. También hay que tener en cuenta que actualmente Firefox no soporta multiprocesador, lo cual quiere decir es que en cuanto esté terminado el soporte completo para este, sy velocidad se multiplicará aproximadamente x3, a la par de su seguridad. Si tengo que escoger uno sin duda alguna es Firefox, después Chrome, después Opera, IE y para terminar Safari. Safari es mejor navegador que IE en realidad, pero es mucho más vulnerable también.

No sucede nada por conocer las URL visitadas de forma habitual. Si sabemos que la URL de facebook es “http://www.facebook.com” es esa, no es otra. Aquí hay que explicar algo para aquellos que no lo sepan. Una URL se lee siempre de derecha a izquierda. No estoy hablando de la URI que hablamos más arriba, tan solo de la URL. La otra parte de la URI, la URN si se lee de izquierda a derecha. Como digo una URL se debe de leer de derecha a izquierda, cada sección separada por un punto es un dominio/subdominio. Por ello, se llama TLD a los dominios .es .com .org etc, dado que es lo primero que encontramos si leemos de derecha a izquierda: “Top Level Domain”. De este modo podemos decir que todos los dominios de primer nivel son aquellos que están justo después del primer “.”. “theliel.es” sería un dominio de primer nivel. Es evidente que prácticamente cualquier site estará alojado en un dominio de primer nivel. Esto es un indicativo fundamental. Si hacemos caso a esto, prácticamente ninguna variante de las que hemos hablado con anterioridad sería válida. A esto debemos sumar que ningun site original usaría su IP directamente para acceder a su site. La única razón por la que esta podría ser usada sería ante problemas de DNS, pero esto a día de hoy es prácticamente impensable. Otro motivo por el cual jamás fiarse de una URL dada en IP.

“http://facebook.theliel.es”, “http://facebook@theliel.es”, http://facebook@188.121.46.128/

Los tres ejemplos anteriores, si leemos de derecha a izquierda nos encontramos con el truco. En el primer caso se está accediendo primero a un dominio de primer nive .es, y después a un subdominio de este llamado facebook. Evidentemente facebook nunca sería un subdominio.

En el segundo ejemplo, el primer dominio que nos encontramos es de nuevo “theliel.es”, da igual lo que exista a la derecha, el dominio es ese. Además, dependiendo del navegador que usemos, puede incluso darse cuenta de esta pequeña trampa, pues nos advertirá de que el site al qu ese quiere acceder no requiere de autentificación.

El tercer caso es el mismo que el segundo… tan solo con la modificación del dominio “theliel.es” por su IP. Da igual a quien corresponda la IP, lo mejor no es fiarse, o si se está seguro de la legitimidad de dicha IP, una consulta ping sobre el dominio en cuestión nos devolverá la IP de dicho dominio. Si no coincide listo. Otra opción sería verificar la IP en un servidor Whois y comprobar a quien pertenece dicha IP

Las redirecciones es un problema con mayúsculas. Parece increíble que a estas alturas los usuarios no se fijen en la dirección de destino real, no lo que podemos leer como texto. Antes de seguir un enlace del cual no estamos seguro su procedencia, comprobar el destino del enlace. Cualquier navegador hace esto, tan solo se necesita pasar el ratón sobre el enlace para que nos aparezca (normalmente debajo del navegador) el salto a efectuar. Esta práctica es diaria cuando se intentan realizar ataques de eMail Spoofing. Cuando tratemos esto más adelante se comprenderá mejor.

El uso de Scripts o Cookies es algo normal en internet. Pero dichas cookies y Scripts pueden ser usados de forma maléfica contra nosotros. Es cierto que a día de hoy prácticamente cualquier web requiere aunque sea de pequeños scripts para poder desde visualizar correctamente el contenido a ejecutar cualquier acción. Pero aun así, desde mi punto de vista es mejor prevenir que curar. Soy más partidario de las listas blancas que de las listas negras. Es decir, mis políticas siempre son las mismas: Partir de un sistema completamente cerrado e ir abriendo lo que se va necesitando. En este aspecto, implicaría bloquear por defecto todas las cookies y todos los scripts, e ir habilitando tan solo aquellos que van siendo necesario. Aquellos que conozco y comprendo que son seguro los puedo habilitar de forma indefinida. Esto que parece un chiste, es la causa de que prácticamente cualquier PC del mundo, tenga alguna cookie de seguimiento o espía. Además, gracias a código en JS malicioso y aprovechando vulnerabilidades de webs, de navegadores… aparecen problemas mayores como XSS, URL Spoofing, exploits… La regla siempre debería de ser de bloque total, y solo habilitar cuando sea estrictamente necesario. Si estamos seguros de la “legitimidad” del sitio y nos fiamos, permitimos para siempre dicho script o dicha cookie. Para tal, personalmente uso NoScript y Cookie Monster (Los dos para Firefox)

Evitar el Phishing es algo simple si se tiene algo de cuidado. No hace falta mucho, tan solo conocer que es, como funciona y el objetivo que se busca. Si se sabe todo ello, evitarlo es facil.

 

Para terminar del todo con Web Spoofing, citar un par de detalles más. El Phishing no es el único Web Spoofing que se conoce. Aunque normalmente el objetivo es el explicado, a veces el objetivo no es la obtención de datos de los usuarios, sino que tiene fines reivindicativos, de mofa o incluso de estafa. Por ejemplo si estoy completamente en contra del LHC, una forma de mostrarlo o criticarlo sería crear un site igual que el oficial pero con contenidos de protesta. Si se quiere mofar sobre por ejemplo una ley o algo similar podría realizarse un Web Spoofing para calcar un blog o un site de dicho político en el que se hablase jocosamente sobre ello.

Una última utilización de Web Spoofing sería cuando tan solo se pretende crear un negocio, alguna clase de venta… de algo que no existe. Pongamos por ejemplo que creo un site prácticamente igual y copiado a Amazon. En él publico libros o productos que quiera. El proceso es todo muy similar al original, solo que dicha web tan solo es una mera estafa, o a lo mejor es real, y se aprovecha del nombre, diseño, métodos… de otra que ya existe.

 

Volver a arriba

Sobre Mí

Alma Oscura por Theliel is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 3.0 Unported License.
Política de Privacidad.
Para otros permisos que puedan exceder el ámbito de esta licencia, contactar en blog.theliel.es/about/contactar.