Suricata - Eina de seguretat per a la detecció i prevenció d'intrusions


Suricata és un motor de detecció d'amenaces potent, versàtil i de codi obert que ofereix funcionalitats per a la detecció d'intrusions (IDS), la prevenció d'intrusions (IPS) i la supervisió de la seguretat de la xarxa. Realitza una inspecció profunda de paquets juntament amb un patró que coincideix amb una combinació que és increïblement potent en la detecció d'amenaces.

En el moment d'escriure aquesta guia, l'última versió de Suricata és la 6.0.5.

  • IDS/IPS: Suricata és un motor de prevenció i detecció d'intrusions basat en regles que aprofita conjunts de regles desenvolupats externament, com ara el conjunt de regles Emerging Threats Suricata per supervisar el trànsit de xarxa per detectar qualsevol activitat maliciosa, infraccions de polítiques i amenaces.
  • Detecció automàtica de protocols: el motor Suricata detecta automàticament protocols com ara HTTP i HTTPS. FTP i SMB a qualsevol port i apliqueu la lògica de detecció i registre adequada. Això és útil per detectar programari maliciós i canals CnC.
  • Seqüència d'ordres Lua: Suricata pot invocar seqüències d'ordres Lua que proporcionen una detecció avançada de programari maliciós per detectar i descodificar el trànsit de programari maliciós que d'una altra manera és difícil de detectar.
  • Multiprocés: Suricata proporciona velocitat i importància en la determinació del trànsit de xarxa. El motor s'ha desenvolupat per aplicar la potència de processament augmentada que ofereixen els chipsets de maquinari multinucli moderns.

Instal·lació de l'eina de detecció d'intrusions Suricata a Linux

En aquesta secció, demostrarem com instal·lar Suricata en distribucions basades en RHEL.

Suricata és proporcionada pels repositoris Debian/Ubuntu i es pot instal·lar fàcilment mitjançant el gestor de paquets apt. Tanmateix, val la pena assenyalar que això no instal·la la darrera versió de Suricata. Per instal·lar la darrera versió, heu d'instal·lar-la des d'una font que tractarem més endavant en aquesta guia.

Per instal·lar Suricata mitjançant el gestor de paquets apt, executeu l'ordre:

$ sudo apt install suricata -y

Suricata s'inicia automàticament un cop instal·lat. Podeu confirmar-ho de la següent manera.

$ sudo systemctl status suricata

Per instal·lar Suricata a distribucions RHEL com CentOS Stream, Rocky Linux, AlmaLinux, Fedora i RHEL, primer heu d'habilitar el dipòsit EPEL.

$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm  [RHEL 9]
$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 8]
$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 7]

Un cop EPEL estigui habilitat, instal·leu els següents paquets necessaris i afegiu el repositori OISF al vostre sistema.

----------- On Fedora Systems ----------- 
$ sudo dnf install dnf-plugins-core
$ sudo  dnf copr enable @oisf/suricata-6.0

----------- On RHEL Systems ----------- 
$ sudo dnf install yum-plugin-copr
$ sudo dnf copr enable @oisf/suricata-6.0

A continuació, instal·leu Suricata mitjançant el gestor de paquets yum tal com es mostra.

$ sudo dnf install suricata -y
Or
$ sudo yum install suricata -y

Un cop instal·lat Suricata, inicieu i verifiqueu el seu estat.

$ sudo systemctl start suricata
$ sudo systemctl status suricata

Instal·leu Suricata des de la font a Linux

Els repositoris del sistema operatiu predeterminat no proporcionen la darrera versió de Suricata. Si el vostre objectiu és instal·lar la darrera versió de Suricata, haureu d'instal·lar-la des de la font.

En el moment d'escriure aquesta guia, l'última versió de Suricata és la 6.0.5. Per instal·lar Suricata des de la font a les distribucions Ubuntu/Debian i RHEL, instal·leu les biblioteques, eines de compilació i dependències següents.

----------- On Debian Systems ----------- 
$ sudo apt install rustc build-essential cargo libpcre3 libpcre3-dbg libpcre3-dev make autoconf automake libtool libcap-ng0 make libmagic-dev libjansson-dev libjansson4 libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev pkg-config libnetfilter-queue1 libnfnetlink0 libnetfilter-queue-dev libnfnetlink-dev -y

----------- On RHEL Systems ----------- 
$ sudo yum install gcc libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel PyYAML libmaxminddb-devel rustc cargo lz4-devel -y

A continuació, instal·leu l'eina d'actualització de Suricata per actualitzar les regles de Suricata.

$ sudo apt install python3-pip           [On Debian]
$ sudo yum install python3-pip           [On RHEL]
$ pip3 install --upgrade suricata-update

A continuació, creeu un enllaç simbòlic a /usr/bin/suricata-update.

$ sudo ln -s /usr/local/bin/suricata-update /usr/bin/suricata-update

Ara aneu a l'ordre wget.

$ wget https://www.openinfosecfoundation.org/download/suricata-6.0.6.tar.gz

Un cop descarregat, extreu el fitxer tarball i instal·leu-lo.

$ sudo tar -xvf suricata-6.0.6.tar.gz
$ cd suricata-6.0.6
$ ./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ make install-full

Configuració de Suricata a Linux

