Prefácio
Literalmente há uma semana, escrevi um artigo sobre o tema mencionado no título e percebi que, por assim dizer, não há muitas informações educativas disponíveis na internet. Principalmente fatos secos e instruções de configuração. Portanto, decidi ajustar um pouco o texto e publicá-lo como um artigo.
O que é FTP
FTP (File Transfer Protocol) – Protocolo de Transferência de Arquivos na Rede. É um dos protocolos básicos do Ethernet. Surgiu em 1971 e inicialmente funcionava nas redes DARPA. Atualmente, assim como o HTTP, a transferência de arquivos baseia-se 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 o empacotamento for utilizado)
- Como o dispositivo remetente comunica que terminou a mensagem
- Como o dispositivo receptor comunica que recebeu a mensagem
Interação entre o cliente e o servidor
Vamos considerar os processos que ocorrem durante a operação do FTP em mais detalhe. A conexão é iniciada pelo interpretador do protocolo do usuário. O controle da troca é feito pelo 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 pelo canal de controle. De modo geral, o usuário tem a possibilidade de contatar o interpretador de protocolo do servidor usando meios diferentes do interpretador do usuário.
A principal característica do FTP é que ele utiliza conexões duplas. Uma delas é utilizada para enviar comandos ao servidor e ocorre por padrão através da porta TCP 21, que pode ser alterada. A conexão de controle existe todo o tempo em que o cliente se comunica com o servidor. O canal de controle deve estar aberto durante a transferência de dados entre as máquinas. Caso seja fechado, a transferência de dados é interrompida. A segunda conexão realiza a transferência direta de dados. Ela é aberta toda vez que ocorre a transmissão de um arquivo entre o cliente e o servidor. Se vários arquivos estão sendo transferidos simultaneamente, um canal de transferência separado é aberto para cada um deles.
O FTP pode operar em modo ativo ou passivo, e a escolha entre os dois influencia a forma de estabelecer a conexão. No modo ativo, o cliente cria uma conexão TCP de controle com o servidor e envia seu endereço IP e um número de porta aleatório para o servidor, aguardando então que o servidor inicie uma conexão TCP com esse endereço e número de porta. Se o cliente estiver atrás de um firewall e não puder aceitar conexões TCP de entrada, o modo passivo pode ser utilizado. Nesse modo, o cliente usa o canal de controle para enviar ao servidor o comando PASV e, em seguida, recebe do servidor seu endereço IP e número de porta, que são então usados pelo cliente para abrir um canal de dados de sua porta aleatória.
Pode haver situações em que os dados sejam transferidos para uma terceira máquina. Nesse caso, o usuário estabelece um canal de controle com dois servidores e cria um canal de dados direto entre eles. Os comandos de controle vão através do usuário, enquanto os dados vão diretamente entre os servidores.
Na transmissão de dados pela rede, podem ser utilizados quatro formatos de dados:
- ASCII – é utilizado para texto. Os dados, se necessário, são convertidos antes da transmissão do formato de caractere no host de origem para "ASCII de oito bits" e (novamente, se necessário) para o formato de caractere do host de destino. Em particular, os caracteres de nova linha são alterados. Portanto, esse modo não é adequado para arquivos que contenham não apenas texto comum.
- Modo binário – o dispositivo emissor envia cada arquivo byte por byte, e o receptor armazena o fluxo de bytes ao recebê-lo. O suporte a esse modo foi recomendado para todas as implementações do FTP.
- EBCDIC – é usado para a transmissão de texto simples entre hosts na codificação EBCDIC. De resto, esse modo é semelhante ao modo ASCII.
- Modo local – permite que dois computadores com configurações idênticas enviem dados em seu próprio formato sem conversão para ASCII.
A transferência de dados pode ser realizada em qualquer um de três modos:
- Modo de fluxo – os dados são enviados como um fluxo contínuo, libertando o FTP de qualquer processamento. Em vez disso, todo o processamento é feito pelo TCP. Um indicador de fim de arquivo não é necessário, exceto para dividir os dados em registros.
- Modo de bloco – O FTP divide os dados em vários blocos (bloco de cabeçalho, quantidade de bytes, campo de dados) e depois os transmite via TCP.
- Modo de compressão – Os dados são compactados por um único algoritmo (geralmente codificação de longas sequências).
Servidor FTP – é um servidor que possibilita o uso do protocolo de transferência de arquivos. Ele possui características específicas que o diferenciam dos servidores web comuns:
- É necessária a autenticação dos usuários
- Todas as operações são realizadas no contexto da sessão atual
- Capacidade de realizar diversas ações com o sistema de arquivos
- Um canal separado é utilizado para cada conexão
Cliente FTP – é um programa que permite conectar-se a um servidor remoto via FTP e também executar as ações necessárias nos elementos do sistema de arquivos. O cliente pode ser, inclusive, um navegador, no qual deve-se inserir o endereço que representa o caminho até um diretório ou arquivo específico no servidor remoto, de acordo com o esquema geral de URL:
ftp://user:pass@address:port/directory/file
No entanto, usar um navegador web dessa forma permitirá apenas visualizar ou baixar os arquivos desejados. Para aproveitar ao máximo todas as vantagens do FTP, deve-se usar um software especializado como cliente.
A autenticação FTP utiliza um esquema de nome de usuário/senha para fornecer acesso. O nome de usuário é enviado ao servidor pelo comando USER, e a senha pelo comando PASS. Se as informações fornecidas pelo cliente forem aceitas pelo servidor, este enviará uma solicitação ao cliente e a sessão começará. Os usuários podem, se o servidor suportar essa característica, entrar no sistema sem fornecer credenciais, mas o servidor pode oferecer apenas acesso limitado para tais sessões.
O host que fornece o serviço FTP pode oferecer acesso anônimo ao FTP. Os usuários normalmente entram no sistema como “anonymous” (pode ser sensível a maiúsculas em alguns servidores FTP) como nome de usuário. Embora normalmente se peça que os usuários enviem seu endereço de e-mail em vez de uma senha, na prática não há verificação. Muitos hosts FTP que fornecem atualizações de software suportam acesso anônimo.
Esquema do protocolo
A interação "cliente-servidor" em uma conexão FTP pode ser visualizada da seguinte forma:

