Foro de elhacker.net

Comunicaciones => Redes => Mensaje iniciado por: marax en 22 Enero 2021, 19:46 pm



Título: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 22 Enero 2021, 19:46 pm
Citar
Se conoce como túnel o tunneling a la técnica que consiste en encapsular un protocolo de red sobre otro (protocolo de red encapsulador) creando un túnel de información dentro de una red de computadoras.
https://es.wikipedia.org/wiki/T%C3%BAnel_(inform%C3%A1tica) (https://es.wikipedia.org/wiki/T%C3%BAnel_(inform%C3%A1tica))

¿A que se refiere exactamente con 'encapsular un protocolo'? ¿Como puede encapsularse un protocolo sobre otro? Lo unico que se me viene a la mente es un cast de estructuras de C  :huh:

Saludos...


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 22 Enero 2021, 23:28 pm
Tunneling es un concepto para denotar que un protocolo puede encapsular la información de otro, normalmente para bypassear reglas de Firewall.

Un ejemplo claro es si sólo podemos hacer uso de conexiones que utilicen el puerto 80,443,25,21,53... Entonces como puedo conectarme a un servicio, ej: Spotify??

Pues el cliente (TU) y el servidor negociais una conexión por HTTPs y tunelas las peticiones hacia el servicio de Spotify por ahí. Luego el servidor, tiene que hablar el mismo idioma, por lo tanto ha de "empaquetar" o "encapsular" las respuestas del servicio en paquetes HTTP over TLS (HTTPS).

Otro claro ejemplo, y muy visto en Internet es el tunelado por SSH, piensa que estás encapsulando paquetes pertenecientes a otros protocolos.

En cambio un proxy es un forwarder, reenvia el tráfico al destino y al origen. El Proxy utilizará el protocolo que le convenga, y tu estarás restringido al uso de dicho protocolo.

Saludos.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 23 Enero 2021, 13:20 pm
Pues el cliente (TU) y el servidor negociais una conexión por HTTPs y tunelas las peticiones hacia el servicio de Spotify por ahí. Luego el servidor, tiene que hablar el mismo idioma, por lo tanto ha de "empaquetar" o "encapsular" las respuestas del servicio en paquetes HTTP over TLS (HTTPS).

El header del protocolo TCP:

Citar
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            TCP Header Format

El header del protocolo IP:

Citar
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |    Protocol   |         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Destination Address                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


¿Como "encapsulo" al protocolo IP "dentro" del protocolo TCP o viceversa?  :huh:


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 23 Enero 2021, 13:30 pm
Pero TCP no representa un paquete en su totalidad. Piensa que una trama TCP/IP completa contiene la capa de aplicación, donde realmente están los datos que el cliente envía.

Por lo tanto, puedo enviar mediante HTTPS datos asociados a otro protocolo i.e SMTP, para luego el servidor extraerlos, y formar el paquete SMTP correcto.

De todas formas existen mas técnicas pues los payload se pueden usar para eludir firewalls pero no lo considero tunnelling.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 23 Enero 2021, 14:09 pm
Pero TCP no representa un paquete en su totalidad. Piensa que una trama TCP/IP completa contiene la capa de aplicación, donde realmente están los datos que el cliente envía.

Supuse que te referias a eso por un minuto... pero quise saber propiamente a que te referias.
¿Entonces solamente protocolos que funcionan en la capa de aplicacion (supongo que te refieres al modelo OSI) pueden "hacerse casting mutuamente", por decirlo asi, cosa que se llama tunneling?

De todas formas existen mas técnicas pues los payload se pueden usar para eludir firewalls

¿Para eludir firewalls en que sentido? ¿Se puede usar la tecnica para evitar que un firewall detecte una escucha en el puerto 443 con otro fin mas que la negociacion de paquetes HTTP?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 23 Enero 2021, 15:52 pm
Supuse que te referias a eso por un minuto... pero quise saber propiamente a que te referias.
¿Entonces solamente protocolos que funcionan en la capa de aplicacion (supongo que te refieres al modelo OSI) pueden "hacerse casting mutuamente", por decirlo asi, cosa que se llama tunneling?

¿Para eludir firewalls en que sentido? ¿Se puede usar la tecnica para evitar que un firewall detecte una escucha en el puerto 443 con otro fin mas que la negociacion de paquetes HTTP?

Sé que esto te va a volver loco, pero puedo tunelar TCP over UDP si quisiera. No tiene porque ser siempre un protocolo de aplicación encapsulado en otro de aplicación.

