Pular para o conteúdo principal

TP 4 – Prática: O protocolo SSH

Elementos de correção

Elementos de correção para este TP estão disponíveis no repositório de exercícios: 👉 módulo-16 – Correções

Módulo Bônus: Entendendo as placas de rede VirtualBox e VMware

Para uma explicação detalhada dos tipos de placas de rede (NAT, Internal Network, Host-Only, Bridged) e seus equivalentes VMware, consulte: 👉 Módulo 15 - Bônus: Placas de rede VirtualBox vs VMware

Objetivo​

Este TP tem como objetivo compreender melhor o uso do Netcat e SSH em um ambiente de rede, destacando suas diferenças em termos de segurança e funcionalidades.


Diretrizes​

  • Responda às perguntas fornecendo capturas de tela relevantes com comentários de cada etapa de configuração solicitada, bem como dos resultados obtidos.
  • Mantenha suas máquinas virtuais mesmo após a entrega deste trabalho.

Ambiente necessário​

Hipervisor​

  • VirtualBox (ou VMware Workstation / VMware Player)

Máquinas virtuais a serem criadas​

MáquinaSistema operacionalRAMDiscoCPURede
SSH-SRVUbuntu Server 24.04 LTS (ou 22.04 LTS)1 GB mínimo20 GB1 vCPURede interna (intnet)
SSH-CLIUbuntu Server 24.04 LTS (ou 22.04 LTS)1 GB mínimo20 GB1 vCPURede interna (intnet)
Configuração de rede no VirtualBox

As duas máquinas devem estar conectadas à mesma rede interna (modo "Internal Network" no VirtualBox, nomeada por exemplo intnet). Nenhuma das máquinas precisa de acesso à Internet para este TP.

Softwares necessários nas VMs​

  • openssh-server e openssh-client
  • netcat-openbsd (ou ncat)
  • tcpdump
  • Wireshark (na máquina host ou em uma VM com interface gráfica para analisar os arquivos .pcap)

Topologia de rede​


Configuração do ambiente​

Questão 1 – Criação das máquinas virtuais​

Crie duas máquinas virtuais: SSH-SRV e SSH-CLI e configure-as conforme a topologia acima.

MáquinaPapelEndereço IPMáscara
SSH-SRVServidor Netcat / SSH10.11.12.1/24
SSH-CLICliente Netcat / SSH10.11.12.2/24

Questão 2 – Instalação do serviço SSH​

Instale no servidor Linux SSH-SRV o serviço SSH (openssh-server).

sudo apt install -y openssh-server    # Ubuntu/Debian
# ou
sudo dnf install -y openssh-server # AlmaLinux/RHEL

Questão 3 – Descrição do Netcat​

Descreva brevemente a ferramenta Netcat.

Questão 4 – Instalação do Netcat​

Instale nas máquinas Linux SSH-SRV e no cliente Linux SSH-CLI a ferramenta Netcat.

# AlmaLinux / RHEL
sudo dnf install -y nmap-ncat

# Ubuntu / Debian
sudo apt install -y netcat

Primeira parte – Transferência com Netcat (não criptografado)​

Questão 5 – Captura do tráfego de rede​

Com o comando tcpdump, capture o tráfego de rede na interface 10.11.12.1 usando o comando:

tcpdump -i <interface> -w capture1.pcap

Onde <interface> é a interface de comunicação entre SSH-SRV e SSH-CLI.

Questão 6 – Abertura da comunicação Netcat​

Crie um diretório chamado rep em SSH-SRV e abra uma comunicação via Netcat executando o comando:

mkdir -p rep
cd rep
nc -l -p 64321 > tonfichier.txt

Questão 7 – Envio do arquivo pelo cliente​

O comando acima fará com que o servidor SSH-SRV aguarde o cliente abrir uma conexão para o servidor escutando na porta 64321. O arquivo a ser enviado pelo cliente ao servidor terá o nome monfichier.txt e será copiado como tonfichier.txt no servidor após a transferência.

Você deve, previamente, criar em SSH-CLI o arquivo monfichier.txt com algum conteúdo (por exemplo: "Este é um conteúdo secreto").

O comando a ser executado na máquina cliente SSH-CLI é:

nc 10.11.12.1 64321 < monfichier.txt

Questão 8 – Parada da captura​

Pare a captura de pacotes (Ctrl+C no terminal do tcpdump).

Questão 9 – Verificação do arquivo​

Em SSH-SRV, verifique se o conteúdo do arquivo tonfichier.txt é idêntico ao de monfichier.txt do cliente.

cat tonfichier.txt

Questão 10 – Análise com Wireshark​

Abra o arquivo capture1.pcap usando o Wireshark (você pode instalá-lo previamente em SSH-SRV, ou transferir a captura da VM para seu PC).

# Instalação do Wireshark (se necessário)
sudo apt install -y wireshark # Ubuntu/Debian

Questão 11 – Identificação do 3-way handshake​

Analisando o tráfego capturado, identifique os segmentos que garantem a conexão entre o cliente e o servidor:

Para isso, utilize o filtro do Wireshark:

tcp.flags.syn == 1 || tcp.flags.ack == 1

Informe os números dos pacotes correspondentes.

Questão 12 – Porta TCP do cliente Netcat​

Qual porta TCP foi utilizada pelo cliente Netcat?

Questão 13 – Número do pacote da transferência​

Identifique o número do pacote que realizou a transferência do arquivo monfichier.txt do cliente.

Questão 14 – Captura do conteúdo transferido​

Faça uma captura de tela (no Wireshark) do conteúdo do arquivo transferido.

Questão 15 – Dedução​

O que pode ser deduzido?

Importante

Com Netcat, os dados trafegam em texto claro na rede. Qualquer pessoa capturando o tráfego pode ler o conteúdo do arquivo transferido. É aí que o SSH entra para criptografar as comunicações.


Segunda parte – Transferência via túnel SSH (criptografado)​

Questão 1 – Autenticação por senha​

Configure a autenticação do cliente SSH por senha.

Questão 2 – Verificação da autenticidade do servidor​

Verifique a autenticidade do servidor SSH SSH-SRV. Para isso, você deve calcular o hash da chave pública do servidor e compará-lo com o apresentado antes de decidir se conectar a ele.

# Em SSH-SRV: exibir a impressão digital da chave pública
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Questão 3 – Autenticação por chave​

Configure a autenticação do cliente SSH por chave.

# Em SSH-CLI: gerar o par de chaves
ssh-keygen -t ed25519

# Copiar a chave pública para o servidor
ssh-copy-id root@10.11.12.1

Questão 4 – Captura do tráfego de rede (túnel SSH)​

Com o comando tcpdump, capture o tráfego de rede na interface 10.11.12.1 usando o comando:

tcpdump -i <interface> -w capture2.pcap

Questão 5 – Abertura da comunicação Netcat no servidor​

No diretório rep em SSH-SRV, abra uma comunicação via Netcat e execute o comando:

cd rep
nc -l -p 64321 > tonfichier2.txt

Questão 6 – Configuração do túnel SSH​

Configure o túnel SSH para o servidor criado anteriormente pelo Netcat e o cliente. Vamos supor que o cliente escolha se conectar na porta local 10111/TCP.

Execute (no cliente) o seguinte comando:

ssh -L 10111:10.11.12.1:64321 root@10.11.12.1

Explicação do túnel:

Questão 7 – Envio do arquivo pelo túnel​

Em outro terminal do cliente, execute o comando:

nc localhost 10111 < monfichier.txt

Questão 8 – Parada da captura​

Pare a captura de pacotes do tcpdump.

Questão 9 – Verificação do arquivo​

Em SSH-SRV, verifique se o conteúdo do arquivo tonfichier2.txt é idêntico ao de monfichier.txt do cliente.

Questão 10 – Análise com Wireshark​

Abra o arquivo capture2.pcap usando o Wireshark.

Questão 11 – Porta aleatória do túnel​

Qual é o número da porta TCP aleatória que foi utilizada pelo cliente SSH para o tunelamento do Netcat?

Questão 12 – Filtro Wireshark sem resultado​

Por que o filtro do Wireshark abaixo não retorna nenhum resultado:

tcp.port == 64321 || tcp.port == 10111
Dica

Pense no que o túnel SSH faz com as portas e o tráfego. As portas 64321 e 10111 são visíveis na rede entre as duas máquinas?

Questão 13 – Identificação da transferência criptografada​

Você consegue identificar o número do pacote utilizado para a transferência do arquivo monfichier.txt? Se sim, é possível capturar o conteúdo do arquivo transferido?


Comparação: Netcat vs túnel SSH​

CritérioApenas Netcat (Parte 1)Netcat + túnel SSH (Parte 2)
CriptografiaNenhumaSim (SSH)
Porta visível na rede6432122 (apenas SSH)
Conteúdo visível no WiresharkSim (em texto claro)Não (criptografado)
AutenticaçãoNenhumaPor senha ou chave
SegurançaBaixaAlta

TP criado em: Fevereiro de 2025