Protocolos SFTP y FTPS

Prólogo

Literalmente hace una semana escribí un informe sobre el tema indicado en el encabezado y me encontré con que, digamos, hay poca información informativa en la red. Principalmente hay hechos secos e instrucciones sobre la configuración. Por ello, decidí ajustar un poco el texto y publicarlo como un artículo.

Qué es FTP

FTP (File Transfer Protocol) es el protocolo de transferencia de archivos a través de la red. Es uno de los protocolos básicos de Ethernet. Surgió en 1971 y originalmente funcionaba en las redes de DARPA. En la actualidad, al igual que HTTP, la transferencia de archivos se basa en un modelo compuesto por un conjunto de protocolos TCP/IP (Transmission Control Protocol/Internet Protocol). Se define en la RFC 959.

El protocolo define lo siguiente:

  • Cómo se llevará a cabo la verificación de errores
  • Método de empaquetado de datos (si se utiliza empaquetado)
  • Cómo el dispositivo emisor indica que ha terminado el mensaje
  • Cómo el dispositivo receptor indica que ha recibido el mensaje

Interacción entre el cliente y el servidor

Examinemos más a fondo los procesos que ocurren durante el uso de FTP. La conexión se inicia por el intérprete del protocolo del usuario. El control de la comunicación se lleva a cabo a través del canal de control en el estándar TELNET. Los comandos FTP son generados por el intérprete del protocolo del usuario y se envían al servidor. Las respuestas del servidor se envían al usuario también a través del canal de control. En general, el usuario tiene la posibilidad de establecer contacto con el intérprete del protocolo del servidor mediante herramientas diferentes a las del intérprete del usuario.

La característica principal de FTP es que utiliza conexiones dobles. Una de ellas se usa para enviar comandos al servidor y se realiza por defecto a través del puerto TCP 21, que puede ser cambiado. La conexión de control existe durante todo el tiempo en que el cliente se comunica con el servidor. El canal de control debe estar abierto durante la transferencia de datos entre las máquinas. En caso de que se cierre, la transferencia de datos se detiene. A través de la segunda conexión se realiza la transferencia directa de datos. Se abre cada vez que se efectúa una transferencia de un archivo entre el cliente y el servidor. En caso de que se transfieran varios archivos simultáneamente, se abre un canal de transferencia para cada uno de ellos.

FTP puede operar en modo activo o pasivo, y la elección de uno de ellos determina la forma de establecer la conexión. En modo activo, el cliente crea una conexión TCP de control con el servidor y envía su dirección IP y un número de puerto aleatorio al servidor, luego espera a que el servidor inicie la conexión TCP con esa dirección y número de puerto. Si el cliente está detrás de un cortafuegos y no puede aceptar una conexión TCP entrante, se puede usar el modo pasivo. En este modo, el cliente utiliza el canal de control para enviar al servidor el comando PASV y luego recibe del servidor su dirección IP y número de puerto, que luego utiliza para abrir un canal de datos desde su puerto aleatorio.

Puede darse la situación de que los datos se transmitan a un tercer servidor. En este caso, el usuario establece un canal de control con dos servidores y organiza un canal de datos directo entre ellos. Los comandos de control pasan a través del usuario, mientras que los datos fluyen directamente entre los servidores.

Al transferir datos a través de la red, se pueden utilizar cuatro representaciones de datos:

  • ASCII - se utiliza para textos. Los datos, si es necesario, se convierten antes de la transmisión desde la representación de caracteres en el host emisor a "ASCII de ocho bits", y (nuevamente, si es necesario) a la representación de caracteres del host receptor. En particular, se modifican los caracteres de nueva línea. Como consecuencia, este modo no es adecuado para archivos que contienen algo más que texto simple.
  • Modo binario - el dispositivo emisor envía cada archivo byte por byte, y el receptor guarda la secuencia de bytes al recibirla. Se ha recomendado el soporte de este modo para todas las implementaciones de FTP.
  • EBCDIC - se utiliza para transmitir texto normal entre hosts en codificación EBCDIC. De otro modo, este modo es similar al modo ASCII.
  • Modo local - permite que dos computadoras con configuraciones idénticas envíen datos en su propio formato sin convertidos a ASCII.

