O que é configuração insegura do sistema?

A configuração insegura do sistema é um dos 10 principais riscos de segurança de CI/CD da OWASP. Ela surge quando os sistemas de CI/CD implantam configurações padrão ou abaixo do ideal. Isso pode incluir portas abertas desnecessárias, credenciais padrão, sistemas sem patches, redes mal segregadas ou recursos de segurança desativados. Essas vulnerabilidades podem expor o sistema ao acesso não autorizado e aumentar a propagação de malware e o potencial de injeção de código malicioso no processo de implantação, o que acaba levando a violações de dados e à interrupção das operações comerciais. As configurações inseguras também podem levar ao uso indevido de processos legítimos de CI/CD, permitindo que os invasores manipulem os fluxos de trabalho e obtenham acesso aos ambientes de produção.

 

CICD-SEC-7: Explicação sobre a configuração insegura do sistema

A configuração insegura do sistema representa um risco significativo à segurança. Isso decorre de deficiências nas definições de segurança, na configuração e no fortalecimento de vários sistemas em todo o pipeline, como gerenciamento de código-fonte (SCM), sistemas de CI e repositórios de artefatos. Essas vulnerabilidades geralmente servem como alvos fáceis para os invasores que buscam expandir seu alcance no ambiente.

Vários sistemas de uma variedade de fornecedores compõem os ambientes de CI/CD. Para aumentar a segurança de CI/CD, é essencial concentrar-se não apenas no código e nos artefatos que fluem pelo pipelines, mas também na postura e na resiliência de cada sistema individual.

Semelhante aos sistemas de armazenamento e processamento de dados, os sistemas de CI/CD envolvem várias definições e configurações de segurança nos níveis de aplicativo, rede e infraestrutura. Essas configurações desempenham um papel significativo na determinação da postura de segurança dos ambientes de CI/CD e de sua suscetibilidade a possíveis violações.

Os invasores procuram vulnerabilidades e configurações incorretas de CI/CD para explorar. As possíveis falhas de endurecimento incluem:

  • Sistemas com versões desatualizadas
  • Sistemas com controles de acesso à rede excessivamente permissivos
  • Sistemas auto-hospedados com permissões administrativas no sistema operacional subjacente
  • Má higiene das credenciais

Configuração do sistema definida

A configuração do sistema refere-se ao processo de configuração de sistemas e serviços, definindo como eles interagem e estabelecendo as regras que regem sua operação. Isso inclui a instalação de hardware, a instalação e a configuração de software e o estabelecimento de conexões de rede. Como o processo de configuração pode afetar significativamente a funcionalidade, o desempenho e a segurança de um sistema, é de vital importância que o senhor o faça corretamente e mantenha seu status ideal.

Componentes da configuração segura do sistema

Uma configuração segura envolve a definição correta dos parâmetros do sistema, o gerenciamento dos controles de acesso e a implementação de medidas de segurança para os sistemas que sustentam os pipelines de CI/CD. Essas configurações reduzem o risco de acesso não autorizado e impedem a exploração de vulnerabilidades nos sistemas que formam a espinha dorsal do ambiente de desenvolvimento.

A complexidade no ambiente de CI/CD decorre do ambiente de CI/CD, pois a configuração do sistema se estende além dos sistemas individuais para as interconexões entre ferramentas, serviços e plataformas usadas no pipeline. Não é de surpreender que o principal componente da configuração eficaz e segura do sistema seja o gerenciamento rigoroso da configuração.

Como ocorre o CICD-SEC-7

A causa principal das configurações inseguras do sistema geralmente aponta para erro humano, falta de procedimentos adequados ou compreensão inadequada dos requisitos de segurança. Isso pode ser resultado de algo tão simples como deixar as configurações padrão inalteradas, permitir permissões excessivas ou negligenciar a atualização e a aplicação de patches nos sistemas.

Uma situação hipotética

O invasor examina a rede alvo, uma empresa de tecnologia especializada em inteligência artificial, e descobre um servidor Jenkins exposto, configurado com as definições padrão. Empregando ferramentas prontamente disponíveis e uma chamada de API, eles passam a extrair os metadados do servidor Jenkins para obter possíveis informações sobre o sistema subjacente. Uma mina de ouro de informações inunda a tela: dados sobre plug-ins, trabalhos, configurações do sistema e muito mais. Entre esse conjunto de detalhes, uma série de informações se destaca. Chaves do AWS. Eles estavam sendo usados pelo Jenkins para implantar aplicativos no AWS e não estavam adequadamente protegidos. As chaves são para uma conta de administrador, concedendo acesso potencialmente irrestrito ao ambiente AWS da empresa.

Usando as chaves para se infiltrar na infraestrutura da AWS da empresa, o invasor entra no coração do sistema da organização. Eles localizam um bucket S3 que abriga modelos proprietários de IA e, com acesso em nível de administrador a partir das chaves roubadas da AWS, baixam rapidamente os modelos e saem sem acionar um alarme.

O invasor decide então explorar ainda mais esse sistema. Cientes de que o servidor Jenkins tem permissões de gravação nos repositórios do GitHub, eles plantam um trecho de código malicioso no código-fonte principal do aplicativo que cria um backdoor no aplicativo. No próximo ciclo de implantação, a empresa, sem saber, coloca o aplicativo em produção. Agora, armado com um backdoor persistente, o invasor pode roubar dados, manipular os controles do sistema e plantar malware adicional, tudo isso sob o radar dos sistemas de segurança da empresa.

 

Importância da configuração segura do sistema em CI/CD

Configurações incorretas em qualquer ponto do ambiente de engenharia podem expor todo o pipeline a possíveis ameaças. Um invasor que aproveitasse as configurações incorretas poderia obter acesso não autorizado ao sistema de CI/CD ou, pior ainda, comprometer o sistema e acessar o sistema operacional subjacente. O invasor pode manipular fluxos legítimos de CI/CD, obter tokens confidenciais e, possivelmente, acessar ambientes de produção. Em alguns cenários, as falhas de configuração podem permitir que um invasor se mova lateralmente dentro do ambiente e fora do contexto dos sistemas de CI/CD.

Riscos associados à configuração insegura do sistema

As equipes de DevOps que entendem os riscos associados à configuração insegura do sistema estão preparadas para projetar sistemas menos vulneráveis, assumir a responsabilidade pela segurança dos sistemas que projetam e mitigar os riscos quando eles surgirem.

Estudo de caso 1: PHP muda para o GitHub após incidente de segurança e possível vazamento de banco de dados de usuários

Em abril de 2021, a comunidade PHP enfrentou um incidente de segurança envolvendo o git.php.net. Inicialmente, suspeitou-se de um comprometimento do servidor, mas a investigação revelou que os commits maliciosos foram feitos usando HTTPS e autenticação baseada em senha, contornando a infraestrutura da Gitolite. O banco de dados do usuário master.php.net pode ter vazado, o que levou a uma migração do sistema para main.php.net e a uma redefinição de senha para todos os usuários do php.net. O Git.php.net e o svn.php.net tornaram-se somente leitura, e o repositório principal do PHP foi transferido para o GitHub, aumentando a segurança e simplificando o fluxo de trabalho de desenvolvimento.

Estudo de caso 2: Webmin revisa medidas de segurança após incidente de inserção de código malicioso

Em agosto de 2019, o Webmin, uma ferramenta de configuração de sistema baseada na Web, sofreu uma violação de segurança quando um código malicioso foi inserido em seu código-fonte. A violação, que não foi um bug acidental, permitiu a execução remota de comandos. O código malicioso foi introduzido por meio de um servidor de desenvolvimento comprometido. Após a descoberta, o Webmin respondeu atualizando o processo de atualização para usar apenas o código de check-in do GitHub, alternando todos os segredos acessíveis e auditando todos os commits do GitHub no ano passado em busca de vulnerabilidades semelhantes.

Estudo de caso 3: O código-fonte da Nissan North America foi exposto on-line devido a um servidor Git mal configurado

Em um lapso de segurança significativo, o código-fonte da Nissan North America para aplicativos móveis e ferramentas internas vazou on-line devido a um servidor Git mal configurado. O servidor, deixado exposto com o nome de usuário e a senha padrão 'admin/admin', foi descoberto pela engenheira de software Tillie Kottmann, sediada na Suíça. O repositório continha código para vários aplicativos da Nissan, ferramentas de diagnóstico, portais de concessionárias, ferramentas de marketing e muito mais. A Nissan confirmou o incidente, protegeu o sistema afetado e afirmou que nenhum dado pessoal foi acessado.

Estudo de caso 4: Departamento de TI do Estado de Nova York expõe repositórios internos de código on-line

Um repositório interno de código usado pelo departamento de TI do Estado de Nova York foi inadvertidamente exposto on-line, tornando-o acessível a qualquer pessoa. O servidor GitLab, descoberto pela empresa de segurança cibernética SpiderSilk, continha projetos com chaves e senhas secretas para sistemas do governo estadual. O servidor foi configurado para permitir que qualquer pessoa criasse uma conta de usuário e fizesse login. O servidor foi detectado on-line pela primeira vez em 18 de março e foi retirado do ar depois que a exposição foi relatada. O servidor era supostamente uma caixa de teste configurada por um fornecedor e, desde então, foi desativado.

 

Como evitar a configuração insegura do sistema em CI/CD

Embora a configuração incorreta possa fornecer um ponto de entrada para os invasores, levando a violações de segurança significativas, a configuração segura do sistema continua sendo negligenciada em muitos processos de desenvolvimento. As recomendações internas dos autores da lista OWASP Top 10 CI/CD Security Risks podem colocar seus sistemas em boa situação:

  • Mantenha um inventário dos sistemas e versões em uso, mapeando cada sistema para um proprietário designado. Verifique regularmente se há vulnerabilidades conhecidas nesses componentes. Quando um patch de segurança estiver disponível, atualize o componente vulnerável. Se não houver um patch disponível para o componente vulnerável, considere a possibilidade de remover o componente ou o sistema. Como alternativa, minimize o possível impacto da exploração da vulnerabilidade, limitando o acesso ao sistema ou sua capacidade de realizar operações confidenciais.
  • Assegure-se de que o acesso da rede aos sistemas esteja alinhado com o princípio do acesso com privilégios mínimos.
  • Estabeleça um processo para revisar periodicamente todas as configurações do sistema. Concentre sua análise nas configurações que podem afetar a postura de segurança do sistema. Garanta as configurações ideais.
  • Conceder permissões aos nós de execução do pipeline com base no princípio do menor privilégio. Uma configuração incorretas comum nesse contexto envolve a concessão de permissões de depuração em nós de execução para engenheiros. Muitas organizações permitem isso, mas é fundamental considerar que qualquer usuário com acesso ao nó de execução no modo de depuração pode expor todos os segredos enquanto eles são carregados na memória. Eles também poderiam usar a identidade do nó, concedendo efetivamente permissões elevadas a qualquer engenheiro com essa permissão.

 

Padrões do setor para segurança de configuração do sistema

Diversos padrões do setor definem as práticas recomendadas para a segurança da configuração do sistema. O Center for Internet Security (CIS) fornece referências abrangentes para a configuração segura, enquanto o National Institute of Standards and Technology (NIST) também publica diretrizes para a configuração de sistemas para segurança.

Criptografando seus segredos

Segredos como senhas, chaves de API e credenciais de banco de dados devem ser criptografados em repouso e em trânsito. Nunca armazene segredos em seu código ou arquivos de configuração. Use uma ferramenta de gerenciamento de segredos, como o HashiCorp Vault ou o AWS Secrets Manager. Essas ferramentas mantêm os segredos criptografados e controlam o acesso a eles, ajudando a evitar que as credenciais da sua organização caiam em mãos erradas.

Registro e monitoramento de seus sistemas

Uma parte importante da manutenção da configuração segura do sistema envolve o estabelecimento de políticas claras e o monitoramento rotineiro da conformidade. É importante registrar todas as atividades para que o senhor possa detectar atividades suspeitas e responder rapidamente a incidentes de segurança. O senhor também deve monitorar seu sistema em busca de sinais de ataque, como padrões de tráfego incomuns ou tentativas de login fracassadas.

Correção de vulnerabilidades

Certifique-se de que o senhor tenha um sistema abrangente de identificação de vulnerabilidades e aplicação de patches. Identificar sistematicamente as vulnerabilidades e priorizar a correção. Nos casos em que as vulnerabilidades não puderem ser corrigidas, use atenuações alternativas, como a remoção dos direitos de administrador. Lembre-se de que manter seus sistemas atualizados significa aplicar regularmente patches e atualizações em seus servidores, aplicativos e ferramentas de CI/CD.

Eliminação de contas e privilégios desnecessários

Aplique o privilégio mínimo removendo contas desnecessárias (como contas órfãs e contas não utilizadas). Essa é uma das práticas de segurança mais poderosas para reduzir sua superfície de ataque. Certifique-se de que todos os componentes do seu sistema, inclusive usuários, processos e serviços, tenham apenas os privilégios mínimos necessários para desempenhar suas funções. Isso limitará os danos no caso de um componente comprometido.

Como criar bloqueios na rede

Dividir sua rede em segmentos menores e isolados limitará o movimento lateral se um invasor obtiver acesso à sua rede. Use firewalls e listas de controle de acesso (ACLs) para controlar o tráfego entre os segmentos. Criptografe o tráfego, bloqueie portas de rede abertas não utilizadas ou desnecessárias e desative ou remova protocolos e serviços desnecessários. Audite regularmente suas regras de firewall.

Protegendo seus servidores de compilação

Seus servidores de compilação são responsáveis por compilar e empacotar seu código, portanto, são um alvo principal para os invasores. Certifique-se de que seus servidores de compilação estejam devidamente protegidos com patches de segurança atualizados e senhas fortes. E lembre-se de que proteger seu ambiente de compilação significa isolá-lo do ambiente de produção.

Auditoria de seus sistemas existentes

As auditorias e revisões regulares ajudam a garantir que as configurações do sistema permaneçam seguras ao longo do tempo. Realizar uma auditoria abrangente de sua tecnologia atual. Use testes de penetração, varredura de vulnerabilidades, gerenciamento de configuração e outras ferramentas de auditoria de segurança para encontrar falhas no sistema e priorizar as correções. Realizar avaliações do sistema em relação aos recursos usando os padrões do setor do NIST, Microsoft, CIS, DISA, etc.

Uso de ferramentas para ajudar a proteger a configuração do sistema

Existem muitas ferramentas para ajudar a gerenciar e proteger a configuração do sistema. As ferramentas de gerenciamento de configuração, como Ansible, Chef ou Puppet, permitem a configuração automatizada e a aplicação consistente em todos os ambientes. Para sistemas baseados na nuvem, os serviços nativos da nuvem, como o AWS Config, o Azure Policy e o Google Cloud Security Command Center, podem ajudar a manter a configuração segura.

 

Perguntas frequentes sobre a configuração insegura do sistema

O gerenciamento de configuração é um processo de engenharia de sistemas para estabelecer e manter a consistência do desempenho, dos atributos funcionais e físicos de um produto com seus requisitos, design e informações operacionais durante toda a sua vida útil.
O fortalecimento de sistemas é um processo metódico de auditoria, identificação, fechamento e controle de possíveis vulnerabilidades de segurança em toda a organização. Ao aplicar um conjunto de diretrizes e ferramentas para minimizar as vulnerabilidades, o endurecimento elimina funções, configurações e serviços desnecessários. O processo pode incluir a configuração segura das definições do sistema, a aplicação imediata de patches e atualizações, a limitação do número de administradores e usuários do sistema e a configuração de protocolos de autenticação fortes. A ideia por trás do endurecimento dos sistemas é fortalecer a segurança reduzindo a superfície de ataque do sistema.

Os padrões de fortalecimento de sistemas são diretrizes e práticas recomendadas criadas para proteger os sistemas contra ameaças. Geralmente desenvolvidos por organizações de segurança cibernética ou grupos do setor, os padrões de endurecimento fornecem uma estrutura para configurar um sistema a fim de minimizar sua superfície de ataque.

Exemplos de padrões de fortalecimento incluem o Center for Internet Security (CIS) Benchmarks, que fornece práticas recomendadas do setor bem definidas, imparciais e baseadas em consenso para ajudar as organizações a avaliar e melhorar sua segurança.

Outros padrões incluem os STIGs (Security Technical Implementation Guides, Guias de Implementação Técnica de Segurança) da DISA (Defense Information Systems Agency, Agência de Sistemas de Informação de Defesa) e as diretrizes de endurecimento do NIST (National Institute of Standards and Technology, Instituto Nacional de Padrões e Tecnologia). Esses padrões abrangem uma ampla gama de sistemas, incluindo sistemas operacionais, dispositivos de rede e ambientes de nuvem, e são atualizados regularmente para lidar com ameaças e vulnerabilidades emergentes.

Infraestrutura como código é o processo de gerenciamento e provisionamento de data centers de computadores por meio de arquivos de definição legíveis por máquina, em vez de configuração de hardware físico ou ferramentas de configuração interativas.
Um Dockerfile é um documento de texto que contém todos os comandos que um usuário poderia chamar na linha de comando para montar uma imagem. Usando a compilação do Docker, os usuários podem criar uma compilação automatizada que executa várias instruções de linha de comando em gravidade.
Uma implantação do Kubernetes é um objeto de recurso no Kubernetes que fornece atualizações declarativas para pods e ReplicaSets. Os engenheiros descrevem um estado desejado em uma implantação, e o Deployment Controller altera o estado real para o estado desejado em uma taxa controlada.
O Helm é um gerenciador de pacotes para o Kubernetes que permite que desenvolvedores e operadores empacotem, configurem e implantem mais facilmente aplicativos e serviços em clusters do Kubernetes. Um gráfico do Helm é uma coleção de arquivos que descrevem um conjunto relacionado de recursos do Kubernetes.
Os buildpacks são uma forma modular e independente de linguagem para transformar o código-fonte do seu aplicativo em uma imagem OCI. Um buildpack inspeciona seu código para determinar o que incluir na imagem OCI.
O desvio de configuração ocorre quando um sistema "desvia" ou muda de sua configuração pretendida. Isso pode acontecer quando são feitas alterações manuais nos sistemas ou quando as atualizações ou instalações são realizadas sem o uso de uma ferramenta de gerenciamento de configuração.
YAML (YAML Ain't Markup Language) é uma linguagem de serialização de dados legível por humanos. É comumente usado para arquivos de configuração e em aplicativos em que os dados são armazenados ou transmitidos.
O JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que é fácil para os seres humanos lerem e escreverem e fácil para as máquinas analisarem e gerarem. Ele é usado com frequência para transmitir dados em aplicativos da Web.