1. Minimizar a superfície de ataque
O princípio de minimização de superfície de área de ataque é usado para restringir as funções que os usuários têm permissão para acessar, contribuindo com a redução de vulnerabilidades. Com a integração de ferramentas de proteção já existentes, é possível desenvolver um ecossistema de monitoramento e correções em tempo real. Algumas medidas usadas para reduzir a superfície de ataque em servidores e sistemas são:
- Implementação e configuração de uma solução de firewall.
- Desenvolvimento seguro.
- Monitoramento de entrada e saída dos servidores.
- Desenvolvimento de recursos de backup para servidores e estações de trabalho.
2. Estabelecimento de padrões
Padrões de desenvolvimento ajudam a entender as implicações de segurança das práticas de desenvolvimento e implantação de código. As orientações a seguir são um começo para que as equipes de desenvolvimento construam softwares resilientes e seguros:
- Verificação do acesso ao banco de dados.
- Filtragem de campos de entrada do sistema.
- Não confiar em validações implementadas no lado do cliente.
- Fazer a codificação de resposta.
- Evite que navegadores memorizem as informações importantes em formulários.
- Verificação de tráfego de informações sigilosas.
- Tratamento de erros.
- Definição de senhas fortes.
- Autenticação dos web services.
3. Princípio do menor privilégio
O princípio do menor privilégio sugere fornecer as permissões necessárias para que um usuário realize suas tarefas, com um tempo determinado e os direitos mínimos estabelecidos. O princípio do menor privilégio é uma estratégia que pode ser incorporado ao Security by Design promovendo a segurança das informações e privacidade. A atribuição de permissões a um usuário pode impedir que ele execute tarefas para as quais não está autorizado, como acessar, obter ou modificar informações. Algumas medidas usadas para definir o princípio do menor privilégio em servidores e sistemas são:
- Considerar todos os usuários do sistema como convidados.
- Especificar o que é proibido e assim, o restante pode ser permitido.
- Qualquer usuário ou objeto tem as permissões básicas para executar as suas tarefas e nenhuma outra a mais.
- Definir pontos de estrangulamento no sistema onde tudo será proibido para determinados usuários.
4. Princípio da defesa em profundidade
A defesa em profundidade é um conjunto de práticas que se concentram na proteção, detecção e reação de invasões. Para isso, são usados softwares de segurança e ferramentas para a construção de uma estratégia contra ataques. O uso de ferramentas de segurança como firewalls, antivírus, filtragem de conteúdo, criptografia e controle de acesso colaboram para prevenção de ataques.
5. Falhar com segurança
A manipulação segura de erros é um aspecto importante para uma software seguro e para o Security by Design. Existem dois tipos de erros que merecem destaque:
- O primeiro são as exceções que ocorrem no processamento de um controle de segurança.
- O outro tipo de exceção relevante à segurança está no código que não faz parte de um controle de segurança.
É importante que essas exceções não permitam comportamentos que o sistema normalmente não permitiria. Um software desenvolvido com segurança deve considerar a existência de três resultados possíveis de um mecanismos de segurança: proibir a operação, permitir a operação ou lançar uma exceção.
6. Não confie nos serviços
Um modelo de confiança zero (conhecido também como Zero Trust) é composto pela recomendação de que as empresas não devem confiar em ninguém ou em nenhum dispositivo ou sistema por padrão e devem verificar todas as conexões antes de permitir o acesso à sua rede. A criação desse modelo foi uma resposta às antigas abordagens de segurança, baseadas na suposição de que a ameaça interna era inexistente e que a segurança da informação deve focar apenas na defesa contra ameaças externas. As ameaças internas são representadas por colaboradores, ex-colaboradores, parceiros de negócio, prestadores de serviços ou qualquer pessoa que tem acesso a informações privilegiadas. As empresas podem levar anos para descobrir a presença dessas ameaças em sua estrutura. Um modelo de confiança zero é composto por:
- Conhecimento da arquitetura e infra-estrutura da empresa.
- Criação de uma identidade de usuário forte e única.
- Desenvolvimento de processos de autenticação.
- Monitoramento de serviços e dispositivos.
- Definição de políticas de acordo com o valor dos serviços e dados.
- Controle de acesso aos serviços e dados.
- Não confie na rede, incluindo a rede local.
7. Segregação de funções
A segregação de funções e responsabilidades é o controle de acesso baseado no papel, na atividade ou na função de um usuário dentro de um sistema. A utilização de um perfil por função (ou RBAC – Role Based Access Control) providencia um modelo para administrar privilégios de acessos aos sistemas e infraestrutura de uma empresa. O perfil por função consegue agrupar os acessos, possibilitando uma visão geral dos privilégios e controlando os acessos de uma forma segura para o Security by Design. A implementação de um processo de separação de deveres pode ser composta por:
- Definição de regras de segregação de funções aplicáveis ao ambiente.
- Criação de matriz de riscos.
- Análise de riscos para identificação de violações da segregação de funções.
- Análise de atividades conflitantes executadas por usuários alternativos.
- Resolução de conflitos que apresentem alto risco.
8. Evitar a segurança por obscuridade
A segurança por obscuridade é quando os desenvolvedores codificam os sistemas de forma secreta acreditando que ninguém será capaz de encontrar as vulnerabilidades do software. O problema com essa técnica é a dependência em relação ao sigilo da implementação do projeto como forma principal de prover segurança para o sistema. Geralmente, as pessoas que fazem uso dessa técnica assumem que o não conhecimento das vulnerabilidades de um software é um indicativo de segurança. Para evitar a segurança por obscuridade é preciso investir em práticas comprovadas para a segurança de sistemas:
- Utilização de senhas fortes.
- Treinamento e conscientização de equipes.
- Princípio do mínimo privilégio possível.
- Utilização de softwares de proteção e backup.
9. Mantenha a segurança simples
No início de uma implementação de Security by Design é comum fazer uso de ferramentas, processos e controles em favor da segurança de sistemas, mas é necessário refletir sobre a relevância de todos esses controles, eles acrescentam mais segurança ou burocracia aos sistemas? A existência de muitas ferramentas pode aumentar as brechas de segurança em vez de extingui-las, assim como procedimentos pouco documentados ou falta de automações que podem deixar usuários esperando demais por um acesso. Buscar uma segurança simples e eficaz envolve:
- Entender que a segurança de sistemas não envolve apenas tecnologias. Existem políticas, processos e pessoas. Busque por uma postura proativa e não apenas visando o cumprimento de checklists.
- Investir em treinamentos e capacitação das equipes de desenvolvimento em boas práticas e comunicar a todas as partes interessadas sobre mudanças no sistema.
- Entender os conceitos fundamentais de segurança da informação e buscar por ferramentas e controles adequados a estrutura do sistema.
10. Segurança no processo de manutenção do software
As vulnerabilidades em sistemas precisam ser estudadas pelo time de desenvolvimento para uma correção eficiente mesmo. É preciso entender o comportamento da vulnerabilidade de forma estrutural no sistema e verificar se existem outros componentes que podem ser afetados pela mesma vulnerabilidade.
A falta de um processo ou controle para realizar as correções de problemas pode causar o surgimento de novos problemas e brechas de seguranças nos sistemas. Um processo contínuo de gestão de vulnerabilidades é visto como um aliado para as equipes de desenvolvimento, atuando na identificação, análise, classificação e tratamento das vulnerabilidades. Esse processo busca medir o progresso e avaliar os riscos aos quais os sistemas estão submetidos, colaborando com uma estratégia de Security by Design. As principais etapas de um processo de gestão de vulnerabilidades consistem em:
- Mapeamento dos riscos.
- Análise e priorização dos riscos.
- Definição de responsáveis.
- Tratamento das vulnerabilidades.
- Treinamento dos times de desenvolvimento.
- Produção de relatórios de acompanhamento.
One Reply on “10 princípios do Security by Design”