La transmisión de datos puede llevarse a cabo en cualquiera de tres modos:

  • Modo de flujo - los datos se envían como un flujo continuo, liberando a FTP de realizar cualquier procesamiento. En su lugar, todo el procesamiento se lleva a cabo a través de TCP. No se necesita un indicador de fin de archivo, excepto para separar los datos en registros.
  • El modo de bloques – FTP divide los datos en varios bloques (bloque de cabecera, cantidad de bytes, campo de datos) y luego los transmite a través de TCP.
  • Modo de compresión – los datos se comprimen mediante un algoritmo único (generalmente codificación de longitud de serie).

El servidor FTP – es un servidor que permite el uso del protocolo de transferencia de archivos. Tiene ciertas características que lo distinguen de los servidores web ordinarios:

  • Se requiere autenticación de usuarios.
  • Todas las operaciones se realizan dentro de la sesión actual.
  • Posibilidad de realizar diversas acciones con el sistema de archivos.
  • Se utiliza un canal separado para cada conexión.

El cliente FTP – es un programa que permite conectarse a un servidor remoto a través de FTP y también realizar las acciones necesarias en los elementos del sistema de archivos. El cliente puede ser un navegador, al cual se le debe introducir una dirección que representa la ruta a un directorio o archivo específico en el servidor remoto, de acuerdo con el esquema general de URL:

ftp://user:pass@address:port/directory/file

Sin embargo, el uso de un navegador web en este contexto solo permitirá ver o descargar los archivos de interés. Para aprovechar plenamente todas las ventajas de FTP, se debe utilizar software especializado como cliente.

La autenticación FTP utiliza un esquema de nombre de usuario/contraseña para proporcionar acceso. El nombre de usuario se envía al servidor con el comando USER y la contraseña con el comando PASS. Si la información proporcionada por el cliente es aceptada por el servidor, este enviará una solicitud al cliente y comenzará la sesión. Los usuarios pueden, si el servidor admite esta característica, iniciar sesión sin proporcionar credenciales, pero el servidor puede ofrecer solo acceso limitado para tales sesiones.

El host que proporciona el servicio FTP puede ofrecer acceso anónimo a FTP. Los usuarios generalmente inician sesión como «anonymous» (puede ser sensible a mayúsculas en algunos servidores FTP) como nombre de usuario. Aunque generalmente se les pide a los usuarios que envíen la dirección de su correo electrónico en lugar de una contraseña, en realidad no se realiza ninguna verificación. Muchos hosts FTP que proporcionan actualizaciones de software admiten acceso anónimo.

Esquema del protocolo

La interacción «cliente-servidor» en una conexión FTP se puede representar de la siguiente manera:

Protocolos SFTP y FTPS

FTP Seguro

El FTP no fue concebido desde el principio como un protocolo seguro, ya que estaba destinado a la comunicación entre varios objetos y entidades militares. Sin embargo, con el desarrollo y expansión de Internet, el peligro de acceso no autorizado ha aumentado considerablemente. Se hizo necesaria la protección de los servidores contra diversos tipos de ataques. En mayo de 1999, los autores del RFC 2577 resumieron las vulnerabilidades en la siguiente lista de problemas:

  • Ataques ocultos (bounce attacks)
  • Ataques de suplantación (spoof attacks)
  • Ataques de fuerza bruta (brute force attacks)
  • Interceptación de paquetes, sniffing (packet capture, sniffing)
  • Robo de puertos (port stealing)

El FTP común no tiene la capacidad de transmitir datos encriptados, por lo que los nombres de usuario, contraseñas, comandos y otra información pueden ser fácilmente interceptados por los atacantes. La solución habitual a este problema es utilizar versiones 'seguras', protegidas por TLS, del protocolo vulnerable (FTPS), o bien otro protocolo más seguro, como SFTP/SCP, que se ofrece con la mayoría de las implementaciones del protocolo Secure Shell.

