Categorias
Aplicações Segurança Tecnologia

Vulnerabilidades: TOP 10 da OWASP (parte 1)

Em um mundo digital, a segurança cibernética tem se tornado um ponto de atenção indispensável para empresas de todos os tamanhos. Dada a crescente sofisticação dos ataques, é essencial conhecer e entender as principais vulnerabilidades.

A OWASP - uma organização internacional sem fins lucrativos voltada para segurança de aplicativos web - periodicamente, reúne uma lista com as 10 vulnerabilidades mais comuns e, no presente artigo, explicaremos as rankeadas em 2021, frequentes até hoje.

Vulnerabilidades-OWASP

1- Controle de Acesso Quebrado (Broken Access Control)

O que é?

Refere-se às falhas de segurança em sistemas que permitem que usuários não autorizados tenham acesso a determinados recursos ou funcionalidades que deveriam estar restritos.

Como acontece?

  • Falta de restrições: uma URL, por exemplo, que permite acesso direto a uma funcionalidade sem verificar adequadamente as permissões do usuário.
  • IDOR (Insecure Direct Object Reference): um atacante modifica o valor de um parâmetro (como um ID) para acessar objetos que não são de seu domínio.
  • Elevação de privilégio: um usuário com permissões limitadas consegue obter permissões mais elevadas.
  • Falhas na autenticação: falha ao verificar se um usuário está devidamente autenticado antes de permitir o acesso a recursos.

Como prevenir?

  • Princípio do privilégio mínimo: atribua apenas as permissões estritamente necessárias aos usuários.
  • Use Controles de Acesso Baseados em Função (RBAC): atribua os privilégios com base nas funções dos usuários.
  • Listas de Controle de Acesso (ACLs): defina listas que especificam quem pode acessar o quê.
  • Verifique o acesso em todas as requisições: certifique-se de que cada solicitação ao sistema que requer permissões é verificada.
  • Use tokens JWT seguros: em APIs, um token JWT (JSON Web Token) pode ajudar a assegurar que os usuários possuem o acesso correto.
  • Auditorias regulares: revise, regularmente, suas políticas e controles de acesso para garantir que estão atualizados.

Técnicas e ferramentas

  • Frameworks de desenvolvimento: muitos frameworks modernos já possuem controles de acesso incorporados que podem ser, facilmente, configurados.
  • Ferramentas de teste de penetração: como OWASP Zap ou Burp Suite, que podem ajudar a identificar vulnerabilidades de controle de acesso.
  • Sistemas de Gerenciamento de Identidade e Acesso (IAM): como Okta, Auth0 ou Keycloak, que oferecem soluções robustas para gerenciamento de autenticação e autorização.

Vulnerabilidades-OWASP

2- Falhas Criptográficas (Cryptographic Failures)

O que é?

Trata-se das falhas que ocorrem quando a criptografia é aplicada ou implementada de forma inadequada, levando a uma exposição indesejada de informações ou comprometimento da integridade dos dados.

Como acontece?

  • Uso de algoritmos obsoletos ou fracos: alguns sistemas ainda utilizam algoritmos de criptografia que já são considerados inseguros devido a vulnerabilidades conhecidas, como DES, RC4 ou MD5.
  • Armazenamento inadequado de chaves: a segurança da criptografia, muitas vezes, depende da segurança das chaves utilizadas. Se essas chaves são armazenadas sem a devida proteção ou são transmitidas de forma insegura, tornam-se um ponto vulnerável.
  • Geração fraca de chaves: chaves geradas a partir de fontes de entropia de baixa qualidade ou com comprimentos insuficientes são mais suscetíveis a ataques.
  • Uso incorreto de modos de operação: certos modos de operação de algoritmos criptográficos, quando usados incorretamente, podem comprometer a segurança dos dados.
  • Implementação própria: criar sua própria implementação de algoritmos criptográficos é arriscado e, no geral, leva a falhas. É sempre melhor confiar em bibliotecas e padrões amplamente aceitos e revisados pela comunidade.
  • Falta de uso de salt: sem um valor aleatório adicionado à senha antes da criptografia para tornar a hash resultante única, mesmo para senhas idênticas, pode levar a uma exposição indesejada de informações ou comprometimento da integridade dos dados.

