Protocolos SFTP e FTPS

Prefácio

Há apenas uma semana eu estava escrevendo um ensaio sobre o tema indicado no título e me deparei com o fato de que, digamos, não há muita informação educacional na Internet. Principalmente fatos secos e instruções de configuração. Portanto, resolvi corrigir um pouco o texto e publicá-lo como artigo.

O que é FTP

FTP (File Transfer Protocol) é um protocolo para transferência de arquivos em uma rede. É um dos protocolos Ethernet básicos. Apareceu em 1971 e inicialmente trabalhou nas redes DARPA. Atualmente, assim como o HTTP, a transferência de arquivos é baseada em um modelo que consiste em um conjunto de protocolos TCP/IP (Transmission Control Protocol/Internet Protocol). Definido na RFC 959.

O protocolo define o seguinte:

  • Como será realizada a verificação de erros?
  • Método de empacotamento de dados (se for usado empacotamento)
  • Como o dispositivo remetente indica que finalizou uma mensagem?
  • Como o dispositivo receptor indica que recebeu uma mensagem?

Comunicação entre cliente e servidor

Vamos dar uma olhada mais de perto nos processos que ocorrem durante a operação do FTP. A conexão é inicializada pelo interpretador de protocolo do usuário. A troca é controlada através de um canal de controle no padrão TELNET. Os comandos FTP são gerados pelo interpretador de protocolo do usuário e enviados ao servidor. As respostas do servidor também são enviadas ao usuário através do canal de controle. Em geral, o usuário tem a capacidade de estabelecer contato com o intérprete de protocolo do servidor e por outros meios que não o intérprete do usuário.

A principal característica do FTP é que ele usa conexões duplas. Um deles é utilizado para enviar comandos ao servidor e ocorre por padrão via porta TCP 21, que pode ser alterada. A conexão de controle existe enquanto o cliente se comunica com o servidor. O canal de controle deve estar aberto durante a transferência de dados entre máquinas. Se estiver fechado, a transmissão de dados é interrompida. Através do segundo, ocorre a transferência direta de dados. Ele abre sempre que ocorre uma transferência de arquivo entre o cliente e o servidor. Se vários arquivos forem transferidos simultaneamente, cada um deles abre seu próprio canal de transmissão.

O FTP pode operar em modo ativo ou passivo, cuja escolha determina como a conexão é estabelecida. No modo ativo, o cliente cria uma conexão de controle TCP com o servidor e envia seu endereço IP e um número de porta de cliente arbitrário para o servidor e, em seguida, espera que o servidor inicie uma conexão TCP com esse endereço e número de porta. Caso o cliente esteja atrás de um firewall e não possa aceitar uma conexão TCP de entrada, o modo passivo pode ser usado. Neste modo, o cliente usa o fluxo de controle para enviar um comando PASV ao servidor e, em seguida, recebe do servidor seu endereço IP e número de porta, que o cliente usa para abrir um fluxo de dados de sua porta arbitrária.

É possível que os dados sejam transferidos para uma terceira máquina. Neste caso, o usuário organiza um canal de controle com dois servidores e organiza um canal direto de dados entre eles. Os comandos de controle passam pelo usuário e os dados vão diretamente entre os servidores.

Ao transmitir dados através de uma rede, quatro representações de dados podem ser usadas:

  • ASCII – usado para texto. Os dados são, se necessário, convertidos da representação de caracteres no host remetente para "ASCII de oito bits" antes da transmissão e (novamente, se necessário) para a representação de caracteres no host receptor. Em particular, os caracteres de nova linha são alterados. Como resultado, este modo não é adequado para arquivos que contenham mais do que apenas texto simples.
  • Modo binário - o dispositivo remetente envia cada arquivo byte por byte e o destinatário armazena o fluxo de bytes após o recebimento. O suporte para este modo foi recomendado para todas as implementações de FTP.
  • EBCDIC – usado para transferir texto simples entre hosts na codificação EBCDIC. Caso contrário, este modo é semelhante ao modo ASCII.
  • Modo local - permite que dois computadores com configurações idênticas enviem dados em seu próprio formato sem converter para ASCII.

