Trabalho com TI há mais de 20 anos, mas de alguma forma nunca tive contato com contêineres. Na teoria, entendi como eles estavam estruturados e como funcionavam. Mas como nunca os encontrei na prática, não tinha certeza de como exatamente as engrenagens sob o capô giravam e giravam.
Além disso, eu não tinha ideia de como era a segurança deles. Mas, novamente, a teoria parece boa, e a velha canção “conforme a segurança aumenta, a usabilidade diminui” ficou na minha cabeça. Então pensei que como tudo é tão fácil de fazer com containers, a segurança ali está abaixo da média. Acontece que eu estava certo.
Para começar rapidamente, me inscrevi em cursos
O curso, ministrado por Sheila A. Berta e Sol Ozzan, começou imediatamente com uma descrição de como funcionam os contêineres Docker e a jornada que eles percorrem quando implantados no Kubernetes. Esta foi uma aula totalmente prática - os alunos tiveram que instalar o Docker e o microk8s em suas máquinas antes da aula - uma ótima maneira de ver como as ferramentas interagem entre si, encontrar pontos fracos e, o mais importante, tentar bloqueá-los.
Infelizmente, embora os cursos prometessem me tornar um “príncipe” depois de dois dias, senti que tudo estava apenas começando e ainda tinha muito que aprender.
Antes de mergulhar em minhas observações sublimes, é importante explicar o que é um contêiner. No mundo do desenvolvimento, é considerado normal que o código escrito em sua máquina pessoal funcione perfeitamente, mas quando você tenta executá-lo em algum servidor em algum lugar, ele simplesmente não funciona. Os contêineres tentam superar esse problema fornecendo máquinas independentes que você pode mover facilmente de um servidor para outro, sabendo que sempre funcionarão. Como o nome sugere, eles contêm o código, as bibliotecas e outros softwares necessários para realizar o trabalho. O Kubernetes, por outro lado, é
Abaixo estão algumas das minhas descobertas da perspectiva da equipe vermelha e azul.
Equipa vermelha
A maior parte do conteúdo do contêiner é executada como root: Isso significa que se o contêiner estiver comprometido, você terá acesso total ao contêiner. Isso torna as próximas etapas muito mais fáceis.
Montar docker.sock dentro de um contêiner é perigoso: se você tiver root dentro de um contêiner e também instalou o Docker dentro de um contêiner que tenha um soquete Docker (/var/run/docker.sock), você terá o potencial de explorar todo o cluster, incluindo acesso a qualquer outro contêiner. Esse acesso não pode ser evitado pelo isolamento da rede ou por outros meios.
Variáveis de ambiente geralmente contêm dados secretos: na maioria dos casos, as pessoas enviam senhas para o contêiner usando variáveis de ambiente normais. Portanto, se você tiver acesso à conta, poderá espionar essas variáveis de ambiente para posteriormente expandir seus poderes.
A API Docker pode fornecer muitas informações: a API Docker, quando configurada por padrão, é executada sem autorização e pode produzir muitas informações. Usando o Shodan, você pode encontrar facilmente uma lista de portas abertas, obter informações detalhadas sobre o cluster e prosseguir para sua captura completa. TrendMicro escreveu sobre isso
Time azul
Não execute o conteúdo do contêiner como root: Mesmo que seja mais fácil rodar como root, você não deveria fazer isso. Em vez disso, execute aplicativos com permissões de redefinição exibindo o uid, usando a opção --user ao executar a partir da CLI ou especificando USER no Dockerfile.
Não permitir que software seja instalado em contêineres: Quase todo ataque começa com o plantio de algo. Do nmap ao ifconfig e ao próprio Docker (dentro de um contêiner), instalar qualquer coisa em um contêiner tem sido comum. Pelo mesmo motivo, você deve sempre bloquear todas as portas não utilizadas. Isso também ajuda a evitar que comandos de controle sejam transmitidos quando sua máquina estiver infectada. Além de impedir a instalação de programas, vale garantir que o número mínimo de aplicativos necessários para concluir a tarefa esteja instalado no próprio contêiner.
Proteger docker.sock: deve ser protegido porque a comunicação entre o contêiner e o cluster é processada por meio deste soquete. Como não quero entrar em detalhes neste artigo, leia
Use segredos do Docker em vez de variáveis de ambiente: Existem segredos
Se o artigo despertou seu interesse em contêineres, você pode instalar facilmente o Docker ou o microk8s (uma versão pequena do Kubernetes).
Após a instalação você pode ir
Se você deseja ou precisa fazer um curso abrangente sobre Docker, no qual palestrantes práticos examinam todas as suas ferramentas: desde abstrações básicas até parâmetros de rede, nuances de trabalhar com vários sistemas operacionais e linguagens de programação, tente “
Fonte: habr.com