InfraestruturaSegurança de Aplicação

Segurança de Container no Desenvolvimento Seguro

Entenda porque pensar a Segurança de Container é importante para manter as aplicações seguras

Quer saber por que a segurança de container pode afetar o desenvolvimento das suas aplicações?

Neste artigo vamos abordar a origem dos containers e como a evolução deste importante recurso trouxe melhorias e riscos para a segurança do desenvolvimento.

Confira aqui algumas das principais questões acerca da Segurança de Containers em Application Security no cenário atual.

Um pouco da história de Containers

Apesar da tecnologia Docker e seus containers terem se popularizado em 2013, essa tecnologia não é nada nova

O conceito original de container está presente na estrutura de sistemas operacionais desde 1970, quando desenvolvedores de sistemas UNIX imaginaram uma forma de isolar códigos críticos nestes sistemas operacionais. Isto permitia que os desenvolvedores testassem seus códigos de forma isolada, quase como uma sandbox.

Para você que não lembra, a sandbox é uma área neutra, onde é possível executar programas em um ambiente seguro e controlado, com operações limitadas a esse espaço que não afetarão outros serviços.

No entanto, a grande sacada para a popularização dos containers foi  quando desenvolvedores do Linux começaram a entregar as distribuições com uma série de ferramentas. Isso possibilitou um melhor gerenciamento destes “containers”.

Mas o que chamou mesmo a atenção para os containers foi o fato deles entregarem uma aplicação totalmente funcional de forma simples e rápida. Isso eliminou a necessidade de grandes  planejamentos de infraestrutura aos quais estamos acostumados quando pensamos em sistemas tradicionalmente virtualizados.

E o grande salto se deu quando Apache Mesos, Google Borg e Facebook Tupperware surgiram, entregando uma gama de estruturas de orquestração de containers. De lá pra cá você já conhece a história.

Segurança de Container em foco

Agora que já entendemos um pouco mais sobre a história dos containers, precisamos mergulhar mais fundo e falar sobre segurança.

No entanto, a grande facilidade entregue pela utilização dos containers é também um de seus grandes problemas.

Antes de sua popularização, quando uma equipe de desenvolvedores queria colocar seu aplicativo em produção, deveria seguir uma série de regras e passar por várias etapas para construir a estrutura e assim disponibilizar a aplicação.

Hoje, com a popularização dos containers – e muitas vezes pela própria pressão exercida pelas empresas sobre suas equipes – estes procedimentos ou regras podem acabar sendo negligenciados.

Além disso, a facilidade em oferecer um serviço individual por container torna a superfície de ataque cada vez maior, aumentando a complexidade para gerenciar a segurança de uma aplicação.

Portanto, se levarmos em conta que a tecnologia de containers está aqui para ficar, é importante desenvolver um olhar atento sobre o aspecto da segurança.

Então precisamos dar início a um movimento onde a construção do container tem um mindset voltado para segurança desde o princípio, similar ao que fazemos com aplicativos.

Isso quer dizer que regras devem ser criadas para que a construção de um container siga passos básicos, com o objetivo de proteger este serviço de eventuais vulnerabilidades e  ameaças presentes na internet.

Práticas seguras na Segurança de Container

De forma básica, podemos listar algumas das práticas que podem melhorar a segurança de containers.

Mas é importante ficar claro que não temos a pretensão de criar um modelo de segurança para containers: queremos fomentar a cultura de que existe a necessidade de pensar a segurança também para este tipo de serviço. 

Gerenciando a Segurança de Containers

Existem ainda muitos desenvolvedores que, quando pressionados, buscam por uma solução mais simples para resolver seus problemas.

Embora esta possa parecer uma alternativa interessante, nem sempre a solução mais simples é a mais adequada ou a mais segura (ou raramente é).

Mas existem alguns cuidados que podem ajudar neste momento. Listamos aqui os principais itens que devem ser observados para minimizar a superfície de ataque quando optamos pelo uso de Containers:

1. Conheça a fonte das imagens

De forma geral o primeiro ponto que temos que observar é a utilização de containers somente de fontes confiáveis. Isso pode parecer muito óbvio, mas acredite: muitos desenvolvedores, ao procurar por soluções rápidas, acabam usando containers de fontes não verificadas.