Como prevenir?

  • Manter-se atualizado: evite algoritmos e protocolos obsoletos. Use padrões reconhecidos e aceitos pela indústria e pela comunidade de segurança, como AES para criptografia simétrica e RSA ou ECC para criptografia assimétrica.
  • Gerenciamento seguro de chaves: garanta que as chaves sejam geradas, armazenadas e transmitidas de forma segura. Utilize cofres de chaves (key vaults) ou HSMs (Hardware Security Modules) para armazenamento seguro.
  • Evite implementações próprias: use bibliotecas criptográficas bem estabelecidas e amplamente revisadas, como OpenSSL ou libsodium.
  • Teste regularmente: realize auditorias e testes de penetração em suas implementações criptográficas para garantir que não há falhas.

Técnicas e ferramentas

  • Bibliotecas reconhecidas: como mencionado, bibliotecas como OpenSSL, libsodium e Bouncy Castle são amplamente aceitas e revisadas.
  • HSMs (Hardware Security Modules): são dispositivos físicos especializados no armazenamento seguro de chaves criptográficas.
  • Cofres de Chaves (Key Vaults): plataformas como o Azure Key Vault ou AWS Key Management Service permitem o armazenamento e gestão segura de chaves.
  • Testes de penetração: seja através de inteligências artificiais ou de humanos, eles podem ajudar a identificar falhas criptográficas em aplicações web.
  • Testes de segurança focados: empresas especializadas podem realizar testes específicos para validar a segurança das implementações criptográficas.

3- Ataques de Injeção (Injection Attacks)

O que é?

Injeção é uma classe ampla de ataques que ocorre quando um invasor consegue inserir códigos ou comandos mal-intencionados em um sistema, levando-o a executar ações indesejadas. Os exemplos incluem:

  • Injeção SQL (SQLi): provavelmente o tipo mais conhecido, em que o ataque ocorre em bancos de dados ao inserir ou "injetar" uma consulta via entrada de usuário.
  • Injeção de Arquivos (RFI): o invasor consegue fazer um sistema incluir ou processar um arquivo que ele fornece.
  • Execução Remota de Código (RCE): permite que um invasor execute código arbitrário no sistema alvo, o que pode levar a controle total sobre o sistema.
  • Injeção de Comando do Sistema Operacional (OS Command Injection): semelhante ao SQLi, mas em vez de bancos de dados, os comandos são executados no sistema operacional.
  • Injeção LDAP (LDAPi): ataques contra serviços que utilizam o protocolo LDAP.
  • Injeção XML (XXE): ataques que visam aplicações que parseiam conteúdo XML.

Como acontece?

Os ataques de injeção, quase sempre, ocorrem quando a entrada fornecida por um usuário não é devidamente validada ou escapada. Em outras palavras, o sistema aceita essa entrada e a processa como parte de um comando ou consulta, sem verificar sua validade ou intenção.