A transferência de dados pode ser realizada em qualquer um dos três modos:

  • Modo Stream - os dados são enviados como um fluxo contínuo, liberando o FTP de realizar qualquer processamento. Em vez disso, todo o processamento é feito pelo TCP. O indicador de fim de arquivo não é necessário, exceto para separar os dados em registros.
  • Modo de bloco - o FTP divide os dados em vários blocos (bloco de cabeçalho, número de bytes, campo de dados) e depois os transmite para o TCP.
  • Modo de compactação – os dados são compactados usando um único algoritmo (geralmente codificando comprimentos de execução).

Servidor FTP é um servidor que oferece a capacidade de usar o protocolo de transferência de arquivos. Possui certos recursos que o distinguem dos servidores web convencionais:

  • Autenticação do usuário necessária
  • Todas as operações são realizadas na sessão atual
  • Capacidade de executar várias ações com o sistema de arquivos
  • Um canal separado é usado para cada conexão

Cliente FTP é um programa que permite conectar-se a um servidor remoto via FTP e também realizar as ações necessárias nele com elementos do sistema de arquivos. O cliente pode muito bem ser um navegador, em cuja barra de endereços você deve inserir o endereço, que é o caminho para um diretório ou arquivo específico no servidor remoto, de acordo com o diagrama de blocos geral de URL:

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

No entanto, o uso de um navegador da web neste contexto permitirá apenas visualizar ou baixar os arquivos de seu interesse. Para aproveitar ao máximo todas as vantagens do FTP, você deve usar um software especializado como cliente.

A autenticação FTP usa um esquema de nome de usuário/senha para conceder acesso. O nome de usuário é enviado ao servidor com o comando USER e a senha é enviada com o comando PASS. Se as informações fornecidas pelo cliente forem aceitas pelo servidor, o servidor enviará um convite ao cliente e a sessão será iniciada. Os usuários podem, se o servidor suportar esse recurso, fazer login sem fornecer credenciais, mas o servidor só pode conceder acesso limitado para tais sessões.

O host que fornece o serviço FTP pode fornecer acesso FTP anônimo. Os usuários normalmente fazem login com “anônimo” (pode diferenciar maiúsculas de minúsculas em alguns servidores FTP) como nome de usuário. Embora normalmente seja solicitado aos usuários que forneçam seu endereço de e-mail em vez de uma senha, nenhuma verificação é realmente realizada. Muitos hosts FTP que fornecem atualizações de software oferecem suporte ao acesso anônimo.

Diagrama de protocolo

A interação cliente-servidor durante uma conexão FTP pode ser visualizada da seguinte forma:

Protocolos SFTP e FTPS

FTP seguro

O FTP não foi originalmente concebido para ser seguro, pois se destinava a comunicações entre múltiplas instalações e agências militares. Mas com o desenvolvimento e disseminação da Internet, o perigo de acesso não autorizado aumentou muitas vezes. Havia a necessidade de proteger os servidores de diversos tipos de ataques. Em maio de 1999, os autores da RFC 2577 resumiram as vulnerabilidades na seguinte lista de problemas:

  • Ataques ocultos (ataques de salto)
  • Ataques falsos
  • Ataques de força bruta
  • Captura de pacotes, sniffing
  • Roubo de porto

O FTP normal não tem a capacidade de transferir dados de forma criptografada, pelo que nomes de usuários, senhas, comandos e outras informações podem ser fácil e facilmente interceptados por invasores. A solução usual para esse problema é usar versões "seguras" e protegidas por TLS do protocolo vulnerável (FTPS) ou outro protocolo mais seguro, como SFTP/SCP, fornecido com a maioria das implementações de protocolo Secure Shell.