Usar fontes conhecidas é uma prática antiga para os administradores de sistemas operacionais.

Este mesmo pensamento deve ser levado para todos aqueles que de alguma forma geram ou usam as imagens de containers

É evidente que a simples busca por uma imagem que solucione um problema específico é bem mais rápida e simples, e muitas vezes acaba sendo o que o desenvolvedor busca. Mas a possível solução de um problema não pode gerar outro.

2. Use fontes registradas

Uma atitude básica e que pode ajudar a manter a segurança das imagens utilizadas é habilitar a opção “Docker Content Trust, restringindo o uso para fontes exclusivamente registradas.

Dessa forma, você garante que, mesmo em uma situação em que vários usuários interajam com o container, os parâmetros de segurança inibam possíveis comportamentos em que há um risco desnecessário.

3. Aumente o critério de avaliação de vulnerabilidades

Vimos acima que para minimizar os riscos quando falamos de segurança de container, o ideal seria usar imagens de fontes registradas.

No entanto, se em algum momento você realmente precisar usar uma imagem de uma fonte não registrada, considere aumentar o seu critério de avaliação de vulnerabilidades.

Isso fará com que os parâmetros de segurança fiquem mais elevados e sensíveis a possíveis riscos.

4. Use ferramentas como scans de vulnerabilidade

Outra boa prática a ser adotada para aumentar a segurança do container é fazer uso de ferramentas como scanners de vulnerabilidade.

Quando aplicado na imagem a ser utilizada, o scan poderá ajudar a detectar possíveis pontos fracos na segurança, evitando replicar imagens vulneráveis.

Isso é importante porque o uso de imagens não validadas poderia acarretar em imagens com riscos mitigáveis, o que aumentaria a superfície de ataque exposta. 

5. Use imagens atualizadas

Outra recomendação para aumentar a segurança do container é garantir que a imagem  usada seja a mais atual possível.

Pode parecer básico, mas é importante estar atento a isso pois a administração da estrutura de containers se torna cada vez mais complexa, principalmente quando pensamos em lidar com centenas deles.

Isso pode tornar o gerenciamento difícil, por isso é importante observar com mais atenção quais imagens estão sendo utilizadas.

6. Habilite um tempo de expiração da imagem usada

Somado ao ponto anterior, o uso de um tempo de expiração da imagem pode também ser uma boa prática.

Isso contribui para que as versões estejam sempre atualizadas antes de serem usadas na linha de produção de uma aplicação.

7. Limite a execução de recursos do container

Ainda que suas imagens estejam atualizadas e com tempo de expiração habilitado, alguns problemas podem acabar aparecendo. Quando executado, o seu container pode usar mais recursos que o necessário, o que pode acarretar em riscos para a segunraça.

Portanto, acrescentar limites à execução de seu container pode e deve ser usado como medida de segurança. Uma boa estratégia seria a limitação de CPU, por exemplo, com o uso de opções como –cpu=X ou mesmo a limitação de uso de memória como –memory=1000M.

8. Resolva as vulnerabilidades anteriores

Raramente uma imagem de container é criada do zero. Isso quer dizer que podemos buscar por vulnerabilidades mesmo antes dessas imagens serem criadas, reduzindo a possibilidade de uma ameaça posterior.

Podemos imaginar que muitas das imagens usadas em grande projetos são partes integrantes de um grande ciclo de reutilização de componentes. Isto mostra que bibliotecas, por exemplo, podem ser usadas em muitas versões de imagens. 

Essa constante reutilização de partes para montar imagens de container pode ser um fator de introdução de vulnerabilidades no sistema. Por este motivo devemos entender a necessidade de um processo de validação de componentes de um container como altamente crítica.

9. Trabalhe o controle de acesso e o conceito de menor privilégio

Outro recurso importante que deve ser considerado ao se pensar a segurança de containers é implementar um robusto controle de acesso e tornar as suas imagens muito leves.

Por padrão, todos os usuários de uma imagem de container possuem um privilégio elevado. Mas isso nem sempre é necessário.

Por isso, é importante verificar cuidadosamente as permissões de acesso dos containers, validando o conceito de menor privilégio para cada um dos usuários.