Per començar a configurar Suricata, hem d'especificar la IP interna i la xarxa externa. Per fer-ho, accediu al fitxer de configuració.

$ sudo vim /etc/suricata/suricata.yaml

Per a la directiva HOME_NET, especifiqueu l'adreça IP del vostre sistema Linux.

HOME_NET: "[173.82.235.7]"

A continuació, configureu la directiva EXTERNAL_NET a !$HOME_NET.

EXTERNAL_NET: "!$HOME_NET"

A continuació, especifiqueu la interfície de xarxa en què Suricata inspeccionarà el trànsit de xarxa. En el nostre cas, aquesta és la interfície eth0.

Podeu verificar la vostra interfície de xarxa activa mitjançant l'ordre ip:

$ ip a

Al fitxer de configuració, actualitzeu la directiva d'interfície amb el nom de la interfície de xarxa.

- interface: eth0

A continuació, assegureu-vos que l'atribut default-rule-path estigui definit a /etc/suricata/rules.

A continuació, deseu els canvis i tanqueu el fitxer de configuració. A continuació, reinicieu Suricata perquè s'apliquin els canvis.

$ sudo systemctl status suricata

Actualització de les regles de Suricata a Linux

Per defecte, Suricata s'envia amb un conjunt limitat de regles de detecció ubicades al directori /etc/suricata/rules. Tanmateix, es consideren febles i ineficaços per detectar intrusions. Heu de carregar les regles d'amenaça emergent (ET) que es consideren els conjunts de regles més complets per a Suricata.

Suricata proporciona una eina coneguda com a suricata-update que recupera conjunts de regles de proveïdors externs. Per obtenir un conjunt de regles actualitzat per al vostre servidor, executeu l'ordre següent.

$ sudo suricata-update -o /etc/suricata/rules

A la sortida, podeu veure l'actualització de suricata que obté les regles obertes d'Emerging Threats ET gratuïtes i les deseu al fitxer de regles /etc/suricata/rules/suricata de Suricata. A més, indica el nombre de normes processades. En aquest exemple, s'han afegit un total de 35941. D'aquests, 28221 es van habilitar, 18 es van eliminar i 1249 es van modificar.

Afegint conjunts de regles de Suricata a Linux

L'eina d'actualització de suricata us permet obtenir regles dels proveïdors de conjunts de regles. Alguns són gratuïts, com ara el conjunt ET Open, mentre que altres requereixen una subscripció de pagament.

Per llistar el conjunt predeterminat de proveïdors de regles, executeu l'ordre suricata-update tal com es mostra.

$ sudo suricata-update list-sources

Per afegir un conjunt de regles, per exemple, el conjunt de regles tgreen/hunting, executeu l'ordre següent.

$ sudo suricata-update enable-source tgreen/hunting

Un cop hàgiu afegit el conjunt de regles, executeu l'ordre suricata-update una vegada més amb el senyalador -o /etc/suricata/rules.

$ sudo suricata-update -o /etc/suricata/rules

Provant les regles de Suricata a Linux

Abans de començar a provar Suricata, es recomana provar si la configuració està bé. Per fer-ho, executeu l'ordre següent:

$ sudo suricata -T -c /etc/suricata/suricata.yaml -v

Assegureu-vos que no es notifiquen errors. Si esteu executant RHEL, CentOS Stream, Fedora i Rocky Linux, inicieu i activeu Suricata.

$ sudo systemctl start suricata 
$ sudo systemctl enable suricata 

Fins ara, hem instal·lat i configurat Suricata correctament i hem actualitzat els conjunts de regles. El conjunt de regles obertes ET conté més de 30.000 regles per detectar trànsit maliciós. En aquesta secció, posarem a prova Suricata i comprovarem si pot detectar trànsit de xarxa sospitós.

Provarem el conjunt de regles ET Open simulant una intrusió tal com recomana la guia d'inici ràpid de Suricata.

La funcionalitat de l'IDS es provarà amb un identificador de signatura 2100498 enviant una sol·licitud HTTP al lloc web testmynids.org, que és un marc NIDS (Network Intrusion and Detection System).

$ curl http://testmynids.org/uid/index.html

Hauríeu d'obtenir la següent sortida.

uid=0(root) gid=0(root) groups=0(root)

La sol·licitud HTTP enviada està dissenyada per activar una alerta imitant la sortida de l'ordre id que es pot executar en un sistema remot compromès mitjançant un shell.

Ara revisem els registres de Suricata per obtenir una alerta corresponent. Suricata s'envia amb dos fitxers de registre que estan activats per defecte.

/var/log/suricata/fast.log
/var/log/suricata/eve.log

Comprovarem si hi ha una entrada de registre al fitxer de registre /var/log/suricata/fast.log que correspongui a l'ordre grep. Cercarem les entrades de registre mitjançant l'identificador de regla 2100498 de la documentació d'inici ràpid.

$ grep 2100948 /var/log/suricata/fast.log

Obtindreu la següent sortida que significa una intrusió. Aquí, 173.82.235.7 és l'adreça IP pública del servidor.

09/09/2022-22:17:06.796434  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 13.226.210.123:80 -> 173.82.235.7:33822

Alternativament, podeu comprovar el fitxer de registre /var/log/suricata/eve.log per trobar l'ID de signatura 2100498 tal com es mostra.

$ jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json