30 junio 2009

¿Anonimato con un proxy? tal vez no

Todos conocemos que existen distintos tipos de proxy web cuando buscamos anonimato en la red. Distinguiendo entre nombres como "anónimo", "altamente anónimo" o incluso "élite".

Su denominación varía según la información que es enviada al servidor remoto en forma de cabeceras HTTP. Entre estas cabeceras es común encontrar:
  • X_FORWARDED_FOR: esta cabecera no está definida en el RFC de HTTP, ha sido creada por el proxy cache "Squid" con el objetivo de enviar la dirección IP del cliente al servidor Web. Dada su popularidad es se le ha dado relevancia y actualmente es soportada por la mayoría de aplicaciones. A tener en cuenta que es transmitida por el cliente y por lo tanto puede ser modificada, por lo que ningún control de acceso debería confiar en esta información, al igual que ocurre con otras cabeceras como User-Agent o Referer. No es común que los servidores a los que accedemos almacenen esta información en vez de la dirección IP del proxy, pero puede ocurrir, lo que significa que no somos tan anónimos como nos imaginamos.

  • VIA: Definida en el RFC como obligatoria cuando es usado un servidor proxy indica el camino que ha seguido la petición desde su origen al destino, identificando los protocolos que se han seguido. El objetivo principal de esta cabecera es evitar bucles infinitos.
Una vez hemos configurado el proxy en nuestro navegador, se puede conocer si estas cabeceras están siendo utilizadas accediendo a una página web del tipo "Cual es mi IP", que nos mostrará si utilizamos proxy o no y las direcciones IP que es capaz de detectar. Otra opción es hacer nuestro propio script donde se muestren las cabeceras enviadas con algo tan simple como:
<?php
foreach($_SERVER as $h=>$v)
if(ereg('HTTP_(.+)',$h,$hp))
echo "<li>$h = $v</li>\n";
header('Content-type: text/html');
?>
Pero estas cabeceras HTTP no son la única forma de conocer la dirección IP real de un cliente u otra información de interés, estos datos puede ser filtrados mediante otras técnicas, entre ellas:
  1. Peticiones DNS del cliente web, que solicita la dirección IP de un subdominio monitorizado, de esta forma el servidor DNS de ese dominio será capaz de averiguar el servidor DNS que utiliza el cliente y por lo tanto compañía y localización.
  2. Peticiones DNS desde applet Java, utilizando la socket API se solicita la resolución DNS de un subdominio, si este no es el mismo que el que sirve el applet, se genera una excepción de seguridad y no produce resultado, aunque la petición de DNS es enviada y al igual que en el punto anterior, se podría conocer los servidores DNS del cliente.
  3. Envío de paquetes UDP en applet Java, mediante el envío de un paquete UDP al servidor que sirve el applet es posible conocer la dirección IP de origen, este método no funciona con las últimas versiones de Java y requiere que el destino sea el propio que sirve el applet.
  4. Acceso a IP y hostname mediante la API de socket de Java, que permite obtener el nombre del sistema y su dirección IP mediante un applet, esta información puede revelar la IP interna del equipo (en caso de NAT) o uso de proxy.
  5. Mediante un paquete TCP en Flash, que revela la dirección IP de origen y que no utilizará la configuración proxy que tenga el navegador.
  6. Con Microsoft Office, si este está configurado para que abra directamente los documentos y estos contienen imágenes serán descargados sin utilizar el proxy.
  7. Utilizando plugin de Quicktime, que mediante un parámetro permite solicitar que la conexión se haga directamente contra el servidor remoto evitando el uso de proxy.
  8. Con el protocolo "itms://" de iTunes, en caso de tener instalado este software, si se accede a una dirección del tipo "itms" esta conexión se realiza sin utilizar la configuración del proxy del navegador.
Todas estas técnicas las ha implantado HD Moore en el sitio: http://decloak.net/. Esta aplicación online permite realizar un test sobre nuestro navegador una vez hemos configurado el proxy tratando de conseguir la dirección IP real de nuestro equipo.

Además permite la descarga del código fuente del applet de los puntos 2 y 3 y el flash del punto 5.

Algunas compañías que trabajan con comercio electrónico ya están haciendo uso de estas técnicas para evitar fraudes y conocer el origen real de los ataques que reciben.

Si lo que queremos es evitar esta identificación, solo cabe utilizar un navegador sin ningún tipo de complemente instalado, como son Java, Flash, iTunes u Office, eliminar la conexión directa con Internet, es decir, que nuestro sistema no pueda salir a Internet sin utilizar un proxy y utilizar servidores DNS públicos como OpenDNS.

10 comments :

eduardo abril dijo...

Hola Alejandro,

El tráfico que menciones (udp, itunes, ...) legalmente no sé si sería suficiente para incriminar a alguien ... Al fin y al cabo, lo que quieres es demostrar que el que te ha metido sql-injection, por poner un ejemplo, es el tío de la IP tal a tal hora, pero resolver nombres no demuestra eso.

Luego, si usamos TOR (otro tema sería si TOR es suficiente), una buena idea es cerrar en el firewall todo el tráfico de salida salvo aquel que vaya por la interfaz de TOR (localhost:8118).

