# Construção segura

## Introdução

A prática de construção segura enfatiza a importância de construir software de forma padronizada, automatizada e utilizando componentes seguros. Isso é alcançado por meio da automação completa do processo de construção, incluindo verificações de segurança automatizadas, como Análise Estática de Código (SAST) e Teste Dinâmico de Aplicações (DAST). Além disso, a prática visa identificar e monitorar as dependências de software, garantindo que sua segurança seja avaliada e que não comprometam a segurança geral da aplicação.

## Modelo

<table data-full-width="true"><thead><tr><th data-type="number">Nível de maturidade</th><th>Descrição</th><th>Fluxo de criar e promover</th><th>Fluxo de medir e melhorar</th></tr></thead><tbody><tr><td>1</td><td>O processo de construção é repetível e consistente.</td><td>Crie uma definição formal do processo de construção para torná-lo consistente e repetível.</td><td>Crie registros com a Lista de Materiais (Bill of Materials) de suas aplicações e realize análises oportunas desses registros.</td></tr><tr><td>2</td><td>O processo de construção é otimizado e totalmente integrado ao fluxo de trabalho.</td><td>Automatize sua esteira de construção e proteja as ferramentas utilizadas. Adicione verificações de segurança na esteira de construção.</td><td>Crie registros com a Lista de Materiais (Bill of Materials) de suas aplicações e realize análises oportunas desses registros.</td></tr><tr><td>3</td><td>O processo de construção ajuda a evitar que defeitos conhecidos entrem no ambiente de produção.</td><td>Defina verificações de segurança obrigatórias no processo de construção e garanta que a construção de artefatos não conformes falhe.</td><td>Analise as dependências utilizadas em busca de problemas de segurança de forma comparável ao seu próprio código.</td></tr></tbody></table>

## Como implementar?

1. **Definir um processo de construção consistente:**
   * Documente e defina um processo formal de construção que seja consistente e repetível para todas as aplicações.
   * Especifique os passos necessários para compilar, testar e empacotar o software, garantindo a qualidade e segurança durante todo o processo.
2. **Automação da esteira de construção:**
   * Automatize a esteira de construção utilizando ferramentas e tecnologias adequadas.
   * Configure um sistema de integração contínua (CI) para compilar e testar automaticamente o código em cada alteração.
   * Automatize a execução de verificações de segurança, como Análise Estática de Código (SAST) e Teste Dinâmico de Aplicações (DAST), na esteira de construção.
3. **Integração de segurança na esteira de construção:**
   * Adicione verificações de segurança na esteira de construção para identificar e prevenir vulnerabilidades.
   * Implemente ferramentas de verificação de segurança automatizadas, como scanners de vulnerabilidade e análise de código, para identificar possíveis falhas de segurança no código-fonte e nas dependências.
4. **Verificações de conformidade obrigatórias:**
   * Defina verificações de segurança obrigatórias no processo de construção e garanta que a construção de artefatos não conformes seja impedida.
   * Estabeleça critérios de segurança que os artefatos de construção devem atender, como políticas de segurança, práticas recomendadas e padrões específicos da organização.
5. **Registros com a Lista de Materiais (Bill of Materials):**
   * Crie registros com a Lista de Materiais (Bill of Materials - BoM) para cada aplicação, que detalhem todas as dependências e bibliotecas utilizadas.
   * Realize análises oportunas desses registros para identificar possíveis vulnerabilidades ou problemas de segurança nas dependências utilizadas.
6. **Avaliação e atualização das dependências:**
   * Avalie regularmente as dependências utilizadas nas aplicações em busca de problemas de segurança conhecidos.
   * Mantenha-se atualizado sobre as atualizações de segurança e corrija prontamente as vulnerabilidades identificadas, atualizando as dependências para versões mais seguras.
7. **Análise de dependências de forma comparável ao código-fonte:**
   * Realize análises de segurança nas dependências de software de forma comparável à análise do código-fonte da aplicação.
   * Utilize ferramentas de análise de segurança de terceiros para verificar as dependências em busca de vulnerabilidades conhecidas e outras questões de segurança.
8. **Monitoramento contínuo e melhoria:**
   * Estabeleça um processo de monitoramento contínuo da esteira de construção, incluindo verificações de segurança, para garantir a detecção precoce de possíveis falhas ou problemas de segurança.
   * Realize revisões regulares do processo de construção, incorporando feedback e melhorias com base nas lições aprendidas e nas melhores práticas de segurança.