FTPS

FTPS (FTP + SSL) é uma extensão do protocolo padrão de transferência de arquivos que adiciona à sua funcionalidade básica a criação de sessões criptografadas utilizando o protocolo SSL (Secure Sockets Layer). Hoje, a proteção é fornecida por seu TLS (Transport Layer Security) analógico mais avançado.

SSL

O protocolo SSL foi proposto pela Netscape Communications em 1996 para garantir a segurança e a privacidade das conexões com a Internet. O protocolo suporta autenticação de cliente e servidor, é independente de aplicativo e é transparente para protocolos HTTP, FTP e Telnet.

O protocolo SSL Handshake consiste em dois estágios: autenticação do servidor e autenticação opcional do cliente. Na primeira etapa, o servidor responde à solicitação do cliente enviando seu certificado e parâmetros de criptografia. O cliente então gera uma chave mestra, criptografa-a com a chave pública do servidor e a envia ao servidor. O servidor descriptografa a chave mestra com sua chave privada e se autentica para o cliente retornando uma mensagem autenticada pela chave mestra do cliente.

Os dados subsequentes são criptografados e autenticados com chaves derivadas desta chave mestra. Na segunda etapa, que é opcional, o servidor envia uma solicitação ao cliente, e o cliente se autentica no servidor retornando a solicitação com sua própria assinatura digital e um certificado de chave pública.

SSL oferece suporte a uma variedade de algoritmos criptográficos. Durante o estabelecimento da comunicação, é utilizado o criptossistema de chave pública RSA. Após a troca de chaves, muitas cifras diferentes são utilizadas: RC2, RC4, IDEA, DES e TripleDES. MD5 também é usado - um algoritmo para criar um resumo de mensagens. A sintaxe para certificados de chave pública é descrita em X.509.

Uma das vantagens importantes do SSL é sua total independência de plataforma de software. O protocolo é desenvolvido segundo os princípios da portabilidade, e a ideologia de sua construção independe das aplicações em que é utilizado. Além disso, também é importante que outros protocolos possam ser sobrepostos de forma transparente ao protocolo SSL; seja para aumentar ainda mais o grau de proteção dos fluxos de informações de destino ou para adaptar as capacidades criptográficas do SSL para alguma outra tarefa bem definida.

Conexão SSL

Protocolos SFTP e FTPS

O canal seguro fornecido pelo SSL possui três propriedades principais:

  • O canal é privado. A criptografia é usada para todas as mensagens após um simples diálogo que serve para determinar a chave secreta.
  • O canal está autenticado. O lado servidor da conversa é sempre autenticado, enquanto o lado cliente é opcionalmente autenticado.
  • O canal é confiável. O transporte de mensagens inclui verificação de integridade (usando MAC).

Recursos do FTPS

Existem duas implementações de FTPS, usando métodos diferentes para fornecer segurança:

  • O método implícito envolve o uso do protocolo SSL padrão para estabelecer uma sessão antes de enviar dados, o que, por sua vez, quebra a compatibilidade com clientes e servidores FTP regulares. Para compatibilidade retroativa com clientes que não suportam FTPS, a porta TCP 990 é usada para a conexão de controle e a porta 989 é usada para transferência de dados. Isso mantém a porta padrão 21 para o protocolo FTP. Este método é considerado obsoleto.
  • Explícito é muito mais conveniente, pois usa comandos FTP padrão, mas criptografa os dados ao responder, o que permite usar a mesma conexão de controle para FTP e FTPS. O cliente deve solicitar explicitamente a transferência segura de dados do servidor e, em seguida, aprovar o método de criptografia. Se o cliente não solicitar uma transferência segura, o servidor FTPS terá o direito de manter ou encerrar a conexão não segura. Um mecanismo de autenticação e negociação de segurança de dados foi adicionado sob RFC 2228 que inclui o novo comando FTP AUTH. Embora este padrão não defina explicitamente mecanismos de segurança, ele especifica que uma conexão segura deve ser iniciada pelo cliente usando o algoritmo descrito acima. Se conexões seguras não forem suportadas pelo servidor, deverá ser retornado um código de erro 504. Os clientes FTPS podem obter informações sobre os protocolos de segurança suportados pelo servidor usando o comando FEAT, entretanto, o servidor não é obrigado a divulgar quais níveis de segurança ele apoia. Os comandos FTPS mais comuns são AUTH TLS e AUTH SSL, que fornecem segurança TLS e SSL, respectivamente.

