Aprendizado e descoberta 5min de Leitura - 23 de agosto de 2022

Security by Design conforme a OWASP

security by design OWASP

This post is also available in: Português

Existe uma comunidade virtual que cria ferramentas, documentação, artigos e tecnologias gratuitas para ajudar as pessoas a proteger seus sites, aplicativos e recursos de rede. Chama-se OWASP, sigla inglesa para Open Web Application Security Project, que traduzindo significa algo como Projeto Aberto de Segurança de Aplicativo da Web.

Essa entidade lida diretamente com o conceito de security by design, que é uma abordagem de desenvolvimento de software que foca a segurança desde as primeiras etapas de criação. Assim, ajuda a dedicar-se às melhores práticas de programação, melhorando o ambiente de segurança como um todo, já que evita a existência de diversas vulnerabilidades em softwares.

É algo vital em um contexto no qual inúmeros ataques são executados ao explorar tais falhas. As vulnerabilidades de software geralmente são descuidos de programação que deixam aplicativos, servidores ou sites menos protegidos.

Cabe então aos desenvolvedores criar softwares com alto padrão de segurança, para afastar a possibilidade de ataques do tipo. Entretanto, sabe-se que proteger um site ou recurso de rede pode ser algo difícil. Porém, a OWASP pode facilitar o processo. Afinal, essa instituição fornece uma lista abrangente de princípios de design de segurança aos quais os programadores podem aderir. Seguir esses princípios garantirá que o aplicativo seja seguro, reduzindo bastante o risco de um ataque cibernético.

Princípios da OWASP

  • 1) Definição de ativos:
  • Antes de desenvolver qualquer estratégia de segurança, é essencial identificar e classificar os dados que o aplicativo irá manipular.

    A OWASP sugere que os programadores criem controles de segurança apropriados para o tipo de dados que estão sendo gerenciados. Por exemplo, um software que processa informações financeiras deve ter restrições muito mais rígidas do que um blog ou fórum da web, cujo objetivo é bastante distinto.

  • 2) Entendendo quem são os invasores:
  • Os programadores devem projetar controles que impeçam o uso indevido do aplicativo por diferentes tipos de agentes mal-intencionados, o que inclui funcionários e programadores descontentes ou com desavenças com a equipe – há quem os considere como o tipo mais perigoso de ameaça no contexto do security by design.

    A lista segue com ataques drive-by, que liberam vírus ou ataques de Trojan no sistema, bem como organizações criminosas virtuais e até mesmo Script Kiddies – termo usado para definir adolescentes que tentam praticar atividades semelhantes a crackers, que volta e meia conseguem algum sucesso.

  • 3) Principais pilares:

a OWASP recomenda que todos os controles de segurança sejam projetados com os pilares centrais da segurança da informação em mente:

  • Confidencialidade:
  • liberar apenas o acesso aos dados para os quais o usuário tem permissão

  • Integridade:
  • garantir que os dados não sejam alterados por usuários não autorizados

  • Disponibilidade:

certificar-se que os sistemas e dados estejam disponíveis para usuários autorizados quando eles precisarem.

Arquitetura de segurança

A OWASP recomenda que cada software tenha medidas de segurança de aplicativos projetadas para cobrir todos os tipos de riscos. Isso vai desde riscos de uso típicos (deletar algo sem querer) até ataques extremos (ataques de força bruta, de injeção, etc).
Por isso, recomenda-se que os desenvolvedores considerem cada recurso do aplicativo que estão projetando e façam perguntas sobre o processo em torno de cada recurso ser o mais seguro possível ou não. Cada um pode fazer um exercício de imaginação e pensar: se eu fosse um cibercriminoso, como eu exploraria esse recurso? O que seria útil para reduzir o risco desse recurso?

A OWASP sugere também que os desenvolvedores sigam a técnica de modelagem de risco de ameaça STRIDE / DREAD usada por muitas empresas. O STRIDE ajuda os programadores a identificar ameaças, enquanto o DREAD permite que os programadores as classifiquem.

Princípios de segurança

1. Minimize a área de superfície de ataque

Toda vez que um programador adiciona um recurso ao seu aplicativo, ele aumenta o risco de haver uma vulnerabilidade de segurança. O princípio de minimizar a área de superfície de ataque restringe as funções que os usuários podem acessar, para reduzir potenciais fraquezas.

É possível, por exemplo, codificar um recurso de pesquisa em um aplicativo. Tal recurso é potencialmente vulnerável a ataques de inclusão de arquivos e ataques de injeção de SQL.

O desenvolvedor pode então limitar o acesso à função de pesquisa, para que apenas usuários registrados possam usá-la, diminuindo a superfície de ataque e o risco de uma invasão dar certo.

2. Estabeleça padrões seguros

Este princípio afirma que o aplicativo deve ser seguro por padrão. Isso significa que cada novo usuário deve tomar medidas para obter privilégios mais altos e remover medidas de segurança adicionais.

Estabelecer padrões seguros significa que deve haver regras de segurança rígidas sobre como os registros de usuários são tratados, com qual frequência as senhas devem ser trocadas, quão complexas elas devem ser e assim por diante.

Os usuários do software podem desativar alguns desses recursos, mas eles devem ser configurados para um nível de segurança alto por padrão.

3. O princípio do privilégio mínimo

O Princípio do Mínimo Privilégio (POLP) afirma que um usuário deve ter o conjunto mínimo de privilégios necessários para executar uma tarefa específica.

O POLP pode ser aplicado a todos os aspectos de uma aplicação web, incluindo direitos de usuário e acesso a recursos. Por exemplo, um usuário inscrito em um aplicativo de blog como autor não deve ter privilégios de administrador que permitam adicionar ou remover usuários. Os autores só devem ser autorizados a postar artigos, limitando-se a tal função.

4. O princípio da Defesa em profundidade

Aqui, a ideia é que vários controles de segurança que abordam os riscos de maneiras diferentes são a melhor opção para proteger um aplicativo.

Assim, ao invés de ter um controle de segurança para acesso do usuário, existiriam várias camadas de validação, ferramentas adicionais de auditoria de segurança e ferramentas de registro.

Então, em vez de permitir que alguém faça login com apenas um nome de usuário e senha, seria usada uma verificação de IP, um sistema Captcha, registro de tentativas de login, detecção de força bruta e assim por diante.

5. Falhar com segurança

Há muitas razões pelas quais um aplicativo da Web não consegue processar uma transação. Talvez uma conexão de banco de dados tenha falhado, ou os dados inseridos de um usuário podem estar incorretos.

Esse princípio afirma que os aplicativos devem falhar de maneira segura. A falha não deve conceder privilégios adicionais ao usuário e não deve mostrar informações confidenciais do usuário, como consultas ou logs de banco de dados.

6. Desconfie de terceiros

Muitos aplicativos da web usam serviços de terceiros para acessar funcionalidades adicionais ou obter dados extras. Esse princípio afirma que nunca se deve confiar cegamente nesses serviços.

Isso significa que o aplicativo deve sempre verificar a validade dos dados que os serviços de terceiros enviam, sem conceder a esses serviços permissões de alto nível.

7. Separação de funções

É algo que pode ser usado para evitar que indivíduos ajam de forma fraudulenta. Por exemplo, um usuário de um site de comércio eletrônico não deve ser promovido a administrador, pois poderá alterar pedidos e dar descontos não previstos.

O inverso também acontece, pois um administrador não deve ter a capacidade de realizar funções que os clientes fazem, como encomendar itens do front-end do site.

8. Evite a segurança por obscuridade

Este princípio da OWASP afirma que a segurança por obscuridade nunca deve ser ativada. Se o aplicativo requer que a URL de administração seja oculta para que possa permanecer seguro, então ele não é seguro.

Deve haver controles de segurança suficientes para manter o aplicativo seguro sem ocultar a funcionalidade principal ou o código-fonte.

9. Segurança simples e eficaz

Os desenvolvedores devem evitar o uso de arquiteturas exageradamente sofisticadas ao desenvolver controles de segurança para seus aplicativos. Ter mecanismos muito complexos pode aumentar o risco de erros.

10. Corrija os problemas de segurança corretamente

Se um problema de segurança foi identificado em um aplicativo, os desenvolvedores devem determinar a sua causa raiz.

Eles precisam então consertá-lo e testar os reparos completamente. Se o sistema usar padrões de design, é provável que o erro esteja presente em vários sistemas. Os programadores devem ter o cuidado de identificar todos que foram afetados.

This post is also available in: Português