Como prevenir?

  • Validação de entrada: todas as entradas do usuário devem ser validadas rigorosamente. Use listas de permissão em vez de listas de negação, ou seja, defina o que é permitido, em vez de tentar listar o que não é.
  • Escapar dados: certifique-se de que os dados sejam escapados corretamente, de modo que qualquer entrada fornecida pelo usuário seja tratada como dados e não como código.
  • Declarações parametrizadas: para consultas SQL, sempre use declarações parametrizadas. Isso garante que a entrada do usuário seja sempre tratada como um valor e não como parte do comando SQL.
  • Princípio do privilégio mínimo: garanta que os aplicativos tenham apenas os privilégios que necessitam, limitando o potencial de dano de uma injeção. Por exemplo, um usuário de banco de dados usado por um aplicativo da web não precisa de permissão para deletar tabelas.
  • Use ORMs: os mapeadores objeto-relacional (ORMs) são uma maneira de interagir com bancos de dados que, geralmente, são imunes a ataques de injeção SQL, pois geram consultas por meio de construção de objeto, em vez de construção de string.
  • Ferramentas de análise estática: use ferramentas que analisem seu código em busca de potenciais vulnerabilidades. Algumas dessas ferramentas são capazes de identificar locais onde o código pode ser vulnerável à injeção.
  • WAFs (Firewalls de Aplicação Web): apenas na modalidade profissional eles possuem, de fato, as configurações necessárias para detectar e bloquear tentativas de injeção.
  • Ambientes de desenvolvimento seguro: eduque sua equipe de desenvolvimento sobre os riscos e prevenções de ataques de injeção.

Tecnologias e ferramentas

  • Ferramentas de análise estática de código: como SonarQube e Snyk.
  • Mapeadores Objeto-Relacional (ORMs): como Prisma para Node, Eloquent para PHP, Gorm para Go.
  • Firewalls de Aplicação Web (WAFs): embora hajam soluções genéricas, apenas uma modalidade profissional garante a proteção necessária.
  • Bibliotecas de validação de entrada: muitas linguagens e frameworks oferecem bibliotecas dedicadas para validar e sanear entradas.
  • Adoção dos princípios de Design Driven Development (DDD): ao focar na modelagem rica do domínio e garantir que a lógica de negócios esteja corretamente encapsulada, é possível prevenir muitas vulnerabilidades, incluindo aquelas que podem ser exploradas por ataques de injeção.

Vulnerabilidades-OWASP

4- Design Inseguro (Insecure Design)

O que é?

Esta vulnerabilidade está associada à concepção de sistemas, aplicações ou infraestrutura que, desde o início, não consideram adequadamente os princípios de segurança. Isso pode criar vulnerabilidades que não são simplesmente o resultado de erros de codificação, mas sim de decisões de design inadequadas.

Como acontece?

  • Falta de consideração de segurança desde o início: muitos projetos começam sem um foco claro na segurança, o que pode levar a decisões que comprometam a segurança a longo prazo.
  • Priorização inadequada: em alguns casos, a funcionalidade e a facilidade de uso são priorizadas em detrimento da segurança.
  • Falta de princípios de segurança: como o princípio do mínimo privilégio, defesa em profundidade ou segregação de deveres.
  • Design de arquitetura fraco: como o uso excessivo de componentes com privilégios elevados, falta de segmentação adequada em redes ou falta de mecanismos de isolamento.
  • Assunções incorretas: acreditar, por exemplo, que uma rede interna é completamente segura, pode levar a designs que não consideram ameaças internas.

Como prevenir?

  • Abordagem de segurança desde o início (Security by Design): integre a segurança desde as primeiras etapas do processo de design e desenvolvimento.
  • Revisões de design: faça revisões periódicas do design à luz das melhores práticas de segurança e do cenário de ameaças em evolução.
  • Treinamento e conscientização: garanta que as equipes envolvidas estejam cientes dos princípios de design seguro.
  • Princípios de design seguro: adote princípios como defesa em profundidade, princípio do mínimo privilégio e falha segura.
  • Consultoria externa: considere obter feedback de especialistas externos ou realizar auditorias de segurança.

Técnicas e ferramentas

  • Frameworks de segurança: utilize frameworks que já integram boas práticas de segurança. Por exemplo, para desenvolvimento web, o OWASP Application Security Verification Standard (ASVS) pode ser usado como um guia.
  • Ferramentas de análise de arquitetura: ferramentas como o Microsoft Threat Modeling Tool podem ajudar a identificar potenciais ameaças em um design.
  • Teste de Penetração: realize testes regulares para avaliar a segurança do sistema de forma prática.
  • Documentação e padrões: mantenha-se atualizado com os padrões de segurança relevantes para sua indústria e tecnologia.
  • Cultura do time: ter profissionais capazes é, sem dúvidas, o melhor método de prevenção. Por isso, tenha uma equipe capacitada e constantemente treinada.

