Skip to main content

Desenvolvimento de software seguro: como implementar os 10 controles proativos da OWASP

Escrito por

5 de novembro de 2020

0 minutos de leitura

Recentemente, relembrei uma ótima sessão de abertura da comunidade DevSecCon que tivemos no ano passado, com ninguém menos que Jim Manico.

Nessa sessão, Jim apresentou a lista dos 10 controles proativos da OWASP e explicou como incorporá-los às aplicações web. O documento sobre controles proativos, escrito pelo próprio Manico, junto com Katy Anton e Jim Bird, oferece uma visão geral de segurança para desenvolvedores que querem começar a trabalhar com segurança web, entender as diferentes camadas de riscos e saber como se proteger contra eles.

Se você achou o tema interessante, continue lendo para conhecer, um por um, os 10 controles proativos da OWASP!

10 controles proativos da OWASP 2020

  1. Definir requisitos de segurança

  2. Usar frameworks e bibliotecas de segurança

  3. Proteger o acesso ao banco de dados

  4. Codificar e escapar dados

  5. Validar todas as entradas

  6. Implementar identidade digital

  7. Aplicar controles de acesso

  8. Proteger os dados em todos os lugares

  9. Implementar registro e monitoramento de segurança

  10. Tratar todos os erros e exceções

Controle proativo 1 da OWASP — definir requisitos de segurança

A criação de um produto seguro começa pela definição dos requisitos de segurança que precisamos considerar. Assim como os requisitos de negócio ajudam a dar forma ao produto, os requisitos de segurança garantem que a segurança seja considerada desde o início.

Um importante projeto da OWASP, chamado Application Security Verification Standard — geralmente conhecido pela sigla OWASP ASVS — reúne mais de duzentos requisitos para criar softwares seguros para aplicações web.

O documento lista requisitos de segurança como protocolos de autenticação, gerenciamento de sessões e padrões de segurança criptográfica. Mais importante ainda, o ASVS oferece uma abordagem em etapas para implementar os requisitos de segurança gradualmente, desde os primeiros passos.

Matriz ASVS codificada por cores que mostra a aplicabilidade, a implementação, a implantação e as atividades de garantia nos níveis 1, 2 e 3.

Fonte: GitHub

Controle proativo 2 da OWASP — usar frameworks e bibliotecas de segurança

Quais ferramentas podem ajudar você a desenvolver software seguro?

A lista vai desde a proteção contra ataques de injeção até autenticação, APIs criptográficas seguras e armazenamento de dados confidenciais, entre outros. Para lidar com essas questões, use bibliotecas de segurança criadas especificamente para esse fim.

Monitore o uso de bibliotecas de código aberto e mantenha um inventário de versões, licenças e vulnerabilidades, como as 10 principais vulnerabilidades da OWASP, usando ferramentas como OWASP’s Dependency Check ou Snyk.

Controle proativo 3 da OWASP — proteger o acesso ao banco de dados

Os bancos de dados costumam ser componentes essenciais para criar aplicações web completas, já que elas precisam manter estado e persistir dados.

A segurança de bancos de dados abrange diversas áreas, incluindo

  • a proteção contra injeções de SQL por meio de técnicas como a vinculação de parâmetros. Também é muito importante monitorar vulnerabilidades em bibliotecas de ORM e SQL que você usa, como vimos no caso recente da vulnerabilidade a ataques de injeção de SQL na biblioteca npm Sequelize ORM.

  • autenticação segura e robusta do banco de dados, além de uma configuração adequada.

  • comunicação segura entre o banco de dados e o cliente.

Quer saber mais sobre ataques de injeção de SQL e por que eles representam um risco à segurança? Jim compartilhou algumas dicas em bobby-tables.com.

Controle proativo 4 da OWASP — codificar e escapar dados

Sempre trate os dados como não confiáveis, pois eles podem vir de diferentes fontes que nem sempre conhecemos bem.

As vulnerabilidades de cross-site scripting (XSS) são um ótimo exemplo de como os dados podem percorrer o sistema e acabar executando código malicioso no contexto de um navegador, como JavaScript, comprometendo-o.

Outro exemplo que exige o escape de dados é a injeção de comandos no sistema operacional (SO), em que um componente pode executar comandos do sistema recebidos pela entrada do usuário, com o risco de executar comandos maliciosos.

Estou buscando dados no banco de dados. Devo escapar esses dados? Um desenvolvedor seguro certamente faria isso. É inviável rastrear e marcar se uma string armazenada no banco de dados foi comprometida ou não. Em vez disso, implemente controles adequados na camada de apresentação, como o navegador, para escapar todos os dados recebidos.

Uma exceção extrema a essa regra ocorre quando você decide criar um ou mais elementos DOM de uma página web a partir de dados do banco de dados. Nesse caso, você está entrando em terreno perigoso e deve pensar cuidadosamente no seu modelo e nos controles que podem ajudar a reduzir os riscos envolvidos.

Confira algumas bibliotecas que podem ajudar na sanitização de dados:

Vale lembrar que o projeto OWASP ESAPI está sem manutenção ativa há algum tempo, então é melhor buscar outras soluções.

Por fim, escrevemos sobre injeção de comandos: como funciona, quais são os riscos e como evitá-la. Recomendo muito essa leitura como próximo passo.

Controle proativo 5 da OWASP — validar todas as entradas

