🚀 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:

  1. 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.
  2. 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.
  3. Segredos Expostos:
    • Colocar senhas e chaves de API diretamente no arquivo de configuração do Docker (Dockerfile ou docker-compose.yml).

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).

  1. Com base no tema do capítulo, o que essa flag fez com a porta da cápsula do Alien?
  2. 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.

  1. 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 14 Seguranca) e clique em Commit to main.
  2. 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:

  1. Ela escancarou a porta da cápsula! O Alien agora pode sair e passear pela nave quando quiser.
  2. Porque se o hacker invadir o contêiner, ele poderá facilmente acessar os arquivos do servidor real e dominar toda a infraestrutura da empresa.

Capitulo Anterior | Proximo Capitulo