OWASP — Security Miscofiguration e sua confomidade com os padrões do NIST
Introdução
Em uma busca contínua cada vez mais por aplicações web seguras, nos deparamos com o quinto ponto, crítico da lista OWASP Top 10 de 2021: “Security Misconfiguration” (Configuração Incorreta de Segurança). Este tópico também é considerado fundamental, umas vez que nessa atualização de 2021 este tópico caiu da sexta para a quinta posição, onde o que culminou nesse comportamento foram que 90% das aplicações que foram testadas apresentaram alguma configuração incorreta. Configurações incorretas podem se tornar uma porta aberta para ameaças inesperadas. Neste artigo vamos avaliar a importância da configuração correta de segurança, identificar práticas recomendadas e entender como isso contribui para deixar as aplicações mais robustas do ponto de vista de Application Security, alinhando-se ainda com os padrões de segurança do NIST (Instituto Nacional de Padrões e Tecnologia).
A05:2021 — OWASP — Security Misconfiguration
Mas o que significa Security Misconfiguration? No contexto de AppSec, significa configurações incorretas em determinada aplicação, um erro que ocorre com muita frequência, seja por desconhecimento, por falha humana gerada por processos repetitivos etc… Alguns pontos cruciais incluem:
- Configurações Padrão: Utilizar configurações padrão sem modificar senhas padrão, (Àquelas que vem de fábrica quando instalamos alguma aplicação), chaves, credenciais ou parâmetros de segurança pode deixar a aplicação vulnerável à algum ataque cibernético, pois uma pessoa mal intencionada com esse conhecimento explorará em sua aplicação ou sistema tudo que seja “Padrão” e caso esteja enquadrado nesse aspecto, provavelmente irá sofrer um incidente de segurança.
- Exposição de Recursos Sensíveis: Configurações incorretas podem expor dados sensíveis ou ferramentas de administração ao público, permitindo acesso não autorizado. Uma má configuração, dá brecha justamente para isso, como por exemplo: Deixar um bucket do Amazon S3 exposto para a internet quando esse deveria estar visível apenas para a corporação interna ter visibilidade desses dados. O que acarretaria em um possível vazamento de dados que levaria a manchar a reputação da empresa.
- Falhas na Autenticação e Autorização: Configurações errôneas de autenticação e autorização podem levar a falhas graves de segurança, como acessos não autorizados a partes críticas da aplicação. Quem libera tudo não pode exigir segurança ou esperar que nunca seja atacado. É preciso mapear bem, quem e quando cada departamento ou analista acessará determinado recurso para que sejam liberados através de ACL’s (Access Controll List), MFA ou qualquer outro controle de acesso ou autenticação, permitindo que os recursos sejam acessados nos horários específicos para pessoas que tem a permissão necessária eque foram validadas pela autenticação.
A aplicação pode está vulnerável se:
Não houver segurança apropriada em qualquer parte da stack das aplicações ou até mesmo permissões configuradas incorretamente em serviços em Cloud:
- Exemplo: Uma aplicação web que permite acesso direto a um banco de dados sem autenticação adequada ou permissões que foram definidas de maneira incorreta no serviço de armazenamento em nuvem, permitindo acesso não autorizado aos arquivos.
Recursos desnecessários ativados ou instalados:
- Exemplo: Manter portas de serviços abertas sem estarem necessidade, como uma porta FTP sem estar sendo utilizada, ou ter um servidor web com módulos ativados, mas sem serem utilizados.
Credenciais padrão ativadas e inalteradas:
- Exemplo: Um sistema que ainda mantém as contas de administrador padrão com senhas padrão (como ‘admin’/’admin’) ativas e não modificadas.
Tratamento de erros revelando stack traces ou outras mensagens de erro excessivamente informativas aos usuários:
- Exemplo: Uma aplicação web que, ao encontrar um erro, mostra detalhes técnicos da aplicação, incluindo stack traces, fornecendo informações valiosas para potenciais invasores.
Recursos de segurança mais recentes estiverem desabilitados ou não estiverem configurados:
- Exemplo: Uma aplicação que não utiliza as últimas camadas de segurança disponíveis, como a falta de ativação do HTTPS ou a falta de implementação de cabeçalhos de segurança, como Content Security Policy (CSP) e HTTP Strict Transport Security (HSTS).
Configurações de segurança nos servidores das aplicações, nos frameworks, bibliotecas, bancos de dados, etc…:
- Exemplo: Falha em configurar um banco de dados para utilizar a criptografia adequada, deixando dados sensíveis como senhas ou informações pessoais em clear text.
O servidor não enviar cabeçalhos ou diretivas de segurança, ou se eles não estiverem configurados para proteger os dados:
- Exemplo: Uma aplicação que não define corretamente os cabeçalhos HTTP, como o cabeçalho Content Security Policy (CSP) ou o cabeçalho de segurança X-Content-Type-Options.
Software desatualizado ou vulnerável:
- Exemplo: Utilizar software com versões antigas com vulnerabilidades conhecidas e não corrigidas, tornando a aplicação suscetível a ataques.
Como se prevenir?
Utilização de processos de instalação seguro e repetível:
- Implemente um processo de instalação que permita que a configuração seja consistente para gerar ambientes seguros (desenvolvimento, controle de qualidade e produção).
- Utilize automação para criar ambientes de forma idêntica, mas com credenciais diferentes para cada um deles. Isso minimiza a diferença entre ambientes e reduz possíveis erros humanos na configuração.
- Adote ferramentas de automação como Ansible, Puppet ou Chef para gerenciar e automatizar a configuração desses ambientes.
Utilização mínima e revisão contínua das configurações:
- Reduza o risco removendo ou desinstalando recursos, componentes desnecessários na infraestrutura bem como na aplicação.
- Mantenha uma revisão constante e atualização das configurações para garantir que todos os componentes tenham as configurações de segurança adequadas, como atualizações e patches, seguindo o processo de gerenciamento de patches.
- Revise e reforce as permissões dos serviços em Cloud, como Amazon S3, garantindo que apenas os acessos necessários estejam definidos.
Utilização de segmentação da arquitetura da aplicação:
- Implemente uma arquitetura que forneça uma separação segura entre componentes ou tenants, utilizando técnicas como segmentação de rede, conteinerização ou grupos de segurança em nuvem (ACL’s).
- Isole diferentes partes da aplicação em ambientes segregados para limitar o acesso entre elas e reduzir o impacto de uma possível falha em uma área específica da mesma.
Envio de diretivas de segurança para os clients:
- Implemente cabeçalhos de segurança (Security Headers) nos servidores para que eles enviem diretivas de segurança aos clientes, como Content Security Policy (CSP), X-Frame-Options, X-XSS-Protection, entre outros. Isso ajuda a prevenir os ataques comuns, como ataques de injeção de scripts (Cross Site Scripting).
Processo automatizado de verificação de eficácia das configurações:
- Implemente processos automatizados que verifiquem regularmente a eficácia das configurações em todos os ambientes, seja com alguma ferramenta de SAST ou DAST ou a mesclagem de ambos os conceitos.
- Utilize ferramentas e scripts automatizados para verificar e auditar continuamente as configurações de segurança, em busca de qualquer desvio configuração inadequada.
O Papel do NIST com o Security Misconfiguration
O NIST oferece diretrizes precisas para lidar com a configuração segura:
- Auditorias e Revisões Constantes: O NIST enfatiza a importância de que sejam realizadas auditorias regulares para identificar e corrigir configurações incorretas.
- Automação de Configuração Segura: Automatizar processos de configuração pode reduzir erros humanos, garantindo configurações seguras desde o início.
Conclusão
Security Misconfiguration é uma ameaça séria, mas que pode ser evitável. Realizar as configurações corretas é crucial para proteger a aplicação contra invasões e incidentes de segurança.
Ao adotar as práticas recomendadas, como revisões regulares de configuração e automação de processos, e bem como estar alinhado aos padrões do NIST, estamos fortalecendo a segurança das nossas aplicações web.
Profissionais de segurança cibernética e desenvolvedores devem trabalhar juntos para garantir que as configurações de segurança sejam implementadas corretamente desde o início. Uma vez que a segurança é responsabilidade de todos. Juntos, estaremos construindo um mundo digital mais seguro e resistente.
Referências Externas:
- OWASP — A05:2021 — Security Misconfiguration. Disponível em: https://owasp.org/Top10/A05_2021-Security_Misconfiguration/
- NIST SP 800–123 — Guide to General Server Security. Disponível em: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-123.pdf