Protocolo SMB

Compartilhe:

comunicação entre cliente e servidor usando o protocolo smb

Se você compartilha pastas no windows ou trabalha com servidores de arquivos samba no linux, active directory, dispositivos de armazenamento NAS está utilizando o protocolo SMB.

Neste artigo, você vai aprender o que é o protocolo SMB, para que serve, como ocorre a comunicação entre cliente e servidor, como funciona a negociação de dialetos SMB, quais são as principais versões existentes e qual a diferença entre CIFS e SMB.

E ao final, você entenderá por que as versões modernas do SMB são recomendadas em infraestruturas atuais.

O que é SMB (Server Message Block) e para que serve ?

O SMB (cuja sigla significa Server Message Block) é um protocolo de rede no nível da camada de aplicação utilizado principalmente para compartilhamento de recursos dentro de uma rede local (LAN).

O protocolo SMB utiliza a arquitetura cliente/servidor, permitindo que um cliente acesse e utilize arquivos e impressoras (e outros recursos) localizados em um servidor remoto como se estivessem armazenados no próprio cliente.

Originalmente o SMB foi desenvolvido pela IBM em 1983, e ao longo do tempo foi amplamente adotado, modificado e aprimorado pela Microsoft, tornando-se a espinha dorsal do compartilhamento de arquivos e impressoras em sistemas operacionais Windows.

Mesmo sendo amplamente utilizado pelo Windows da microsoft, a versatilidade do protocolo smb permite fazer interoperabilidade entre diferentes sistemas operacionais (Linux, Mac e Windows).

No linux, por exemplo, é possível utiliza-lo graças ao samba para interagir com sistemas windows, compartilhando arquivos e impressoras através da rede.

Funcionamento do protocolo SMB

Atualmente, o protocolo SMB opera sobre a camada de transporte, utilizando a porta 445/TCP. Ele inclui comandos para executar operações em arquivos e impressoras compartilhadas no servidor remoto, operações como:

  • Abrir e fechar arquivos.
  • Criar e excluir arquivos e diretórios.
  • Ler e gravar arquivos.
  • Acessar e listar conteúdos de pastas.
  • Colocar arquivos na fila de impressão e removê-los dela.

Para entender o funcionamento do protocolo smb, é preciso olhar para o ciclo de uma conexão de rede entre a máquina cliente (que solicita o acesso) e o servidor (que armazena os recursos).

Esse fluxo de comunicação ocorre por meio de requisições e respostas. A seguir é descrito em detalhes todo o fluxo usando o protocolo SMB quando o cliente acessa o servidor:

1. Negociação de Dialetos (Dialect Negotiation)

Quando um cliente deseja se conectar a um recurso compartilhado no servidor via SMB, o primeiro passo é definir qual versão (ou “dialeto”) do protocolo ambos compreendem.

Requisição (Cliente): O cliente envia um pacote inicial chamado SMB2 NEGOTIATE Request contendo uma lista com todos os dialetos que ele é capaz de falar (por exemplo: SMB 2.02, SMB 3.0, SMB 3.1.1).

No SMB1, o pacote é chamado SMB NEGOTIATE Request.

Resposta (Servidor): O servidor analisa a lista enviada, escolhe o dialeto mais recente e seguro que ele também suporta e responde com um pacote SMB2 NEGOTIATE Response. No SMB1, a resposta é enviada por meio do SMB NEGOTIATE Response.

Após a negociação do dialeto ocorrer com sucesso, cliente e servidor passam a utilizar as regras, funcionalidades e capacidades definidas para aquela versão do protocolo durante toda a sessão.

Se o cliente e servidor não tiverem nenhum dialeto em comum, a negociação falha e a conexão SMB não é estabelecida.

2. Configuração de Sessão (Session Setup)

Após selecionar o dialeto que será usado pelo cliente e servidor, o cliente precisa provar quem ele é para ter acesso ao servidor.

Requisição (Cliente): O cliente envia um pacote SMB2 SESSION_SETUP Request (ou SMB SESSION_SETUP Request para SMB1) transportando as credenciais de autenticação do usuário.

Dependendo da infraestrutura, essas credenciais podem trafegar via tokens do Kerberos (se houver um Active Directory) ou via pacotes criptografados NTLM.

Resposta (Servidor): O servidor valida as credenciais contra seu banco de dados local ou do controlador de domínio AD. Se válidas, ele gera um identificador exclusivo chamado Session ID e o envia de volta no pacote SMB2 SESSION_SETUP Response.

Todas as comunicações futuras usarão este ID para provar que a sessão foi autenticada.

3. Conexão de Árvore (Tree Connect)

Estar autenticado no servidor não significa ter acesso a todos os recursos. O cliente precisa se conectar a um compartilhamento específico (como \\servidor\projetos).

Requisição (Cliente): O cliente envia um pacote SMB2 TREE_CONNECT Request (utilizado nos dialetos SMB2.x e SMB3.x) informando o caminho exato do recurso compartilhado (pasta ou impressora) que deseja acessar, junto com o Session ID obtido no passo anterior.

Resposta (Servidor): O servidor verifica se o compartilhamento existe e se o usuário autenticado tem permissão para se conectar a esse compartilhamento (share permissions).

Caso o compartilhamento exista e a solicitação de acesso seja autorizada, o servidor cria uma conexão com esse compartilhamento, atribui um identificador denominado Tree ID (TID) e responde com uma mensagem SMB2 TREE_CONNECT Response.

Se o compartilhamento não existir o servidor retorna um código de erro apropriado, como STATUS_BAD_NETWORK_NAME (compartilhamento inexistente) ou se o usuário não tem permissão para acessá-lo, retorna um código como STATUS_ACCESS_DENIED (acesso negado).

4. Requisições de operações nos recursos compartilhados

Com a conexão estabelecida e os identificadores gerados, o trabalho real começa. O cliente agora pode tentar ler, criar ou modificar dados no compartilhamento. Veja um exemplo de comunicação:

Leitura/Escrita: O cliente envia requisições como SMB2 CREATE Request (para abrir ou criar um arquivo) e SMB2 READ/WRITE Request (ler e escrever no arquivo).

Resposta de Dados: O servidor processa os pedidos e se houver permissão devolve os dados solicitados em pacotes de resposta. Garantindo que os bloqueios de registros (file locking) funcionem para evitar que dois usuários alterem o mesmo arquivo simultaneamente.

Em resumo, as requisições passam por um processo de autorização (verificação de permissões), a operação requisitada pelo cliente somente é autorizada se o usuário autenticado tem permissão para executar tal operação no servidor.

Evolução dos Dialetos do SMB

O protocolo smb passou por revisões ao longo das décadas para se adaptar às exigências de sistemas de arquivos, desempenho e segurança. Abaixo, são destacados os principais recursos agregados em cada grande dialeto:

  • SMB 1.0 (1984 / Legado): Caracterizado como um protocolo extremamente “conversador” (chatty). Exige confirmações constantes para blocos pequenos de dados, o que compromete o desempenho da rede e não criptografava os dados.
  • SMB 2.0 (2006 – Windows Vista / Server 2008): Uma reformulação completa. Reduziu drasticamente o número de comandos e comandos combinados (compounding), permitindo enviar múltiplas requisições em um único pacote de rede.

Introduziu o suporte a redes WAN de alta latência e suporte a leitura/escrita com buffers expandidos.

  • SMB 3.0 (2012 – Windows 8 / Server 2012): Introduziu recursos como: SMB Multichannel, SMB Direct (suporte a RDMA para transferência de dados com baixíssimo uso de CPU).

Server-Side Copy é uma funcionalidade do SMB que permite que o servidor copie dados de arquivos diretamente no próprio dispositivo de armazenamento, sem que os pacotes de dados precisem ir para o cliente e voltar para o servidor para ser gravado localmente.

Adicionou suporte criptografia nativa de ponta a ponta (SMB Encryption), permitindo que os dados trafeguem criptografados entre o cliente e o servidor SMB. Isso protege os dados em trânsito contra interceptação, sem exigir uma VPN apenas para esse objetivo.

  • SMB 3.1.1 (2015 – Windows 10 / Server 2016 até o presente): Adicionou proteções avançadas contra ataques man-in-the-middle através da verificação de integridade de pré-autenticação (Pre-authentication Integrity).

Também foi incluso suporte aos algoritmos de criptografia AES-128-GCM e AES-256-GCM, tornando a comunicação ultrassegura.

Qual a diferença entre CIFS e SMB ?

A principal diferença é que o CIFS é uma versão antiga do protocolo SMB. Por isso, ele não possui diversos recursos presentes nas versões mais recentes do SMB (SMB 2.x e SMB 3.x), como melhorias de desempenho e segurança.

