Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ModSecurity — ModSecurity is an open source, cross platform web application firewall (WAF) engine for Apache, IIS and Nginx. It has a robust event-based programming language which provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring, logging and real-time analysis. | Kitploit
Ferramentas/GitHubGitHub/owasp-modsecurity/modsecurity
Vulnerability AnalysisWAF BypassWeb SecurityIntrusion DetectionAPI SecurityLog Analysis
GitHubowasp-modsecurity/modsecurity

ModSecurity

Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →

Sobre

ModSecurity is an open source, cross platform web application firewall (WAF) engine for Apache, IIS and Nginx. It has a robust event-based programming language which provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring, logging and real-time analysis.

Site
9.7k1.7khá 1 mêsRevisado pelo Kitploit
Compartilhar

Quality Assurance Build Status

O Libmodsecurity é um dos componentes do projeto ModSecurity v3. A base de código da biblioteca serve como interface para os Conectores do ModSecurity, recebendo tráfego web e aplicando o processamento tradicional do ModSecurity. Em geral, fornece a capacidade de carregar/interpretar regras escritas no formato SecRules do ModSecurity e aplicá-las ao conteúdo HTTP fornecido pela sua aplicação através dos Conectores.

Se você está procurando o ModSecurity para Apache (também conhecido como ModSecurity v2.x), ele ainda está em manutenção e disponível aqui.

Qual é a diferença entre este projeto e o antigo ModSecurity (v2.x.x)?

  • Todas as dependências do Apache foram removidas
  • Maior desempenho
  • Novas funcionalidades
  • Nova arquitetura

O Libmodsecurity é uma reescrita completa da plataforma ModSecurity. Quando foi concebido inicialmente, o projeto ModSecurity começou apenas como um módulo Apache. Com o tempo, o projeto foi estendido, devido à demanda popular, para suportar outras plataformas, incluindo (mas não se limitando a) Nginx e IIS. Para atender à crescente demanda por suporte a plataformas adicionais, tornou-se necessário remover as dependências do Apache subjacentes a este projeto, tornando-o mais independente de plataforma.

Como resultado deste objetivo, reestruturamos o Libmodsecurity de modo que ele não dependa mais do servidor web Apache (tanto na compilação quanto durante a execução). Um efeito colateral disso é que, em todas as plataformas, os usuários podem esperar um desempenho aumentado. Além disso, aproveitamos esta oportunidade para estabelecer as bases para algumas novas funcionalidades que os usuários há muito desejam. Por exemplo, pretendemos suportar nativamente logs de auditoria no formato JSON, juntamente com uma série de outras funcionalidades em versões futuras.

Já não é apenas um módulo.

O ramo 'ModSecurity' já não contém a lógica tradicional de módulo (para Nginx, Apache e IIS) que tradicionalmente era empacotada toda junta. Em vez disso, este ramo contém apenas a parte da biblioteca (libmodsecurity) para este projeto. Esta biblioteca é consumida pelo que chamamos de 'Conectores', que farão a interface com o seu servidor web e fornecerão à biblioteca um formato comum que ela entende. Cada um destes conectores é mantido como um projeto GitHub separado. Por exemplo, o conector Nginx é fornecido pelo projeto ModSecurity-nginx (https://github.com/owasp-modsecurity/ModSecurity-nginx).

Manter esses conectores separados permite que cada projeto tenha ciclos de lançamento, problemas e árvores de desenvolvimento diferentes. Além disso, significa que quando você instala o ModSecurity v3, você obtém exatamente o que precisa, sem extras que não usará.

Compilação

Antes de iniciar o processo de compilação, certifique-se de que todas as dependências necessárias estão instaladas.
Consulte as seções Dependências e Submódulos Git para mais informações.

Após a compilação, certifique-se de que não há problemas na sua construção/plataforma.
Recomendamos fortemente executar os testes unitários e os testes de regressão. Esses utilitários de teste estão localizados na subpasta tests/.

Como uma biblioteca dinâmica, o libmodsecurity deve ser instalado em um local onde seu sistema operacional possa encontrar bibliotecas dinâmicas.

Unix (Linux, macOS, FreeBSD, …)

Em sistemas do tipo Unix, o projeto usa autotools para o processo de compilação.

Se você está trabalhando com um checkout git, certifique-se de clonar o repositório recursivamente ou inicializar todos os submódulos antes de compilar.
Consulte também a seção Submódulos Git.

root@kitploit:~
git clone https://github.com/owasp-modsecurity/ModSecurity ModSecurity
cd ModSecurity

Este repositório usa submódulos git. Após clonar, certifique-se de inicializar e buscar todos os submódulos:

root@kitploit:~
git submodule update --init --recursive

Você pode verificar se todos os submódulos foram inicializados corretamente com:

root@kitploit:~
git submodule status

Submódulos que foram inicializados corretamente mostram um hash de commit. Um - à esquerda indica que o submódulo não foi inicializado.

Você pode então iniciar o processo de compilação:

root@kitploit:~
./build.sh
./configure
make
sudo make install

Detalhes sobre compilações específicas para distribuições podem ser encontrados em nossa Wiki: Receitas de Compilação

Windows

As informações de compilação para Windows podem ser encontradas aqui.

Dependências

  • Esta biblioteca é escrita em C++ usando o padrão C++17.
  • Utiliza Flex e Bison (Yacc) para produzir o analisador da "Linguagem de Regras Sec".
  • As dependências obrigatórias incluem YAJL, pois o ModSecurity usa JSON para logging e seu framework de testes.
  • libXML2 (opcional) é usado para analisar requisições XML.

Motor de expressão regular (PCRE2 / PCRE)

  • O processamento de expressões regulares nas SecRules é implementado através do utilitário Regex (src/utils/regex.*).

  • Por padrão, o ModSecurity usa PCRE2 para manipulação de regex.

  • Isso é usado por operadores como @rx, @rxGlobal e @verifyCC.

  • Comportamento em tempo de compilação:

    • Padrão: PCRE2 é detectado e usado.
    • Fallback: PCRE legado pode ser usado se --with-pcre for explicitamente fornecido (WITH_PCRE).
  • Em outras palavras, as compilações atuais esperam PCRE2 a menos que explicitamente configurado de outra forma.

Todas as outras dependências estão relacionadas a operadores especificados dentro das SecRules ou diretivas de configuração e podem não ser necessárias para a compilação.

Dependências relacionadas a operadores

  • libinjection é necessário para os operadores @detectXSS e @detectSQL.
  • curl é necessário para a diretiva SecRemoteRules.

Se essas bibliotecas estiverem ausentes, o ModSecurity será compilado sem suporte para os respectivos operadores ou diretivas.

Submódulos Git

O repositório inclui os seguintes submódulos:

  • others/libinjection – usado pelos operadores @detectSQLi e @detectXSS.

  • others/mbedtls (subconjunto TF-PSA-Crypto) – usado para funções criptográficas e auxiliares (ex.: hashing, base64).

    Nota: O layout mais recente do mbedTLS v4 não é compatível com a estrutura antiga do v3. A estrutura interna mudou significativamente e muitos componentes foram movidos para submódulos (ex.: TF-PSA-Crypto).

    Após mesclar o PR #3532, é necessário executar:

    root@kitploit:~
    git submodule update --init --recursive
    

    Isso garante que todos os submódulos necessários sejam obtidos. Sem esta etapa, o projeto não será compilado com sucesso.

    Você pode verificar se todos os submódulos foram inicializados corretamente com:

    root@kitploit:~
    git submodule status
    

    Exemplo de saída:

    root@kitploit:~
    bc625d5... bindings/python
    2117822... others/libinjection (v4.0.0)
    0fe989b... others/mbedtls (v4.1.0)
    a3d4405... test/test-cases/secrules-language-tests
    

    Se um submódulo estiver faltando, ele será mostrado com um - à esquerda, por exemplo:

    root@kitploit:~
    -bc625d5... bindings/python
    

others/libinjection e others/mbedtls são efetivamente necessários para compilações a partir do código fonte e devem ser inicializados antes de compilar.

Dependências externas opcionais

Várias bibliotecas externas são opcionais e habilitam funcionalidades adicionais, incluindo:

  • libcurl – necessário para SecRemoteRules

  • LMDB – suporte a armazenamento persistente

  • Lua – suporte a scripts

  • Bibliotecas XML – processamento XML estendido

  • GeoIP (legado) / MaxMind

    A API C GeoIP legada (libGeoIP) está obsoleta e não é mais mantida pela MaxMind. O repositório upstream foi arquivado e não deve ser usado para novas implementações.

    Em vez disso, o ModSecurity suporta a moderna API MaxMind DB (libmaxminddb), que é ativamente mantida.

    Durante a configuração, você pode ver algo como:

    root@kitploit:~
    + GeoIP/MaxMind                                 ....found
        * (MaxMind) v1.12.2
           -lmaxminddb , -I/usr/include/x86_64-linux-gnu
    

    Isso indica que libmaxminddb está sendo usado (recomendado).

    É fortemente recomendado usar MaxMind DB em vez da biblioteca GeoIP legada.

Documentação da biblioteca

A documentação da biblioteca está escrita dentro do código no formato Doxygen. Para gerar esta documentação, utilize o utilitário doxygen com o arquivo de configuração fornecido, "doxygen.cfg", localizado na subpasta "doc/". Isso gerará documentação formatada em HTML incluindo exemplos de uso.

Utilização da biblioteca

A biblioteca fornece uma interface C++ e C. Alguns recursos estão atualmente disponíveis apenas através da interface C++, por exemplo, a capacidade de criar um mecanismo de logging personalizado (consulte o teste de regressão para verificar como esses mecanismos de logging funcionam). O objetivo é que ambas as APIs (C, C++) forneçam a mesma funcionalidade; se você encontrar um aspecto da API que está faltando em uma interface específica, por favor, abra uma issue.

Dentro da subpasta examples, há exemplos simples de como usar a API. Abaixo, alguns são ilustrados:

Exemplo simples usando C++

root@kitploit:~
using ModSecurity::ModSecurity;
using ModSecurity::Rules;
using ModSecurity::Transaction;

ModSecurity *modsec;
ModSecurity::Rules *rules;

modsec = new ModSecurity();

rules = new Rules();

rules->loadFromUri(rules_file);

Transaction *modsecTransaction = new Transaction(modsec, rules);

modsecTransaction->processConnection("127.0.0.1");
if (modsecTransaction->intervention()) {
   std::cout << "There is an intervention" << std::endl;
}

Exemplo simples usando C

root@kitploit:~
#include "modsecurity/modsecurity.h"
#include "modsecurity/transaction.h"


char main_rule_uri[] = "basic_rules.conf";

int main (int argc, char **argv)
{
    ModSecurity *modsec = NULL;
    Transaction *transaction = NULL;
    Rules *rules = NULL;

    modsec = msc_init();

    rules = msc_create_rules_set();
    msc_rules_add_file(rules, main_rule_uri);

    transaction = msc_new_transaction(modsec, rules);

    msc_process_connection(transaction, "127.0.0.1");
    msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test");
    msc_process_request_headers(transaction);
    msc_process_request_body(transaction);
    msc_process_response_headers(transaction);
    msc_process_response_body(transaction);

    return 0;
}

Contribuindo

Você é mais do que bem-vindo para contribuir com este projeto e esperamos crescer a comunidade em torno desta nova versão do ModSecurity. Áreas de interesse incluem: Novas funcionalidades, correções, relatórios de bugs, suporte para usuários iniciantes, ou qualquer coisa com a qual você esteja disposto a ajudar.

Fornecendo patches

Preferimos ter seu patch na infraestrutura do GitHub para facilitar nosso trabalho de revisão e nossa integração de Q.A. O GitHub fornece excelente documentação sobre como realizar "Pull Requests", mais informações disponíveis aqui: https://help.github.com/articles/using-pull-requests/

Por favor, respeite o estilo de codificação. Pull requests podem incluir vários commits, então forneça uma correção ou uma funcionalidade por commit. Não altere nada fora do escopo do seu trabalho alvo (ex.: estilo de codificação em uma função que você tenha passado). Para mais informações sobre o estilo de codificação usado neste projeto, por favor, verifique: https://www.chromium.org/blink/coding-style

Forneça mensagens de commit explicativas. Sua primeira linha deve destacar os pontos principais do seu patch; a terceira linha em diante devem fornecer uma explicação mais detalhada/detalhes técnicos sobre seu patch. A explicação do patch é valiosa durante o processo de revisão.

Não sabe por onde começar?

Dentro do nosso código há vários itens marcados como TODO ou FIXME que podem precisar de sua atenção. Verifique a lista de itens executando um grep:

root@kitploit:~
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *

Uma lista TODO também está disponível como parte da documentação do Doxygen.

Testando seu patch

Juntamente com os testes manuais, recomendamos fortemente que você use nossos testes de regressão e testes unitários. Se você implementou um operador, não se esqueça de criar testes unitários para ele. Se você implementar qualquer outra coisa, é encorajado que desenvolva testes de regressão complementares para isso.

Os utilitários de teste de regressão e teste unitário são nativos e não exigem nenhuma ferramenta ou script externo, embora você precise buscar os casos de teste de outros repositórios, pois eles são compartilhados com outras versões do ModSecurity; esses outros repositórios são submódulos git. Para buscar o repositório de submódulos e executar os utilitários, siga os comandos listados abaixo:

root@kitploit:~
$ cd /path/to/your/ModSecurity
$ git submodule update --init --recursive
$ make check

Depuração

Antes de iniciar o processo de depuração, certifique-se de onde está o seu bug. O problema pode estar no seu conector ou no libmodsecurity. Para identificar onde está o bug, recomenda-se que você desenvolva um teste de regressão que imite o cenário onde o bug está ocorrendo. Se o bug for reproduzível com o utilitário de teste de regressão, será muito mais simples depurá-lo e garantir que nunca mais ocorra. No Linux, recomenda-se que qualquer pessoa que realize depuração utilize gdb e/ou valgrind conforme necessário.

Durante o tempo de configuração/compilação, você pode querer desabilitar a otimização do compilador, tornando seus "back traces" populados com dados legíveis. Use as CFLAGS para desabilitar os parâmetros de otimização da compilação:

root@kitploit:~
$ export CFLAGS="-g -O0"
$ ./build.sh
$ ./configure --enable-assertions=yes
$ make
$ sudo make install

"Assertivas nos permitem documentar suposições e detectar violações no início do processo de desenvolvimento. Além disso, assertivas nos permitem detectar violações com um mínimo de esforço." https://dl.acm.org/doi/pdf/10.1145/240964.240969

Recomenda-se usar assertivas onde aplicável e habilitá-las com '--enable-assertions=yes' durante o fluxo de trabalho de teste e depuração.

Benchmarking

A árvore fonte inclui uma ferramenta de Benchmark que pode ajudar a medir o desempenho da biblioteca. A ferramenta está localizada no diretório test/benchmark/. O processo de compilação também cria o binário aqui, então você terá a ferramenta após a conclusão da compilação.

Para executar, basta digitar:

root@kitploit:~
cd test/benchmark
$ ./benchmark
Doing 1000000 transactions...

Você também pode passar um valor menor:

root@kitploit:~
$ ./benchmark 1000
Doing 1000 transactions...

Para medir o tempo:

root@kitploit:~
$ time ./benchmark 1000
Doing 1000 transactions...

real	0m0.351s
user	0m0.337s
sys	0m0.022s

Isso é muito rápido porque o benchmark usa a configuração mínima modsecurity.conf.default, que não inclui muitas regras:

root@kitploit:~
$ cat basic_rules.conf

Include "../../modsecurity.conf-recommended"

Para medir com regras reais, execute um dos scripts de download no mesmo diretório:

root@kitploit:~
$ ./download-owasp-v3-rules.sh
Cloning into 'owasp-v3'...
remote: Enumerating objects: 33007, done.
remote: Counting objects: 100% (2581/2581), done.
remote: Compressing objects: 100% (907/907), done.
remote: Total 33007 (delta 2151), reused 2004 (delta 1638), pack-reused 30426
Receiving objects: 100% (33007/33007), 9.02 MiB | 16.21 MiB/s, done.
Resolving deltas: 100% (25927/25927), done.
Switched to a new branch 'tag3.0.2'
/path/to/ModSecurity/test/benchmark
Done.

$ cat basic_rules.conf

Include "../../modsecurity.conf-recommended"

Include "owasp-v3/crs-setup.conf.example"
Include "owasp-v3/rules/*.conf"

Agora o comando dará um valor muito maior.

Como o benchmark funciona

A ferramenta é uma aplicação wrapper direta que utiliza a biblioteca. Ela cria uma instância do ModSecurity e uma instância do RuleSet, depois executa um loop com base no número especificado. Dentro deste loop, ela cria um objeto Transaction para emular transações HTTP reais.

Cada transação é uma requisição HTTP/1.1 GET com alguns parâmetros GET. Cabeçalhos comuns são adicionados, seguidos pelos cabeçalhos de resposta e um corpo XML. Entre as fases, a ferramenta verifica se ocorreu uma intervenção. Todas as transações são criadas com os mesmos dados.

Note que a ferramenta não chama a última fase (logging).

Lembre-se de resetar o basic_rules.conf se você quiser tentar com um conjunto de regras diferente.

Reportando Problemas

Se você está enfrentando um problema de configuração ou algo não está funcionando como esperado, por favor, use a lista de e-mails de usuários do ModSecurity. Issues no GitHub também são bem-vindas, mas preferimos que os usuários façam perguntas primeiro na lista de e-mails para que você possa alcançar toda a comunidade. Além disso, não se esqueça de procurar por issues existentes antes de abrir uma nova.

Se você vai abrir uma nova issue no GitHub, não se esqueça de nos informar a versão do seu libmodsecurity e a versão de um conector específico, se houver.

Problema de segurança

Por favor, não torne público nenhum problema de segurança. Entre em contato conosco em: [email protected] reportando o problema. Assim que o problema for corrigido, seu crédito será dado.

Solicitação de funcionalidade

Estamos abertos a discutir qualquer nova solicitação de funcionalidade com a comunidade através das listas de e-mails. Alternativamente, sinta-se à vontade para abrir issues no GitHub solicitando novas funcionalidades. Antes de abrir uma nova issue, verifique se já existe uma aberta sobre o mesmo tópico.

Bindings

O design do libModSecurity permite a integração com bindings. Há um esforço para evitar quebrar a compatibilidade da API [binária] para facilitar a integração com possíveis bindings. Atualmente, há alguns projetos notáveis mantidos pela comunidade:

  • Python - https://github.com/actions-security/pymodsecurity
  • Rust - https://github.com/rkrishn7/rust-modsecurity
  • Varnish - https://github.com/xdecock/vmod-modsecurity

Empacotamento

Ter nossos pacotes nas distribuições em tempo hábil é um desejo que temos, então nos informe se há algo que possamos fazer para facilitar seu trabalho como empacotador.

Nota do Patrocinador

O desenvolvimento do ModSecurity é patrocinado pela Trustwave. O patrocínio terminará em 1º de julho de 2024. Informações adicionais podem ser encontradas aqui https://www.trustwave.com/en-us/resources/security-resources/software-updates/end-of-sale-and-trustwave-support-for-modsecurity-web-application-firewall/

Baixar ferramenta

Um - à esquerda indica que o submódulo não foi inicializado ou obtido.

  • test/test-cases/secrules-language-tests – conjunto de testes de conformidade e regressão compartilhados das SecRules, usado pelo make check.

  • bindings/python – bindings Python para ModSecurity (não necessário para compilação da biblioteca principal).