SFTP

SFTP (Secure File Transfer Protocol) é um protocolo de transferência de arquivos da camada de aplicativo executado em um canal seguro. Não deve ser confundido com (Simple File Transfer Protocol), que possui a mesma abreviatura. Se o FTPS é simplesmente uma extensão do FTP, então o SFTP é um protocolo separado e não relacionado que usa SSH (Secure Shell) como base.

Secure Shell

O protocolo foi desenvolvido por um dos grupos da IETF chamado Secsh. A documentação de trabalho do novo protocolo SFTP não se tornou um padrão oficial, mas começou a ser usada ativamente para o desenvolvimento de aplicativos. Posteriormente, foram lançadas seis versões do protocolo. Porém, o aumento gradativo da funcionalidade do mesmo levou ao fato de que em 14 de agosto de 2006 foi decidido parar de trabalhar no desenvolvimento do protocolo devido à conclusão da tarefa principal do projeto (desenvolvimento SSH) e à falta de um nível de especialista suficiente para avançar para o desenvolvimento de um protocolo de sistema de arquivos remoto completo.

SSH é um protocolo de rede que permite o controle remoto do sistema operacional e o tunelamento de conexões TCP (por exemplo, para transferência de arquivos). Semelhante em funcionalidade aos protocolos Telnet e rlogin, mas, diferentemente deles, criptografa todo o tráfego, incluindo senhas transmitidas. O SSH permite a escolha de diferentes algoritmos de criptografia. Clientes e servidores SSH estão disponíveis para a maioria dos sistemas operacionais de rede.

O SSH permite transferir com segurança quase qualquer outro protocolo de rede em um ambiente inseguro. Assim, você pode não apenas trabalhar remotamente em seu computador por meio do shell de comando, mas também transmitir um fluxo de áudio ou vídeo (por exemplo, de uma webcam) por meio de um canal criptografado. O SSH também pode usar compactação de dados transmitidos para criptografia subsequente, o que é conveniente, por exemplo, para iniciar remotamente clientes X WindowSystem.

A primeira versão do protocolo, SSH-1, foi desenvolvida em 1995 pelo pesquisador Tatu Ulönen, da Universidade de Tecnologia de Helsinque (Finlândia). O SSH-1 foi escrito para fornecer maior privacidade do que os protocolos rlogin, telnet e rsh. Em 1996, foi desenvolvida uma versão mais segura do protocolo, o SSH-2, que é incompatível com o SSH-1. O protocolo ganhou ainda mais popularidade e, em 2000, tinha aproximadamente dois milhões de usuários. Atualmente, o termo “SSH” geralmente significa SSH-2, porque A primeira versão do protocolo praticamente não é utilizada devido a deficiências significativas. Em 2006, o protocolo foi aprovado pelo grupo de trabalho da IETF como padrão da Internet.

Existem duas implementações comuns de SSH: comercial privado e código aberto gratuito. A implementação gratuita é chamada OpenSSH. Em 2006, 80% dos computadores na Internet usavam OpenSSH. A implementação proprietária é desenvolvida pela SSH Communications Security, uma subsidiária integral da Tectia Corporation, e é gratuita para uso não comercial. Essas implementações contêm quase o mesmo conjunto de comandos.