Embora muitos profissionais utilizem o termo CIFS / SMB como sinônimos, isso não é tecnicamente correto. O CIFS (Common Internet File System) foi lançado pela Microsoft em 1996, sendo uma variante do dialeto SMB 1.0, introduzindo algumas melhorias sobre o mesmo.

Mas manteve diversas limitações do protocolo original, como o elevado número de mensagens necessárias para cada operação, o que comprometia o desempenho em redes, além de não ter suporte à criptografia nativa dos dados em trânsito e com diversas vulnerabilidades conhecidas.

O protocolo CIFS é considerado um dialeto SMB obsoleto e inseguro, por isso que versões recentes do windows e o próprio projeto samba (nas versões recentes) ele já vêm desabilitado.

SMB vs CIFS, qual usar e em quais situações ?

Você deve sempre utilizar as variantes mais recentes do SMB (como SMB 3.x) e banir a utilização do CIFS, principalmente em empresas.

A tabela a seguir tem uma breve comparação para escolher qual usar:

Status e Situações de usoCIFS (Dialeto SMB 1.0)SMB Atual (Versões 3.x)
Status AtualObsoleto e Inseguro (Deve ser desativado).Padrão em sistemas operacionais atuais.
Desempenho em RedesExtremamente lento.Otimizado para alta performance.
Segurança NativaSem criptografia nativa e vulnerável a exploits.Criptografia AES de ponta a ponta integrada.
Gerenciamento de RedeComandos simples e individuais por pacote.Agrupamento de comandos (Compounding) e Multichannel.
Cenário de UsoSistemas legados e equipamentos antigos.Storages NAS e servidores de arquivos modernos.

Como visto na tabela anterior o CIFS sofre de vulnerabilidades críticas de segurança (como as brechas exploradas por ransomwares WannaCry e NotPetya), o que levou a própria Microsoft desabilitar seu uso por padrão e outras empresas a recomendarem a sua desativação nos servidores.

A única situação em que você poderá considerar utilizar o CIFS ou SMB 1.0, é criar compartilhamento para receber arquivos enviados de impressoras multifuncionais ou scanners que utilizam SMB 1.0 ou CIFS.

Mesmo assim, considere sempre evitar o uso dessas versões antigas do protocolo SMB para maior segurança.

E utilize o SMB, preferencialmente a versão 3.x, em situações em que a infraestrutura exige alto desempenho e segurança dos dados trafegados na rede usando criptografia.

Conclusão

Entender como funciona o protocolo smb capacita profissionais de TI a resolver problemas complexos e a melhorarem a segurança da infraestrutura.

Para quem está iniciando em administração de redes, a principal recomendação é desativar os dialetos CIFS / SMB 1.0 e padronizar o uso do SMB 3.x.

O protocolo smb é somente um dos protocolos usados pelo samba, para se aprofundar mais vale a pena conhecer o nosso guia completo de estudos sobre o Servidor Samba para que conheça outras funções do samba e saiba implementa-las.

Se você ficou com alguma dúvida sobre o protocolo smb ou diferenças entre CIFS / SMB, deixe seu comentário abaixo. Sua participação com dúvidas, sugestões ou elogios são muito bem-vindos e ajudam outros leitores a aprender mais sobre o tema.

Navegue por tópicos:

Foto de Edson Oliveira
Edson Oliveira

Especialista em Linux, trabalhando com TI tem experiência no gerenciamento, solução de problemas e suporte de servidores linux em ambientes corporativos.

Professor de cursos voltados a linux, tecnologias open source e certificações LPI. Possui as certificações LPIC-1, LPIC-2 e LPIC-3 (Mixed Environment).

Navegue por tópicos:

Você também pode gostar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Vá além de configurar compartilhamento.

Aprenda a gerenciar de forma avançada compartilhamentos do Samba, administrar um Servidor de arquivos profissional com permissões avançadas, ACLs, segurança, gerenciamento do AD e muito mais.

Valorizamos sua privacidade

Utilizamos cookies para aprimorar sua experiência de navegação, exibir anúncios ou conteúdo personalizado e analisar nosso tráfego. Ao clicar no botão “Aceitar todos”, você concorda com nosso uso de cookies.

Para mais informações leia nossa Política de Privacidade.