Piensa que tendríamos en los datos enviados en la trama UDP el paquete TCP completo. Por lo tanto el servidor recibe el paquete UDP, toma los datos, los cuales son un paquete TCP con origen/destino etc y forma una trama completa TCP/IP con ese paquete TCP para enviarlo al destino.

Es decir, TCP en UDP -> envió al tunel -> Desempaqueta el UDP y forma una trama completa sobre TCP -> el server del tunnel la envía al destino

Sobre eludir firewalls, el tunneling de por hecho se utiliza para esto. A lo que yo me refería es algo más liviano. Existen protocolos de red con el campo payload. Ahí podríamos "inyectar" nuestro mensaje para el destino sin tener que encapsular o hacer uso del tunneling, todo depende de como actue el Firewall.

Saludos.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 23 Enero 2021, 17:45 pm
(https://i.imgur.com/BlvGuCQ.jpg)

Es decir que el paquete TCP iria en el campo de datos del paquete UDP, ¿No?. Madre mia que interesante...

¿Sabes como podria experimentar esto? quiero decir... puedes experimentar la criptografia programando o haciendo calculos, pero ¿Hay alguna forma de depurar estos protocolos? Quiero decir verlos como ves el ensamblador de un programa, aunque este escrito en un lenguaje de alto nivel, con un depurador.

Y segun esta logica, un protocolo puede ser encapsulado en otro siempre que se encuentren en la misma capa en terminos del modelo OSI, ¿No? porque no podrias, por ejemplo, encapsular a TCP en HTTP porque en primer lugar HTTP necesita a TCP para funcionar... ¿O si?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 23 Enero 2021, 22:11 pm
(https://i.imgur.com/BlvGuCQ.jpg)

Es decir que el paquete TCP iria en el campo de datos del paquete UDP, ¿No?. Madre mia que interesante...

¿Sabes como podria experimentar esto? quiero decir... puedes experimentar la criptografia programando o haciendo calculos, pero ¿Hay alguna forma de depurar estos protocolos? Quiero decir verlos como ves el ensamblador de un programa, aunque este escrito en un lenguaje de alto nivel, con un depurador.

Y segun esta logica, un protocolo puede ser encapsulado en otro siempre que se encuentren en la misma capa en terminos del modelo OSI, ¿No? porque no podrias, por ejemplo, encapsular a TCP en HTTP porque en primer lugar HTTP necesita a TCP para funcionar... ¿O si?

Me alegro de que te hagas preguntas, veo que lo vas pillando, pero hay que remarcar un par de cosas.

Existe una forma determinista de experimientar esto, y es programando y depurando con un capturador de paquetes de red ya sea TCPDump o Wireshark.

Citar
Y segun esta logica, un protocolo puede ser encapsulado en otro siempre que se encuentren en la misma capa en terminos del modelo OSI, ¿No? porque no podrias, por ejemplo, encapsular a TCP en HTTP porque en primer lugar HTTP necesita a TCP para funcionar... ¿O si?

Un paquete de red se compone en una serie de tramas. Cuando recibes un paquete vía Socket estás recibiendo un paquete TCP o UDP. Dentro de esté en el campo de datos está el paquete HTTP embebido. Por lo tanto tunelar TCP por HTTP, requeriría que en el campo de datos del paquete TCP esté el paquete HTTP, que el servidor extraiga el paquete HTTP y finalmente como este contiene otro paquete TCP lo enviaría al destino. Así que sí que se podría.

Lo que quiero que quede claro es que tu PC recibe unas tramas y te muestra el paquete TCP/UDP si tu socket maneja paquetes TCP o UDP(datagramas) y en el campo de datos vendrían los paquetes de la capa de aplicación.

Saludos.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 24 Enero 2021, 16:07 pm
Existe una forma determinista de experimientar esto, y es programando y depurando con un capturador de paquetes de red ya sea TCPDump o Wireshark.

Voy a probar TCPDump.

Un paquete de red se compone en una serie de tramas.

Con "serie de tramas" te refieres a la pila de niveles de la red que existe en una transmicion, ¿No?. Es decir, a que, por ejemplo, segun el hecho de que existe dentro del campo de datos de TCP la trama HTTP, ¿Existen dos tramas en cuestion: la de TCP y la de HTTP?

Cuando recibes un paquete vía Socket estás recibiendo un paquete TCP o UDP. Dentro de esté en el campo de datos está el paquete HTTP embebido.

Creo que a eso te refieres con esto...

requeriría que en el campo de datos del paquete TCP esté el paquete HTTP, que el servidor extraiga el paquete HTTP y finalmente como este contiene otro paquete TCP lo enviaría al destino. Así que sí que se podría.

Claro, pero ¿Como podria siquiera existir una conexion HTTP sin una conexion TCP? en ese caso habrian dos conexiones TCP: la que sostiene la conexion HTTP en si y la que se "tunelea" por el mismo protocolo, ¿No?

Lo que quiero que quede claro es que tu PC recibe unas tramas y te muestra el paquete TCP/UDP si tu socket maneja paquetes TCP o UDP(datagramas) y en el campo de datos vendrían los paquetes de la capa de aplicación.

Eso ahora lo entiendo, gracias.

Saludos.



¿Conoces PuTTY? ¿Se podria usar de alguna forma para probar estos conceptos?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: MinusFour en 24 Enero 2021, 20:16 pm
https://es.wikipedia.org/wiki/T%C3%BAnel_(inform%C3%A1tica) (https://es.wikipedia.org/wiki/T%C3%BAnel_(inform%C3%A1tica))

¿A que se refiere exactamente con 'encapsular un protocolo'? ¿Como puede encapsularse un protocolo sobre otro? Lo unico que se me viene a la mente es un cast de estructuras de C  :huh:

Saludos...

Un proxy es un representante. Tu interactúas con el representante y el representante interactúa por ti con otros servicios. Tu router por ejemplo podría considerarse un proxy porque representa a todos los dispositivos en la red. Es el encargado de recibir información fuera de tu red y distribuirlos a los miembros de tu red.

Un túnel es simplemente una estructura para conectar dos puntos. Así que las conexiones de red fácilmente pueden ser consideradas como un túnel. Yo entiendo un túnel de red como un túnel dentro de la red. Podrías decir que es un túnel dentro de otro túnel. Es replicar una conexión dentro de una conexión.

Para comunicarte con el proxy (tu representante) podrías decir que usas un túnel. Por ejemplo, para comunicarte con una VPN (también considerados proxy) se necesita usualmente un túnel de red.

Son términos muy genéricos a decir verdad y por lo general se entiende solo una parte de lo que realmente significan.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 24 Enero 2021, 21:50 pm
¿Conoces PuTTY? ¿Se podria usar de alguna forma para probar estos conceptos?

Sí, aunque soy linuxero me va más la consola. Una práctica que puedes realizar es, crea una VM en tu Win$ con cualquier distro Linux y sigue estos pasos que son facilones https://linuxize.com/post/how-to-setup-ssh-tunneling/
Verás como SSH es capaz de dar acceso a recursos internos de una red desde el exterior (por ejemplo) es decir es capaz de enlazar tu petición con otros servicios a través de SSH por lo tanto hay encapsulamiento. Esto es tunneling.

Claro, pero ¿Como podria siquiera existir una conexion HTTP sin una conexion TCP? en ese caso habrian dos conexiones TCP: la que sostiene la conexion HTTP en si y la que se "tunelea" por el mismo protocolo, ¿No?

Esto ya se convierte en paja mental, es decir en un lío. Yo puedo tunelar HTTP por UDP si quiero. Pero lo contrario no tiene sentido, pues HTTP va por TCP, la redundancia aquí no es buena.

Ahora, podría ser que Wireshark o tcpdump necesiten acceso al fichero donde esta la key privada del server SSH puesto que el sniffer necesita obtener la clave simétrica de sesión, busca y encontraras seguro que es fácil, al igual que descifrando tramas de Firefox.

Y sí, tal y como dice MinusFour, y como dije yo, el proxy "habla" el protocolo que te diga, y lo fowrardea a otras máquinas. Un tunnel en cambio permite encapsulamiento. Pero en la práctica ya estás viendo que un tunnel tiene muchas aplicaciones en el hacking.

Saludos.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 24 Enero 2021, 23:44 pm
Un proxy es un representante. Tu interactúas con el representante y el representante interactúa por ti con otros servicios. Tu router por ejemplo podría considerarse un proxy porque representa a todos los dispositivos en la red. Es el encargado de recibir información fuera de tu red y distribuirlos a los miembros de tu red.

Un túnel es simplemente una estructura para conectar dos puntos. Así que las conexiones de red fácilmente pueden ser consideradas como un túnel. Yo entiendo un túnel de red como un túnel dentro de la red. Podrías decir que es un túnel dentro de otro túnel. Es replicar una conexión dentro de una conexión.

Para comunicarte con el proxy (tu representante) podrías decir que usas un túnel. Por ejemplo, para comunicarte con una VPN (también considerados proxy) se necesita usualmente un túnel de red.

Son términos muy genéricos a decir verdad y por lo general se entiende solo una parte de lo que realmente significan.

Una explicacion limpia... Gracias. Aunque sin duda no la habria entendido sin haberme enredado antes...  :laugh:

Ahora, podría ser que Wireshark o tcpdump necesiten acceso al fichero donde esta la key privada del server SSH puesto que el sniffer necesita obtener la clave simétrica de sesión, busca y encontraras seguro que es fácil, al igual que descifrando tramas de Firefox.

¿Dices que descifrar una conexion HTTPS no es tan dificil si tienes acceso a las tramas?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: kub0x en 25 Enero 2021, 00:20 am
¿Dices que descifrar una conexion HTTPS no es tan dificil si tienes acceso a las tramas?

No hombre jamás diría eso. Al ser tu propia máquina, y el tráfico provenir de tu propia máquina, entonces puedes sin problema capturar las claves de sesión que cifran el tráfico, en SSH dichas claves son generadas a partir de la private key.

Wireshark es un buen sofwtare, y permite en HTTPS descifrar el tráfico generado en Firefox mediante una variable de entorno, dicha variable permite incluir en un fichero todas las claves de sesión y gualá, Wireshark te mostrará el tráfico TLS descifrado (no sólo HTTPS sino todo lo que use TLS que es de la capa de sesión).

Lo que quiero decir es que en el caso de SSH probablemente exista otra forma, quizá con una variable de entorno también o algo más tricky.

Es tu máquina y cualquiera que tenga acceso podrá violar la criptografía de cualquier forma. Hace unos años escribí un programa que se inyectaba en el Firefox, Hookeaba las llamadas de la api criptográfica, por lo tanto tenía acceso previo a todo el texto plano que se iba a cifrar para ser enviado en la comunicación. No es descabellado pensar que un sniffer tenga "otras alternativas" cuando se ejecuta en tu propia máquina, ¿verdad?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: marax en 27 Enero 2021, 18:02 pm
Citar
A tunnel acts as a relay point between two connections
   without changing the messages; tunnels are used when the
   communication needs to pass through an intermediary (such as a
   firewall) even when the intermediary cannot understand the contents
   of the messages.
https://tools.ietf.org/html/rfc2616#page-12 (https://tools.ietf.org/html/rfc2616#page-12)

¿"Tunel", en este caso, significa lo mismo?


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: MinusFour en 28 Enero 2021, 23:41 pm
https://tools.ietf.org/html/rfc2616#page-12 (https://tools.ietf.org/html/rfc2616#page-12)

¿"Tunel", en este caso, significa lo mismo?

Las tres distinciones que hace el RFC son proxies y están secuestrando los términos para hacer sus distinciones. Ahí lo que dice el RFC es que un proxy puede o no alterar la petición, un gateway traduce la petición y que un tunel tiene que pasar la petición tal cual.


Título: Re: ¿Cual es la diferencia entre un proxy y un tunel de red?
Publicado por: [D]aniel en 29 Enero 2021, 01:00 am
Hola, pues si es cierto lo que dijo MinusFour, que un proxy puede alterar la petición, recuerdo que hace ya varios años estaba en un servidor de chat conectado por un proxy, y charlando por el general de un canal, cuando leo a otros usuarios decirme algo que no me cerraba, algo que me pareció confuso y ellos tabulaban mí Nick diciéndome cosas que no entendía, como respuestas a algo que yo decía, aunque estaba charlando con ellos pero las respuestas no cuadraban, hasta que le pregunto a un amigo por mensaje privado de que me estaban hablando los demás usuarios y me dijo de algo que yo había escrito y que después puse muchos "jajajajajaja", el me copió lo que yo supuestamente dije, pero jamás dije eso, eso lo hizo mismo proxy...

Cómo pasó? simple, proxy inseguro, la máquina de la persona que usaba su PC como proxy, estaba leyendo todos las conversaciones tanto las que yo escribía como la de los usuarios del canal, pues si ya ven los proxys pueden interferir en nuestra conexión, al pasar eso inmediatamente me desconecto del servidor e ingreso con mí IP real.


Saludos