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 ativa vários recursos do kernel que aumentam a segurança da segurança, incluindo Arquitetura de medição de integridade (IMA), Auditoria, Tabela de páginas do kernel Isolamento (KPTI) e alguns módulos de segurança do Linux (LSMs, na sigla em inglês) no Chromium OS. Além disso, o Container-Optimized OS oferece suporte a recursos de segurança, como seccomp (link em inglês) e AppArmor que possibilitam a aplicação de políticas de segurança mais granulares.
Padrões centrados em segurança
O Container-Optimized OS oferece outro nível de proteção ao fornecer valores padrão seguros para vários recursos. Isso inclui configurações de sysctl que desabilitam ptrace e BPF sem privilégios, bloqueio do firewall e outros. 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 o oferecimento rápido de patches de segurança para VMs em execução. Quando o Container-Optimized OS é gerenciado pelo Kubernetes Engine, as atualizações automáticas de nodes encontram 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 |
---|---|---|
/ |
|
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 |
|
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 |
|
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 |
|
Esse caminho é o diretório de trabalho do pacote cloud-init . |
/etc |
|
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 |
|
Normalmente é usado como um espaço de rascunho. Não o use para armazenar dados persistentes. |
/mnt/disks |
|
É 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. As contas de usuário e as chaves SSH são gerenciadas por meio dos metadados da instância ou do projeto ou do Login do SO. O Login do SO permite gerenciar o acesso a instâncias usando o IAM. Isso permite um controle de acesso mais refinado (sudo versus não sudo), chaves SSH identificáveis e uma política de login organizacional.
O daemon SSH é configurado para não permitir a autenticação baseada em senha e para não permitir logins de raiz. No entanto, isso não impede que os usuários ganhem 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.