FTP Seguro
O FTP não foi originalmente concebido como seguro, pois se destinava à comunicação entre várias instituições e objetos militares. Com o desenvolvimento e a disseminação da internet, o risco de acesso não autorizado aumentou significativamente. Surgiu a necessidade de proteger os servidores contra vários tipos de ataques. Em maio de 1999, os autores do RFC 2577 resumiram as vulnerabilidades na seguinte lista de problemas:
- Ataques ocultos (bounce attacks)
- Ataques de spoofing (spoof attacks)
- Ataques por força bruta (brute force attacks)
- Captura de pacotes, sniffing (packet capture, sniffing)
- Roubo de portas (port stealing)
O FTP comum não possui a capacidade de transmitir dados de forma criptografada, o que significa que nomes de usuários, senhas, comandos e outras informações podem ser facilmente interceptadas por invasores. A solução comum para esse problema é utilizar versões "seguras", protegidas por TLS do protocolo vulnerável (FTPS), ou um protocolo mais seguro, como SFTP/SCP, que é fornecido com a maioria das implementações do 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 usando o protocolo SSL (Secure Sockets Layer - Camada de Soquetes Seguros). Atualmente, a proteção é assegurada pelo seu análogo mais avançado, o TLS (Transport Layer Security - Segurança da Camada de Transporte).
SSL
O protocolo SSL foi proposto pela Netscape Communications em 1996 com o objetivo de garantir a segurança e a confidencialidade das conexões pela internet. O protocolo suporta autenticação (verificação de identidade) do cliente e do servidor, é independente de aplicativos e é transparente para os protocolos HTTP, FTP e Telnet.
O Handshake do protocolo SSL consiste em duas etapas: a autenticação do servidor e a autenticação opcional do cliente. Na primeira etapa, o servidor, em resposta à solicitação do cliente, envia seu certificado e os parâmetros de criptografia. Em seguida, o cliente 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 confirma sua autenticidade ao cliente, devolvendo uma mensagem assinada com a chave mestra do cliente.
Os dados subsequentes são criptografados e autenticados com chaves obtidas com base nesta chave mestra. Na segunda etapa, que não é obrigatória, o servidor envia uma solicitação ao cliente, e o cliente confirma sua autenticidade ao servidor, retornando a solicitação com sua própria assinatura digital e certificado de chave pública.
O SSL suporta uma variedade de algoritmos criptográficos. Durante o estabelecimento da conexão, é utilizado o sistema criptográfico de chave pública RSA. Após a troca de chaves, são utilizados diferentes cifras: RC2, RC4, IDEA, DES e TripleDES. O algoritmo MD5 também é empregado para gerar resumos de mensagens. A sintaxe dos certificados de chave pública é descrita em X.509.
Uma das importantes vantagens do SSL é sua total independência de software e plataforma. O protocolo foi desenvolvido com princípios de portabilidade, e sua ideologia de construção não depende dos aplicativos em que é utilizado. Além disso, é importante que outros protocolos possam ser sobrepostos ao protocolo SSL de forma transparente; seja para aumentar ainda mais o nível de proteção dos fluxos de informações visadas, ou para adaptar as capacidades criptográficas do SSL a uma tarefa específica.
Conexão SSL

