🚀 Capítulo 14: Segurança de Contêineres (Docker) (Tema: Alien)
NOTE
Este capítulo utiliza a temática de Alien para explicar a segurança em contêineres. Se o monstro (o hacker) entrar na cápsula (o contêiner), garanta que ele não consiga quebrar o vidro e invadir a nave inteira!
1. 🎯 Objetivo da Aula
Compreender os conceitos de segurança em contêineres (Docker), entendendo a importância do isolamento e aprendendo as boas práticas para evitar que uma invasão ao contêiner comprometa o servidor inteiro.
2. 🏢 O Cenário Prático (Seu Desafio)
Na nave Nostromo, a tripulação precisa lidar com uma criatura alienígena extremamente perigosa.
- A melhor estratégia é trancar o Alien dentro de uma cápsula de quarentena (Isolamento).
- Se a cápsula for bem trancada, o Alien pode fazer o caos lá dentro, mas a nave continua segura.
- Mas se alguém deixar a porta da cápsula aberta ou der permissões de administrador para a cápsula, o Alien escapa e destrói tudo!
No desenvolvimento moderno, nós usamos Contêineres (como o Docker) para empacotar nossa aplicação e isolá-la do resto do servidor. Se um hacker conseguir invadir o seu site, ele ficará preso dentro do contêiner. Mas se você configurar o contêiner errado, ele poderá “escalar privilégios” e dominar o servidor inteiro! Seu desafio é manter o monstro preso!
🧠 Fundamentos: A Teoria Traduzida
Um Contêiner é um ambiente isolado onde a aplicação roda. Ele compartilha o mesmo “coração” (o Kernel do Sistema Operacional) do servidor hospedeiro, mas não consegue ver os arquivos de fora dele por padrão.
🚨 Os 3 Maiores Perigos em Contêineres:
- Rodar como Root (Superusuário):
- Por padrão, muitos contêineres rodam como
root. Se o hacker invadir a aplicação, ele terá poder total dentro do contêiner e poderá tentar quebrar o isolamento.
- Por padrão, muitos contêineres rodam como
- Imagens de Base Vulneráveis:
- Se você baixar uma imagem do Docker pronta da internet que já venha com um sistema operacional antigo e cheio de falhas, seu contêiner já nasce vulnerável.
- Segredos Expostos:
- Colocar senhas e chaves de API diretamente no arquivo de configuração do Docker (
Dockerfileoudocker-compose.yml).
- Colocar senhas e chaves de API diretamente no arquivo de configuração do Docker (
4. 📖 Exemplo Guiado: O Dockerfile Inseguro
Veja este exemplo de um arquivo Dockerfile (o manual de como construir o contêiner):
# USANDO UMA IMAGEM ANTIGA (Perigo 1!)
FROM ubuntu:14.04
# RODANDO COMO ROOT POR PADRÃO (Perigo 2!)
USER root
# EXPOSTO SENHA NO CÓDIGO (Perigo 3!)
ENV BANCO_SENHA=123456
COPY . /app
CMD ["python", "/app/servidor.py"]Como corrigir: Usar imagens oficiais e atualizadas, criar um usuário sem privilégios para rodar a aplicação (USER appuser) e usar variáveis de ambiente seguras (sem colocar a senha direto no texto).
5. 🛠️ Prática Obrigatória 1: Identificando o Erro
Imagine que você está revisando o arquivo de configuração de um colega e encontra a seguinte linha:
docker run --privileged -p 80:80 meu-site
A flag --privileged dá ao contêiner quase as mesmas permissões que o servidor hospedeiro tem (ele pode acessar discos, redes e outros processos de fora do contêiner).
- Com base no tema do capítulo, o que essa flag fez com a porta da cápsula do Alien?
- Por que essa prática é extremamente perigosa?
6. 🛠️ Prática Obrigatória 2: Scanner de Imagens
Assim como usamos SAST para ler código e SCA para ler bibliotecas, existem ferramentas que lêem a imagem do Docker antes de colocá-la no ar para ver se ela tem vulnerabilidades.
- Pesquise o nome de pelo menos uma ferramenta famosa usada para escanear imagens Docker em busca de falhas de segurança (Dica: Uma delas começa com T e outra com S).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 14 Seguranca) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_12_desenvolvimento_seguro/
├── capitulos/
│ ├── capitulo_14_docker.md
│ └── codigos/
│ └── cap14/
│ └── Dockerfile💡 Checkpoint de Lógica
O isolamento de contêineres não é 100% perfeito (diferente de uma Máquina Virtual completa). Por isso, aplicar o princípio do menor privilégio dentro do contêiner é ainda mais importante!
10. 🔥 Desafio de Fixação
Pesquise sobre a diferença básica de segurança entre um Contêiner (Docker) e uma Máquina Virtual (como VirtualBox ou VMware).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Ela escancarou a porta da cápsula! O Alien agora pode sair e passear pela nave quando quiser.
- Porque se o hacker invadir o contêiner, ele poderá facilmente acessar os arquivos do servidor real e dominar toda a infraestrutura da empresa.