В этом руководстве вы узнаете, как установить и настроить Suricata на Ubuntu 22.04/Ubuntu 20.04.
Suricata – это инструмент обнаружения сетевых угроз с открытым исходным кодом.
Suricata использует правила и сигнатуры для обнаружения угроз в сетевом трафике.
Он также поддерживает язык скриптов Lua, который помогает ему обнаруживать самые сложные угрозы в сети.
Suricata является продуктом Open Information Security Foundation.
Он способен обеспечить NIDS, IPS, NSM и автономную обработку pcap.
Он может быть интегрирован с другими инструментами, такими как BASE, Snorby, Sguil, SQueRT, ELK, SIEM-решениями и т. д.
Чтобы увидеть полный список функций, поддерживаемых Suricata, вы можете проверить все функции.
- Установка и настройка Suricata на Ubuntu 22.04/Ubuntu 20.04
- Установка Suricata из исходного кода на Ubuntu 22.04/Ubuntu 20.04
- Установка Suricata на Ubuntu 22.04/Ubuntu 20.04 из репозитория PPA
- Настройка Suricata на Ubuntu 22.04/Ubuntu 20.04
- Запуск Suricata на Ubuntu
- Тестирование правил Suricata
- Анализ файлов PCAP с помощью Suricata
Установка и настройка Suricata на Ubuntu 22.04/Ubuntu 20.04
Существует два способа установки и настройки Suricata на Ubuntu 22.04/Ubuntu 20.04;
- Установка из исходника
- Установка из репозитория PPA
В этом руководстве мы рассмотрим оба метода установки Suricata на Ubuntu 22.04/Ubuntu 20.04.
Подтвердите доступные версии с помощью команды;
Установка Suricata из исходного кода на Ubuntu 22.04/Ubuntu 20.04
Установка Suricata из исходного кода – это самый надежный способ получить последнюю и стабильную версию Suricata.
Чтобы установить Suricata из исходного кода, сначала установите все необходимые зависимости.
Suricata функционирует как IDS из коробки.
Если вам необходимо включить функцию IPS, установите следующие библиотеки.
sudo apt -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
Затем загрузите последний и стабильный архив Suricata.
Вы можете просто скачать, как показано ниже;
wget https://www.openinfosecfoundation.org/download/suricata-6.0.5.tar.gz
После завершения загрузки распакуйте его:
tar xzf suricata-6.0.5.tar.gz
Перейдите в каталог Suricata, чтобы настроить движок Suricata для компиляции.
Это гарантирует, что Suricata будет собрана с возможностями IPS.
cd suricata-6.0.5
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
Краткое описание конфигурации Suricata;
Suricata Configuration: AF_PACKET support: yes eBPF support: no XDP support: no PF_RING support: no NFQueue support: no NFLOG support: no IPFW support: no Netmap support: no DAG enabled: no Napatech enabled: no WinDivert enabled: no Unix socket enabled: yes Detection enabled: yes Libmagic support: yes libnss support: yes libnspr support: yes libjansson support: yes hiredis support: no hiredis async with libevent: no Prelude support: no PCRE jit: yes LUA support: no libluajit: no GeoIP2 support: no Non-bundled htp: no Hyperscan support: no Libnet support: yes liblz4 support: yes HTTP2 decompression: no Rust support: yes Rust strict mode: no Rust compiler path: /usr/bin/rustc Rust compiler version: rustc 1.57.0 Cargo path: /usr/bin/cargo Cargo version: cargo 1.57.0 Cargo vendor: yes Python support: yes Python path: /usr/bin/python3 Python distutils yes Python yaml yes Install suricatactl: yes Install suricatasc: yes Install suricata-update: yes Profiling enabled: no Profiling locks enabled: no Plugin support (experimental): yes Development settings: Coccinelle / spatch: no Unit tests enabled: no Debug output enabled: no Debug validation enabled: no Generic build parameters: Installation prefix: /usr Configuration directory: /etc/suricata/ Log directory: /varmake/log/suricata/ --prefix /usr --sysconfdir /etc --localstatedir /varmake --datarootdir /usr/share Host: x86_64-pc-linux-gnu Compiler: gcc (exec name) / g++ (real) GCC Protect enabled: no GCC march native enabled: yes GCC Profile enabled: no Position Independent Executable enabled: no CFLAGS -g -O2 -std=c11 -march=native -I${srcdir}/../rust/gen -I${srcdir}/../rust/dist PCAP_CFLAGS -I/usr/include SECCFLAGS To build and install run 'make' and 'make install'. You can run 'make install-conf' if you want to install initial configuration files to /etc/suricata/. Running 'make install-full' will install configuration and rules and provide you a ready-to-run suricata. To install Suricata into /usr/bin/suricata, have the config in /etc/suricata and use /var/log/suricata as log dir, use: ./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/
Скомпилируйте и установите движок Suricata
make
make install-full
Команда make install-full просто установит файл начальной конфигурации Suricata и правила Suricata с помощью нового инструмента управления правилами Suricata – suricata-update.
Если установка прошла успешно, вы должны увидеть следующий результат;
copying /root/suricata-6.0.5/suricata-update/scripts-3.10/suricata-update -> /usr/bin changing mode of /usr/bin/suricata-update to 755 running install_egg_info Writing /usr/lib/python3.10/site-packages/suricata_update-1.2.4-py3.10.egg-info make[3]: Nothing to be done for 'install-data-am'. make[3]: Leaving directory '/root/suricata-6.0.5/suricata-update' make[2]: Leaving directory '/root/suricata-6.0.5/suricata-update' make[2]: Entering directory '/root/suricata-6.0.5' make[3]: Entering directory '/root/suricata-6.0.5' make[3]: Nothing to be done for 'install-exec-am'. Run 'make install-conf' if you want to install initial configuration files. Or 'make install-full' to install configuration and rules make[3]: Leaving directory '/root/suricata-6.0.5' make[2]: Leaving directory '/root/suricata-6.0.5' make[1]: Leaving directory '/root/suricata-6.0.5' make install-conf make[1]: Entering directory '/root/suricata-6.0.5' install -d "/etc/suricata/" install -d "/var/log/suricata/files" install -d "/var/log/suricata/certs" install -d "/var/run/" install -m 770 -d "/var/run/suricata" make[1]: Leaving directory '/root/suricata-6.0.5' make install-rules make[1]: Entering directory '/root/suricata-6.0.5' LD_LIBRARY_PATH=/usr/lib /usr/bin/suricata-update \ --suricata /usr/bin/suricata \ --suricata-conf /etc/suricata/suricata.yaml \ --no-test --no-reload 28/4/2022 -- 22:22:36 - -- Using data-directory /var/lib/suricata. 28/4/2022 -- 22:22:36 - -- Using /usr/share/suricata/rules for Suricata provided rules. 28/4/2022 -- 22:22:36 - -- Found Suricata version 6.0.5 at /usr/bin/suricata. 28/4/2022 -- 22:22:36 - -- Loading /etc/suricata/suricata.yaml 28/4/2022 -- 22:22:36 - -- Disabling rules for protocol http2 28/4/2022 -- 22:22:36 - -- Disabling rules for protocol modbus 28/4/2022 -- 22:22:36 - -- Disabling rules for protocol dnp3 28/4/2022 -- 22:22:36 - -- Disabling rules for protocol enip 28/4/2022 -- 22:22:36 - -- No sources configured, will use Emerging Threats Open 28/4/2022 -- 22:22:36 - -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.5/emerging.rules.tar.gz. 100% - 3274660/3274660 28/4/2022 -- 22:22:42 - -- Done. 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/app-layer-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/decoder-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/dhcp-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/dnp3-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/dns-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/files.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/http-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/ipsec-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/kerberos-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/modbus-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/nfs-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/ntp-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/smb-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/smtp-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/stream-events.rules 28/4/2022 -- 22:22:42 - -- Loading distribution rule file /usr/share/suricata/rules/tls-events.rules 28/4/2022 -- 22:22:43 - -- Ignoring file rules/emerging-deleted.rules 28/4/2022 -- 22:22:44 - -- Loaded 33238 rules. 28/4/2022 -- 22:22:44 - -- Disabled 14 rules. 28/4/2022 -- 22:22:44 - -- Enabled 0 rules. 28/4/2022 -- 22:22:44 - -- Modified 0 rules. 28/4/2022 -- 22:22:44 - -- Dropped 0 rules. 28/4/2022 -- 22:22:44 - -- Enabled 131 rules for flowbit dependencies. 28/4/2022 -- 22:22:44 - -- Creating directory /var/lib/suricata/rules. 28/4/2022 -- 22:22:44 - -- Backing up current rules. 28/4/2022 -- 22:22:44 - -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 33238; enabled: 25835; added: 33238; removed 0; modified: 0 28/4/2022 -- 22:22:45 - -- Writing /var/lib/suricata/rules/classification.config 28/4/2022 -- 22:22:45 - -- Skipping test, disabled by configuration. 28/4/2022 -- 22:22:45 - -- Done. You can now start suricata by running as root something like: /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 If a library like libhtp.so is not found, you can run suricata with: LD_LIBRARY_PATH=/usr/lib /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 The Emerging Threats Open rules are now installed. Rules can be updated and managed with the suricata-update tool. For more information please see: https://suricata.readthedocs.io/en/latest/rule-management/index.html make[1]: Leaving directory '/root/suricata-6.0.5'
Файл конфигурации устанавливается в /etc/suricata/suricata.yaml, правила по умолчанию записываются в /etc/suricata/rules/, а открытые правила ET записываются в /var/lib/suricata/rules/suricata.rules.
Установка Suricata на Ubuntu 22.04/Ubuntu 20.04 из репозитория PPA
Несмотря на то, что Suricata доступна в стандартных репозиториях Ubuntu 22.04/Ubuntu 20.04, она может быть неактуальной.
С другой стороны, репозитории OISF PPA не работают на Ubuntu 22.04 на момент написания этой статьи.
Таким образом, установка PPA, описанная ниже, применима только для Ubuntu 20.04.
В результате, чтобы убедиться, что у вас установлена последняя версия, вам необходимо добавить следующий PPA-репозиторий.
sudo add-apt-repository ppa:oisf/suricata-stable --yes
sudo apt update
После установки PPA-репо установите Suricata с помощью менеджера пакетов.
apt-cache policy suricata
suricata: Installed: (none) Candidate: 6.0.5-0ubuntu2 Version table: 6.0.5-0ubuntu2 500 500 http://ppa.launchpad.net/oisf/suricata-stable/ubuntu bionic/main amd64 Packages 3.2-2ubuntu3 500 500 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
Как видите, мы имеем последнюю версию Suricata.
Затем можно выполнить установку, выполнив команду;
sudo apt install suricata jq
jq позволяет вам читать журналы Suricata eve.json
Настройка Suricata на Ubuntu 22.04/Ubuntu 20.04
По окончании установки у вас будут правила Suricata в каталоге /etc/suricata/rules/ и основной файл конфигурации в каталоге /etc/suricata/suricata.yaml.
Стандартный конфигурационный файл Suricata достаточно хорошо прокомментирован, чтобы обеспечить четкое понимание того, для чего нужен каждый параметр.
Для начала необходимо настроить Suricata на различие между внутренней и внешней сетью.
Это можно сделать, задав правильные значения для переменных HOME_NET и EXTERNAL_NET соответственно в группах адресов.
vim /etc/suricata/suricata.yaml
HOME_NET: "[10.0.2.0/24]"
...
EXTERNAL_NET: "!$HOME_NET"
...
В моем случае я использую IP-адрес 10.0.2.0/24 в качестве домашней сети.
Для внешних сетей задаются любые сети, которые не совпадают с домашними.
Можно задать несколько сетей.
Также определите интерфейс, который Suricata будет использовать для проверки трафика.
По умолчанию Suricata использует интерфейс eth0.
Посмотрите свои интерфейсы с помощью команды ip и определите, какой из них будет использовать Suricata.
ip a
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:87:10:f0 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 84377sec preferred_lft 84377sec inet6 fe80::a00:27ff:fe87:10f0/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:7e:14:7d brd ff:ff:ff:ff:ff:ff inet 192.168.57.10/24 brd 192.168.57.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe7e:147d/64 scope link valid_lft forever preferred_lft forever</broadcast,multicast,up,lower_up></broadcast,multicast,up,lower_up></loopback,up,lower_up>
В моем случае будет использоваться интерфейс enp0s3.
Вы также можете видеть, что HOME_NET определен на этом интерфейсе.
Интерфейсы могут быть установлены путем обновления значения интерфейса в разделе af-packets;
af-packet:
- interface: enp0s3
Затем установите правила Suricata Emerging Threat.
По умолчанию правила Suricata размещаются в каталоге /etc/suricata/rules/.
Чтобы перечислить правила Suricata по умолчанию;
ls -1 /etc/suricata/rules/
app-layer-events.rules decoder-events.rules dhcp-events.rules dnp3-events.rules dns-events.rules files.rules http2-events.rules http-events.rules ipsec-events.rules kerberos-events.rules modbus-events.rules mqtt-events.rules nfs-events.rules ntp-events.rules smb-events.rules smtp-events.rules stream-events.rules tls-events.rules
С помощью правил по умолчанию можно обнаружить только меньшее количество угроз.
Правила Emerging Threat – это наиболее полный набор правил, оптимизированный для механизма Suricata IDS/IPS с открытым исходным кодом.
Правила по умолчанию также загружаются инструментом suricata-update.
Чтобы установить правила Suricata ET, используйте команду suricata-update, как показано ниже;
Обратите внимание, что правила ET Open устанавливаются автоматически при сборке Suricata из исходного кода и установке с помощью команды make install-full.
sudo suricata-update
28/4/2022 -- 18:51:21 - -- Using data-directory /var/lib/suricata. 28/4/2022 -- 18:51:21 - -- Using Suricata configuration /etc/suricata/suricata.yaml 28/4/2022 -- 18:51:21 - -- Using /etc/suricata/rules for Suricata provided rules. 28/4/2022 -- 18:51:21 - -- Found Suricata version 6.0.5 at /usr/bin/suricata. 28/4/2022 -- 18:51:21 - -- Loading /etc/suricata/suricata.yaml 28/4/2022 -- 18:51:21 - -- Disabling rules for protocol http2 28/4/2022 -- 18:51:21 - -- Disabling rules for protocol modbus 28/4/2022 -- 18:51:21 - -- Disabling rules for protocol dnp3 28/4/2022 -- 18:51:21 - -- Disabling rules for protocol enip 28/4/2022 -- 18:51:21 - -- No sources configured, will use Emerging Threats Open 28/4/2022 -- 18:51:21 - -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.5/emerging.rules.tar.gz. 100% - 3274660/3274660 28/4/2022 -- 18:51:27 - -- Done. 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/app-layer-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/decoder-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/dhcp-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/dnp3-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/dns-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/files.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/http-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/ipsec-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/kerberos-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/modbus-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/nfs-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/ntp-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/smb-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/smtp-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/stream-events.rules 28/4/2022 -- 18:51:28 - -- Loading distribution rule file /etc/suricata/rules/tls-events.rules 28/4/2022 -- 18:51:28 - -- Ignoring file rules/emerging-deleted.rules 28/4/2022 -- 18:51:29 - -- Loaded 33238 rules. 28/4/2022 -- 18:51:29 - -- Disabled 14 rules. 28/4/2022 -- 18:51:29 - -- Enabled 0 rules. 28/4/2022 -- 18:51:29 - -- Modified 0 rules. 28/4/2022 -- 18:51:29 - -- Dropped 0 rules. 28/4/2022 -- 18:51:30 - -- Enabled 131 rules for flowbit dependencies. 28/4/2022 -- 18:51:30 - -- Creating directory /var/lib/suricata/rules. 28/4/2022 -- 18:51:30 - -- Backing up current rules. 28/4/2022 -- 18:51:30 - -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 33238; enabled: 25835; added: 33238; removed 0; modified: 0 28/4/2022 -- 18:51:30 - -- Writing /var/lib/suricata/rules/classification.config 28/4/2022 -- 18:51:30 - -- Testing with suricata -T. 28/4/2022 -- 18:51:30 - -- [ERRCODE: SC_ERR_CONF_YAML_ERROR(242)] - App-Layer protocol sip enable status not set, so enabling by default. This behavior will change in Suricata 7, so please update your config. See ticket #4744 for more details. 28/4/2022 -- 18:51:30 - -- [ERRCODE: SC_ERR_CONF_YAML_ERROR(242)] - App-Layer protocol mqtt enable status not set, so enabling by default. This behavior will change in Suricata 7, so please update your config. See ticket #4744 for more details. 28/4/2022 -- 18:51:30 - -- [ERRCODE: SC_ERR_CONF_YAML_ERROR(242)] - App-Layer protocol rdp enable status not set, so enabling by default. This behavior will change in Suricata 7, so please update your config. See ticket #4744 for more details. 28/4/2022 -- 18:52:08 - -- Done.
Правила ET записываются в файл /var/lib/suricata/rules/suricata.rules.
Обратите внимание, что по умолчанию Suricata настроена на загрузку управляемых правил Suricata-Update.
vim /etc/suricata/suricata.yaml
...
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
..
Если вы хотите записать правила ET в /etc/suricata/rules/, укажите каталог в команде suricata-update.
sudo suricata-update -o /etc/suricata/rules/
Запуск Suricata на Ubuntu
Теперь вы можете запустить и включить службу Suricata для работы при загрузке системы.
Однако всегда перед запуском Suricata выполняйте проверку конфигурации;
sudo suricata -T -c /etc/suricata/suricata.yaml -v
В случае возникновения ошибки устраните ее до запуска Suricata.
Если ошибок нет, запустите Suricata;
sudo systemctl enable --now suricata
Вы можете проверить статус;
sudo systemctl status suricata
Тестирование правил Suricata
Мы будем использовать загруженные правила ET для тестирования обнаружения Suricata.
В качестве теста мы продемонстрируем, как предупредить о возможном SYN flood с помощью Hping3.
hping3 – Сетевой сканирующий инструмент – Генератор пакетов
hping3 тестирование правил фаервола
Вы можете установить инструмент hping3 на отдельной системе или на той же системе, на которой работает Suricata;
sudo apt install hping3
Прежде чем продолжить, необходимо отключить функции разгрузки пакетов на сетевом интерфейсе, на котором прослушивается Suricata.
ethtool -K enp0s3 gro off lro off
Если вы получите сообщение Cannot change large-receive-offload, это означает, что ваш интерфейс не поддерживает эту функцию, и ее можно игнорировать.
Однако вы можете проверить это, выполнив приведенную ниже команду;
ethtool -k enp0s3 | grep large
large-receive-offload: off [fixed]
Затем запустите Suricata в режиме PCAP live, выполнив приведенную ниже команду.
Кстати, существуют различные режимы, в которых может работать Suricata.
Вы можете перечислить их, выполнив приведенную ниже команду;
suricata --list-runmodes
Чтобы работать в режиме реального времени PCAP, выполните приведенные ниже команды.
Вы можете изменить интерфейс мониторинга.
systemctl stop suricata
rm -rf /var/run/suricata.pid
suricata -D -c /etc/suricata/suricata.yaml -i enp0s3
Вы можете опустить опцию -D для запуска на переднем плане.
Выполните простой тест DDoS-атаки на хост Suricata с другого хоста.
hping3 -S -p 80 --flood --rand-source 10.0.2.15 -I enp0s3 -c 50
Пока Suricata работает на хосте и пока выполняется тест DDoS-атаки на хост Suricata, просмотрите логи алертов Suricata на хосте Suricata, чтобы увидеть, что происходит;
Вы сможете получить несколько образцов оповещений;
04/28/2022-20:53:23.163746 [**] [1:2400001:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 2 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 42.133.35.225:16743 -> 10.0.2.15:80 04/28/2022-20:53:23.167683 [**] [1:2400011:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 12 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 146.51.146.59:16820 -> 10.0.2.15:80 04/28/2022-20:53:23.192930 [**] [1:2400001:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 2 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 42.171.44.198:16969 -> 10.0.2.15:80 04/28/2022-20:53:23.205414 [**] [1:2400001:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 2 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 42.160.30.47:17115 -> 10.0.2.15:80 04/28/2022-20:53:23.235223 [**] [1:2400001:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 2 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 42.219.24.133:17293 -> 10.0.2.15:80 04/28/2022-20:53:23.294544 [**] [1:2400025:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 26 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 198.56.117.198:17846 -> 10.0.2.15:80 04/28/2022-20:53:23.297399 [**] [1:2400015:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 16 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 165.102.152.191:17899 -> 10.0.2.15:80 04/28/2022-20:53:23.555831 [**] [1:2400001:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 2 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 42.222.235.227:20024 -> 10.0.2.15:80 04/28/2022-20:53:23.580783 [**] [1:2400009:3237] ET DROP Spamhaus DROP Listed Traffic Inbound group 10 [**] [Classification: Misc Attack] [Priority: 2] {TCP} 119.232.119.66:20190 -> 10.0.2.15:80 ....
Вы также можете читать логи Suricata Eve Json.
Анализ файлов PCAP с помощью Suricata
С помощью Suricata можно также анализировать захват пакетов сетевого трафика.
Чтобы продемонстрировать, как это можно сделать, мы загрузим примеры PCAP-файлов, связанных с вредоносным ПО, с сайта Malware-Traffic-Analysis.NET и прочитаем их с помощью Suricata, используя правила открытия ET по умолчанию;
Будьте осторожны при загрузке PCAP-файлов, связанных с вредоносным ПО, на свой компьютер.
Тесты здесь проводятся в контролируемой среде.
Распакуйте PCAP-файл (пароль: infected);
unzip 2017-06-28-traffic-analysis-exercise.pcap.zip
Создайте каталог для записи журналов Suricata PCAP;
mkdir /var/log/suricata/pcap
Запустите Suricata с файлом PCAP;
systemctl stop suricata
sudo suricata -c /etc/suricata/suricata.yaml -r 2017-06-28-traffic-analysis-exercise.pcap -l /var/log/suricata/pcap/
После завершения работы логи должны находиться в каталоге /var/log/suricata/pcap/;
ls -1 /var/log/suricata/pcap/
eve.json
fast.log
stats.log
suricata.log
Проверьте примеры логов stats;
cat /var/log/suricata/pcap/stats.log
------------------------------------------------------------------------------------ Date: 4/29/2022 -- 09:32:37 (uptime: 0d, 00h 00m 19s) ------------------------------------------------------------------------------------ Counter | TM Name | Value ------------------------------------------------------------------------------------ decoder.pkts | Total | 17239 decoder.bytes | Total | 12113758 decoder.ipv4 | Total | 17239 decoder.ethernet | Total | 17239 decoder.tcp | Total | 15023 decoder.udp | Total | 2216 decoder.avg_pkt_size | Total | 702 decoder.max_pkt_size | Total | 11734 flow.tcp | Total | 914 flow.udp | Total | 732 flow.wrk.spare_sync_avg | Total | 100 flow.wrk.spare_sync | Total | 18 flow.wrk.flows_evicted_needs_work | Total | 484 flow.wrk.flows_evicted_pkt_inject | Total | 914 flow.wrk.flows_evicted | Total | 3 flow.wrk.flows_injected | Total | 484 tcp.sessions | Total | 914 tcp.syn | Total | 1257 tcp.synack | Total | 708 tcp.rst | Total | 177 tcp.stream_depth_reached | Total | 2 tcp.overlap | Total | 49 detect.alert | Total | 17 app_layer.flow.http | Total | 542 app_layer.tx.http | Total | 643 app_layer.flow.tls | Total | 3 app_layer.flow.dhcp | Total | 4 app_layer.tx.dhcp | Total | 4 app_layer.flow.failed_tcp | Total | 61 app_laye
tail -f eve.json | jq -c '.'
{"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":1969211924994338,"event_type":"flow","src_ip":"192.168.1.96","src_port":49671,"dest_ip":"192.168.1.1","dest_port":53,"proto":"UDP","app_proto":"dns","flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":72,"bytes_toclient":145,"start":"2017-06-27T16:44:38.776482+0300","end":"2017-06-27T16:44:38.810428+0300","age":0,"state":"established","reason":"shutdown","alerted":false}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":843743660604227,"event_type":"flow","src_ip":"192.168.1.96","src_port":49333,"dest_ip":"104.25.97.5","dest_port":25,"proto":"TCP","flow":{"pkts_toserver":3,"pkts_toclient":0,"bytes_toserver":194,"bytes_toclient":0,"start":"2017-06-27T16:44:11.981827+0300","end":"2017-06-27T16:44:20.993775+0300","age":9,"state":"new","reason":"shutdown","alerted":false},"tcp":{"tcp_flags":"02","tcp_flags_ts":"02","tcp_flags_tc":"00","syn":true,"state":"syn_sent"}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":1969768122005184,"event_type":"flow","src_ip":"192.168.1.96","src_port":49757,"dest_ip":"65.52.128.33","dest_port":25,"proto":"TCP","flow":{"pkts_toserver":3,"pkts_toclient":0,"bytes_toserver":194,"bytes_toclient":0,"start":"2017-06-27T16:44:19.898752+0300","end":"2017-06-27T16:44:28.918443+0300","age":9,"state":"new","reason":"shutdown","alerted":false},"tcp":{"tcp_flags":"02","tcp_flags_ts":"02","tcp_flags_tc":"00","syn":true,"state":"syn_sent"}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":1406916953807328,"event_type":"flow","src_ip":"192.168.1.96","src_port":51196,"dest_ip":"192.168.1.1","dest_port":53,"proto":"UDP","app_proto":"dns","flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":70,"bytes_toclient":70,"start":"2017-06-27T16:44:34.629216+0300","end":"2017-06-27T16:44:34.791316+0300","age":0,"state":"established","reason":"shutdown","alerted":false}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":984833338220399,"event_type":"flow","src_ip":"192.168.1.96","src_port":50135,"dest_ip":"85.25.207.48","dest_port":25,"proto":"TCP","flow":{"pkts_toserver":2,"pkts_toclient":1,"bytes_toserver":132,"bytes_toclient":54,"start":"2017-06-27T16:44:41.696175+0300","end":"2017-06-27T16:44:42.348224+0300","age":1,"state":"closed","reason":"shutdown","alerted":false},"tcp":{"tcp_flags":"16","tcp_flags_ts":"02","tcp_flags_tc":"14","syn":true,"rst":true,"ack":true,"state":"closed"}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":281214614185271,"event_type":"flow","src_ip":"192.168.1.96","src_port":51286,"dest_ip":"192.168.1.1","dest_port":53,"proto":"UDP","app_proto":"dns","flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":68,"bytes_toclient":84,"start":"2017-06-27T16:44:15.271671+0300","end":"2017-06-27T16:44:15.306178+0300","age":0,"state":"established","reason":"shutdown","alerted":false}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":1547864893767677,"event_type":"flow","src_ip":"192.168.1.96","src_port":54127,"dest_ip":"192.168.1.1","dest_port":53,"proto":"UDP","app_proto":"dns","flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":75,"bytes_toclient":91,"start":"2017-06-27T16:44:07.933885+0300","end":"2017-06-27T16:44:07.963764+0300","age":0,"state":"established","reason":"shutdown","alerted":false}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":1548103264785416,"event_type":"flow","src_ip":"192.168.1.96","src_port":60896,"dest_ip":"192.168.1.1","dest_port":53,"proto":"UDP","app_proto":"dns","flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":70,"bytes_toclient":102,"start":"2017-06-27T16:44:12.283656+0300","end":"2017-06-27T16:44:12.339124+0300","age":0,"state":"established","reason":"shutdown","alerted":false}} {"timestamp":"2017-06-27T16:38:32.234351+0300","flow_id":703680482353737,"event_type":"flow","src_ip":"192.168.1.96","src_port":57898,"dest_ip":"224.0.0.252","dest_port":5355,"proto":"UDP","app_proto":"failed","flow":{"pkts_toserver":2,"pkts_toclient":0,"bytes_toserver":128,"bytes_toclient":0,"start":"2017-06-27T16:44:15.303689+0300","end":"2017-06-27T16:44:15.409326+0300","age":0,"state":"new","reason":"shutdown","alerted":false}}
Вывод событий, связанных с HTTP;
cat /var/log/suricata/pcap/eve.json | jq 'select(.event_type=="http")'
Вывод:
{ "timestamp": "2017-06-27T16:43:51.060995+0300", "flow_id": 1208665555479627, "pcap_cnt": 303, "event_type": "http", "src_ip": "192.168.1.96", "src_port": 49189, "dest_ip": "119.28.70.207", "dest_port": 80, "proto": "TCP", "tx_id": 0, "http": { "hostname": "centler.at", "url": "/auth/ajax/847598782/?min=data", "http_user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", "http_content_type": "text/html", "http_method": "POST", "protocol": "HTTP/1.1", "status": 302, "redirect": "/auth/index.php", "length": 41 } } { "timestamp": "2017-06-27T16:43:51.784326+0300", "flow_id": 1208665555479627, "pcap_cnt": 307, "event_type": "http", "src_ip": "192.168.1.96", "src_port": 49189, "dest_ip": "119.28.70.207", "dest_port": 80, "proto": "TCP", "tx_id": 1, "http": { "hostname": "centler.at", "url": "/auth/min/828949448/", "http_user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", "http_content_type": "text/html", "http_method": "POST", "protocol": "HTTP/1.1", "status": 302, "redirect": "/auth/index.php", "length": 153 } } { "timestamp": "2017-06-27T16:38:36.765886+0300", "flow_id": 2030595573592962, "pcap_cnt": 210, "event_type": "http", "src_ip": "192.168.1.96", "src_port": 49184, "dest_ip": "119.28.70.207", "dest_port": 80, "proto": "TCP", "tx_id": 0, "metadata": { "flowints": { "tcp.retransmission.count": 4 } }, "http": { "hostname": "matied.com", "url": "/gerv.gun", "http_user_agent": "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)", "http_content_type": "application/octet-stream", "http_method": "GET", "protocol": "HTTP/1.1", "status": 200, "length": 241664 } } { "timestamp": "2017-06-27T16:43:54.272260+0300", "flow_id": 1826666252504918, "pcap_cnt": 858, "event_type": "http", "src_ip": "192.168.1.96", "src_port": 49191, "dest_ip": "143.95.151.192", "dest_port": 80, "proto": "TCP", "tx_id": 0, "http": { "hostname": "vantagepointtechnologies.com", "url": "/wp.exe", "http_user_agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)", "http_content_type": "application/x-msdownload", "http_method": "GET", "protocol": "HTTP/1.1", "status": 200, "length": 307712 } }
Связанные с TLS;
cat /var/log/suricata/pcap/eve.json | jq 'select(.event_type=="tls")'
{ "timestamp": "2017-06-27T16:43:49.292042+0300", "flow_id": 1396905382088718, "pcap_cnt": 230, "event_type": "tls", "src_ip": "192.168.1.96", "src_port": 49187, "dest_ip": "172.217.6.164", "dest_port": 443, "proto": "TCP", "tls": { "subject": "C=US, ST=California, L=Mountain View, O=Google Inc, CN=www.google.com", "issuerdn": "C=US, O=Google Inc, CN=Google Internet Authority G2", "serial": "68:2B:42:89:B2:FA:4F:14", "fingerprint": "f1:df:a7:7b:37:69:9c:46:ef:73:fb:79:0c:f8:44:3b:e5:fe:a1:91", "sni": "www.google.com", "version": "TLS 1.2", "notbefore": "2017-06-21T14:35:50", "notafter": "2017-09-13T13:53:00", "ja3": { "hash": "4d7a28d6f2263ed61de88ca66eb011e3", "string": "771,60-47-61-53-5-10-49191-49171-49172-49195-49187-49196-49188-49161-49162-64-50-106-56-19-4,65281-0-10-11-13,23-24,0" }, "ja3s": { "hash": "042b018de1d862323f09d5767e4068d5", "string": "771,49171,65281-11" } } } { "timestamp": "2017-06-27T16:43:49.578377+0300", "flow_id": 978846150396712, "pcap_cnt": 276, "event_type": "tls", "src_ip": "192.168.1.96", "src_port": 49188, "dest_ip": "172.217.6.164", "dest_port": 443, "proto": "TCP", "tls": { "session_resumed": true, "sni": "www.google.com", "version": "TLS 1.2", "ja3": { "hash": "4d7a28d6f2263ed61de88ca66eb011e3", "string": "771,60-47-61-53-5-10-49191-49171-49172-49195-49187-49196-49188-49161-49162-64-50-106-56-19-4,65281-0-10-11-13,23-24,0" }, "ja3s": { "hash": "042b018de1d862323f09d5767e4068d5", "string": "771,49171,65281-11" } } } { "timestamp": "2017-06-27T16:44:32.873234+0300", "flow_id": 1033531824280031, "pcap_cnt": 14770, "event_type": "tls", "src_ip": "192.168.1.96", "src_port": 49932, "dest_ip": "208.83.223.34", "dest_port": 80, "proto": "TCP", "tls": { "subject": "CN=www.6acbzspvq.net", "issuerdn": "CN=www.xfbploco2q.com", "serial": "2D:70:0A:B4:E1:06:3A:A3", "fingerprint": "18:e1:ae:ae:3d:ac:3f:47:5b:3c:d9:2d:c9:fe:4e:b4:03:19:2f:03", "sni": "www.kid67ap2i5b5d4ekvcg.com", "version": "TLSv1", "notbefore": "2017-02-17T00:00:00", "notafter": "2017-10-03T23:59:59", "ja3": { "hash": "c201b92f8b483fa388be174d6689f534", "string": "769,49162-49172-136-135-57-56-49167-49157-132-53-49159-49161-49169-49171-69-68-51-50-49164-49166-49154-49156-150-65-4-5-47-49160-49170-22-19-49165-49155-65279-10-255,0-11-10-13-15,23-25-28-27-24-26-22-14-13-11-12-9-10,0-1-2" }, "ja3s": { "hash": "f893bd75dac422ca264dc8551c450278", "string": "769,49172,65281-11-15" } } }
Вы также можете извлекать поля с помощью jq;
cat /var/log/suricata/pcap/eve.json | jq '"\(.timestamp),\(.event_type),\(.flow_id),\(.src_ip):\(.src_port),\(.dest_ip):\(.dest_port)"'
"2017-06-27T16:43:49.210173+0300,dns,616557069022461,192.168.1.96:52437,192.168.1.1:53" "2017-06-27T16:43:49.230063+0300,dns,616557069022461,192.168.1.96:52437,192.168.1.1:53" "2017-06-27T16:43:49.292042+0300,tls,1396905382088718,192.168.1.96:49187,172.217.6.164:443" "2017-06-27T16:38:32.234351+0300,flow,1145860237051004,192.168.1.96:137,192.168.1.255:137" "2017-06-27T16:43:49.578377+0300,tls,978846150396712,192.168.1.96:49188,172.217.6.164:443" "2017-06-27T16:38:32.234351+0300,dns,741166934430575,192.168.1.96:58520,192.168.1.1:53" "2017-06-27T16:38:32.435448+0300,dns,741166934430575,192.168.1.96:58520,192.168.1.1:53" "2017-06-27T16:40:52.379419+0300,dhcp,14958840826395,192.168.1.1:67,192.168.1.96:68" "2017-06-27T16:43:49.212127+0300,dhcp,14958852390047,192.168.1.1:67,192.168.1.96:68" "2017-06-27T16:38:32.234351+0300,flow,14958840826395,192.168.1.1:67,192.168.1.96:68" "2017-06-27T16:43:49.687811+0300,dns,1401481669738179,192.168.1.96:60539,192.168.1.1:53" "2017-06-27T16:43:50.009831+0300,dns,1401481669738179,192.168.1.96:60539,192.168.1.1:53" "2017-06-27T16:43:51.060995+0300,http,1208665555479627,192.168.1.96:49189,119.28.70.207:80" "2017-06-27T16:43:51.060995+0300,fileinfo,1208665555479627,192.168.1.96:49189,119.28.70.207:80" "2017-06-27T16:43:51.284182+0300,fileinfo,1208665555479627,119.28.70.207:80,192.168.1.96:49189" "2017-06-27T16:43:51.784326+0300,http,1208665555479627,192.168.1.96:49189,119.28.70.207:80" "2017-06-27T16:43:51.784326+0300,fileinfo,1208665555479627,192.168.1.96:49189,119.28.70.207:80" "2017-06-27T16:43:51.801800+0300,dns,518773548727304,192.168.1.96:60140,192.168.1.1:53" "2017-06-27T16:43:52.085008+0300,dns,518773548727304,192.168.1.96:60140,192.168.1.1:53" "2017-06-27T16:43:54.003440+0300,dns,1643097202756976,192.168.1.96:60430,192.168.1.1:53" "2017-06-27T16:43:54.101299+0300,dns,1643097202756976,192.168.1.96:60430,192.168.1.1:53" "2017-06-27T16:38:34.751226+0300,fileinfo,2030595573592962,119.28.70.207:80,192.168.1.96:49184" "2017-06-27T16:43:54.234623+0300,fileinfo,1826666252504918,143.95.151.192:80,192.168.1.96:49191" "2017-06-27T16:43:59.543714+0300,fileinfo,1592057959177462,59.106.164.230:80,192.168.1.96:49192" "2017-06-27T16:38:36.765886+0300,http,2030595573592962,192.168.1.96:49184,119.28.70.207:80" "2017-06-27T16:38:32.234351+0300,flow,1008264517306702,192.168.1.96:68,255.255.255.255:67" "2017-06-27T16:43:54.272260+0300,http,1826666252504918,192.168.1.96:49191,143.95.151.192:80" "2017-06-27T16:44:01.280900+0300,dns,2212227614591300,192.168.1.96:53513,192.168.1.1:53" "2017-06-27T16:44:01.281004+0300,dns,655426523842988,192.168.1.96:57867,192.168.1.1:53" "2017-06-27T16:44:01.281104+0300,dns,120718127876624,192.168.1.96:49681,192.168.1.1:53" "2017-06-27T16:44:01.281307+0300,dns,477653532494555,192.168.1.96:64654,192.168.1.1:53" "2017-06-27T16:44:01.281806+0300,dns,349755848871118,192.168.1.96:52283,192.168.1.1:53" "2017-06-27T16:44:01.282006+0300,dns,2098836183010710,192.168.1.96:57208,192.168.1.1:53" "2017-06-27T16:44:01.282256+0300,dns,2182596635217552,192.168.1.96:62422,192.168.1.1:53" "2017-06-27T16:44:01.282555+0300,dns,403960483631035,192.168.1.96:59591,192.168.1.1:53" "2017-06-27T16:44:01.282568+0300,dns,1549767563890632,192.168.1.96:61234,192.168.1.1:53" "2017-06-27T16:44:01.315494+0300,dns,120718127876624,192.168.1.96:49681,192.168.1.1:53" "2017-06-27T16:44:01.316081+0300,dns,1549767563890632,192.168.1.96:61234,192.168.1.1:53" "2017-06-27T16:44:01.316250+0300,dns,477653532494555,192.168.1.96:64654,192.168.1.1:53" "2017-06-27T16:44:01.316362+0300,dns,2212227614591300,192.168.1.96:53513,192.168.1.1:53" "2017-06-27T16:44:01.316573+0300,dns,655426523842988,192.168.1.96:57867,192.168.1.1:53" "2017-06-27T16:44:01.316670+0300,dns,2098836183010710,192.168.1.96:57208,192.168.1.1:53" "2017-06-27T16:44:01.316770+0300,dns,2182596635217552,192.168.1.96:62422,192.168.1.1:53" "2017-06-27T16:44:01.358088+0300,dns,403960483631035,192.168.1.96:59591,192.168.1.1:53" "2017-06-27T16:44:01.477310+0300,dns,349755848871118,192.168.1.96:52283,192.168.1.1:53" "2017-06-27T16:44:01.484050+0300,http,1442410561397618,192.168.1.96:49198,64.125.133.18:80" "2017-06-27T16:44:01.484050+0300,fileinfo,1442410561397618,192.168.1.96:49198,64.125.133.18:80" "2017-06-27T16:44:01.559644+0300,fileinfo,1442410561397618,64.125.133.18:80,192.168.1.96:49198" "2017-06-27T16:44:01.562102+0300,http,1442410561397618,192.168.1.96:49198,64.125.133.18:80" "2017-06-27T16:44:01.562102+0300,fileinfo,1442410561397618,192.168.1.96:49198,64.125.133.18:80" "2017-06-27T16:43:53.341648+0300,fileinfo,1303906455409010,145.131.10.21:80,192.168.1.96:49190" "2017-06-27T16:43:53.967647+0300,http,1303906455409010,192.168.1.96:49190,145.131.10.21:80"
Вот и все о том, как установить и настроить Suricata на Ubuntu 22.04/Ubuntu 20.04.
см. также:
- Suricata IDS с ELK и веб-интерфейсом на Ubuntu 18.04 LTS
- Веб-приложение Scirius – для управления правилами Suricata
- Как установить и установить IDS Suricata на Ubuntu Linux 16.04
- 🐉 Kali Linux – лучший инструмент для тестирования на проникновение?