# Ciclo de Vida do Desenvolvimento Seguro

Ciclo de Vida do Desenvolvimento Seguro, ou SDL (do inglês Security Development Lifecycle), é um processo que consiste na inserção de várias atividades e produtos relacionados a segurança na fase de desenvolvimento de software, como modelagem de ameaças, análise estática do código com uso de ferramentas, revisão de código, testes de segurança direcionados e uma revisão final de segurança, minimizando o surgimento de vulnerabilidades.
Foi proposto e utilizado inicialmente pela Microsoft em janeiro de 2004 para reduzir os custos de manutenção de software e aumentar a confiabilidade do software no que se relaciona a bugs de segurança. Baseia-se no clássico modelo em espiral. Atualmente o processo está na versão 5.2, de 23 de maio de 2012.

## Visão geral

O SDL faz uso de um conjunto de princípios de alto nível conhecido como SD3+C:
* Seguro por Projeto (Design): a arquitetura, o projeto e a implementação do software devem ser executados de forma a protegê-lo e proteger as informações que ele processa, além de resistir a ataques.
* Seguro por Padrão (Default): visto que na prática é impossível obter uma segurança perfeita os projetistas devem considerar a possibilidade de haver falhas de segurança.
* Seguro na Implantação (Deployment): o software deve conter ferramentas e orientação que ajudem os usuários finais e/ou administradores a usá-lo com segurança, assim como a implantação das atualizações deve ser fácil.
* Comunicações: os desenvolvedores de software devem estar preparados para a descoberta de vulnerabilidades do produto e devem comunicar-se de maneira aberta e responsável com os usuários finais e/ou com os administradores para ajudá-los a tomar medidas de proteção (como instalar patches ou implantar soluções alternativas).
Todos os elementos do SD3+C impõem requisitos no processo de desenvolvimento, mas os dois primeiros elementos, seguro por design e seguro por padrão, fornecem as maiores vantagens de segurança. Seguro por design determina os processos que têm por objetivo impedir a introdução de vulnerabilidades em primeiro lugar, enquanto seguro por padrão requer que a exposição padrão do software, sua superfície de ataque, seja minimizada.

## Fases

Há um total de 7 fases para a implementação do SDL:

### Formação

Essa fase é um pré-requisito para a implementação do SDL e visa a formação de um núcleo de treinamento e atualização. É realizada uma atualização sobre os princípios básicos de segurança e tendências recentes de segurança e privacidade, assim como treinamento de conceitos fundamentais para a construção de um software melhor. Entre estes conceitos estão incluídos projeto seguro, modelagem de ameaças, codificação segura, testes de segurança e melhores práticas para privacidade.
É ainda nessa fase que é definida a freqüência mínima de treinamento e o limiar mínimo aceitável para grupos de treinamento.

### Requisitos

Nessa fase definem-se portões de qualidade e analisa os riscos de segurança e privacidade. O time de desenvolvimento identifica requerimentos de segurança e privacidade,

### Projeto

Nessa fase é feita a modelagem de ameaças e a análise de superfície de ataque (ou vulnerabilidade). A modelagem de ameaças consiste no levantamento de contra-medidas de segurança que resolvem as ameaças ao software. A análise de superfície de ataque consiste em fazer um levantamento de formas de acesso do aplicativo ou componente.

### Implementação

Nessa fase são especificadas ferramentas de segurança, listas de verificação, reforçadas funções proibidas e realizada a análise estática, assim como são adotadas as melhores práticas de codificação segura para ajudar a implementar um projeto seguro.

### Verificação

Nessa fase são realizados testes dinâmicos de difusão (fuzz) e verificados os modelos de ameaças e a superfície de ataque. Os testes de difusão consistem em tomar dados válidos, metamorfoseá-los e depois observar um aplicativo que empregue esses dados, verificando se aplicação se comporta adequadamente ou apresenta algum tipo de falha de segurança. Em sua forma mais simples, pode-se criar uma biblioteca de arquivos válidos que o aplicativo utilize e depois usar uma ferramenta para corromper sistematicamente um arquivo e fazer o aplicativo executá-lo ou processá-lo no verificador de aplicativos com verificação de heap habilitada para ajudar a descobrir mais erros.

### Lançamento

Nessa fase é definido o plano de resposta, a revisão de segurança final (FSR) e a liberação de arquivo. A FSR é executada pela equipe de segurança central com ajuda da equipe de produto, mas não apenas pela equipe de produto. No final do processo FSR, as descobertas são anotadas e é tomada uma decisão sobre o lançamento do software ou o retrabalho de seções.

### Resposta

Nessa fase é realizada a execução de resposta, que consiste de duas partes principais:
* responder a defeitos de segurança e trabalhar com pessoas que descobrem problemas de segurança no código.
* aprender com os erros, através da análise e documentação da causa dos defeitos.