Apilando Proxies

Capas

I’m a future-hacker; I’m trying to get root access to the future. I want to raid its system of thought.»

Jude Milhon, Interview in Wired (1995)

Cada vez que interactuamos con un sitio web o algún servicio de internet nos identificamos con nuestra IP y no sólo el destino sabe quiénes somos, también todos en nuestro camino. Existen muchas razones para querer proteger nuestra IP, quizás anonimato o privacidad, pero la verdad no importa, por ahora, acordemos que es una buena práctica.

Una forma de proteger nuestra IP, es utilizando un Proxy, si no recuerdas exactamente cómo funciona, refresquemos esa volatilidad: Un proxy básicamente es un intermediario entre nosotros y el servidor de destino, tomando nuestra petición y realizándola como si fuera él quién la solicita, para posteriormente entregarnos la respuesta. Es como si Alice quisiera saber cuándo es el cumpleaños de Bob pero no quiere que averigué que ella pregunta, entonces le pide Carol que realice la consulta. Pero como es un poco paranoica y quizás Bob deduzca que fue Alice, agregue más personas entremedio, mejor que Carol le pida Dani que le pregunte a Bob.. pero si no fuera suficiente, entonces Dani le puede preguntar a Elena que consulte a Bob, si realizamos un pequeño esquema, esta cadena de consultas quedaría así:

Alice[?]> Carol[?]> Dani[?]> Elena[?]> Bob[1En]> Elena[1En]> Dani[1En]> Carol[1En]> Alice =)

Ahora Alice sabe la respuesta, podrá realizar un lindo regalo a Bob y él nunca sabrá que ella no recodaba la fecha de su cumpleaños #^.^#.

Existe un proyecto de software libre que permite a cualquier conexión TCP, hecha por un programa, siga una serie de proxies hasta su destino, soportando protocolos como http(s). sock4 y sock5. Este se llama Proxychains, fue creado en el 2006, tras un tiempo sin mantenimiento a partir del código original surgió proxychains-ng (proxychains nueva generación). La nueva versión soluciona algunos bugs y mejora la estabilidad aparte de añadir algunas opciones más, que el original, la primera versión estable es la 3.1 y viene por defecto instalada en varias distribuciones orientada a seguridad.

Instalación

Comencemos instalando la última versión desde el repositorio oficial

Configuración

Vamos a editar el siguiente archivo /etc/proxychains.conf

#
[ProxyList]
# add proxy here …

Bajo la línea [ProxyList] se deben listar las ip’s de los proxies a utilizar. Existen muchos lugares donde obtener servicio de proxies gratuitos o de pago, uno muy usado y de acceso libre es:

https://hidemy.name/es/proxy-list

Podemos filtrar por país, tipo de proxy, nivel de anonimato, velocidad, entre otras, también existe opciones de pago. Finalmente seleccionamos un grupo de ip’s según nuestra necesidad, para el ejemplo tomaremos 3.

La lista entonces quedaría de la siguiente forma

#
[ProxyList]
sock4 181.191.106.123 32571
sock4 116.213.52.252 4145
sock4 117.103.5.186 60113

El formato utilizado para agregar un proxy ocupa la siguiente regla: [Tipo] [IP] [Puerto], el tipo utilizado es muy importante ya que no todo los proxies pueden ocuparse para todos los casos, expliquemos un poco la finalidad de cada uno:

HTTP: Puedes usarlos para acceder a sitios web o descargar archivos, pero sólo utilizando el protocolo HTTP.
HTTPS: Conocidos como proxies habilitados para SSL. Además de incluir la opción anterior (http), permite visitar sitios con el protocolo HTTPS disponible. Usando programas específicos, pueden usarse para utilizar otros protocolos.
SOCKS4: Utilizado para conectarse a través del protocolo TCP/IP a cualquier dirección y puerto. Corresponde a la versión 4 del protocolo socks.
SOCKS
5: Como mejora soporta el uso del protocolo UDP, la capacidad de realizar solicitudes de DNS a través de un proxy y el uso del método BIND para conexiones entrantes. Además de todas las características de la versión 4.

La siguiente modificación que realizaremos en el archivo de configuración, se encuentra previo, a la lista de proxy’s, en esta característica existen 3 opciones, de las cuales 2 se encuentran comentadas por defecto, detallaremos cada una a continuación:

dynamic_chain: Esta característica, le indica a la herramienta, que utilize los proxy’s en el mismo orden que fueron listados y si por cualquier razón alguno no responde, lo salta y continua con el siguiente. Normalmente se encuentra habilitada por defecto. De todas formas, es la más recomendada.
strict_chain: Esta opción al igual que la anterior utiliza los proxies en el mismo orden de listado, la diferencia está en que, si alguno falla, este termina inmediatamente la conexión.
random_chain: Si habilitamos esta opción los proxies se encadenarán aleatoriamente cada vez que utilicemos la herramienta. Adicionalmente se debe descomentar chain_len, parámetro donde especificaremos la cantidad de proxies a utilizar.

Adicionalmente existen otras opciones de configuración:

quiet_mode: Para deshabilitar la salida por pantalla de las peticiones y respuestas.
proxy_dns: Para realizar consultas DNS a través del proxy, aunque este último no siempre soporta esta funcionalidad y provocan un error, en ese caso mejor deshabilitar esta opción o cambiar el proxy a utilizar.

Aplicaciones

Podemos utilizar Proxychains de la mano de un montón de herramientas, pero, para que vean su gran potencial, veremos algunas implementaciones, muy útiles.

Una de las más utilizadas es incluir la red TOR, como un nodo proxy. Recordemos que un proxy no cifra la comunicación, a diferencia de una vpn, es decir si ocupamos un protocolo inseguro a través de ellos, la información que estamos haciendo pasar podría ser perfectamente recolectada, con todo lo que ello implica, por ningún motivo podemos confiarnos.

Al ocupar tor, por ejemplo, como primer nodo, nos aseguramos de que el primer tramo se encuentre cifrado hasta su salida de la red tor, evitando la recolección de tráfico en la primera etapa, que podría realizar, por ejemplo, tu ISP.
Si aún no tienes el servicio de tor disponible, procedemos a su instalación:

$ sudo apt-get install tor

Puedes obtener más información de la instalación en el sitio oficial de tor.

Ahora procederemos a ocupar dynamic_chain y proxy_dns, agregaremos a la lista como primer proxy la siguiente línea: sock5 127.0.0.1 9050, ahora ya tenemos como primer nodo la red TOR.

Nmap, TOR & Proxychains

Realicemos una prueba escaneando el puerto 80 de un servidor remoto con la herramienta Nmap a través de la red TOR.

$ proxychains nmap -Pn -A -p80 Scanme.Nmap.Org

Pivoting

Pivoting es una técnica que se puede utilizar para acceder a servicios o puertos de una máquina inalcanzable desde el lugar donde estas. También conocida como reenvío de puertos SSH o túnel SSH, esta técnica nos permite establecer una sesión SSH y luego hacer un túnel de conexiones TCP a través de ella.

$ ssh -D 127.0.0.1:1337 -f -N root@[IpPublica] -p 2222

La línea anterior configura un túnel SSH que queda corriendo en segundo plano en el puerto local 1337, ahora incluimos este en nuestro archivo de configuración de proxychains.

#
[ProxyList]
socks5 127.0.0.1 1337

Ahora podemos utilizar proxychains para, por ejemplo, alcanzar a un servidor de una red interna utilizando nmap

$ proxychains nmap -Pn -A -p80 10.10.10.123

Cierre

Recuerda, nosotros no te recomendamos ningún proxy, sobre todo si es gratuito. Si vas a utilizar uno, parte siempre de la base que son inseguros, haz tus propias pruebas y averiguaciones, según sea tu necesidad. También considera que puedes levantar los tuyos. Tema que veremos más en detalle en algún momento.

Nunca deben olvidar que cada uno es responsable de sus actos. Nosotros no apoyamos la delincuencia y menos a los que buscan impunidad a través del anonimato, preocúpate de conocer las regulaciones que aplican en cada lugar para no incurrir en ilegalidades.

Cuando Sabu de LulzSec fue detenido, tras ser amenazado de ir muchos años a prisión, trabajó estrechamente con las autoridades para atrapar a sus amigos y colaboradores.

Debes tener muy claro que nunca, nadie, jamás iŕa a la cárcel por ti, sin son culpados, entregarán toda la información que tengan.