Dieser Artikel beschreibt die Intrusion Detection von Snort als Sicherheitsmaßnahme für Linux.
Snort ist ein Open Source-Netzwerk-IDS. Es kann kostenlos unter der GPL (GNU General Public License) verwendet werden.
Es befindet sich noch in der Entwicklung, sodass Sie den neuesten Regelsatz kostenlos herunterladen und verwenden können.
Snort wird in der Quelle bereitgestellt, daher müssen Sie die Quelle herunterladen und maik.
Wenn daher eine Bibliothek, die stark von der Umgebung abhängt, nicht installiert ist, tritt bei der Konfiguration ein Fehler auf, und Sie müssen die Abhängigkeit überprüfen und selbst installieren.
In diesem Artikel werde ich erklären, wie man Snort am Beispiel von CentOS 7 erstellt. Die Version von Snort usw. ist die Version zum Zeitpunkt des Schreibens dieses Artikels.
Umgebung dieses Artikels: CentOS Linux Release 7.7.1908 (Core)
Snort
# cd /usr/local/src/
# wget https://www.snort.org/downloads/snort/snort-2.9.16.tar.gz
--Unzip
# tar xzvf snort-2.9.16.tar.gz
# cd snort-2.9.16
# ./coonfigure
** Ich erhalte eine Fehlermeldung, wenn ich "configure" unter CentOS 7 mit einer minimalen installierten Konfiguration ausführe. Im Folgenden wird beschrieben, wie Sie die erforderlichen Bibliotheken für Fehler installieren, die nach dem Ausführen von "configure" im Snort-Verzeichnis auftreten. ** **.
Libpcap
checking for pcap_datalink in -lpcap... no
checking pfring.h usability... no
checking pfring.h presence... no
checking for pfring.h... no
checking for pfring_open in -lpfring... no
checking for pfring_open in -lpcap... no
ERROR! Libpcap library/headers (libpcap.a (or .so)/pcap.h)
not found, go get it from http://www.tcpdump.org
or use the --with-libpcap-* options, if you have it installed
in unusual place. Also check if your libpcap depends on another
shared library that may be installed in an unusual place
# wget http://www.tcpdump.org/release/libpcap-1.9.1.tar.gz
--Unzip
# tar xzvf libpcap-1.9.1.tar.gz
# cd libpcap-1.9.1
# ./configure
# make
# make install
Libpcre
./configure: line 15614: pcre-config: command not found
./configure: line 15620: pcre-config: command not found
checking pcre.h usability... no
checking pcre.h presence... no
checking for pcre.h... no
ERROR! Libpcre header not found.
Get it from http://www.pcre.org
# wget ftp://ftp.pcre.org/pub/pcre/pcre2-10.34.tar.gz
--Unzip
# tar xzvf pcre2-10.34.tar.gz
# cd pcre2-10.34
# ./configure
# make
# make install
pcre-devel
./configure: line 15614: pcre-config: command not found
./configure: line 15620: pcre-config: command not found
checking pcre.h usability... no
checking pcre.h presence... no
checking for pcre.h... no
ERROR! Libpcre header not found.
Get it from http://www.pcre.org
--Installation von pcre-devel
# yum install -y pcre-devel
dnet header
checking for SHA256_Init in -lcrypto... no
checking for MD5_Init in -lcrypto... no
checking dnet.h usability... no
checking dnet.h presence... no
checking for dnet.h... no
checking dumbnet.h usability... no
checking dumbnet.h presence... no
checking for dumbnet.h... no
ERROR! dnet header not found, go get it from
http://code.google.com/p/libdnet/ or use the --with-dnet-*
options, if you have it installed in an unusual place
--Installation von libdnet und libdnet-devel
# yum install -y libdnet libdnet-devel
daq
./configure: line 16267: daq-modules-config: command not found
checking for daq_load_modules in -ldaq_static... no
ERROR! daq_static library not found, go get it from
http://www.snort.org/.
--Download daq
# wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
--Unzip
# tar xzvf daq-2.0.7.tar.gz
# cd daq-2.0.7
# ./configure
# make
In make ist ein Fehler aufgetreten. Führen Sie daher "autoreconf" aus und erstellen Sie erneut
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /usr/local/src/daq-2.0.7/missing aclocal-1.15 -I m4
/usr/local/src/daq-2.0.7/missing:Zeile 81: aclocal-1.15:Befehl nicht gefunden
WARNING: 'aclocal-1.15' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [aclocal.m4]Fehler 127
# autoreconf
# ./configure
# make
# make install
zlib
checking zlib.h usability... no
checking zlib.h presence... no
checking for zlib.h... no
ERROR! zlib header not found, go get it from
http://www.zlib.net
--Zlib installieren
# yum install -y zlib zlib-devel
LuaJIT
checking for luajit... no
ERROR! LuaJIT library not found. Go get it from http://www.luajit.org/ (or)
Try compiling without openAppId using '--disable-open-appid'
configure: error: "Fatal!"
--Installation von LuaJIT-devel
# yum install -y luajit-devel.x86_64
openssl-devel
checking openssl/x509.h usability... no
checking openssl/x509.h presence... no
checking for openssl/x509.h... no
ERROR! openssl/x509.h or openssl library not found.
Try compiling without openAppId using '--disable-open-appid'
configure: error: "Fatal!"
--Installation von openssl-devel
# yum install openssl-devel.x86_64
In der Umgebung dieses Artikels wurde Snorts configure
nach Abschluss der Installation von openssl-devel endgültig normal abgeschlossen. Folgendes wird im Snort-Verzeichnis ausgeführt.
# ./configure
# make
# make install
Nach der Installation von Snort sind einige Einstellungen erforderlich, um Snort verwenden zu können.
Wenn der Befehl "cp" verwendet wird, wird er danach im Verzeichnis "/ usr / local / src / snort-2.9.16" ausgeführt.
--Benutzer erstellt
# useradd snort
Die Datei / etc / sysconfig / snort
konfiguriert den Dienst.
# cp rpm/snort.sysconfig /etc/sysconfig/snort
--Bearbeiten Sie snort.sysconfig
# vi /etc/sysconfig/snort
Ändern Sie den Wert von INTERFACE in den Wert der von Ihnen verwendeten Schnittstelle.
< INTERFACE=eth0
---
> INTERFACE=enp0s8
Der Standardausführungspfad für das Startskript lautet "/ usr / sbin / snort". Erstellen Sie eine symbolische Verknüpfung, da sie sich vom installierten Pfad unterscheidet.
--Erstellen eines Startskripts
# cp rpm/snortd /etc/init.d/
# chmod 755 /etc/init.d/snortd
--Erstellen einer symbolischen Verbindung
# ln -s /usr/local/bin/snort /usr/sbin/snort
Im Allgemeinen wird in Sicherheitssoftware und IDS das charakteristische Zugriffsmuster eines Angreifers als Signatur bezeichnet. Snort erkennt schädliche Pakete anhand der im Regelsatz (Regeldatei) beschriebenen Signatur. Die Community-Version des Regelsatzes auf der offiziellen Website kann kostenlos verwendet werden.
# cd /tmp
# wget https://www.snort.org/downloads/community/community-rules.tar.gz
--Unzip
# tar xzvf community-rules.tar.gz
# cd community-rules
--Erstellen eines Verzeichnisses
# mkdir -p /etc/snort/rules
--Kopie von sid-msg.map
# cp sid-msg.map /etc/snort/
# cp community.rules /etc/snort/rules/
# chown -R snort.snort /etc/snort
--Erstellen eines Verzeichnisses
# mkdir /var/log/snor
# chown -R snort.snort /var/log/snort
# cd /usr/local/src/snort-2.9.16
# cp rpm/snort.logrotate /etc/logrotate.d/snort
Die Datei / etc / snort / snort.conf
ist die Datei mit den Betriebseinstellungen.
--Bearbeiten Sie snort.conf
# vi /etc/snort/snort.conf
Ändern Sie den Wert von ** ipvar HOME_NET **, um das zu überwachende Netzwerk anzugeben.
< ipvar HOME_NET any
---
> ipvar HOME_NET 192.168.1.0/24
Stellen Sie die externe Netzwerkadresse ein. Geben Sie grundsätzlich den Standardwert "any" an.
ipvar EXTERNAL_NET any
Ändern Sie den relativen Pfad der folgenden Variablen zum aktuellen Pfad.
< var RULE_PATH ../rules
< var SO_RULE_PATH ../so_rules
< var PREPROC_RULE_PATH ../preproc_rules
---
> var RULE_PATH ./rules
> var SO_RULE_PATH ./so_rules
> var PREPROC_RULE_PATH ./preproc_rules
113,114c113,114
< var WHITE_LIST_PATH ../rules
< var BLACK_LIST_PATH ../rules
---
> var WHITE_LIST_PATH ./rules
> var BLACK_LIST_PATH ./rules
510,512c510,513
Kommentieren Sie nicht verwendete Einstellungen aus und fügen Sie community.rules hinzu.
< nested_ip inner, \
< whitelist $WHITE_LIST_PATH/white_list.rules, \
< blacklist $BLACK_LIST_PATH/black_list.rules
---
> # nested_ip inner, \
> nested_ip inner
> # whitelist $WHITE_LIST_PATH/white_list.rules, \
> # blacklist $BLACK_LIST_PATH/black_list.rules
< include $RULE_PATH/app-detect.rules
< include $RULE_PATH/attack-responses.rules
< include $RULE_PATH/backdoor.rules
< include $RULE_PATH/bad-traffic.rules
< include $RULE_PATH/blacklist.rules
< include $RULE_PATH/botnet-cnc.rules
< include $RULE_PATH/browser-chrome.rules
< include $RULE_PATH/browser-firefox.rules
< include $RULE_PATH/browser-ie.rules
< include $RULE_PATH/browser-other.rules
< include $RULE_PATH/browser-plugins.rules
< include $RULE_PATH/browser-webkit.rules
< include $RULE_PATH/chat.rules
< include $RULE_PATH/content-replace.rules
< include $RULE_PATH/ddos.rules
< include $RULE_PATH/dns.rules
< include $RULE_PATH/dos.rules
< include $RULE_PATH/experimental.rules
< include $RULE_PATH/exploit-kit.rules
< include $RULE_PATH/exploit.rules
< include $RULE_PATH/file-executable.rules
< include $RULE_PATH/file-flash.rules
< include $RULE_PATH/file-identify.rules
< include $RULE_PATH/file-image.rules
< include $RULE_PATH/file-multimedia.rules
< include $RULE_PATH/file-office.rules
< include $RULE_PATH/file-other.rules
< include $RULE_PATH/file-pdf.rules
< include $RULE_PATH/finger.rules
< include $RULE_PATH/ftp.rules
< include $RULE_PATH/icmp-info.rules
< include $RULE_PATH/icmp.rules
< include $RULE_PATH/imap.rules
< include $RULE_PATH/indicator-compromise.rules
< include $RULE_PATH/indicator-obfuscation.rules
< include $RULE_PATH/indicator-shellcode.rules
< include $RULE_PATH/info.rules
< include $RULE_PATH/malware-backdoor.rules
< include $RULE_PATH/malware-cnc.rules
< include $RULE_PATH/malware-other.rules
< include $RULE_PATH/malware-tools.rules
< include $RULE_PATH/misc.rules
< include $RULE_PATH/multimedia.rules
< include $RULE_PATH/mysql.rules
< include $RULE_PATH/netbios.rules
< include $RULE_PATH/nntp.rules
< include $RULE_PATH/oracle.rules
< include $RULE_PATH/os-linux.rules
< include $RULE_PATH/os-other.rules
< include $RULE_PATH/os-solaris.rules
< include $RULE_PATH/os-windows.rules
< include $RULE_PATH/other-ids.rules
< include $RULE_PATH/p2p.rules
< include $RULE_PATH/phishing-spam.rules
< include $RULE_PATH/policy-multimedia.rules
< include $RULE_PATH/policy-other.rules
< include $RULE_PATH/policy.rules
< include $RULE_PATH/policy-social.rules
< include $RULE_PATH/policy-spam.rules
< include $RULE_PATH/pop2.rules
< include $RULE_PATH/pop3.rules
< include $RULE_PATH/protocol-finger.rules
< include $RULE_PATH/protocol-ftp.rules
< include $RULE_PATH/protocol-icmp.rules
< include $RULE_PATH/protocol-imap.rules
< include $RULE_PATH/protocol-pop.rules
< include $RULE_PATH/protocol-services.rules
< include $RULE_PATH/protocol-voip.rules
< include $RULE_PATH/pua-adware.rules
< include $RULE_PATH/pua-other.rules
< include $RULE_PATH/pua-p2p.rules
< include $RULE_PATH/pua-toolbars.rules
< include $RULE_PATH/rpc.rules
< include $RULE_PATH/rservices.rules
< include $RULE_PATH/scada.rules
< include $RULE_PATH/scan.rules
< include $RULE_PATH/server-apache.rules
< include $RULE_PATH/server-iis.rules
< include $RULE_PATH/server-mail.rules
< include $RULE_PATH/server-mssql.rules
< include $RULE_PATH/server-mysql.rules
< include $RULE_PATH/server-oracle.rules
< include $RULE_PATH/server-other.rules
< include $RULE_PATH/server-webapp.rules
< include $RULE_PATH/shellcode.rules
< include $RULE_PATH/smtp.rules
< include $RULE_PATH/snmp.rules
< include $RULE_PATH/specific-threats.rules
< include $RULE_PATH/spyware-put.rules
< include $RULE_PATH/sql.rules
< include $RULE_PATH/telnet.rules
< include $RULE_PATH/tftp.rules
< include $RULE_PATH/virus.rules
< include $RULE_PATH/voip.rules
< include $RULE_PATH/web-activex.rules
< include $RULE_PATH/web-attacks.rules
< include $RULE_PATH/web-cgi.rules
< include $RULE_PATH/web-client.rules
< include $RULE_PATH/web-coldfusion.rules
< include $RULE_PATH/web-frontpage.rules
< include $RULE_PATH/web-iis.rules
< include $RULE_PATH/web-misc.rules
< include $RULE_PATH/web-php.rules
< include $RULE_PATH/x11.rules
---
> include $RULE_PATH/community.rules
Stellen Sie den Versprechen-Cas-Modus so ein, dass Pakete empfangen werden, die für andere Hosts bestimmt sind. Fügen Sie der Schnittstellendatei den Einstellungswert ** PROMISC ** hinzu.
--Netzwerkeinstellungen
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
PROMISC=yes
Erstellen Sie eine Regel zur Überprüfung und überprüfen Sie den Vorgang. In diesem Artikel wird die Ping-Erkennung als Beispiel verwendet.
Die Regeldatei wird unter "/ etc / snort / rules" gespeichert. Beschreibt die Regeldatei.
Die Signatur der Regeldatei besteht aus einem Regelkopf und einem Regelkörper.
Regelkopf: Regelzugang/Protokoll/IP Adresse/Hafen/Richtungsoperator/IP Adresse/Hafen/
Regelkörper: Optional
Es gibt die folgenden Arten von Regelaktionen.
Art | Überblick |
---|---|
alert | Gibt Pakete aus, die den Regeln entsprechen, und gibt eine Warnung aus |
log | Ausgabepakete, die den Regeln entsprechen, im Protokoll |
pass | Ignorieren Sie Pakete, die der Regel entsprechen |
acitive | Geben Sie eine Warnung für Pakete aus, die der Regel entsprechen, und führen Sie die entsprechende dynamische Regel aus |
dynamic | Geben Sie das entsprechende Paket in das Protokoll aus |
# vi /etc/snort/rules/local.rules
alert icmp any any -> any any (msg: "ICMP Packet detected"; sid:999999;)
Sie müssen snort nach dem Bearbeiten der Regel neu starten.
Die Option "-D" ist im Standard-Startskript angegeben. Wenn Sie also das Startskript ausführen, wird es im Dämonmodus gestartet.
# /etc/init.d/snortd start
** Überprüfen Sie das Syslog, um sicherzustellen, dass beim Start keine Fehler vorliegen. ** **.
Wenn es normal startet, können Sie den folgenden Vorgang überprüfen.
[root@localhost snort-2.9.16]# ps aux | grep snort | grep -v grep
snort 11481 0.0 6.3 164828 64456 ? Ssl 03:03 0:07 /usr/sbin/snort -A fast -b -d -D -i enp0s8 -u snort -g snort -c /etc/snort/snort.conf -l /var/log/snort
Sie können es auch als Sniffer starten, wie unten gezeigt. Wenn Sie es als Sniffer starten, dauert die Verarbeitung einige Zeit, sodass Sie es im Grunde genommen nur für die Überprüfung des Vorgangs verwenden.
# snort -v
Running in packet dump mode
--== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "enp0s3".
Decoding Ethernet
--== Initialization Complete ==--
,,_ -*> Snort! <*-
o" )~ Version 2.9.16 GRE (Build 118)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.9.1 (with TPACKET_V3)
Using PCRE version: 8.32 2012-11-30
Using ZLIB version: 1.2.7
Commencing packet processing (pid=17768)
Führen Sie einen Ping von einem anderen Terminal aus. Wenn Sie sich das folgende Protokoll ansehen, können Sie sehen, dass das ICMP-Paket erkannt wurde.
# tail -f /var/log/snort/alert
04/22-03:04:27.545270 [**] [1:999999:0] ICMP Packet detected [**] [Priority: 0] {ICMP} 192.168.1.10 -> 192.168.1.16
Es ist schwierig, Snot zu installieren, aber im tatsächlichen Betrieb ist es erforderlich, den Regelsatz zu optimieren und anhand einer großen Anzahl von Protokollen auf Anomalien zu prüfen.
Es gibt ein Tool namens Oinkmaster, das die Regeldatei automatisch aktualisieren kann, und SnortSnarf, das die von Snort ausgegebene Protokolldatei in eine HTML-Datei konvertieren kann, damit sie in einem Webbrowser überprüft werden kann.
Nebenbei bedeutet Schnauben Schnauben.