Nesta apresentação são abordados cenários comuns em que a utilização de containers Docker pode expor novos tipos de problemas de segurança, que talvez você não tenha considerado, algumas ferramentas de análise e hacking, assim como dicas que você pode usar para garantir que não deixe as portas abertas quando você implantar em produção.
Palestra de Fernando Silva, apresentada no Tchelinux Bento Gonçalves 2017.
* Link original do autor: https://speakerdeck.com/fernandodebrando/analise-de-seguranca-e-hacking-de-containers-docker
* Link do perfil do autor no Speaker Deck: https://speakerdeck.com/fernandodebrando/
Fernando Silva é Analista de Desenvolvimento na KingHost, graduado em Análise e Desenvolvimento de Sistemas (ADS) pela Faculdade Senac Porto Alegre, onde ganhou o Prêmio Keller de melhor trajetória acadêmica. Atualmente faz pós-graduação em Segurança Cibernética pela UFRGS, além disso, é um dos coordenadores da comunidade PHP-RS, é entusiasta Open Source e Software Livre.
3. Visão Geral
1 - Estatísticas
2 - Preocupações com segurança ao usar Docker
3 - Práticas de segurança
4 - Ferramentas de análise de segurança e hacking
7. ∎ Processo de análise manual, analisando o dockerfile e suas
dependências
∎ Autenticação, permissões e qualquer tipo de comunicação com
o host é mapeada
∎ Clair, TwistLock e Aqua
∎ Mais de 80% não verifica
Como verificar vulnerabilidades?
9. Ao contrário de uma VM, o kernel é compartilhado entre todos os
containers e o host, aumentando a importância de qualquer
vulnerabilidade que explore o kernel.
Kernel exploits (exploração do kernel)
10. Como todos os containers compartilham recursos do kernel, se
um container pode monopolizar o acesso a certos recursos,
incluindo memória, ou até IDs de usuário (UIDs), pode faltar
recursos para outros containers, resultando em uma negação de
serviço (DoS).
Denial-of-service attacks (ataque de
negação de serviço)
11. Um invasor que tem acesso a um container não pode ter acesso a
outros containers ou ao host. Se você usa root no container, você
será root no host.
Container breakouts (invasão de container)
12. Como você sabe que as imagens que você está usando são
seguras, não foram adulteradas, e vêm de onde elas afirmam vir?
Poisoned images (imagens “envenenadas”)
https://hub.docker.com/r/fernandosilva/nginx-trojanized/
17. Quando um container acessa um banco de dados ou serviço,
provavelmente exigirá credenciais, como um token ou mesmo
usuário e senha. Se um invasor tiver acesso ao container terá
acesso a estes dados.
Application secrets (segredos de aplicações)
20. Não use variáveis de
ambiente ou incorpore na
imagem de container
https://wycd.net/posts/2017-02-21-ibm-whole-cluster-privilege-escalation-disclosure.html
22. O Docker Secrets funciona como um cofre onde você pode colocar
coisas sensíveis lá e só quem tem a chave do cofre consegue utilizar,
no caso essa chave é designada aos nós dos serviços que a chave
for atribuída.
Docker Secrets Management
http://www.mundodocker.com.br/docker-secrets/
24. ∎ Certifique-se de que seu host e a configuração do Docker
engine sejam seguras
∎ Mantenha seu SO atualizado
∎ Impor controle de acesso para evitar operações indesejadas,
tanto no host como nos containers, usando ferramentas como
SecComp, AppArmor ou SELinux
Proteja seu host
25. ∎ Tomar cuidado ao executar como root
∎ Crie namespaces isolados
∎ Limitar privilégios ao máximo
∎ Verifique se o container é confiavél (verifique a imagem)
Redução dos privilégios
26. ∎ De onde veio?
∎ Você confia no criador?
∎ Quais políticas de segurança está usando?
∎ Identificação do autor
∎ Não use se não confia na fonte
∎ Use um servidor Docker Registry próprio
∎ Verifique a assinatura da imagem
Autenticidade da imagem
27. ∎ Limite os recursos no kernel ou no container
∎ Fazer testes de carga antes de por em produção
∎ Implemente monitoramento e alertas
Alto uso de recursos do container
28. ∎ Inspecionar as imagens
∎ Atualize para pegar novos patches de segurança
∎ Utilize uma ferramenta de scanner de vulnerabilidades
∎ Integre esse scanner como etapa do seu CI/CD
Vulnerabilidades de segurança
presentes na imagem
34. Docker Security Scanning
Anteriormente conhecido por Projeto Nautilus, a solução fornece
um perfil de segurança detalhado das imagens Docker com
objetivo de tornar o ambiente em conformidade com as melhores
práticas. A ferramenta faz uma varredura das imagens antes de
serem utilizadas e monitoramento de vulnerabilidades.
50. Docker Bench for Security
Avalia se o ambiente Docker está em conformidade com as
melhores práticas. Sua função é verificar se as recomendações de
segurança implementadas corretamente durante a configuração do
serviço Docker.
51. Teste de segurança para ambiente
Docker
docker run -it --net host --pid host --cap-add audit_control
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST
-v /var/lib:/var/lib
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/lib/systemd:/usr/lib/systemd
-v /etc:/etc --label docker_bench_security
docker/docker-bench-security
https://dockerbench.com/
54. 1. Configuração de host
2. Configuração do Docker Daemon
3. Arquivos de configuração do Docker
4. Imagens de containers e arquivos
5. Tempo de execução de containers
O que fazer com os resultados?
https://d3oypxn00j2a10.cloudfront.net/assets/img/Docker%20Security/WP_Intro_to_container_security_03.20.2015.pdf
https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.12.0_Benchmark_v1.0.0.pdf
59. ∎ Faz scan de uma rede tentando localizar os Docker Registries
∎ Registry
Delete: Exclui image / tag remota
Info: Mostra informações de registros remotos
Push: Envia uma imagem (como Docker)
Upload: Upload de arquivo aleatório
Principais Funcionalidades
60. ∎ Image
□ Analyze
Busca por informações confidenciais em uma imagem
Docker
Busca por senhas em variáveis de ambiente
Busca por qualquer URL / IP em variáveis de ambiente
Tenta identificar o usuário usado para executar o software
Principais Funcionalidades
61. ∎ Image
□ Extract: extrair uma imagem docker
□ Info: Obtém meta-informação da imagem
□ Modify:
entrypoint: altere o ponto de entrada em um docker
trojanize: injeta um reverser shell em uma imagem docker
user: altere o usuário em execução em uma imagem docker
Principais Funcionalidades