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.
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.
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.
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.
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?