Este documento se destina a ressaltar algumas boas práticas de serem adotadas durante o processo de desenvolvimento de software no Datasus.
As diretrizes aqui contidas não são exaustivas. É de responsabilidade da equipe de desenvolvimento explorar práticas de codificação que tornem a aplicação mais segura e menos suscetível a ataques maliciosos.
Os processos de desenvolvimento de software normalmente contêm (ao menos) as seguintes etapas:
Essas etapas são realizadas em iterações e perfazem o Ciclo de Desenvolvimento de Software (Software Development Lifecycle).
Esse ciclo pode ser incrementado ao se conceber aspectos de desenvolvimento seguro desde as primeiras etapas, onde passa a ser chamado de Ciclo de Desenvolvimento de Software Seguro (Secure Software Development Lifecycle). Neste, as etapas do ciclo são incrementadas com as seguintes atividades:
A figura a seguir ilustra a relação entre o Ciclo de Desenvolvimento de Software e as atividades a serem desempenhadas em sua versão Segura.
Além de um processo de desenvolvimento que priorize segurança, outro aspecto extremamente importante na mitigação de riscos e brechas de uma aplicação diz respeito a boas práticas de implementação e teste de software. A lista a seguir sumariza alguns práticas que devem ser seguidas pelos desenvolvedores durante as etapas de codificação e testes.
Muitas vulnerabilidades em software estão atreladas a injeção de código malicioso na aplicação através de inputs do usuário. Essas validações vão desde o tamanho dos campos aceitos à formatação e codificação dos dados trafegados por determinada API do sistema. Em outras palavras, o input do usuário nunca deve ser tratado como confiável e/ou inofensivo.
Existem frameworks e libs que auxiliam nesse tipo de validação para um grande número de linguagem de programação. Mesmo nesses casos é importantes que existem testes automatizados simulando cenários de inputs invalidos e potencialmente maliciosos mitigar vulnerabilidades na aplicação.
Os fluxos de erro dentro de uma aplicação tem tanta (ou maior) importância que os fluxos de sucesso, mas normalmente são menosprezados na etapa de implementação. Algumas vulnerabilidades se beneficiam de exceções que não são devidamente tratadas ou encapsuladas. Além disso, exceções não tratadas e exteriorizadas pelo sistema normalmente contêm informações acerca da stack tecnológica e/ou detalhes de implementação que são irrelevantes para o usuário mas que podem ser utilizadas para exploração de vulnerabilidades do sistema.
Em linhas gerais, ao desenvolver uma determinada funcionalidade/operação no sistema, três possiveis resultados devem ser endereçados:
Todos esses fluxos devem ser devidamente testados e devem retornar ao usuário somente a informação necessária para que ele entenda que a requisição foi aceita ou que o precisa ser feito para que esta seja aceita numa eventual próxima tentativa.
Algumas das vulnerabilidades mais frequentes encontradas em aplicações diz respeito ao uso de informação sensível (disponível publicamente ou não) para conseguir acesso privilegiado a recursos do sistema. É comum encontrar credencias de acesso (entre outros) em arquivos de configuração e versionadas em repositórios, ou acessíveis em aplicações executadas do lado do cliente (SPAs executadas pelo navegador, por exemplo).
Nenhuma informação sensível deve ser versionada em repositório. Além disso, deve-se utilizar ferramentas para "embaralhamento" de código a ser executado do lado do cliente.
O Guia de Desenvolvimento Seguro é uma ferramenta essencial para garantir que o software desenvolvido seja seguro, confiável e resistente a ataques cibernéticos. Ele deve ser atualizado regularmente para incorporar as mais recentes ameaças e tecnologias de segurança.
As APIs (Application Programming Interface, em inglês, ou Interface de Programação de Aplicação, em português) são um conjunto de rotinas e padrões estabelecidos por um software ou sistema para utilizar as suas funcionalidades por aplicativos que não pretendem se envolver com os detalhes da implementação do software fonte, mas apenas utilizar os seus serviços.
É notável a importância do papel das APIs na materialização das estratégias de negócio e na transformação digital. Atualmente, muitas aplicações recorrem às APIs para garantir a integração com múltiplos sistemas, o que melhora a governança de suas atividades de interoperabilidade, estabelece relações interorganizacionais, fomenta agilidade aos processos de suporte a serviços digitais de ponta a ponta, e fornece os meios para garantir visibilidade, que é um princípio subjacente da transparência, mediante a obtenção de interfaces externas para os serviços públicos.
Ainda sobre a importância do uso de APIs, pode ser citada a Política de Dados Abertos (Decreto nº 8.777, de 11 de maio de 2016), que se assenta em dois pilares fundamentais do mercado interno: transparência e livre concorrência. Tal quadro enfatiza a importância da reutilização de dados no setor público, no que concerne à iniciativa “once only”.
O princípio “uma única vez” que permite que cidadãos e empresas sejam capazes de fornecer informações apenas uma vez e tenham esses dados compartilhados e reutilizados por outros órgãos e entidades públicas.
Saber como estruturar uma boa política de gestão de APIs reutilizáveis e específicas é essencial para evitar complexidade excessiva e para permitir a ligação mais fácil e rápida entre dados, aplicações e sistemas.
Quando bem desenhadas e utilizadas, as APIs são um excelente mecanismo para aumentar a produtividade das equipes e possibilitar a fruição de ferramentas mais avançadas. Contudo, é preciso observar alguns pontos relacionados à privacidade e segurança da informação de APIs antes de incorporar o uso de tais serviços.
A proteção e a confiabilidade de informações sensíveis que trafegam por meio das APIs devem ser aspectos prioritários.
O documento sobre requisitos de segurança no desenvolvimento de APIs segue uma estrutura bem definida, composta por cinco seções principais. A primeira seção aborda as premissas fundamentais que devem ser observadas em todas as fases de desenvolvimento, estabelecendo diretrizes gerais para garantir a segurança das APIs. Essas premissas são essenciais para criar uma base sólida de proteção de dados e mitigação de riscos ao longo do processo de desenvolvimento.
A segunda seção abrange o ciclo de desenvolvimento seguro, detalhando as etapas e boas práticas recomendadas para garantir a segurança em cada fase do desenvolvimento de uma API. Essa seção destaca a importância da incorporação de medidas de segurança desde o início do processo, garantindo que os requisitos de segurança sejam considerados em todas as etapas, desde a concepção até o lançamento e a manutenção contínua.
A terceira seção concentra-se nos requisitos de privacidade de dados em APIs, conforme definidos pelo Guia de Requisitos Mínimos de Privacidade e Segurança da Informação para APIs do PPSI. Esses requisitos estabelecem diretrizes específicas para garantir a proteção adequada dos dados pessoais e a conformidade com regulamentos de privacidade aplicáveis. É crucial que as APIs sejam projetadas e utilizadas de acordo com esses requisitos para evitar violações de privacidade e garantir a confiança dos usuários.
Por fim, a quarta e quinta seções aborda a documentação das APIs e os requisitos de segurança relacionados ao desenvolvimento. Isso inclui a necessidade de documentar adequadamente as funcionalidades, as diretrizes de segurança, as políticas de acesso e autenticação, bem como os procedimentos para tratamento de exceções e monitoramento de segurança. Essa seção destaca a importância de manter uma documentação atualizada e acessível, facilitando a compreensão e o uso seguro das APIs por parte dos desenvolvedores e usuários finais.
Essa estrutura é de extrema importância, pois fornece um guia abrangente para o desenvolvimento seguro de APIs. Ao seguir essa estrutura, as equipes de desenvolvimento podem garantir a adoção de práticas de segurança consistentes em todas as fases do processo, protegendo os dados sensíveis e minimizando riscos de violações de segurança. Além disso, a inclusão dos requisitos de privacidade de dados e a documentação adequada das APIs garantem que as APIs sejam projetadas e utilizadas em conformidade com as regulamentações de privacidade aplicáveis e permitam aos usuários entender e utilizar as APIs de forma segura. No geral, essa estrutura contribui para a construção de um ambiente de desenvolvimento confiável e seguro, que fortalece a proteção dos dados e a confiança dos usuários.
Sob a perspectiva de conformidade com Normas e Regulamentações, a Ministério da Saúde\DATASUS\CGIE\COSEGI adota fortemente que segurança da informação é uma prioridade. Sendo assim, o órgão reconhece a importância da segurança da informação e está comprometido em proteger os ativos e dados sensíveis, assim como cumprir as disposições da LGPD.
A implementação de um Ciclo de vida de Desenvolvimento Seguro de Software (SSDLC) é essencial para garantir a segurança dos sistemas de informação no âmbito do Governo Federal. Sendo que o Ministério da Saúde\DATASUS\CGIE\COSEGI reconhece que quaisquer implementações de Softwares, como APIs, são vulneráveis a ameaças e ataques cibernéticos e entende que um SSDLC rigorosamente estruturado e em conformidade com a LGPD, é necessário para mitigar todos os ricos provenientes e impactantes que são direcionados diariamente a informações de saúde.
Assim, o Ministério da Saúde\DATASUS\CGIE\COSEGI, deseja estabelecer um processo padronizado e consistente para o desenvolvimento seguro de seus Softwares e reconhece a importância da consistência e padronização para garantir a eficácia e a eficiência na implementação de práticas de segurança em todas as fases de projetos de software dentro da esfera Federal do Governo.
Também será proposta toda a documentação referente ao SSDLC para fornecer orientações claras e acionáveis aos desenvolvedores e equipes de projetos, garantindo controles e práticas de segurança que visam assegurar a privacidade e a proteção adequada de todos os dados pessoais. Assim, o Ministério da Saúde\DATASUS\CGIE\COSEGI reconhece também que a documentação clara, acionável, íntegra e processável é essencial para facilitar a implementação correta do SSDLC pelas equipes de desenvolvimento e que o alinhamento com as melhores práticas e normas reconhecidas, como o OWASP e a ISO/IEC 27034, é garantia de conformidade e consistência com padrões que estão sendo semeados no âmbito da administração pública federal.
Sobre a revisão dessas documentações, o Ministério da Saúde\DATASUS\CGIE\COSEGI irá revisar e atualizar regularmente, para refletir as mudanças nas ameaças de segurança e nas tecnologias em desenvolvimento. Pois, com este olhar disruptivo e antecipado, o Ministério da Saúde\DATASUS\CGIE\COSEGI reconhece a importância da adaptação contínua para lidar com as estas ameaças que estão em constante evolução.
Com a meta de melhor gerir as etapas e processos do desenvolvimento seguro, apresentamos este modelo de referência para o desenvolvimento seguro de APIs, onde as etapas devem ser planejadas, aplicadas, geridas, auditadas e monitoradas com a participação das equipes de desenvolvimento, infraestrutura e segurança (DevSecOps). Fomentar e garantir o processo de engajamento e integração das equipes promove a elevação da qualidade e agilidade do desenvolvimento do projeto, garantindo que a API seja planejada, desenvolvida e distribuída, como um produto seguro e resiliente contra ameaças que venham a surgir e ataques que sejam executados.
As etapas do desenvolvimento de uma API, já contemplando a interação das equipes de desenvolvimento, segurança e operações, são:
Figura 1 - Etapas do Desenvolvimento de APIs
As etapas do desenvolvimento de uma API, já contemplando a interação das equipes de desenvolvimento, segurança e operações, são:
Levantamento de Requisitos – o arranque do processo deve ser com o planejamento e a definição dos requisitos de segurança. As equipes devem buscar a compreender os requisitos de segurança para API, o que inclui a autenticação, autorização, criptografia e a validação de acesso.
Security by Design – desde a etapa de design da API a segurança já deve figurar com elevada importância. Desenvolvedores devem interagir com as equipes de segurança, o motivo é a avaliação de possíveis riscos de segurança e com essa contemplação avaliar como inserir no projeto as ferramentas apropriadas para prevenir e mitigar os riscos.
Execução Segura – todos os envolvidos no desenvolvimento devem aplicar as melhores práticas já na codificação da API. Para tal devem ser contemplados itens como a criptografia de alto nível, controle de acesso, validação de dados de entrada, autenticação e níveis de autorização.
Testes de Segurança do Projeto – testar a segurança da API deve ser um processo realizado durante toda esteira de desenvolvimento do projeto. Dentre estes testes devem ser realizados os seguintes: testes de penetração, testes manuais e automatizados de segurança.
Gerenciamento de Vulnerabilidades - Os envolvidos no projeto devem trabalhar com a visão de processo de gerenciamento de vulnerabilidades, o objetivo é garantir que as vulnerabilidades sejam identificadas e corrigidas simultaneamente ao desenvolvimento. Recomenda-se o monitoramento contínuo da API desenvolvida paralelamente com os eventos de correções ajustado as necessidades do projeto.
Modelo de Monitoramento de Segurança – as equipes devem montar um modelo estrutural de monitoramento da API, o que levará a detecção de possíveis ameaças ao ambiente e com isso oferecer respostas rápidas aos possíveis incidentes de segurança.
Muitos dos requisitos aqui listados são recomendações, não requisitos absolutos. Isso ocorre porque, em muitos casos, tornar um requisito absoluto é apropriado apenas para um subconjunto de APIs, mas não para todas. Conforme apropriado, algumas APIs podem impor requisitos normativos mais específicos que os requisitos neste documento e devem ser listados na documentação da API, com todos os critérios de documentação estabelecidos neste guia.