FTPS

FTPS (FTP + SSL) es una extensión del protocolo estándar de transferencia de archivos, que añade a su funcionalidad básica la creación de sesiones encriptadas mediante el protocolo SSL (Secure Sockets Layer — nivel de sockets seguros). Actualmente, la protección es proporcionada por su versión más avanzada, TLS (Transport Layer Security — protección a nivel de transporte).

SSL

El protocolo SSL fue propuesto por la empresa Netscape Communications en 1996 con el objetivo de asegurar la seguridad y la confidencialidad de las conexiones a Internet. El protocolo soporta la autenticación (validación) del cliente y del servidor, no depende de aplicaciones y es transparente para los protocolos HTTP, FTP y Telnet.

El protocolo SSL Handshake consta de dos etapas: la autenticación del servidor y la opción de autenticación del cliente. En la primera etapa, el servidor responde a la solicitud del cliente enviando su certificado y los parámetros de cifrado. Luego, el cliente genera una clave maestra, la cifra con la clave pública del servidor y la envía al servidor. El servidor descifra la clave maestra con su clave privada y confirma su autenticidad al cliente, devolviéndole un mensaje firmado con la clave maestra del cliente.

Los datos subsecuentes son cifrados y firmados con claves obtenidas a partir de esta clave maestra. En la segunda fase, que no es obligatoria, el servidor envía una solicitud al cliente, y el cliente confirma su autenticidad ante el servidor al devolver la solicitud con su propia firma digital y certificado de clave pública.

SSL soporta una variedad de algoritmos criptográficos. Durante el establecimiento de la conexión se utiliza el sistema de criptografía de clave pública RSA. Después del intercambio de claves se emplean varios cifrados diferentes: RC2, RC4, IDEA, DES y TripleDES. También se utiliza MD5, que es un algoritmo para generar resúmenes de mensajes. La sintaxis de los certificados de clave pública se describe en X.509.

Una de las ventajas más importantes de SSL es su completa independencia de la plataforma de software. El protocolo fue diseñado con principios de portabilidad, y su ideología de construcción no depende de las aplicaciones en las que se utiliza. Además, es importante que sobre el protocolo SSL se pueden superponer de manera transparente otros protocolos; ya sea para aumentar aún más el nivel de protección de los flujos de información objetivo, o para adaptar las capacidades criptográficas de SSL a una tarea específica.

Conexión SSL

Protocolos SFTP y FTPS

El canal seguro proporcionado por SSL tiene tres propiedades principales:

  • El canal es privado. Se utiliza cifrado para todos los mensajes después de un diálogo inicial, que sirve para determinar la clave secreta.
  • El canal está autenticado. El lado del servidor del diálogo siempre se autentica, mientras que el del cliente se autentica opcionalmente.
  • El canal es confiable. El transporte de mensajes incluye una verificación de integridad (usando MAC).

Características de FTPS

Existen dos implementaciones de FTPS que utilizan diferentes métodos para proporcionar seguridad:

  • El método implícito supone el uso del protocolo SSL estándar para establecer una sesión antes de enviar datos, lo que, a su vez, afecta la compatibilidad con clientes y servidores FTP estándar. Para la compatibilidad con clientes que no soportan FTPS, se utiliza el puerto TCP 990 para la conexión de control y el puerto 989 para la transferencia de datos. Esto permite conservar el puerto estándar 21 para el protocolo FTP. Este método se considera obsoleto.
  • El modo explícito es mucho más conveniente, ya que utiliza los comandos estándar de FTP, pero al responder cifra los datos, lo que permite usar una misma conexión de control tanto para FTP como para FTPS. El cliente debe solicitar explícitamente la transferencia de datos segura al servidor y luego aprobar el método de cifrado. Si el cliente no solicita la transferencia segura, el servidor FTPS tiene derecho tanto a mantener como a cerrar la conexión no segura. El mecanismo de negociación de identificación y protección de datos fue añadido bajo la RFC 2228, que incluye un nuevo comando FTP AUTH. Aunque este estándar no define explícitamente los mecanismos de protección, establece que la conexión segura debe ser iniciada por el cliente utilizando el algoritmo descrito anteriormente. Si el servidor no soporta conexiones seguras, debe devolverse un código de error 504. Los clientes FTPS pueden obtener información sobre los protocolos de seguridad soportados por el servidor mediante el comando FEAT, sin embargo, el servidor no está obligado a divulgar qué niveles de seguridad admite. Los comandos FTPS más comunes son AUTH TLS y AUTH SSL, que proporcionan protección TLS y SSL respectivamente.