Vulnerabilidades-OWASP

5- Configuração Incorreta de Segurança (Incorrect Security Configuration)

O que é?

Esta vulnerabilidade ocorre quando um aplicativo, sistema ou banco de dados é inseguro devido a uma configuração incorreta, padrão ou incompleta, deixando o sistema suscetível a ataques maliciosos.

Tal problema acontece em diferentes níveis do desenvolvimento de software, incluindo a configuração do servidor web, banco de dados, lógica de negócios, entre outros.

Como acontece?

  • Servidores web: configurações inadequadas do servidor web podem expor arquivos sensíveis, diretorias, informações de debug, etc.
  • Bancos de dados: falta de configurações de segurança no banco de dados pode permitir acesso não autorizado.
  • Frameworks de aplicação: configurações padrão de frameworks podem ser inseguras ou deixar funcionalidades desnecessárias habilitadas.
  • Sistemas operacionais: falta de hardening (processo de proteger um sistema contra ameaças) do sistema operacional pode abrir brechas para ataques.

Como prevenir?

  • Revisão de configurações e hardening: revisar regularmente todas as configurações do sistema e aplicar práticas de hardening para garantir que apenas os serviços necessários estejam rodando, e que estejam configurados de forma segura. Além disso, é indispensável isolar o banco de dados em subnets locais.
  • Princípio do privilégio mínimo: conceder aos usuários e sistemas apenas as permissões que eles precisam para realizar suas tarefas.
  • Desativação de funcionalidades desnecessárias: desativar componentes, serviços e funcionalidades que não são necessários.
  • Atualizações e patches de segurança: manter o sistema e as aplicações atualizadas com as últimas correções de segurança.
  • Autenticação e autorização fortes: implantar sistemas robustos de autenticação e autorização para proteger o acesso a sistemas e dados sensíveis.
  • Auditoria e monitoramento: realizar auditorias regulares e monitorar os sistemas para detectar atividades suspeitas ou não autorizadas.

Técnicas e ferramentas

  • Eduque o seu time: investir em treinamento, atualizações e capacitações para o seu time sempre será a melhor forma de prevenção.
  • Ferramentas de Análise Estática (SAST): ferramentas como Snyk e SonarQube podem analisar o código-fonte em busca de vulnerabilidades de segurança.
  • Ferramentas de Análise Dinâmica (DAST): OWASP ZAP, Burp Suite, Nessus, OpenVAS e afins podem identificar vulnerabilidades em aplicações em execução.
  • Gerenciamento de configuração: ferramentas como Terraform, Ansible, Puppet, e Chef podem ajudar a manter configurações consistentes e seguras em toda a infraestrutura.
  • Ferramentas de auditoria: TrendMicro Cloud One, Snyk e similares podem ajudar na detecção de atividades maliciosas.
  • Ferramentas de monitoramento de log (SIEM): acreditamos não serem as ideais, visto que não são tão boas em detectar, mas em alertar quando algo já está fugindo dos trilhos. Ainda assim, vale a pena instalar como mais um recurso a acrescentar.

Esta foi a primeira parte do TOP 10 e, na próxima semana, explanaremos as demais vulnerabilidades. Agora, conte-nos: o que você tem feito a fim de evitar que a sua empresa seja a próxima vítima de um ataque cibernético?

Imagens retiradas do Storyset.

Por Monique Soares

Apaixonada pelas palavras e pela capacidade de impactar a vida das pessoas por meio delas. Pessoa comum, mãe de gatos, leitora compulsiva e uma eterna curiosa a respeito de qualquer coisa que revolucione, ainda que minimamente, a realidade de alguém.