# DS0032 — Container ## Descrição Um contêiner é uma unidade padronizada de software virtualizado que empacota código e todas as suas dependências, permitindo que a aplicação sejá executada de forma rápida e confiável em diferentes ambientes computacionais. Diferentemente de máquinas virtuais completas, contêineres compartilham o kernel do sistema operacional hospedeiro, tornando-os mais leves — mas também introduzindo riscos de isolamento: um contêiner comprometido pode, em certas condições, afetar o host ou outros contêineres. Do ponto de vista de threat intelligence, contêineres são alvos atrativos por múltiplas razões. Eles frequentemente executam com imagens não atualizadas contendo CVEs críticos conhecidos; podem ter acesso a secrets via variáveis de ambiente ou volumes montados; e em configurações inseguras (`--privileged`, sockets Docker montados, `hostPID`), permitem escape total para o host. Grupos como [[g0139-teamtnt]] especializaram-se em comprometer ambientes Docker expostos, frequentemente via API Docker desprotegida (porta 2375/2376 sem TLS), para implantação de mineradores de criptomoeda e worms que propagam pela infraestrutura containerizada. A observabilidade de contêineres apresenta desafios únicos: o ciclo de vida efêmero significa que contêineres podem executar por segundos e desaparecer, tornando coleta de logs pós-facto impossível se não houver instrumentação em tempo real. Esta característica é ativamente explorada por adversários que criam contêineres temporários para execução de payloads sem deixar rastros persistentes no filesystem do host. ## Pipeline de Coleta ```mermaid graph TB A["📦 Container Runtime<br/>Docker · containerd · CRI-O<br/>AWS ECS · GCP Cloud Run"] --> B["🔔 Docker Events API<br/>creaté · start · exec_start<br/>docker.sock · ctr events"] A --> C["🔬 Runtime Syscall<br/>Falco · Tetragon · Tracee<br/>eBPF + regras MITRE"] B --> D["📡 Log Driver<br/>journald · syslog · fluentd<br/>GELF · CloudWatch Logs"] C --> D D --> E["📦 SIEM<br/>Splunk · Elastic · Sentinel"] E --> F["🚨 Alertas de Contêiner<br/>Imagem não aprovada · Shell<br/>Socket Docker · Escape host"] ``` ## Componentes de Dados | Componente | ID | Descrição | Uso Principal | |---|---|---|---| | Container Creation | [[dc0072-container-creation\|DC0072]] | Criação de novo contêiner via Docker API, Kubernetes ou outro runtime | Detectar deploy de imagens maliciosas ou não aprovadas | | Container Start | [[dc0077-container-start\|DC0077]] | Inicialização de contêiner criado (transition para estado Running) | Detectar reativação de contêineres dormentes para execução de payload | | Container Enumeration | [[dc0091-container-enumeration\|DC0091]] | Listagem de contêineres em execução e parados no host ou cluster | Detectar reconhecimento de ambiente containerizado por atacante com acesso ao socket | ## Como Coletar ### Docker (Standalone) - **Docker Events API:** `docker events` — stream em tempo real de todos os eventos do daemon Docker: `container creaté`, `start`, `stop`, `destroy`, `exec_creaté`, `exec_start`. - **Docker Logs:** `docker logs <container>` — stdout/stderr de cada contêiner. Em produção, configurar log driver para encaminhar ao SIEM: - `--log-driver=journald` (integra com systemd/journalctl) - `--log-driver=syslog` (encaminhar para syslog centralizado) - `--log-driver=fluentd` / `--log-driver=gelf` (para stacks ELK/Graylog) - **Auditd no host:** Monitorar o socket Docker (`/var/run/docker.sock`) — qualquer processo que acesse o socket tem controle equivalente a root no host. ```bash # Regra auditd para monitorar acesso ao socket Docker -w /var/run/docker.sock -p rwxa -k docker_socket_access ``` ### Container Runtimes (containerd / CRI-O) - **containerd:** Eventos via `ctr events` ou integração com Falco via gRPC API. - **CRI-O:** Logs via journald (`journalctl -u crio`); integração com Kubernetes Audit Logs para contexto de pod. - **crictl:** Ferramenta CLI para inspecionar estado de contêineres em nível de CRI — útil para forensics. ### Runtime Security em Tempo Real - **Falco:** Principal ferramenta open-source para detecção em nível de syscall dentro de contêineres: - Detecta: shells spawned, leitura de `/etc/shadow`, acesso a tokens de service account, conexões de rede inesperadas. - Regras padrão cobrem os principais padrões de ataque documentados no MITRE ATT&CK for Containers. - **Tetragon:** Runtime security com eBPF — visibilidade de syscall com contexto Kubernetes (pod name, namespace, container ID). - **Tracee (Aqua Security):** Análise de comportamento em tempo real via eBPF, integrado com políticas de segurança definidas em OPA. ### Orquestradores Gerenciados - **AWS ECS:** CloudTrail registra `RunTask`, `StartTask`, `StopTask`; Container Insights para métricas e logs de contêineres ECS. - **Azure Container Instances:** Azure Activity Log para operações de ciclo de vida; Azure Monitor para logs de contêiner. - **Google Cloud Run:** Cloud Audit Logs para operações de serviço; Cloud Logging para logs de contêiner. ### Análise de Imagens - **Trivy / Grype / Snyk Container:** Escaneamento de vulnerabilidades em imagens antes do deploy (shift-left security). - **Cosign / Notary:** Verificação de assinatura de imagens — garante que apenas imagens verificadas sejam executadas. - **Image Pull Events:** Monitorar `docker pull` ou `crictl pull` para imagens de registries não aprovados. ## Técnicas Detectadas | ID | Técnica | Como DS0032 Detecta | |---|---|---| | T1610 | [[t1610-deploy-container\|T1610 — Deploy Container]] | Criação de contêiner com imagem de registry externo não aprovado, especialmente com flags `--privileged` ou montando `/var/run/docker.sock` | | T1609 | [[t1609-container-administration-command\|T1609 — Container Administration Command]] | Evento `exec_creaté`/`exec_start` em contêiner de produção — shell interativo aberto por agente não-automação | | T1552.007 | [[t1552-007-container-api\|T1552.007 — Container API]] | Acesso ao socket Docker (`/var/run/docker.sock`) por processo inesperado dentro de contêiner — escalação para host | | T1543.005 | [[t1543-005-container-service\|T1543.005 — Container Service]] | Contêiner configurado com `restart: always` ou como systemd service para persistência pós-reboot | | T1613 | [[t1613-container-and-resource-discovery\|T1613 — Container and Resource Discovery]] | Listagem de contêineres via Docker API ou `docker ps` executado por processo sem contexto de automação | ## Gaps de Cobertura Brasil/LATAM **API Docker exposta sem autenticação:** Varreduras periódicas da internet identificam consistentemente hosts brasileiros com a API Docker exposta na porta 2375 (sem TLS). Esta é a principal via de comprometimento por grupos como [[g0139-teamtnt]] — e na maioria dos casos, a organização sequer sabe que a porta está exposta. **Ausência de log driver configurado:** Contêineres em produção no Brasil frequentemente são iniciados sem log driver adequado, usando apenas o driver padrão `json-file` local sem encaminhamento ao SIEM. Logs de contêineres comprometidos se perdem quando o contêiner é removido. **Falco não integrado ao pipeline DevSecOps:** Apesar do custo zero, Falco é raramente adotado em ambientes brasileiros. A falta de expertise em eBPF e a ausência de práticas DevSecOps maduras em muitas organizações significa que runtime security é um gap quase universal fora das grandes empresas de tecnologia. **Imagens com tags `latest` e sem versionamento:** Uso generalizado de `image:latest` em produção impede rastreamento de qual versão específica está em execução, dificultando triagem de vulnerabilidades e forense pós-incidente. **Socket Docker montado em contêineres:** É comum encontrar contêineres de ferramentas de CI/CD (Jenkins, GitLab Runner) com o socket Docker montado por conveniência — criando um caminho trivial de escape para o host que raramente é monitorado específicamente. **Ciclo de vida efêmero não documentado:** SOCs brasileiros que dependem de análise post-facto de logs frequentemente não conseguem investigar incidentes envolvendo contêineres de curta duração (jobs de CI, tarefas agendadas). Sem captura em tempo real via Falco ou similar, evidências desaparecem com o contêiner. ## Referências - [[_detections|Central de Detecções RunkIntel]] - [[dc0072-container-creation|DC0072 — Container Creation]] - [[dc0077-container-start|DC0077 — Container Start]] - [[dc0091-container-enumeration|DC0091 — Container Enumeration]] - [[ds0031-cluster|DS0031 — Cluster]] - [[ds0030-instance|DS0030 — Instance]] - [MITRE ATT&CK — DS0032 Container](https://attack.mitre.org/datasources/DS0032/) - [Falco — Runtime Security for Containers](https://falco.org/) - [MITRE ATT&CK for Containers Matrix](https://attack.mitre.org/matrices/enterprise/containers/)