SFTP

SFTP (Secure File Transfer Protocol) es un protocolo de nivel de aplicación para la transferencia de archivos que opera sobre un canal seguro. No debe ser confundido con (Simple File Transfer Protocol), que tiene la misma abreviatura. Si FTPS es simplemente una extensión de FTP, SFTP es un protocolo separado y no relacionado, que utiliza SSH (Secure Shell – shell seguro) como base.

Secure Shell

El desarrollo del protocolo fue realizado por uno de los grupos de IETF llamado Secsh. La documentación de trabajo del nuevo protocolo SFTP no se convirtió en un estándar oficial, pero comenzó a aplicarse activamente en el desarrollo de aplicaciones. Posteriormente, se lanzaron seis versiones del protocolo. Sin embargo, el aumento progresivo de funcionalidad condujo a que el 14 de agosto de 2006 se decidiera parar el trabajo sobre el desarrollo del protocolo, debido al cumplimiento del objetivo principal del proyecto (desarrollo de SSH) y a la falta de un nivel de experticia suficiente para pasar a la creación de un protocolo completo de sistema de archivos remoto.

SSH es un protocolo de red que permite la gestión remota del sistema operativo y el túnel de conexiones TCP (por ejemplo, para transferencia de archivos). Su funcionalidad es similar a la de los protocolos Telnet y rlogin, pero a diferencia de estos, cifra todo el tráfico, incluidos los contraseñas transmitidos. SSH permite elegir entre diferentes algoritmos de cifrado. Los clientes y servidores SSH están disponibles para la mayoría de los sistemas operativos de red.

SSH permite la transmisión segura en un entorno no seguro de prácticamente cualquier otro protocolo de red. Así, puedes no solo trabajar de forma remota en una computadora a través de la línea de comandos, sino también transmitir flujos de audio o video por un canal cifrado (por ejemplo, desde una cámara web). Además, SSH puede utilizar compresión de datos transmitidos para su posterior cifrado, lo cual es conveniente, por ejemplo, para el lanzamiento remoto de clientes de X Window System.

La primera versión del protocolo, SSH-1, fue desarrollada en 1995 por el investigador Tatu Ylönen de la Universidad Tecnológica de Helsinki (Finlandia). SSH-1 fue creado para ofrecer mayor privacidad que los protocolos rlogin, telnet y rsh. En 1996 se desarrolló una versión más segura del protocolo, SSH-2, que no es compatible con SSH-1. El protocolo ganó aún más popularidad, y para el año 2000 contaba con alrededor de dos millones de usuarios. En la actualidad, el término 'SSH' generalmente se refiere a SSH-2, ya que la primera versión del protocolo, debido a sus graves deficiencias, prácticamente no se utiliza. En 2006, el protocolo fue aprobado por el grupo de trabajo de IETF como estándar de Internet.

Existen dos implementaciones de SSH: una comercial privada y una gratuita y de código abierto. La implementación libre se llama OpenSSH. Para 2006, el 80 % de los ordenadores en Internet utilizaban OpenSSH. La implementación privada es desarrollada por SSH Communications Security, que es una subsidiaria al 100 % de la corporación Tectia, y es gratuita para uso no comercial. Estas implementaciones contienen prácticamente el mismo conjunto de comandos.

