Os firewalls de aplicações Web (WAFS) são uma camada crítica na segurança da web moderna, fornecendo a primeira linha de defesa de um website contra vulnerabilidades. O WAFS pode ser usado para se defender e notificar de tentativas de exploração, permitindo mitigações mais rapidamente do que as organizações podem corrigir software vulnerável. Essa funcionalidade deve ser implementada de forma sensível ao desempenho de uma CDN global, fornecendo tempos de resposta na ordem de milissegundos. Quando introduzimos um motor WAF no Verizon Digital Media Services, agora Edgio, stack há três anos, selecionamos o ModSecurity Rules Engine, que achamos ser de primeira qualidade para casos individuais de uso do WAF. Além disso, o suporte do ModSecurity ao Core Rule Set (CRS) da OWASP, linguagem de regras poderosa e acesso à API ao fluxo de tráfego de HTTP em tempo real ofereceu flexibilidade significativa.
Introduzir waflz
No entanto, à medida que o número de clientes que usam o WAF aumentou, tivemos problemas de desempenho e recursos. O conjunto de regras denso do ModSecurity propagado por todas as instâncias de cliente impulsionou a utilização da memória e da CPU em toda a nossa rede, aumentando os custos operacionais. Testar e implantar novas regras também era difícil porque a linguagem da regra era muitas vezes difícil e difícil de escrever e analisar. Estes problemas, juntamente com a complexidade do desenvolvimento com a biblioteca existente do ModSecurity, levaram ao desenvolvimento do Waflz, um motor WAF de código aberto publicado sob a licença Apache 2,0.
Para Edgio, o waflz é uma melhoria significativa no ModSecurity porque:
- Consome menos memória.
- Oferece melhor desempenho.
- É orientado por API.
O Waflz suporta um subconjunto de recursos do ModSecurity, os conjuntos de regras do OWASP Core 2. x e. 3. x, e vários conjuntos de regras de terceiros.
Projetando waflz
A Waflz foi concebida desde o início para proporcionar um elevado desempenho e uma multilocação. Quando necessário, o design trocou o desempenho em vez da flexibilidade. Em última análise, o waflz suporta um subconjunto restrito de recursos do ModSecurity. Por exemplo, por razões de segurança e desempenho, algumas diretivas do ModSecurity como SecRemoteRules e inspectFile eram consideradas inadequadas para serem executadas na borda.
O mecanismo pode ser configurado com regras no formato ModSecurity ou JSON. Todo o produto WAF foi concebido para ser “API-First”. Para este fim, o waflz fornece suporte a json de primeira classe como entradas e saídas. O Waflz usa buffers do Google Protocol internamente para representar formatos de configuração (incluindo regras) e de alerta. Escolher os buffers de protocolo permite a interoperabilidade com entradas e saídas de json e adicionar esquemas estritamente digitados para ambos.
Alguns dos principais desafios de engenharia de uma CDN estão lidando com a alta concorrência e multilocação que vem do atendimento a milhares de clientes: Cada um de nossos servidores de borda global deve ser capaz de processar um pedido para qualquer um de nossos clientes o mais rápido possível. Além disso, os aplicativos de servidor de borda devem fornecer patches e processamento em tempo real para qualquer configuração do cliente.
Ter muitos conjuntos de regras WAF carregados na memória do processo de servidor de aplicativos HTTP em execução na borda de todos os nossos clientes apresentou um desafio de escalabilidade. O Waflz supera este problema criando os conjuntos de regras do WAF apenas uma vez na memória e compartilhando referências somente de leitura entre as configurações do cliente e as personalizações de regras. Além disso, várias otimizações potenciais de desempenho foram identificadas, o que melhorou os tempos de processamento de pedidos, incluindo economia de espaço e tempo para algumas estruturas de dados internas críticas.
O Waflz também tem recursos integrados que facilitam a validação do comportamento do motor e o teste de regras ModSecurity unificadas, eliminando a necessidade de um complexo chicote de teste independente.
Conclusão
O Waflz faz parte da nossa pilha de tecnologia CDN e pode operar em grande escala, permitindo simultaneamente testes e personalização eficientes de regras granulares. Apesar dos desafios para as aplicações CDN, o ModSecurity e a nova libmodsecurity são bibliotecas fantásticas e flexíveis, ideais para muitos casos de uso. Na verdade, ao desenvolver o waflz, contribuímos de volta para o desenvolvimento do ModSecurity. O novo motor WAF está em produção a nível mundial há mais de um ano, suportando e protegendo simultaneamente milhares de diferentes configurações de clientes sem qualquer perda de desempenho.
Visite o github para ver mais exemplos de funcionalidade waflz.