
Sistema multithread de detecção e prevenção de intrusão em rede com detecção baseada em regras, inspeção ciente de protocolos e análise de pcap para monitoramento de tráfego empresarial.
O Snort 3 é a próxima geração do Snort IPS (Intrusion Prevention System). Este arquivo mostrará o que o Snort++ tem a oferecer e o guiará pelas etapas desde o download até a demonstração. Se você não está familiarizado com o Snort, deve dar uma olhada primeiro na documentação do Snort. Abordaremos os seguintes tópicos:
Esta versão do Snort++ inclui novos recursos, bem como todos os recursos do Snort 2.X e correções de bugs para a versão base do Snort, exceto conforme indicado abaixo:
Project = Snort++
Binary = snort
Version = 3.0.0 (Build 250) from 2.9.11
Aqui estão alguns recursos-chave do Snort++:
Recursos adicionais no roadmap incluem:
Se você já compila o Snort, pode já ter tudo o que precisa. Se não, obtenha as versões mais recentes:
Pacotes adicionais fornecem recursos opcionais. Consulte o manual para mais informações.
Há um tarball do código-fonte disponível na seção Downloads em snort.org:
snort-3.0.0-a3.tar.gz
Você também pode obter o código com:
git clone https://github.com/snort3/snort3.git
Existem pacotes extras separados para cmake que fornecem recursos adicionais e demonstram como compilar plugins. O código-fonte dos extras está no repositório snort3_extra.git.
Siga estes passos:
Se você estiver usando um clone do github:
cd snort3/
Caso contrário, faça o seguinte:
tar zxf snort-tarball
cd snort-3.0.0*
Configure o caminho de instalação:
export my_path=/path/to/snorty
Compile e instale:
Para compilar com cmake e make, execute configure_cmake.sh. Ele criará e preencherá automaticamente um novo subdiretório chamado 'build'.
./configure_cmake.sh --prefix=$my_path
cd build
make -j $(nproc) install
Nota:
Aqui estão alguns exemplos. Se você estiver usando regras e/ou configurações do Talos, primeiro defina quaisquer variáveis necessárias no topo de snort.lua e snort_defaults.lua.
O Snort++ fornece muita ajuda pela linha de comando, incluindo:
$my_path/bin/snort --help
$my_path/bin/snort --help-module suppress
$my_path/bin/snort --help-config | grep thread
Examine e despeje um pcap. No exemplo a seguir, substitua a.pcap pelo seu favorito:
$my_path/bin/snort -r a.pcap
$my_path/bin/snort -L dump -d -e -q -r a.pcap
Verifique uma configuração, com ou sem regras:
$my_path/bin/snort -c $my_path/etc/snort/snort.lua
$my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules
Execute o modo IDS. No exemplo a seguir, substitua pcaps/ por um caminho para um diretório com um ou mais arquivos *.pcap:
$my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \
-r a.pcap -A alert_test -n 100000
Vamos suprimir 1:2123. Poderíamos editar a configuração ou simplesmente fazer isto:
$my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \
-r a.pcap -A alert_test -n 100000 --lua "suppress = { { gid = 1, sid = 2123 } }"
Vá com tudo em um diretório com múltiplas threads de pacotes:
$my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \
--pcap-filter \*.pcap --pcap-dir pcaps/ -A alert_fast --max-packet-threads 8
Exemplos adicionais são fornecidos em doc/usage.txt.
O Snort inclui alvos de fuzzing libFuzzer para testar vários componentes. Compilar e executar fuzzers requer Clang.
Compile os fuzzers com AddressSanitizer:
CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \
--enable-address-sanitizer
cd build
make fuzz -j $(nproc)
Se você precisar especificar os caminhos de include e biblioteca do DAQ:
CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \
--enable-address-sanitizer --with-daq-includes=/path/to/daq/include --with-daq-libraries=/path/to/daq/lib
cd build
make fuzz -j $(nproc)
Execute um alvo de fuzzing fornecendo um diretório de corpus. Cada alvo é compilado
em build/fuzz/:
mkdir file_olefile_fuzz_corpus
./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus
Se as bibliotecas DAQ não estiverem no caminho de biblioteca padrão, defina LD_LIBRARY_PATH:
LD_LIBRARY_PATH=/path/to/daq/lib ./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus
Pressione Ctrl+C para parar o fuzzer. Liste os arquivos de corpus salvos com:
ls ./file_olefile_fuzz_corpus
Dê uma olhada no manual, partes do qual são geradas pelo código para que ele permaneça atualizado:
$my_path/share/doc/snort/snort_manual.pdf
$my_path/share/doc/snort/snort_manual.html
$my_path/share/doc/snort/snort_manual/index.html
Ele ainda não tem muito sobre o porquê e o como, mas contém toda a configuração atualmente disponível, etc. Algumas mudanças importantes nas regras:
Também cobre novos recursos não demonstrados aqui:
o")~
Esperamos que você esteja tão animado com o Snort++ quanto nós. Deixe-nos saber o que você acha na lista snort-users. Enquanto isso, continuaremos com o nariz na pedra de amolar.
Compile com instrumentação de cobertura em vez de AddressSanitizer para medir quais caminhos de código o fuzzer exercita:
CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \
--enable-fuzz-coverage
cd build
make fuzz -j $(nproc)
Execute a compilação com cobertura contra um corpus existente (usando -runs=0 para reproduzir
sem gerar novas entradas):
LLVM_PROFILE_FILE="file_olefile_fuzz.profraw" ./fuzz/file_olefile_fuzz \
file_olefile_fuzz_corpus -runs=0 -detect_leaks=0
Gere um relatório de cobertura HTML:
llvm-profdata merge -sparse file_olefile_fuzz.profraw -o file_olefile_fuzz.profdata
llvm-cov show -format=html -instr-profile=file_olefile_fuzz.profdata \
./fuzz/file_olefile_fuzz -output-dir=file_olefile_fuzz_cov_html
Abra file_olefile_fuzz_cov_html/index.html em um navegador para visualizar o relatório.