O canal seguro fornecido pelo SSL possui três propriedades principais:
- O canal é privado. A criptografia é utilizada para todas as mensagens após um diálogo simples que serve para determinar a chave secreta.
- O canal é autenticado. O lado do servidor do diálogo é sempre autenticado, enquanto o lado do cliente é autenticado de forma opcional.
- O canal é confiável. O transporte de mensagens inclui verificação de integridade (com o uso de MAC).
Características do FTPS
Existem duas implementações do FTPS, que utilizam diferentes métodos de segurança:
- O método implícito pressupõe o uso do protocolo padrão SSL, estabelecendo a sessão antes do envio de dados, o que, por sua vez, compromete a compatibilidade com clientes e servidores FTP comuns. Para compatibilidade retroativa com clientes que não suportam FTPS, a conexão de controle utiliza a porta TCP 990 e a transferência de dados utiliza a 989. Isso garante que a porta padrão 21 permaneça disponível para o protocolo FTP. Este método é considerado obsoleto.
- O FTPS explícito é muito mais conveniente, pois utiliza comandos padrão de FTP, mas criptografa os dados durante a transmissão, permitindo o uso de uma única conexão de controle para FTP e FTPS. O cliente deve solicitar explicitamente a transmissão de dados segura ao servidor e, em seguida, aprovar o método de criptografia. Se o cliente não solicitar a transmissão segura, o servidor FTPS tem o direito de manter ou fechar a conexão não segura. O mecanismo de negociação de identificação e proteção de dados foi adicionado pela RFC 2228, que inclui um novo comando FTP, AUTH. Embora este padrão não defina explicitamente os mecanismos de proteção, ele especifica que a conexão segura deve ser iniciada pelo cliente usando o algoritmo descrito acima. Se as conexões seguras não forem suportadas pelo servidor, um código de erro 504 deve ser retornado. Os clientes FTPS podem obter informações sobre os protocolos de proteção suportados pelo servidor usando o comando FEAT; no entanto, o servidor não é obrigado a divulgar quais níveis de segurança ele suporta. Os comandos FTPS mais comuns são AUTH TLS e AUTH SSL, que oferecem proteção TLS e SSL, respectivamente.
SFTP
SFTP (Secure File Transfer Protocol) é um protocolo de nível de aplicação para transferência de arquivos que opera sobre um canal seguro. Não deve ser confundido com o (Simple File Transfer Protocol), que tem a mesma sigla. Enquanto o FTPS é apenas uma extensão do FTP, o SFTP é um protocolo separado e não relacionado, que usa como base o SSH (Secure Shell).
Secure Shell
O desenvolvimento do protocolo foi realizado por um dos grupos IETF chamado Secsh. A documentação de trabalho para o novo protocolo SFTP não se tornou um padrão oficial, mas começou a ser amplamente utilizada no desenvolvimento de aplicativos. Posteriormente, seis versões do protocolo foram lançadas. No entanto, o aumento gradual de funcionalidades levou à decisão, em 14 de agosto de 2006, de interromper o desenvolvimento do protocolo devido à conclusão do objetivo principal do projeto (desenvolvimento do SSH) e à falta de um nível técnico suficiente para avançar no desenvolvimento de um protocolo de sistema de arquivos remoto completo.
SSH é um protocolo de rede que permite o gerenciamento remoto de sistemas operacionais e o tunelamento de conexões TCP (por exemplo, para a transferência de arquivos). É semelhante em funcionalidade aos protocolos Telnet e rlogin, mas, ao contrário destes, 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 a transmissão segura em um ambiente não protegido de praticamente qualquer outro protocolo de rede. Assim, é possível não apenas trabalhar remotamente em um computador através de um shell de comando, mas também transmitir um fluxo de áudio ou vídeo (por exemplo, de uma webcam) através de um canal criptografado. O SSH também pode usar compressão de dados transmitidos para posterior criptografia, o que é conveniente, por exemplo, para a execução remota de clientes do X Window System.
A primeira versão do protocolo, SSH-1, foi desenvolvida em 1995 pelo pesquisador Tatu Lüonen, da Universidade Tecnológica de Helsinque (Finlândia). O SSH-1 foi escrito para garantir mais privacidade do que os protocolos rlogin, telnet e rsh. Em 1996, uma versão mais segura do protocolo, o SSH-2, foi desenvolvida, sendo incompatível com o SSH-1. O protocolo ganhou ainda mais popularidade, e em 2000 havia cerca de dois milhões de usuários. Atualmente, o termo "SSH" geralmente se refere ao SSH-2, uma vez que a primeira versão do protocolo, devido a suas deficiências significativas, não é praticamente utilizada. Em 2006, o protocolo foi aprovado pelo grupo de trabalho da IETF como um padrão da Internet.
Existem duas implementações do SSH: uma comercial privada e uma livre e gratuita. A implementação livre é chamada OpenSSH. Até 2006, 80% dos computadores na Internet usavam o OpenSSH. A implementação privada é desenvolvida pela SSH Communications Security, que é uma subsidiária da Tectia, sendo gratuita para uso não comercial. Estas implementações têm um conjunto praticamente idêntico de comandos.
O protocolo SSH-2, ao contrário do protocolo telnet, é resistente a ataques de escuta de tráfego ("sniffing"), mas não é resistente a ataques de "homem no meio". O protocolo SSH-2 também é resistente a ataques de sequestro de sessão, já que não é possível se conectar a uma sessão já estabelecida ou interceptá-la.
Para prevenir ataques de "homem no meio" ao se conectar a um host cujo chave ainda não é conhecida pelo cliente, o software cliente mostra ao usuário a "impressão digital da chave" ("key fingerprint"). É aconselhável verificar cuidadosamente a impressão digital apresentada pelo software cliente com a impressão digital da chave do servidor, preferencialmente obtida por meio de canais de comunicação seguros ou pessoalmente.
O suporte SSH é implementado em todos os sistemas UNIX-like, e na maioria deles, entre as utilidades padrão, encontram-se o cliente e o servidor SSH. Existem muitas implementações de clientes SSH também para sistemas operacionais que não são UNIX. O protocolo ganhou muita popularidade após o amplo desenvolvimento de analisadores de tráfego e métodos de violação das redes locais, como uma solução alternativa ao inseguro protocolo Telnet para gerenciar nós importantes.
Comunicação usando SSH
Para operar via SSH, é necessário um servidor SSH e um cliente SSH. O servidor escuta as conexões das máquinas clientes e, ao estabelecer a conexão, realiza a autenticação, após o que começa a atender o cliente. O cliente é usado para acessar a máquina remota e executar comandos.

