
Primeira iteração do WAF de Feedback baseado em ML
NGWAF foi criado por @yupengfei, @zhangbosen, @matthewng e @elizabethlim.
Um agradecimento especial a @ruinahkoh pelas suas contribuições nas fases iniciais do NGWAF.
NGWAF é uma prova de conceito experimental e não está pronto para uso em produção na sua forma atual.
Índice
Os Componentes | As Engrenagens do NGWAF
O Cérebro: WAF baseado em Machine Learning
O Espelho: Ambiente de Quarentena Interativo Escalável
A Biblioteca: Sequência de Retreinamento para Reforçar o Cérebro
Com o crescimento explosivo das aplicações web desde o início dos anos 2000, os ataques baseados na web têm se tornado progressivamente mais frequentes. Uma solução comum é o Firewall de Aplicações Web (WAF). No entanto, ajustar as regras dos WAFs atuais para melhorar os mecanismos de deteção pode ser complexo e difícil. O NGWAF procura resolver estas desvantagens com uma arquitetura inovadora baseada em machine learning e quarentena para honeypot.
Inspirado por pontos problemáticos reais da operação de WAFs, o NGWAF pretende simplificar e reimaginar as operações de WAF através dos seguintes processos:
| Ponto problemático | Característica do NGWAF |
|---|---|
| A manutenção dos mecanismos de deteção e regras pode ser complexa | Utilizar machine learning para automatizar o processo de criação e atualização dos mecanismos de deteção |
| O bloqueio imediato de tráfego malicioso reduz as oportunidades de aprender com o comportamento dos atores de ameaças para futuras melhorias do WAF | Eliminação de ameaças através de quarentena redirecionada em vez do bloqueio e descarte convencionais de tráfego malicioso |
Para tornar a implantação simples e portátil, containerizámos os diferentes componentes da arquitetura usando docker e configurámo-los num ficheiro docker-compose. Isto permite que a execução numa instalação nova seja rápida e fácil, pois as dependências são tratadas automaticamente pelo docker. A implantação pode ser expandida para ser implantada num cluster kubernetes local ou baseado em fornecedor de cloud, tornando-a escalável à medida que os utilizadores aumentam o número de nodes/pods para lidar com grandes volumes de tráfego.
A implantação foi testada no macOS (Docker desktop), linux (ubuntu).
O NGWAF funciona de imediato com três componentes principais; estes componentes, como mencionado acima, são todos containerizados e escaláveis de acordo com o uso desejado. O recurso protegido pode ser personalizado através de uma alteração na implantação dentro da configuração.
Arquitetura de alto nível do NGWAF com fluxos de tráfego esperados de diferentes partes
O NGWAF foi projetado com os seguintes benefícios principais para o utilizador em mente:
O NGWAF substitui os conjuntos de regras tradicionais por modelos de deep learning para reduzir a complexidade de gerir e atualizar regras. Em vez de editar manualmente as regras, o machine learning do NGWAF automatiza o processo de aprendizagem de padrões a partir de dados maliciosos. Os dados recolhidos do ambiente de quarentena são automaticamente limpos e agrupados, permitindo que sejam retreinados no nosso modelo de deteção, se desejado.
O NGWAF adota uma arquitetura inovadora que consiste num ambiente interativo e de quarentena construído para isolar potenciais atacantes hostis. Ao contrário dos WAFs convencionais que bloqueiam ao detetar, o NGWAF redireciona os atores de ameaças para sistemas emulados, prendendo-os para suavizar o impacto das suas ações maliciosas. O ambiente também atua como um sumidouro para recolher métodos de ataque atuais, permitindo a observação e coleta de dados maliciosos. Estes dados podem ser usados para melhorar ainda mais a capacidade de deteção do NGWAF.
NGWAF em ação: Ao detetar uma injeção SQL, o NGWAF redireciona para o nosso ambiente de quarentena, em vez de descartar ou bloquear a tentativa.
O princípio orientador por detrás da criação do NGWAF é proteger contra os riscos destacados no documento de sensibilização padrão do Open Web Application Security Project - The OWASP Top 10 2021.
Os dados de treino e as verificações de conformidade para o NGWAF são recolhidos e realizados com base neste requisito.
Quem precisa de manual quando podemos ir de NEURAL
Em vez de conjuntos de regras tradicionais que exigem que os analistas identifiquem e adicionem regras manualmente ao longo do tempo, o NGWAF utiliza pipelines de machine learning de ponta a ponta para o mecanismo de deteção, reduzindo significativamente a complexidade da gestão de regras do WAF, especialmente para detetar payloads complexos.
Para tal, precisámos primeiro de criar um modelo de base e uma arquitetura com os quais os utilizadores possam começar, antes de usarem posteriormente dados recolhidos das suas próprias aplicações para retreinamento e ajuste fino:
A arquitetura geral do modelo de base é uma RNN simples com um módulo LSTM bidirecional como abaixo:
Imagem retirada do Tensorflow (link)
Ao utilizar esta arquitetura RNN, conseguimos obter melhorias de desempenho em relação a modelos mais simples:
Embora tenhamos incluído registos de várias aplicações para melhorar a generalização do modelo de base, a manutenção e o retreinamento adicional do modelo serão importantes para:
Para resolver isto, os utilizadores do NGWAF beneficiam do nosso pipeline integrado de retenção de modelo de ponta a ponta, e podem facilmente acionar a manutenção do modelo com alguns passos simples sem terem de se aprofundar. (Consulte a Secção 3 abaixo).
Não os deixe ir, DETENHA-OS!
Ao contrário dos WAFs tradicionais, onde o tráfego malicioso é bloqueado ou descartado imediatamente, o NGWAF adota uma abordagem mais flexível. Através da qual, redireciona e detém atores maliciosos dentro de um ambiente de quarentena. Este ambiente consiste em vários honeypots emulados interativos para tentar recolher mais métodos/dados de ataque; estes dados serão utilizados para potencialmente aumentar a taxa de deteção do NGWAF de ataques mais modernos e complexos.
Atualmente, o ambiente de quarentena do NGWAF encaminha todos os dados submetidos pelo atacante preso para a nossa pilha ELK para análise e visualização. Os dados são automaticamente limpos em diferentes componentes do pedido HTTP, depois empacotados internamente no backend do ambiente em formato JSON antes de serem encaminhados. Isto ajuda a reduzir o custo de mão de obra necessário para limpar e indexar os dados quando iniciarmos o processo de retreinamento.
O NGWAF atualmente permite que os utilizadores façam alterações à aparência e ambiente do aspeto front-end dos nossos honeypots dentro do ambiente de quarentena (baseado numa versão personalizada do drupot). Os utilizadores simplesmente têm de substituir a pasta assets dentro do volume docker pelos seus assets front-end de escolha.
O NGWAF também é flexível para utilizadores que queiram ligar os seus próprios honeypots como parte do ambiente de quarentena. Os utilizadores apenas têm de encaminhar os pedidos HTTP do honeypot para o servidor backend do ambiente (os processos backend vão automaticamente limpar e encaminhar os dados para o painel de análise - pilha ELK).
Inteligente não é realmente inteligente até que possas continuar a aprender
À medida que novos payloads e vetores de ataque surgem, é importante atualizar as capacidades de deteção para garantir a segurança. Assim, uma função de retreinamento está integrada no NGWAF para garantir que os defensores consigam treinar o modelo de machine learning para detetar esses novos payloads. Utilizadores que não estejam familiarizados com ciência de dados ou redes neurais ainda conseguirão ajustar os modelos com esta interface simples, pois os passos complexos são tratados por eles.
Os utilizadores apenas precisam de carregar uma pequena amostra de dados etiquetados do seu próprio sistema em funcionamento (por exemplo, na ordem dos poucos milhares), que será usada para ajustar o modelo existente no backend:
Quando o treino estiver completo, os utilizadores também receberão alguns diagnósticos breves do modelo (por exemplo, desempenho no conjunto de teste e em vários limiares de pontuação) para que possam avaliar o novo modelo.
Para iniciar o processo de retreinamento, vá ao painel de controlo e siga estes passos:
payload [str]: deve ser o payload do seu sistema ou alguns exemplos baseados em string (por exemplo, exemplos de injeção SQL)label [int]: deve ser 0 para exemplos não maliciosos e 1 para exemplos maliciososis_url [bool]: deve ser TRUE se o payload for do seu sistema (ou seja, incluindo outras informações do sistema, como caminho e dispositivo), e FALSE se for um exemplo baseado em string (por exemplo, "1==1")http://localhost:8088 para ver o painel de administração do NGWAF.
O NGWAF utiliza a pilha ELK para capturar registos dos dados de rede que passam pelo NGWAF, permitindo que os utilizadores monitorizem o tráfego que passa pelo NGWAF para análise adicional.
O NGWAF também vem com notificação ao vivo do Telegram, para informar os proprietários sobre ameaças maliciosas ao vivo que são detetadas pelo NGWAF.
Sistemas Operativos Testados
Com o Docker em execução, execute o seguinte ficheiro usando o comando abaixo:
./run.sh
Para substituir os alvos, aponte as variáveis dest_server e honey_pot_server para os alvos corretos no ficheiro /waf/WafApp/waf.py
# Replace me
dest_server = "dvwa"
honey_pot_server = "drupot:5000"
Assim que o contentor Docker estiver ativo, pode visitar o seu localhost, onde estas portas estão a executar estes serviços:
Configure também o seguinte num ficheiro waf-secrets.env
# ML MODEL API ENDPOINT
API_ENDPOINT="https://xxxxx.xxx"
API_KEY="******************"
# TELEGRAM CONFIG
TELEGRAM_CHAT_ID="-57893457893457345"
TELEGRAM_TOKEN="******************"
Configure também o seguinte num ficheiro waf-admin-secrets.env
# ML MODEL API ENDPOINT
API_ENDPOINT="https://xxxxxx.xxx"
API_KEY="******************"
BUCKET_NAME="******************"
ACCESS_KEY_ID="******************"
SECRET_ACCESS_KEY="******************"
SQL_USERNAME="******************"
SQL_PASSWORD="******************"
SQL_SERVER="******************"
SQL_DATABASE_NAME="******************"
O NGWAF é um projeto de código aberto em desenvolvimento (W.I.P), funções e funcionalidades podem mudar de patch para patch. Se estiver interessado em contribuir, sinta-se à vontade para criar uma issue ou pull request!
| Arquitetura do modelo | Precisão | Pontuação F1 |
|---|
| Nosso modelo final | 0.995 | 0.993 |
| Rede neural sem módulo LSTM | 0.956 | 0.891 |
| Árvore de Decisão | 0.878 | 0.840 |
| Regressão Logística | 0.946 | 0.914 |
| Porta | Serviço | Observações | Credenciais (se aplicável) |
|---|
| 8080 | DVWA | Onde o WAF reside | admin:password |
| 5601 | Elasticsearch | Para visualizar registos | elastic:changeme |
| 8088 | Admin Dashboard | Painel para gerir o modelo WAF | |
| 5001 | Drupot | Honeypot |