Yo lo que hago es usar firefox sin ningún tipo de plugins, con proxy tor, para "ver" la web objetivo, e iexplore para la navegación normal. Pero hay que tener cuidado, no nos bajemos un mp3 de la web atacada a la vez que intentamos sql-injection ...

Saludos,

eduardo abril dijo...

Nota: "sin ningún tipo de plugins" significa, cosas de madrugar, sin java, javascript, ...

Alejandro Ramos dijo...

buenas eduardo, para entrar en un proceso legal tu puedes presentar lo que quieras. Lo mismo que comentas ocurre con la IP final y la hora aunque no use proxy, si por ejemplo el acusado dice que tiene la wifi abierta... Lo que quiero decir es que todo esta sujeto a interpretaciones. Se trata de asociar IPproxy->IPreal y si tienes un sistema que así lo haga y el juez decida que es un sistema fiable, es tan valido como cualquier otra cosa. Por lo menos eso lo que dice mi experiencia cuando hemos llegado a declarar en juicios como peritos.

Por otra parte, existen productos comerciales que hacen esto mismo y su objetivo es detener el fraude, lo que convierte en la solución en más que defendible.

Un saludo!

zaping dijo...

Buenas creo que os estais llendo del tema , creo que es mas sencillo si tienes un proxy sock lo pones en la configuración del sistema por ejemplo en ubuntu en sistema->preferencias->proxy de la red y yasta si haces el test y te dice que algún programa da tu ip real esque ese programa estará configurado para no usar ese proxy , es decir no estará por defecto

Zerial dijo...

La mejor forma de navegar anonimamente es mediante un tunel ssh, la información viaja encriptada. Por este mismo motivo, al salir a interner mediante un tunel con encriptación, los firewall sin incapaces de filtrar contenido, puertos, trafico, etc.
Lo dificil de esto es encontrar un servidor que sea proveedor de un servicio anonimo ssh.

@eduardo abril: Eso te TOr que mencionas, de cerrar el trafico salvo el que vaya por la interfaz de tor, etc etc. De la forma que yo lo hago creo que es mas seguro, no utilizo ningun plugin para conectarme mediante tor ni nada, desde la consola llamo a firefox (o a cualquier programa): torify firefox. El comando torify automaticamente me "tirofea" todo el trafico por esa aplicacion, ya sea un cliente irc, jabber, etc.

Otro metodo de anonimato es usar tuneles web como Anonymouse o VTunnel.

ozx dijo...

Varios Investigadores comprobaron, que usar tor no es tan eficiente, que con una "técnica" de triangulación, se puede obtener la Ip de Origina. Esto fue hace ya casi 2 años. En el Auge de Tor.

En lo personal, Cualquier Servicio que este conectado a un Servidor, dejara Registros, si no es de Apache, sera de Conexión, o de Comandos, etc pero los logs siempre existirán, y dejaran huella de que tu pasaste por ahí.

En lo personal La Mejor Forma es Programando un Bouncer, y dejándolos (legal o ilegalmente cada uno decide) en ordenador común y corriente.

Con Esto Tendrías la Ip de la Maquina "infectada", y podrías navegar tranquilamente. La diferencia Radicaría, en que no tienes Logs en ninguna parte.

Tambien se podria Fomentar con una Vmware.

Aunque el Anonimo 100% No existira Jamas¡

Saludos¡
Oz¡

Zerial dijo...

@ozx: Si, obvio, aunque pases por millones de maquinas podras saber siempre la ip, el tema es que esas maquinas son anonimas y no dejarian rastro de conexiones entrantes y salientes, que sea imposible rastrearla, porque no hay rastros

M.Laura Carrizo dijo...

Tienen mi voto!!!
Exelente trabajo chicos!
De paso les pregunto algo que nadie ha podido resolver hasta ahora, tengo dos blogs de moda, configurados de la misma manera y hasta con el misma plantilla.
Cuando publico en uno y por ejemplo estoy en facebook , se ve la imagen adjunta al post, pero cuando publico en el otro que se enlaza al primero y es el que mas me importa ya que muestro mis diseños , las fotos que adjuntas no aparecen!
He tocado el feedburner y no pasa nada, si tienen alguna idea por favor avisenme
el blog al que me refiero es
http://lauracarrizomoda.blogspot.com.
Desde ya muchas gracias!

Anónimo dijo...

hackeando un escritorio remoto pues no te debes preocupar por java , javascripts , plugins ya que estarias navegando desde otro ordenador pero controlado por tí , si encadenas 2 escritorios remotos , Tu ordenador > escritorio remoto 1 y desde escritorio remoto 1 accedes a un 2º escritorio , pues mas anonimos eres.

Tb con una lan se puede usar un proxy y tener activados java javascripts etc y saltaria la ip local 194.xxx.xx nunca la verdadera.

Lo mejor es juankear un wifi , solo cambiar la MAC y eres 100% anonimo

Anónimo dijo...

Xerobank aunque es de pago es una VPN que no te detecta tu ip verdadera aunque tengas Java/javascript o flash activado
cuando navegas.