Protocolos · 2 min de lectura

Métodos de autenticación SOCKS5 (RFC 1929)

Antes de que un proxy SOCKS5 reenvíe tu tráfico, negocia cómo autenticarte. Esta guía explica el apretón de manos de negociación de métodos SOCKS5 del RFC 1928, el esquema de nombre de usuario/contraseña del RFC 1929, y lo que significa en la práctica, incluyendo la advertencia de texto plano.

El apretón de manos de negociación de método

SOCKS5 (definido en RFC 1928) no asume un método de autenticación — negocia uno. Tan pronto como se abre la conexión TCP al proxy, el cliente envía un saludo que enumera los métodos de autenticación que soporta, y el proxy elige uno.

El saludo del cliente es: un byte de versión (0x05), un conteo de métodos, y luego tantos identificadores de método. Los métodos comunes son 0x00 "sin autenticación requerida", 0x02 "nombre de usuario/contraseña", y 0xFF "sin métodos aceptables". El servidor responde con dos bytes: la versión y el único método que eligió. Si devuelve 0x00, te conectas de inmediato; si devuelve 0x02, el cliente debe ahora ejecutar la sub-negociación de nombre de usuario/contraseña antes de poder emitir cualquier solicitud de conexión. Si el servidor devuelve 0xFF, ninguno de los métodos ofrecidos fue aceptable y cierra la conexión. Esta es la razón por la que un proxy SOCKS5 s4m autenticado en el puerto 1080 espera que tu cliente ofrezca el método 0x02.

Nombre de usuario/contraseña: RFC 1929

El método de nombre de usuario/contraseña (0x02) se especifica por separado en RFC 1929. Es un intercambio pequeño y autónomo que ocurre después de la negociación del método y antes de la solicitud SOCKS:

  • El cliente envía: un byte de versión de sub-negociación (0x01 — nota que esta es la versión de autenticación, no la versión SOCKS), un byte de longitud del nombre de usuario, el nombre de usuario, un byte de longitud de la contraseña y la contraseña.
  • El servidor responde con dos bytes: la versión (0x01) y un byte de estado. 0x00 significa éxito; cualquier otra cosa significa fallo, y el servidor cierra la conexión.

Solo después de un estado de éxito el cliente procede a la solicitud CONNECT SOCKS5 real nombrando el destino. Dado que tanto el nombre de usuario como la contraseña están precedidos por su longitud en un solo byte, cada uno está limitado a 255 bytes. Consulta nuestra guía de autenticación de proxy para ver cómo se desarrolla esto con clientes reales y la API para el manejo de credenciales.

La advertencia de texto plano y cómo manejarla

El punto crítico y honesto: el RFC 1929 transmite el nombre de usuario y la contraseña en texto plano. Los bytes no están encriptados ni hashados; cualquiera que pueda observar la conexión TCP entre tú y el proxy puede leer tus credenciales. El propio RFC reconoce esto y advierte que el método solo es apropiado donde esa exposición sea aceptable.

Lo que esto significa en la práctica: la seguridad de la autenticación de nombre de usuario/contraseña de SOCKS5 depende de que la ruta al proxy sea confiable, o de envolver toda la conexión SOCKS en algo encriptado. Las mitigaciones que la gente utiliza incluyen tunelizar SOCKS5 sobre TLS o SSH, ejecutar el proxy sobre una red confiable, o confiar en la lista blanca de IP en lugar de (o además de) credenciales, lo que un IP dedicado hace práctico. Existen otros métodos de autenticación SOCKS5 en principio (por ejemplo, GSS-API del RFC 1928), pero el nombre de usuario/contraseña sigue siendo, con mucho, el más ampliamente implementado, por lo que entender su naturaleza en texto plano — y no reutilizar una contraseña importante como credencial de proxy — es importante.

FAQ

Preguntas, respondidas

¿Cómo decide SOCKS5 qué método de autenticación usar?

Negocia. El cliente comienza con un saludo que enumera los métodos que soporta (como 0x00 sin autenticación y 0x02 nombre de usuario/contraseña), y el servidor responde con el único método que elige. Si el servidor elige 0x02, el cliente luego ejecuta el intercambio de nombre de usuario/contraseña RFC 1929 antes de enviar su solicitud de conexión.

¿La autenticación de nombre de usuario/contraseña de SOCKS5 está cifrada?

No. RFC 1929 envía el nombre de usuario y la contraseña en texto plano, por lo que cualquiera que pueda observar la conexión al proxy puede leerlos. Para proteger las credenciales, tunela la conexión SOCKS5 sobre TLS o SSH, usa una ruta de red confiable o confía en la lista blanca de IP con una IP dedicada.

¿Cuál es la diferencia entre RFC 1928 y RFC 1929?

RFC 1928 define SOCKS5 en sí, incluyendo el apretón de manos de negociación de método donde el cliente y el servidor acuerdan un método de autenticación. RFC 1929 define solo uno de esos métodos: el esquema de nombre de usuario/contraseña, con su propio byte de versión de sub-negociación y formato de mensaje. Trabajan juntos.

SOCKS5 autenticado, hecho correctamente

Los proxies SOCKS5 de s4m en el puerto 1080 utilizan autenticación de nombre de usuario/contraseña, con una IP dedicada opcional para que puedas añadir una dirección estable a la lista blanca. Cuentas anónimas, pago por uso medido, se acepta criptomoneda.

Las personas encontraron esta página buscando

Frases de búsqueda reales que esta página responde — los enlaces abren la página que las cubre en profundidad.