10. Evite disponibilizar vários serviços em um mesmo container

Quando falamos em containers sob o ponto de vista de segurança, é válido destacar que seria muito mais interessante não disponibilizar vários serviços em um mesmo container.

Isso porque ao oferecer somente um serviço por container, ele se tornará extremamente leve.

E esta é uma solução mais inteligente porque reduz a possibilidade de um comprometimento maior em caso de vulnerabilidades.  

11. Valide e monitore a segurança do ambiente

Seguindo o mesmo pensamento levantado nos pontos anteriores, de nada adianta termos uma imagem segura se a estrutura onde o container será disponibilizado não está segura.

Neste ponto, é válido fazer uma avaliação de segurança na estrutura em questão, bem como a criar um processo de hardening de daemons e do ambiente.

De forma simplificada, o hardening seria o processo de configurar aspectos de segurança de forma mais rigorosa, com o objetivo de obter um ambiente operacional de servidor muito mais seguro.

Como no caso de qualquer estrutura, para mantê-la segura precisamos monitorar o comportamento de nossos containers. Em um monitoramento de uma estrutura de rede buscamos por anomalias, como por exemplo um aumento repentino no uso de um protocolo ou mesmo no consumo geral da rede.

Esse tipo de comportamento pode nos mostrar que algo não está correto e que precisamos investigar as causas que levaram a este pico.

De forma bem semelhante, o comportamento de um container pode ser monitorado, como por exemplo o seu consumo de CPU.

Ao observar um comportamento anormal de uso do container, é importante investigar quais as causas que podem ter levado a este tipo de uso.

Portanto, o monitoramento é fator importante para garantir a saúde dos containers ou mesmo de sua estrutura de forma geral. 

Agora meus containers estão seguros?

Levando em consideração todos os pontos acima, é possível prevenir vulnerabilidades no processo de construção e uso de um container, trazendo maior segurança para o processo como um todo. 

Por isso a adoção de boas práticas é importante, elas permitem validar os componentes de um container. Dessa forma, o resultado final é a diminuição das chances de introdução de vulnerabilidades no sistema, assim como a exposição a ataques.

Os Containers vieram para ficar

Mesmo não se tratando de algo novo, precisamos entender que a tecnologia de containers ainda precisa passar por uma grande adequação aos novos modelos de operação e riscos presentes.

Cabe aos profissionais que usam containers ajudar a melhorar este cenário, trazendo a segurança de forma contínua para as estruturas que hoje trabalham com esta tecnologia.  

Para isso, é recomendável que todos os envolvidos na criação, uso ou gerenciamento de containers tenham como primeira fonte de pesquisa a própria documentação de segurança do Docker. Neste documento constam conceitos e recomendações de boas práticas para o uso de containers de uma maneira fácil de absorver.

Por fim,  esperamos que este pequeno texto tenha despertado em você a busca por mais conhecimento por este assunto.

É muito importante buscar melhorias no processo de Continuous Application Security que envolva a segurança de componentes, pois as ameaças do mundo digital surgem a todo momento. Sem atualização contínua, é pouco provável que as aplicações estejam seguras.

About author

Articles

Mais de 15 anos de experiência em segurança da informação e aplicações, graduado em processamento de dados, trabalhei como professor universitário e participei ativamente como instrutor de treinamento para mais de 6000 desenvolvedores em equipes de TI. Sou pai de duas meninas e trader nas horas vagas.
Related posts
Segurança de Aplicação

Desenvolvimento Seguro para Dispositivos de IoT: Garantindo a Resiliência na Era da Conectividade

Não é mais incomum olharmos para vários lugares e acharmos dispositivos IoT, estão em nossas…
Read more
Segurança de Aplicação

O Impacto da Inteligência Artificial no Desenvolvimento Seguro de Software

Não é segredo para ninguém, a Inteligência Artificial (IA) tem impactado significativamente…
Read more
Segurança de Aplicação

Secure By Design em ASPM - Como as ferramentas se integram ao processo

Neste artigo vamos trabalhar um pouco com os conceitos de Secure by Design em ASPM e como as…
Read more

Deixe um comentário

Descubra mais sobre Conviso AppSec

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading