retornar retornar
Descodificação de ameaças cibernéticas  para 2023

POR:
Mariano E Quintana
(Cybersecurity Researcher & Trainer)

COMPARTILHAR

Twitter Facebook Linkedin

Lista de verificação de DevSecOps

Não é sempre evidente 'O que deve ser feito', e 'Quais são os benefícios' de uma segurança bem implementada. Esses benefícios se manifestam como a ausência de 'eventos negativos' em vez da adição de eventos positivos, por isso às vezes é difícil ter uma visão clara do 'Que é necessário' quando abordamos alguma tecnologia nova. Talvez seja responsabilidade desses vieses cognitivos ou o conforto do usuário relacionado com a 'não saída de sua zona de conforto'. Este é um claro exemplo da falácia que existe ao pensar numa nova solução que resolve os problemas antes que ocorram, e aí as equipes caem na questão relacionada ao fato de que ninguém destaca as virtudes de um sistema que resolve problemas antes que aconteçam. É assim, ninguém se surpreende. Estamos acostumados a resolver de uma forma mais reativa do que preventiva e, claro, celebrar esse tipo de soluções.

Como não se dá o devido reconhecimento a tudo o que é resolvido sem causar alarme, há uma tendência de os usuários negligenciarem esses tipos de soluções.O DevSecOps é uma prática que alinha melhor a segurança, a engenharia e as operações e incorpora a segurança em todo o ciclo de vida do DevOps. Durante esta breve leitura, vamos nos concentrar nos pontos importantes e simples nos quais você pode se concentrar para talvez desbloquear esses mecanismos de mudança.

Sobre o desenvolvimento

 • Tornar a segurança parte de todo o processo de desenvolvimento:
Introduzir a segurança no início do desenvolvimento e durante todo o ciclo de desenvolvimento. Isso permite que o analista de segurança dê a seus requisitos o mesmo peso que os requisitos funcionais. Isso envolve a inclusão de controles e processos de segurança e, é claro, a respectiva automação dessas tarefas que são fundamentais para o fluxo de trabalho. Isso permite que os desenvolvedores resolvam as vulnerabilidades conhecidas desde o início, fornecendo assim um software seguro e resiliente.


 • Realizar testes de segurança durante todo o ciclo de desenvolvimento:
Devemos tornar os testes de segurança um processo contínuo e parte integrante de todo o ciclo de desenvolvimento de aplicativos. Visando a todos os tipos de aplicativos, APIs, contêineres, dados, processos e microsserviços.
Quanto mais cedo pudermos identificar as falhas, mais fácil será corrigi-las, mas a capacidade de identificar falhas em todos os lugares, do desenvolvimento à produção, garantirá que você possa manter o conhecimento das vulnerabilidades, independentemente de onde elas surjam.

 • Monitora processos, infraestrutura e aplicativos:
Há vários dados que nos interessam monitorar, não apenas coletamos registros para analisar a saúde de nossos ativos, mas há várias abordagens para pensar sobre o que observar e onde colocar a lupa em nossos dados. Entre as questões a serem analisadas estão:

 • A coleta de informações em tempo real permite que você tome decisões melhores e imponha uma conformidade precisa.
 • Colete e analise métricas relevantes, logs de eventos e dados de máquina para obter informações em tempo real durante todo o ciclo de vida do aplicativo.
 • Monitore os aplicativos em produção para garantir que novas vulnerabilidades e eventos de segurança sejam detectados.

Todas essas questões servem para aproveitar a oportunidade de resolver os problemas com antecedência, rapidez e a um custo mínimo.

 • Gerar alertas acionáveis quando ocorrerem problemas:
Isso consiste em implementar uma ferramenta que notifique a equipe quando houver um problema em todas as principais áreas de foco, incluindo a segurança. Ela deve ter a capacidade de enviar alertas acionáveis para as pessoas relevantes. Mas, antes disso, esses alertas de que estamos falando devem ser devidamente depurados, para evitar a possível cegueira da equipe de monitoramento. Mais alertas não significam mais monitoramento.


