DevSecOps: 6 passos para implementar segurança no desenvolvimento de software
A cultura DevOps se tornou um marco na história da tecnologia, tanto que muitos recrutadores começaram a utilizar este nome até para descrição de vagas. Mas onde fica a segurança quando implementamos metodologias de entregas ágeis em todo o pipeline de produção de software? A segurança não pode ser deixada para depois ou mesmo para quando ocorrer algum incidente. Ela deve ser tratada dentro do processo de desenvolvimento. O DevSecOps veio para solucionar esse problema!
O que é DevSecOps?
De forma geral, é a tendência de automatizar todas as verificações de segurança, codificando-as nos testes de unidade e usando-as desde o início do desenvolvimento do software, não no final do ciclo.
Trata-se então da Segurança integrada às práticas de DevOps. Isso traz a agilidade junto à segurança, desde a concepção do projeto. Assim sendo, temos o mesmo fluxo de trabalho, adicionando os componentes de segurança. Como podemos fazer isso?
Neste post trataremos de 6 etapas para implementação de DevSecOps. São etapas complexas, que exigem bastante trabalho para adequação, porém, é muito importante considerar cada uma delas ao escolher a metodologia de trabalho:
- Realizar auditorias de segurança na infraestrutura atual e tratar as falhas
- Automatizar os testes de segurança
- Verificar as dependências do código com frequência
- Dividir as verificações em pedaços gerenciáveis
- Integrar ferramentas de segurança com ferramentas de DevOps
- Investir continuamente em treinamento para o time de desenvolvimento
1. Realizar auditorias de segurança na infraestrutura atual e tratar as falhas
Antes de começar a implementação de uma nova metodologia é crucial identificar a situação atual dos processos e serviços aplicados. Para isso se faz necessário realizar auditorias de segurança em toda a infraestrutura que suporta seus projetos de software atualmente.
Observe seus sistemas do ponto de vista do invasor e tente encontrar os pontos mais fracos. Isso permite projetar contramedidas eficazes para possíveis violações de segurança, removendo os gargalos nos processos ou removendo completamente as cadeias fracas. A modelagem de ameaças não pode ser automatizada, mas é um exercício extremamente útil para manter seus desenvolvedores atentos a vulnerabilidades de segurança em potencial e evitar a criação de novos pontos de violação do código do produto.
Para auxiliar nesse processo existem diversas ferramentas open source capazes de realizar tanto a auditoria quanto a emissão de bons relatórios. As principais são:
- OpenVAS – https://www.openvas.org/
- Maltego – https://www.maltego.com/
- nmap – https://nmap.org/
2. Automatizar os testes de segurança
Assim que a infraestrutura atual tiver as vulnerabilidades descobertas e corrigidas chegou a hora de começar a desenvolver soluções automáticas de escaneamento de segurança. Para isso é necessário codificar essas soluções para fazer parte do teste unitário nos novos recursos adicionados. Assim sendo, os requisitos de segurança são atendidos desde o início do processo de desenvolvimento de software, deixando de ser tratado como a última coisa antes do lançamento.
Segundo uma pesquisa realizada pela Sonatype sobre QA e automação de testes em 2020 mais de 44% dos mais de 5000 entrevistados sabem que as práticas de DevSecOps são muito importantes, porém, não tem tempo para implementar essas soluções. Como está sua equipe com relação a isso?
É muito importante frisar que essa automação deve ser implementada com muito cuidado e cautela. Ao executar os testes de segurança de aplicativos estáticos (SAST) nos ambientes de teste e preparação, certifique-se de que esses testes sejam executados apenas nas adições mais recentes à base de código.
Considere a introdução das práticas de Teste de Segurança de Aplicativos Dinâmicos (DAST) em seus fluxos de trabalho, se você ainda não fez isso. Em vez de verificar o código em desenvolvimento e teste, essa prática se concentra em verificar a integridade e o desempenho dos aplicativos executados na produção.
Para ajudar a guiar seu caminho em direção ao software mais seguro a OWASP possui diversos documentos que enumeram as principais vulnerabilidades de aplicativos. Vale a pena conferir esta lista, e através dela buscar proteger seu produto contra essas vulnerabilidades.
Para esta etapa de testes existem diversas ferramentas, inclusive criadas pela OWASP. As principais são:
- Brakeman – Ruby – https://brakemanscanner.org/
- SonarQube – Java e outras – https://www.sonarqube.org/
- Bandit – Python – https://pypi.org/project/bandit/
- Snyk – Várias linguagens – https://snyk.io/
- OWASP ZAP – https://owasp.org/www-project-zap/
- Arachni – https://www.arachni-scanner.com/
- SQLmap – http://sqlmap.org/
- Dependency Check – https://owasp.org/www-project-dependency-check/]
- Gauntlt – http://gauntlt.org/
- Nikto – https://github.com/sullo/nikto
3. Verificar as dependências do código com frequência
A migração de ambientes on-premise (data centers privados que as empresas possuem internamente) para a nuvem vem alimentando o crescimento sem precedentes do desenvolvimento de software, afinal a indústria de TI tem sido capaz de concluir os projetos mais rapidamente com isso tem atendido aos requisitos dos clientes com maior agilidade. Tendo por objetivo fortalecer ainda mais essa abordagem, o uso de software e módulos de código aberto se torna a principal abordagem para a entrega de software, porque desenvolver todos os módulos do zero é essencialmente perda de tempo e recursos.
No entanto, é perceptível que usar o código de terceiros significa ser dependente de suas falhas de segurança e vulnerabilidades.
Devido a isso é importante implementar verificações de segurança nas dependências utilizadas pelas soluções de software. O GitLab em sua nova versão lançou um painel de segurança, bem como o modo de manutenção para softwares marcados como comprometidos, então cada membro do projeto é notificado se o projeto do qual eles dependem for atualizado. Outra maneira de fazer isso é usando a ferramenta OWASP Dependency Checker, que pode ser adicionada como um plugin para a maioria dos navegadores e ferramentas de CI/CD.
4. Dividir as verificações em partes gerenciáveis
Quando não se tem a segurança implementada no ambiente, um dos maiores problemas (se não for O maior problema) de introduzir as práticas DevSecOps é a necessidade de introduzi-las aos poucos. Pode haver uma lista bem longa de verificações necessárias, mas implementá-las em uma rápida sucessão será um desafio muito grande para seus desenvolvedores. Em vez disso, a implementação de apenas algumas verificações durante cada uma das sprints de desenvolvimento de produto permite que o processo seja muito mais suave e encontre menor resistência técnica e dos times envolvidos no processo. Isso basicamente dá à equipe tempo para lidar com novas tarefas e integrá-las na rotina diária dos fluxos de trabalho de entrega de software.
Melhor ir devagar, chegando ao objetivo de maneira consistente, do que tentar forçar as mudanças e prejudicar o negócio de forma geral.
5. Integre ferramentas de segurança com ferramentas de DevOps
Como vimos, a segurança precisa ser automatizada em DevSecOps. Para que seja de fato produtivo trabalhar com essa metodologia é importante que as ferramentas de verificações de segurança sejam confiáveis e funcionem bem com o restante das ferramentas DevOps utilizadas em seu time.
Isso permite a integração perfeita das verificações de segurança em seus pipelines de CI/CD de entrega de software e as soluções de monitoramento de nuvem usadas para manter o desempenho de seu ambiente de produção.
A melhor maneira de integrar esses sistemas é por meio de interações de API, que reduzem a quantidade de configuração para cada ferramenta separada. Soluções como Splunk, Selenium e outras ferramentas têm integrações limpas e simples com Kubernetes e Terraform , Jenkins e Ansible, pilha ELK, Prometheus + Grafana e outros softwares DevOps populares.
6.Invista continuamente em treinamento para o time de desenvolvimento
Ao chegar neste ponto é importante dar uma olhada no progresso até aqui. Já foi realizada a auditoria do sistema, o controle de qualidade por meio de testes automatizados já foi implementado, as dependências de código são verificadas regularmente, as verificações de segurança são implementadas gradualmente no pipeline existente e as ferramentas de monitoramento de segurança estão integradas com outras partes do kit de ferramentas da equipe DevOps.
É normal que imaginemos que isso já basta, e a partir da implementação deste passo a passo todos os problemas relacionados a segurança vão simplesmente desaparecer. Porém, ao imaginar algo assim estamos longe de acertar.
Como em todo o ciclo DevOps, não há fim nas melhorias aplicadas. A cada execução é possível melhorar a implementação de cada etapa aqui descrita, bem como a adição de novas observações e correções que só serão possíveis após a maturidade do time aumentar conforme as ‘rodadas’ de melhoria contínua.
É no que se baseia o ciclo PDCA.
A cada ciclo um PDCA deve ser executado, assim estaremos caminhando em direção a um software cada vez mais seguro.
A próxima etapa do ciclo é garantir que todos os membros do time usem todas as ferramentas e abordagens acima mencionadas de forma permanente para que os requisitos de segurança sejam realmente levados em consideração desde o início de cada projeto. Somente quando seguir esse fluxo de trabalho se tornar a única maneira possível de desenvolver um novo software, será possível ter certeza de que estamos fazendo o DevSecOps corretamente.
Conclusão
O DevSecOps não é uma ferramenta, uma metodologia ou um projeto. É a mudança de paradigma com relação aos processos de negócios e nas atitudes corporativas em relação à cultura DevOps e o deslocamento das verificações de segurança para o início de todo o ciclo de vida de entrega de software. Este é um processo complexo e demorado, mas as recompensas são bastante tangíveis – melhor qualidade de entrega de software, produtos mais seguros, menos problemas na produção e mitigação de vários outros riscos da engenharia de software.
Como você implementa a abordagem DevSecOps em sua empresa? Você gostaria de aprofundar seus conhecimentos sobre o assunto? A 4Linux possui uma formação completa de DevOps, com cursos focados na integração de ferramentas de segurança ao pipeline por meio de práticas DevSecOps. Entre em contato para saber mais!
Nós somos provedores de serviços de consultoria tanto em práticas DevOps quanto em práticas DevSecOps. Estamos prontos para ajudar, basta entrar em contato!
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
Descubra o novo curso da 4Linux: Infraestrutura ágil com práticas DEVOPS
Aprenda a “versionar” a sua infraestrutura de TI como se ela fosse um software. A 4Linux está anunciando hoje o lançamento do seu mais novo curso: “ Infraestrutura ágil com
Entenda o poder do SystemD e Journald no gerenciamento de sistemas Linux
E ai, Qual teu papo? O objetivo deste bate papo e abordar sobre um componente do SystemD chamado Journald que atua na coleta e gerenciamento de entradas de registros diários de
Gerenciamento eficiente de clusters Kubernetes com a ferramenta K9S
Hoje em dia temos diversos ambientes de produção, e nestes ambientes o orquestrador mais utilizado é o Kubernetes. Com a evolução da infraestrutura de serviço esse trabalho de gerenciamento tornou-se