O protocolo SSH-2, diferentemente do protocolo telnet, é resistente a ataques de espionagem de tráfego (“sniffing”), mas não é resistente a ataques man-in-the-middle. O protocolo SSH-2 também é resistente a ataques de sequestro de sessão, pois é impossível ingressar ou sequestrar uma sessão já estabelecida.

Para evitar ataques man-in-the-middle ao conectar-se a um host cuja chave ainda não é conhecida pelo cliente, o software cliente mostra ao usuário uma “impressão digital da chave”. Recomenda-se verificar cuidadosamente o “key snapshot” mostrado pelo software cliente com o key snapshot do servidor, preferencialmente obtido através de canais de comunicação confiáveis ​​ou pessoalmente.

O suporte SSH está disponível em todos os sistemas do tipo UNIX, e a maioria possui um cliente e servidor ssh como utilitários padrão. Existem muitas implementações de clientes SSH para sistemas operacionais não UNIX. O protocolo ganhou grande popularidade após o amplo desenvolvimento de analisadores de tráfego e métodos para interromper a operação de redes locais, como uma solução alternativa ao inseguro protocolo Telnet para gerenciar nós importantes.

Comunicação usando SSH

Para trabalhar via SSH, você precisa de um servidor SSH e de um cliente SSH. O servidor escuta conexões de máquinas clientes e, quando uma conexão é estabelecida, realiza a autenticação, após a qual começa a atender o cliente. O cliente é usado para fazer login em uma máquina remota e executar comandos.

Protocolos SFTP e FTPS

Comparação com FTPS

A principal coisa que distingue o SFTP do FTP e FTPS padrão é que o SFTP criptografa absolutamente todos os comandos, nomes de usuário, senhas e outras informações confidenciais.

Os protocolos FTPS e SFTP usam uma combinação de algoritmos assimétricos (RSA, DSA), algoritmos simétricos (DES/3DES, AES, Twhofish, etc.), bem como um algoritmo de troca de chaves. Para autenticação, FTPS (ou para ser mais preciso, SSL/TLS sobre FTP) usa certificados X.509, enquanto SFTP (protocolo SSH) usa chaves SSH.

Os certificados X.509 incluem uma chave pública e algumas informações sobre o certificado do proprietário. Esta informação permite, por outro lado, verificar a integridade do próprio certificado, a autenticidade e o titular do certificado. Os certificados X.509 possuem uma chave privada correspondente, que geralmente é armazenada separadamente do certificado por motivos de segurança.

A chave SSH contém apenas a chave pública (a chave privada correspondente é armazenada separadamente). Não contém nenhuma informação sobre o proprietário da chave. Algumas implementações SSH usam certificados X.509 para autenticação, mas na verdade não verificam toda a cadeia de certificados – apenas a chave pública é usada (o que torna essa autenticação incompleta).

Conclusão

O protocolo FTP, sem dúvida, ainda desempenha um papel importante no armazenamento e distribuição de informações na rede, apesar da sua idade venerável. É um protocolo conveniente, multifuncional e padronizado. Muitos arquivos de arquivos foram construídos com base nele, sem os quais o trabalho técnico não seria tão eficaz. Além disso, é fácil de configurar e existem programas servidores e clientes para quase todas as plataformas atuais e não tão atuais.

Por sua vez, suas versões protegidas resolvem o problema da confidencialidade dos dados armazenados e transmitidos no mundo moderno. Ambos os novos protocolos têm seus prós e contras e desempenham funções ligeiramente diferentes. Nas áreas onde é necessário arquivar arquivos, é preferível usar FTPS, especialmente se o FTP clássico já tiver sido usado antes. O SFTP é menos comum devido à sua incompatibilidade com o protocolo antigo, mas é mais seguro e possui mais funcionalidades, pois faz parte do sistema de gerenciamento remoto.

Lista de fontes

Fonte: habr.com

Adicionar um comentário