Sobre os ambientes

 • Proteja e monitore todo o seu ambiente físico e virtual::
Para podermos proteger, devemos primeiro listar nossos ambientes mais críticos. A segurança deve ser integrada em todos esses ambientes. Devemos tomar medidas para proteger a infraestrutura, incluindo ambientes locais e em nuvem, redes, canal IC/DC, código, dados, sistemas operacionais, aplicativos e software.

 • Colete métricas para medir o sucesso:
A segurança é uma jornada sem fim, portanto, precisamos nos concentrar na resolução e no aprimoramento contínuo para melhorar todas as nossas lacunas de conhecimento. Reunir e agir com base em informações de segurança e conformidade de ambientes locais e na nuvem. Reunir métricas de alto valor para obter insights e determinar a eficácia de seus processos de segurança e, assim, gerar uma iteração sempre que as coisas melhorarem.

 • Proteção e reforço de contêineres:
Siga as práticas recomendadas de segurança para contêineres. Garantir a autenticação e a autorização. Inspecione, examine e forneça segurança para os arquivos associados às imagens que extraímos de locais confiáveis para aplicar a sanitização adequada. Usar registros privados, como o registro de contêineres do Google ou o Quay da Red Hat. Ser capaz de criar uma arquitetura a partir de contêineres confiáveis e verificados.

 • Isolar a infraestrutura do Dockers e do Kubernetes:
Proteja e isole seus contêineres antecipadamente, com frequência e continuamente. Uma boa maneira de fazer isso é segmentar os contêineres usando ferramentas como Apparmor,Seccomp e SELinux. Essas ferramentas nos permitem criar camadas de isolamento entre diferentes aplicativos e entre aplicativos e hosts. Isso reduz a área de superfície do host, restringindo assim o acesso e protegendo-o e os contêineres localizados nele.


 • Realizar exercícios de modelagem de ameaças:
Um exercício de modelagem de ameaças identifica as falhas de projeto e os componentes de maior risco e deve oferecer à equipe de segurança a oportunidade de priorizar e resolver as falhas de acordo com o impacto. Em particular, a modelagem de ameaças ajuda as equipes a entender o tipo de ativos que estão protegendo, os níveis de sensibilidade, as possíveis ameaças e seu impacto.

 • Fortalecer as implementações na nuvem:
Os ambientes de nuvem podem oferecer uma infraestrutura segura se forem implementados corretamente. Oferecer a capacidade de implementar fora do fluxo de produção é um dos principais perigos atuais, pois cria uma falsa sensação de independência da TI. Portanto, a revisão das equipes e das funções e permissões individuais que atribuímos costuma ser uma grande oportunidade de mudança.
Devemos conceder acesso apenas ao que cada indivíduo ou equipe precisa para desempenhar suas funções. Aplicar medidas como a autenticação multifatorial para todas as funções críticas.


Sobre cultura e comportamento

 • Desenvolvimento de uma cultura de segurança sólida
É essencial ter uma forte cultura de segurança entre os desenvolvedores, as operações e a equipe de segurança. Incentive linhas de comunicação abertas para que haja um forte feedback entre as áreas. Em nossa postagem Design Thinking aplicado à segurança cibernética descobrimos como podemos tornar nossa área de segurança mais empática ao propor mudanças, compreendendo as necessidades dos usuários.

Além disso, a possibilidade de transferir a responsabilidade pela segurança para todas essas equipes, ao contrário da abordagem tradicional, em que ela era responsabilidade exclusiva do departamento de segurança, acrescenta mãos ao esforço de criar um ecossistema muito mais seguro. Se conseguirmos que a segurança venha de um ponto de vista de "sim, vamos descobrir como fazer isso com segurança" em vez de "não, você não pode fazer isso por motivos de segurança", a segurança deixará de ser um obstáculo e passará a ser um habilitador.


 • Desenvolver uma cultura de segurança como um código:
Introduzir uma mentalidade de segurança em primeiro lugar sem afetar as práticas ágeis das quais os desenvolvedores dependem para criar aplicativos. Incentivar seus desenvolvedores a adicionar segurança ao código à medida que criam aplicativos, tornando as ações seguras as ações mais fáceis sempre que possível.

 • Ele oferece treinamento e ferramentas para desenvolvedores:
Devemos garantir que os desenvolvedores tenham as informações, o suporte e as ferramentas de que precisam para realizar suas tarefas com eficiência. Também devemos incentivar o compartilhamento de conhecimento e criar um processo de tomada de decisões entre departamentos para promover a autonomia da equipe.

Sobre las APIs

 • Protegendo suas APIs
As APIs permitem a interação e a troca de dados entre aplicativos e, portanto, estão mais expostas e propensas a riscos de segurança. Proteja todas as APIs que a empresa consome, bem como as que ela expõe ao público. Use adequadamente a criptografia para proteger as informações das solicitações em trânsito e, ao mesmo tempo, limite a quantidade de informações associadas às mensagens de erro da API.

 • Autenticar e autorizar usuários da API
Use identificadores e chaves de API para identificar e autenticar usuários, dispositivos ou aplicativos. Use uma estrutura de controle de acesso, como OAuth ou SAMLv2, para controlar quais APIs os usuários autenticados ou chaves de API específicas podem acessar.

Em uma de nossas publicações detalhamos melhor todas as possíveis recomendações relacionadas ao mundo das APIs.

Sobre a codificação

 • Segurança de código em seus aplicativos
Criar um código seguro desde o início do desenvolvimento até a implementação do aplicativo pode ser uma tarefa muito difícil sem a ajuda de quem sabe. Vamos nos certificar de que a segurança seja incorporada ao código em vez de ser adicionada como uma reflexão tardia, o que pode ser facilmente alcançado com a participação de analistas de segurança desde o início. Também devemos manter o código e as implementações o mais simples possível para evitar complexidades que possam comprometer a segurança. Implementar processos e práticas recomendadas que facilitem aos desenvolvedores a tomada de decisões seguras de maneira fácil e direta.

 • Revisar continuamente o código em todas as etapas
Revise o código e os padrões em cada estágio para garantir que estejam em conformidade com as práticas recomendadas de segurança. Use o SAST e o DAST para analisar o código e outras ferramentas automatizadas para rastrear dependências e verificar todos os códigos de terceiros e de código aberto. Realize verificações nos vários cronogramas associados à criação de código, tempo de pré-compromisso, tempo de compromisso, tempo de criação, tempo de teste e tempo de implantação em nosso canal de integração e implantação contínuas (CICD).


 • Trazendo o caos para a zona de conforto
Use a engenharia do caos para testar o grau de preparação de seus sistemas para responder a ameaças à segurança em ambientes operacionais desconhecidos. Execute scripts para desligar aleatoriamente instâncias de servidor, derrubar contêineres aleatoriamente, interromper alguns serviços ou criar interrupções inesperadas em aplicativos e infraestrutura. Isso ajudaas equipes a fornecer uma defesa em movimento que protege os seus sistemas em uma ampla gama de condições e garante que algo inesperado não faça tudo desmoronar.
Um modelo bem-sucedido relacionado a essa metodologia é o modelo Chaos Monkey aplicado pela Netflix em sua arquitetura de segurança.

Un modelo de éxito relacionado con esta metodología es el modelo Chaos Monkey que aplica Netflix en su arquitectura de seguridad.


 • Mantenha um inventário de seus aplicativos e componentes
Crie e mantenha um inventário atualizado de seus ativos de aplicativos. Obtenha visibilidade do que está sendo implementado e do que sua organização tem em uso. Manter um inventário atualizado o ajudará a descobrir novos insights de segurança e evitará que você seja pego de surpresa quando algo inseguro for implantado ou quando vulnerabilidades de segurança forem descobertas em algo antigo e esquecido.

 • Varredura e proteção de seus componentes de código aberto e de terceiros
Mantenha o controle de suas dependências de código aberto e de terceiros. Certifique-se de que elas estejam sempre atualizadas e verifique regularmente se há vulnerabilidades.

 • Inicie um programa de análise de segurança em seu código
Use modelagem de ameaças, pentesting e testes de vulnerabilidade para confirmar que seu código é seguro. Determine o número de vulnerabilidades graves e por quanto tempo elas persistem antes que sua equipe as resolva. Analise a frequência e o escopo dos testes automatizados, bem como o número e o tipo de ataques aos seus aplicativos.

Sobre proteção

 • Use as melhores práticas e ferramentas de segurança
Observe as práticas recomendadas de segurança padrão. Reduza sua superfície de ataque (fortaleça a infraestrutura e os serviços), criptografe seus dados e canais de comunicação, filtre e bloqueie o tráfego mal-intencionado. Realize auditorias regulares e comemore sempre que elas acontecerem, pois elas nos ensinam novos caminhos, mas principalmente nos lembram em quais pontos devemos prestar atenção.

 • Automatize o gerenciamento da política de dados
Usar a aplicação de políticas automatizadas para gerenciar o ciclo de vida e o fluxo de dados. Criar trilhas de auditoria antes e depois de qualquer problema de segurança.

 • Use as ferramentas de DevOps existentes para automatizar algumas funções de segurança. Por exemplo:
 • Chef: para automatizar os testes de segurança
 • Puppet: para avaliar a conformidade e aplicar políticas de segurança
 • Ansible: para definir e automatizar as práticas recomendadas de segurança, como a aplicação de políticas personalizadas, a configuração de regras de firewall, o bloqueio de determinados usuários, etc.
 • SaltStack: para automatizar as práticas de segurança

Combine ferramentas comuns com uma plataforma de monitoramento contínuo da segurança e varie essa solução conforme a nossa disponibilidade de diferentes tipos de ferramentas existentes.

 • Complementação de testes automatizados com testes manuais criativos
Os scripts de teste automatizados podem não ser capazes de reconhecer ou identificar problemas visuais que o olho humano perceberia. Além disso, um testador humano interagirá com o software e descobrirá se há problemas de usabilidade ou de interface.
Outro desafio é quando os scripts de teste automatizados contêm erros ou bugs que geram resultados falso-negativos ou falso-positivos. É nesse ponto que a verificação manual precisa interagir o mais cedo possível para evitar uma futura transferência de erros.

 • Siga as práticas recomendadas de proteção na pós-produção:
Automatize a verificação e colete métricas no nível do aplicativo ao implantá-lo. Nesse caso, podemos usar uma ferramenta como o Chef para automatizar o gerenciamento de configuração e o provisionamento do ambiente de tempo de execução.

 • Redução da superfície de ataque
Integre medidas de proteção e detecção à arquitetura para limitar sua superfície de ataque e reduzir a exposição a ameaças internas e externas. Concentre-se em áreas de alto risco, como formulários da Web, código exposto na Internet, controle de acesso, código de gerenciamento de sessão, dados de fontes externas e outros pontos de entrada que interferem em redes externas. Basicamente, as joias da nossa coroa.

 • Mantenha as ferramentas de segurança atualizadas:
As soluções de segurança que você implementa devem acompanhar as mudanças nos ambientes de aplicativos e infraestrutura, bem como o seu próprio crescimento. Elas devem ter a capacidade de proteger seu sistema em tempo real e enviar alertas automaticamente quando surgirem problemas de segurança. Se elas não forem atualizadas, os resultados nunca serão perfeitos.

Conclusão

Considerando todos os pontos discutidos, podemos destacar que o mais importante é se familiarizar com o processo relacionado à metodologia DevSecOps, para que seja possível enxergar sua viabilidade. Muitas vezes, acreditamos que estamos longe, quando, na verdade, nunca paramos para analisar o quanto precisamos avançar para implementar esse tipo de metodologia em nossa empresa. Compartilhe nos comentários se você achou essas dicas úteis.