TP 4 – Prática: O protocolo SSH
Elementos de correção para este TP estão disponíveis no repositório de exercícios: 👉 módulo-16 – Correções
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áquina | Sistema operacional | RAM | Disco | CPU | Rede |
|---|---|---|---|---|---|
| SSH-SRV | Ubuntu Server 24.04 LTS (ou 22.04 LTS) | 1 GB mínimo | 20 GB | 1 vCPU | Rede interna (intnet) |
| SSH-CLI | Ubuntu Server 24.04 LTS (ou 22.04 LTS) | 1 GB mínimo | 20 GB | 1 vCPU | Rede interna (intnet) |
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-servereopenssh-clientnetcat-openbsd(ouncat)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áquina | Papel | Endereço IP | Máscara |
|---|---|---|---|
| SSH-SRV | Servidor Netcat / SSH | 10.11.12.1 | /24 |
| SSH-CLI | Cliente Netcat / SSH | 10.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?
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
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ério | Apenas Netcat (Parte 1) | Netcat + túnel SSH (Parte 2) |
|---|---|---|
| Criptografia | Nenhuma | Sim (SSH) |
| Porta visível na rede | 64321 | 22 (apenas SSH) |
| Conteúdo visível no Wireshark | Sim (em texto claro) | Não (criptografado) |
| Autenticação | Nenhuma | Por senha ou chave |
| Segurança | Baixa | Alta |
TP criado em: Fevereiro de 2025