El protocolo SSH-2, a diferencia del protocolo telnet, es resistente a ataques de escucha de tráfico (‘sniffing’), pero es vulnerable a ataques de ‘hombre en el medio’. El protocolo SSH-2 también es resistente a ataques de secuestro de sesión (session hijacking), ya que es imposible unirse a una sesión ya establecida o interceptarla.

Para prevenir ataques de ‘hombre en el medio’ al conectarse a un host cuyo clave aún no es conocida por el cliente, el software cliente muestra al usuario un ‘molde de clave’ (key fingerprint). Se recomienda verificar cuidadosamente el ‘molde de clave’ mostrado por el software cliente con el molde de clave del servidor, preferiblemente obtenido a través de canales de comunicación seguros o en persona.

El soporte para SSH está implementado en todos los sistemas similares a UNIX, y en la mayoría de ellos, entre las utilidades estándar se encuentran el cliente y el servidor ssh. Existen numerosas implementaciones de clientes SSH para sistemas operativos que no son UNIX. El protocolo ganó gran popularidad tras el desarrollo generalizado de analizadores de tráfico y métodos de interrupción de redes locales, como una solución alternativa al protocolo Telnet, que es poco seguro, para gestionar nodos importantes.

Conexión utilizando SSH

Para trabajar con SSH se necesita un servidor SSH y un cliente SSH. El servidor escucha conexiones de las máquinas clientes y, al establecerse la conexión, realiza la autenticación, tras lo cual comienza a atender al cliente. El cliente se usa para acceder a una máquina remota y ejecutar comandos.

Protocolos SFTP y FTPS

Comparación con FTPS

Lo principal que diferencia SFTP de FTP estándar y FTPS es que SFTP cifra absolutamente todos los comandos, nombres de usuario, contraseñas y otra información confidencial.

Ambos protocolos, FTPS y SFTP, utilizan una combinación de algoritmos asimétricos (RSA, DSA), algoritmos simétricos (DES/3DES, AES, Twhofish, etc.), así como un algoritmo de intercambio de claves. Para la autenticación, FTPS (o, para ser más precisos, SSL/TLS a través del protocolo FTP) utiliza certificados X.509, mientras que SFTP (protocolo SSH) emplea claves SSH.

Los certificados X.509 incluyen una clave pública y cierta información sobre el certificado del propietario. Esta información, por otro lado, permite verificar la integridad del propio certificado, la autenticidad y el propietario del certificado. Cada certificado X.509 tiene una clave privada asociada, que generalmente se almacena separada del certificado por razones de seguridad.

La clave SSH contiene únicamente la clave pública (la clave privada correspondiente se almacena por separado). No contiene ninguna información sobre el propietario de la clave. Algunas implementaciones de SSH utilizan certificados X.509 para la autenticación, pero en realidad no verifican toda la cadena de certificados; solo se utiliza la clave pública (lo que hace que dicha verificación de autenticidad sea incompleta).

Conclusión

El protocolo FTP juega, sin duda, un papel importante en el almacenamiento y distribución de información en la red a pesar de su avanzada edad. Es un protocolo conveniente, multifuncional y estandarizado. Sobre su base se han creado numerosos archivos de archivos que serían menos eficientes sin ellos. Además, es fácil de configurar, y existen servidores y programas clientes para prácticamente todas las plataformas relevantes y algunas no tan relevantes.

A su vez, sus versiones seguras abordan el problema de la privacidad de los datos almacenados y transmitidos en el mundo moderno. Ambos nuevos protocolos tienen sus ventajas y desventajas y cumplen funciones ligeramente diferentes. En las áreas donde se requiere un archivo de archivos, es preferible utilizar FTPS, especialmente si anteriormente ya se había utilizado el FTP clásico. SFTP es menos común debido a su incompatibilidad con el antiguo protocolo, pero es más seguro y tiene más funcionalidades, ya que forma parte del sistema de gestión remota.

Lista de fuentes

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster