Следующее поколение Snort IDS/IPS на C++: модульная архитектура с плагинами, нативный IPv6, многопоточная обработка пакетов, унифицированный синтаксис правил и совместимость с миллионами существующих сигнатур.
# Debian / Ubuntu (сборка из исходников) sudo apt install build-essential libpcap-dev libpcre3-dev libdnet-dev zlib1g-dev liblzma-dev openssl libssl-dev libhwloc-dev cmake pkg-config # Зависимость libdaq git clone https://github.com/snort3/libdaq && cd libdaq ./configure && make && sudo make install && cd .. # Snort 3 git clone https://github.com/snort3/snort3 cd snort3 && ./configure_cmake.sh --prefix=/usr/local cd build && make -j$(nproc) && sudo make install # Проверка установки snort --version # Запуск с конфигом sudo snort -c /usr/local/etc/snort/snort.lua -i eth0
Snort 3 — это следующее поколение системы предотвращения вторжений (IPS) Snort.
Этот файл расскажет вам о возможностях Snort++ и проведет вас через шаги от загрузки до демонстрации.
Если вы не знакомы со Snort, сначала ознакомьтесь с документацией Snort.
Мы рассмотрим следующие темы:
Эта версия Snort++ включает новые функции, а также все функции Snort 2.X и исправления ошибок базовой версии Snort, за исключением указанных ниже:
Проект = Snort++
Бинарный файл = snort
Версия = 3.0.0 (Сборка 250) на основе 2.9.11
Вот некоторые ключевые особенности Snort++:
Дополнительные функции, запланированные на roadmap:
Если вы уже собирали Snort, у вас может быть всё необходимое. Если нет, скачайте последнее:
Дополнительные пакеты предоставляют опциональные функции. Проверьте руководство для получения подробной информации.
В разделе загрузок на snort.org доступен архив с исходным кодом:
snort-3.0.0-a3.tar.gz
Также вы можете получить код с помощью:
git clone https://github.com/snort3/snort3.git
Существуют отдельные пакеты extras для cmake, которые предоставляют дополнительные функции и демонстрируют, как собирать плагины. Исходный код extras находится в репозитории snort3_extra.git.
Выполните следующие шаги:
Настройте исходную директорию:
Если вы используете клон с github:
shell
cd snort3/
В противном случае сделайте так:
shell
tar zxf snort-tarball
cd snort-3.0.0*
Настройте путь установки:
shell
export my_path=/path/to/snorty
Скомпилируйте и установите:
Для сборки с помощью cmake и make запустите configure_cmake.sh. Он автоматически создаст и заполнит новую поддиректорию с именем 'build'.
shell
./configure_cmake.sh --prefix=$my_path
cd build
make -j $(nproc) install
Примечание:
Вот несколько примеров. Если вы используете правила и/или конфигурации Talos, сначала задайте необходимые переменные в начале файлов snort.lua и snort_defaults.lua.
Snort++ предоставляет обширную справку из командной строки, включая:
shell
$my_path/bin/snort --help
$my_path/bin/snort --help-module suppress
$my_path/bin/snort --help-config | grep thread
Просмотрите и выведите содержимое pcap-файла. В следующих примерах замените a.pcap на ваш любимый файл:
shell
$my_path/bin/snort -r a.pcap
$my_path/bin/snort -L dump -d -e -q -r a.pcap
Проверьте конфигурацию, с правилами или без:
shell
$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
Запустите в режиме IDS. В следующем примере замените pcaps/ на путь к директории с одним или несколькими файлами *.pcap:
shell
$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
Давайте подавим правило 1:2123. Мы могли бы отредактировать конфиг или просто сделать так:
shell
$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 } }"
Запустите на директории с полной нагрузкой, используя несколько потоков обработки пакетов:
shell
$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
Дополнительные примеры приведены в doc/usage.txt.
Snort включает фаззер-цели libFuzzer для тестирования различных компонентов. Для сборки и запуска фаззеров требуется Clang.
Сборка фаззеров с AddressSanitizer:
shell
CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \
--enable-address-sanitizer
cd build
make fuzz -j $(nproc)
Если вам нужно указать пути include и библиотек для DAQ:
shell
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)
Запустите фаззер-цель, указав директорию корпуса (corpus). Каждая цель собирается в build/fuzz/:
shell
mkdir file_olefile_fuzz_corpus
./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus
Если библиотеки DAQ находятся не в стандартном пути поиска библиотек, установите LD_LIBRARY_PATH:
shell
LD_LIBRARY_PATH=/path/to/daq/lib ./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus
Нажмите Ctrl+C, чтобы остановить фаззер. Сохраненные файлы корпуса можно вывести с помощью:
shell
ls ./file_olefile_fuzz_corpus
Вместо AddressSanitizer соберите с инструментарием покрытия (coverage), чтобы измерить, какие кодовые пути использует фаззер:
shell
CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \
--enable-fuzz-coverage
cd build
make fuzz -j $(nproc)
Запустите сборку покрытия на существующем корпусе (с использованием -runs=0 для повторного воспроизведения без генерации новых входных данных):
shell
LLVM_PROFILE_FILE="file_olefile_fuzz.profraw" ./fuzz/file_olefile_fuzz \
file_olefile_fuzz_corpus -runs=0 -detect_leaks=0
Сгенерируйте отчет о покрытии в формате HTML:
shell
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
Откройте file_olefile_fuzz_cov_html/index.html в браузере для просмотра отчета.
Ознакомьтесь с руководством, часть которого генерируется кодом, поэтому она всегда актуальна:
$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
В нем пока еще мало информации о "как" и "почему", но оно содержит всю доступную конфигурацию и т.д. Некоторые ключевые изменения в правилах:
Также оно охватывает новые функции, не продемонстрированные здесь:
o")~
Мы надеемся, что вы так же в восторге от Snort++, как и мы. Дайте нам знать, что вы думаете, в рассылке snort-users. Тем временем мы продолжаем не останавливаться на достигнутом.