Assim como você costuma usar um sistema de tipos, como o TypeScript, para garantir que as variáveis esperadas e válidas sejam passadas pelo código, também deve validar se as entradas recebidas correspondem às expectativas ou aos modelos de dados.

Orientações gerais:

  • Não confie na validação como medida de proteção para escapar dados: esses controles de segurança não são intercambiáveis.

  • Ao validar entradas de dados, procure definir limites de tamanho para todos os tipos de entrada.

Controle proativo 6 da OWASP — implementar identidade digital

Como identificar a identidade de um usuário? A resposta está em controles de segurança como autenticação, comprovação de identidade, gerenciamento de sessões e outros.

Para tomar essas decisões, você pode criar sua própria solução: gerenciar o cadastro de usuários e armazenar senhas ou outros meios de autenticação. Como alternativa, pode optar por serviços gerenciados e aproveitar a arquitetura serverless da nuvem em serviços como o Auth0.

Esse é um tema amplo. Quando precisar verificar se uma camada de identidade digital está sendo tratada com segurança, consulte as diretrizes de identidade digital do NIST 800-63-3B. O documento do NIST ajuda a definir como lidar com a segurança de senhas.

Controle proativo 7 da OWASP — aplicar controles de acesso

É muito provável que os requisitos de controle de acesso se apliquem a várias camadas da sua aplicação. Por exemplo, ao buscar dados no banco de dados de uma aplicação SaaS multi-inquilino, é preciso garantir que os dados de diferentes usuários não sejam expostos por acidente. Outro exemplo é determinar quem tem autorização para acessar as APIs oferecidas pela aplicação web.

Uma dica de Jim é evitar usar, no código, dados relacionados a funções para controlar o acesso, pois isso leva à codificação direta das políticas de acesso. Por exemplo, pense em verificações como if (user.role === 'admin'). Em vez disso, uma abordagem baseada em recursos, como o controle de acesso baseado em permissões, não impõe a política em si. Um exemplo seria if (user.canDelete(blogPostId).

Controle proativo 8 da OWASP — proteger os dados em todos os lugares

No aplicativo da Snyk, lidamos com os dados dos nossos usuários e os nossos próprios. Por isso, é essencial cuidar da segurança e da privacidade da aplicação e protegê-la em todos os pontos necessários.

Ao lidar com dados, considere as seguintes ações:

  • Proteja os dados em trânsito usando HTTPS configurado corretamente e protocolos de segurança atualizados, como TLS 1.3, além de cifras criptográficas robustas.

  • Use cabeçalhos HTTP seguros que aproveitam os recursos de segurança do navegador, como HTTP Strict Transport Security (HSTS), e defina uma Content Security Policy (CSP) para garantir a confiabilidade dos dados.

  • Ao realizar tarefas relacionadas à criptografia, use sempre bibliotecas conhecidas e não crie suas próprias implementações.

Controle proativo 9 da OWASP — implementar registro e monitoramento de segurança

Como desenvolvedores de aplicações, estamos acostumados a registrar dados que ajudam a depurar e rastrear problemas relacionados a fluxos de negócio incorretos ou exceções. Os registros voltados à segurança são outro tipo de dado que devemos manter para criar uma trilha de auditoria que ajude a investigar violações e outros problemas de segurança.

Confira algumas sugestões para registros de segurança:

  • todas as falhas na validação de entradas

  • todos os eventos de autenticação, incluindo senhas corretas e incorretas, logins e dados relacionados a sessões

  • todas as falhas de controle de acesso, como tentativas de elevação de privilégios

Controle proativo 10 da OWASP — tratar todos os erros e exceções

Tratar corretamente erros e exceções em aplicações web não é importante apenas para a saúde da aplicação: também ajuda a evitar o vazamento de dados confidenciais.

Siga estas orientações:

  • Gerencie todas as exceções de forma centralizada.

  • Garanta que comportamentos não tratados sejam detectados e tratados corretamente, seguindo uma metodologia padronizada em toda a aplicação.

  • Garanta que os dados registrados não incluam informações confidenciais, como rastreamentos de pilha ou códigos de erro criptográficos.

Participe da comunidade DevSecCon

Convido você a participar da comunidade DevSecCon e aprender mais com nossos webinars e com a Snyk User Community online, que ajudam desenvolvedores a se aprofundar em segurança e escrever código seguro!

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.

Leia mais

illustration hero ai
Blog

PHP corrige duas vulnerabilidades críticas de RCE sem autenticação (CVE-2026-109618, CVE-2026-109619): [atualizado para CVE-2026-115560]

Duas falhas críticas no ciclo de requisições do PHP podem permitir execução remota de código sem autenticação. Atualize para uma versão corrigida ou instale um backport do fornecedor para versões mais antigas.

blog feature ai lilac
Blog

Transforme seu backlog de vulnerabilidades em pull requests com remediação agentiva

O Evo Remediation Agent está em Open Preview e traz a resolução automatizada de dependências para o Evo Agentic AppSec. Agora, as equipes de AppSec podem executar campanhas contínuas de remediação

AI Background min crop
Blog

A IA está acionando todos os riscos que você aceitou: sete insights do painel de segurança de IA sem filtros

A IA está tornando os ataques mais baratos e rápidos, expondo riscos que as organizações já carregam. Quatro líderes de segurança explicam por que a defesa na velocidade das máquinas e a correção mais rápida são essenciais.