Visão geral da segurança

Nesta página, você encontra uma visão geral dos recursos de segurança do Container-Optimized OS em execução no Google Cloud.

Segurança do SO

Baseado no Chromium OS, o Container-Optimized OS do Google implementa vários princípios de design de segurança para fornecer uma plataforma bem configurada para a execução de serviços de produção.

Tamanho mínimo do SO

Esse é um fator essencial para a segurança do Container-Optimized OS. Como ele é otimizado para executar contêineres e esses contêineres têm dependências próprias, podemos excluir pacotes desnecessários. Assim, é possível minimizar a superfície de ataque do sistema operacional.

Sistema de arquivos raiz imutável e inicialização verificada

O sistema de arquivos raiz do Container-Optimized OS é sempre ativado como somente leitura. Além disso, a soma de verificação é calculada no momento da criação e verificada pelo kernel em cada inicialização. Esse mecanismo evita que invasores "tomem o controle" do computador por meio de mudanças locais permanentes. Além disso, várias outras ativações não são executáveis por padrão. Consulte Sistema de arquivos para detalhes.

Configuração sem estado

Embora ter um sistema de arquivos raiz somente leitura seja bom para a segurança, isso torna o sistema difícil de usar. Por exemplo, precisamos da capacidade de criar e adicionar usuários para fazer login no sistema. Para resolver isso, personalizamos o sistema de arquivos raiz de modo que /etc/ seja gravável, mas sem estado. Isso permite gravar configurações em tempo de execução, mas essas configurações não persistem durante as reinicializações. Assim, toda vez que um node do Container-Optimized OS for reinicializado, ele será iniciado a partir de um modelo limpo. Certos dados, como diretórios iniciais dos usuários, registros e imagens do Docker, persistem durante as reinicializações, porque não fazem parte do sistema de arquivos raiz.

Kernel com segurança aprimorada

O Container-Optimized OS permite vários recursos do kernel para aumentar a proteção da segurança, incluindo arquitetura de medição de integridade (IMA, na sigla em inglês), auditoria, isolamento da tabela de páginas do kernel (KPTI, na sigla em inglês) e alguns módulos de segurança do Linux (LSMs, na sigla em inglês) do Chromium OS. Além disso, o Container-Optimized OS é compatível com recursos de segurança como seccomp e AppArmor, que possibilitam a aplicação de políticas de segurança mais refinadas.

Padrões centrados em segurança

O Container-Optimized OS oferece outro nível de proteção ao fornecer valores padrão orientados à segurança para vários recursos. Isso inclui configurações de sysctl que desabilitam ptrace e BPF sem privilégios, bloqueio do firewall, e assim por diante. Esses padrões, quando aplicados automaticamente a uma frota de instâncias, ajudam a proteger todo o cluster, o projeto e a organização.

Atualizações automáticas

O recurso de atualizações automáticas do Container-Optimized OS permite a entrega pontual de patches de segurança para VMs em execução. Quando o Container-Optimized OS é gerenciado pelo Kubernetes Engine, os upgrades automáticos de nós estabelecem um equilíbrio entre segurança e estabilidade.

Sistema de arquivos

Na lista a seguir, mostramos os caminhos no sistema de arquivos de imagem do node do Container-Optimized OS, juntamente com as propriedades e o uso recomendado:

Caminho Propriedades Finalidade
/
  • somente leitura
  • executável
O sistema de arquivos raiz é ativado como somente leitura para manter a integridade. O kernel verifica a integridade do sistema de arquivos raiz durante a inicialização e se recusa a inicializar em caso de erros.
/home
/var
  • gravável
  • não executável
  • com estado
Esses caminhos visam armazenar dados que permanecem durante todo o período do disco de inicialização. Eles são montados a partir de /mnt/stateful_partition.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • gravável
  • executável
  • com estado
Esses caminhos são diretórios de trabalho para pacotes do Compute Engine (como o serviço de gerente de contas), Docker e Toolbox, respectivamente.
/var/lib/cloud
  • gravável
  • executável
  • sem estado
  • tmpfs
Esse caminho é o diretório de trabalho do pacote cloud-init.
/etc
  • gravável
  • não executável
  • sem estado
  • tmpfs
Geralmente mantém sua configuração. Por exemplo, os serviços do systemd definidos por meio do cloud-init. É recomendável registrar o estado pretendido das instâncias no cloud-init, já que o cloud-init é aplicado quando uma instância é criada ou reinicializada.
/tmp
  • gravável
  • não executável
  • sem estado
  • tmpfs
Normalmente é usado como um espaço de rascunho. Não o use para armazenar dados persistentes.
/mnt/disks
  • gravável
  • executável
  • sem estado
  • tmpfs
É possível montar discos permanentes nos diretórios em /mnt/disks.

Firewall

Por padrão, o Container-Optimized OS é configurado para recusar todas as conexões TCP/UDP de entrada, exceto SSH na porta 22. Consulte Como configurar o firewall do host para ver como alterar o padrão para abrir mais portas.

Acesso a instâncias

Por padrão, o Container-Optimized OS não tem contas de usuário acessíveis. Contas de usuário e chaves SSH são gerenciadas por meio de metadados de instância ou projeto ou Login do SO. O Login do SO permite gerenciar o acesso a instâncias usando o IAM. Ele permite um controle de acesso mais refinado (sudo versus non-sudo), chaves SSH identificáveis e política de login organizacional.

O daemon SSH é configurado para proibir a autenticação baseada em senha e impedir logins de raiz. No entanto, isso não impede que os usuários recebam privilégios de raiz usando o sudo após o login, a menos que a conta de usuário seja gerenciada com o Login do SO.

Segurança de infraestrutura

Além de vários recursos de proteção no próprio sistema operacional, a equipe do Container-Optimized OS também leva a sério a cadeia de suprimentos de software para o desenvolver e prioriza a segurança de infraestrutura ao criar e implantar imagens, com base em anos de experiência com o Chromium OS e com o Google em geral.

Desenvolvido a partir do código-fonte no Google

Cada pacote no Container-Optimized OS, incluindo o próprio kernel do Linux, é desenvolvido a partir dos repositórios de código-fonte do ChromiumOS. Isso significa que sabemos exatamente o que entra no sistema operacional, quem fez a verificação, em qual versão o recurso foi introduzido etc. Isso também nos permite corrigir e atualizar rapidamente qualquer pacote caso uma vulnerabilidade seja descoberta, em qualquer nível.

Varredura e resposta de vulnerabilidade contínua (CVE, na sigla em inglês)

Um sistema de verificação de CVE nos alerta sempre que uma vulnerabilidade é descoberta no kernel ou em qualquer pacote do sistema operacional. Esse é o mesmo sistema usado para detectar vulnerabilidades no Android e no Chromium OS. A equipe do Container-Optimized OS responde com prioridade para fazer as versões corrigidas. A equipe do Container-Optimized OS também trabalha com a equipe de resposta a incidentes do Google para disponibilizar mais rapidamente patches de segurança no Container-Optimized OS.

Processo de teste e qualificação

Antes de publicarmos uma nova imagem do Container-Optimized OS no Google Cloud, testamos em vários níveis, incluindo teste de imprecisão de kernel com syzkaller, testes do Kubernetes no nível de cluster, testes de integração com recursos do Compute Engine e vários comparativos de desempenho. Isso garante a estabilidade e a qualidade das nossas versões.