Comparação com FTPS
O principal que distingue SFTP do FTP padrão e FTPS é que o SFTP criptografa absolutamente todos os comandos, nomes de usuários, senhas e outras informações confidenciais.
Ambos os protocolos FTPS e SFTP utilizam uma combinação de algoritmos assimétricos (RSA, DSA), algoritmos simétricos (DES/3DES, AES, Twhofish, etc.), bem como algoritmos de troca de chaves. Para autenticação, o FTPS (ou, para ser mais preciso, SSL/TLS por meio do protocolo FTP) utiliza certificados X.509, enquanto o SFTP (protocolo SSH) utiliza chaves SSH.
Os certificados X.509 incluem uma chave pública e algumas informações sobre o certificado do proprietário. Essas informações permitem, por sua vez, verificar a integridade do próprio certificado, a autenticidade e o proprietário do certificado. Os certificados X.509 têm a respectiva chave privada, que geralmente é armazenada separadamente do certificado por questões de segurança.
A chave SSH contém apenas a chave pública (a chave privada correspondente é armazenada separadamente). Ela não contém nenhuma informação sobre o proprietário da chave. Algumas implementações de SSH usam certificados X.509 para autenticação, mas na verdade elas não verificam toda a cadeia de certificados — apenas a chave pública é utilizada (o que torna essa verificação de autenticidade incompleta).
Conclusão
O protocolo FTP, sem dúvida, ainda desempenha um papel importante na armazenagem e disseminação de informações na rede, apesar de sua respeitável idade. É um protocolo conveniente, multifuncional e padronizado. Muitas bibliotecas de arquivos foram construídas com base nele, sem as quais o trabalho técnico não seria tão eficiente. Além disso, é fácil de configurar, e programas servidor e cliente existem praticamente para todas as plataformas atuais e não tão atuais.
Por sua vez, suas versões protegidas resolvem o problema da privacidade dos dados armazenados e transmitidos no mundo moderno. Ambos os novos protocolos têm suas vantagens e desvantagens e desempenham papéis ligeiramente diferentes. Nas áreas em que é necessário um arquivo, é preferível usar FTPS, especialmente se o FTP clássico já for utilizado. SFTP é menos comum devido à sua incompatibilidade com o antigo protocolo, mas é mais seguro e possui mais funcionalidades, já que faz parte do sistema de gerenciamento remoto.
Lista de fontes
Fonte: habr.com
