Introduzione

I sistemi di rilevamento delle intrusioni vengono utilizzati per registrare connessioni sospette e segnalare quando sembra che si stia verificando un'attività insolita.

Lo strumento PSAD (Detect Network Intrusion Attempts), che sta per rilevamento degli attacchi di port scan, è un software che monitora attivamente i log del firewall per determinare se è in corso una scansione o un evento di attacco. Può quindi avvisare gli amministratori o adottare misure attive per scoraggiare la minaccia.

In questa guida, spiegheremo come installare e configurare psad su un VPS di Ubuntu 18.04 LTS.

Installare psad

Psad è disponibile nei repository predefiniti di Ubuntu, quindi può essere facilmente installato tramite apt:
sudo apt update
sudo apt install psad

Per configurare gli avvisi tramite e-mail verso l'amministratore del server, ti verrà chiesto di configurare il server di posta postfix.

Nella maggior parte dei casi, è possibile selezionare "Sito Internet", quindi inserire il nome di dominio associato al proprio server. Questa sarà la porzione di dominio del nome utilizzato nel campo "Da" nelle e-mail generate da psad.

Configurare le regole IPTables

Psad rileva l'attività sulle porte del server monitorando i log prodotti da un firewall. Ubuntu viene fornito con il firewall iptables per impostazione predefinita.

Per vedere le regole predefinite, da terminale digitare:
sudo iptables -S

Dovreste avere queste regole:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Se si vogliono ripristinare le regole predefinite dopo aver aggiunto quelle di cui parleremo in questa guida, dare il seguente comando:
sudo iptables -F

Possiamo iniziare a configurare iptables, quindi eliminiamo le connessioni di cui non abbiamo bisogno oppure aggiungiamo quelle che vogliamo accettare.

La prima regola consentirà tutto il traffico generato dal nostro server, diretto al nostro server:
sudo iptables -A INPUT -i lo -j ACCEPT

Successivamente, vogliamo aggiungere una regola per consentire esplicitamente tutto il traffico correlato a una connessione esistente. Ciò consentirà alle nostre sessioni in corso di continuare senza interruzioni:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Successivamente, possiamo aggiungere i servizi che desideriamo mantenere aperti come l'SSH. Per SSH, possiamo aggiungere una riga come questa, se si utilizza la porta di default 22:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Se utilizziamo un web server, la porta di default da abilitare è la 80 per le connessioni HTTP oppure la 443 per quelle HTTPS:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Se si desidera abilitare altre porte modificare il parametro protocol e num_porta con quelli necessari:
sudo iptables -A INPUT -p protocol --dport num_porta -j ACCEPT

Dopo aver terminato di aggiungere i servizi necessari, elimineremo tutte le connessioni rimanenti.
Prima di farlo, però, dobbiamo aggiungere la regola che dice a iptables di iniziare a registrare il traffico.
sudo iptables -A INPUT -j LOG
sudo iptables -A FORWARD -j LOG

Possiamo adesso bloccare tutto il traffico estraneo, non permesso dalle nostre regole:
sudo iptables -A INPUT -j DROP

Per impostazione predefinita, iptables non mantiene le sue regole se viene riavviato il server, quindi dopo aver testato la configurazione e verificato che faccia ciò che si desidera, è possibile scaricare e abilitare uno strumento che mantenga queste regole persistenti:
sudo apt install iptables-persistent
sudo service netfilter-persistent start

Configurare psad

Possiamo iniziare a configurare psad per iniziare l'analisi dei log.

Apriamo il file di configurazione principale di psad con i privilegi di root:
sudo nano /etc/psad/psad.conf

Inserire l'indirizzo e-mail al quale si desidera ricevere le e-mail di notifica da parte di psad.
Inserire anche il vostro hostname:

EMAIL_ADDRESSES     [email protected], [email protected];
HOSTNAME           tuodominio.com;

Assicurati di terminare ciascuna delle tue linee con un punto e virgola ;

I "livelli di pericolo" sono un modo per psad di classificare i livelli di minaccia.

Vengono determinati automaticamente dal numero di pacchetti coinvolti in un evento, ma è possibile assegnare determinati tipi di traffico anche a un determinato livello di pericolo. Le soglie predefinite per ciascun livello da raggiungere sono:

DANGER_LEVEL1           5;
DANGER_LEVEL2           15;
DANGER_LEVEL3           150;
DANGER_LEVEL4           1500;
DANGER_LEVEL5           10000;

È possibile modificare questi livelli in base al livello di sensibilità che si desidera per gli avvisi.

È inoltre possibile configurare la modalità con cui psad sarà sensibile attraverso il parametro PORT_RANGE_SCAN_THRESHOLD che determina il numero di porte in un intervallo che deve essere scansionato prima che venga generato un avviso:

PORT_RANGE_SCAN_THRESHOLD       1;

Una delle cose più importanti da configurare è il parametro IPT_SYSLOG_FILE, perché al momento non è puntato su un file che syslog usa per impostazione predefinita.

Modifica questo per puntare al file syslog, in cui psad avrà effettivamente l'opportunità di esaminare i log attivi:

IPT_SYSLOG_FILE         /var/log/syslog;

Possiamo configurare psad in modo che ignori determinate porte, quindi non riceveremo avvisi relativi alle porte ignorate:

IGNORE_PORTS            porte_da_ignorare;

È possibile ignorare in modo simile i messaggi in base ad altri parametri come IGNORE_PROTOCOLS, IGNORE_INTERFACES e IGNORE_LOG_PREFIXES.

Se noti che ricevi avvisi troppo spesso, puoi impostare la soglia sui messaggi di posta elettronica regolando il livello da raggiungere prima che venga inviata un'email:

MIN_DANGER_LEVEL           1;  
EMAIL_ALERT_DANGER_LEVEL   1;  

È possibile impostare in modo diretto il limite di email da ricevere:

EMAIL_LIMIT                0;

Zero significa che non c'è limite.

Salvare e chiudere il file.

Avviare psad

Ora che disponiamo di una configurazione di base di psad, completa di funzionalità di avviso, possiamo attivare il nostro sistema.

Prima di iniziare, dovremmo aggiornare le definizioni di firma di psad in modo che possa riconoscere correttamente i tipi di attacco conosciuti:
sudo psad --sig-update

Riavviamo psad:
sudo service psad restart

Per vedere lo stato corrente degli eventi rilevati da psad, digitare:
sudo psad -S

L'output che dovresti ricevere è simile a questo:

[-] psad: pid file /var/run/psad/psadwatchd.pid does not exist for psadwatchd on MIOIP
[+] psad_fw_read (pid: 7292)  %CPU: 0.0  %MEM: 0.9
    Running since: Fri May 11 18:46:54 2018

[+] psad (pid: 7289)  %CPU: 0.0  %MEM: 1.0
    Running since: Fri May 11 18:46:54 2018
    Command line arguments: [none specified]
    Alert email address(es): [email protected]

[+] Version: psad v2.4.3

[+] Top 50 signature matches:
        [NONE]

[+] Top 25 attackers:
        [NONE]

[+] Top 20 scanned ports:
        [NONE]

[+] iptables log prefix counters:
        [NONE]

    Total protocol packet counters:

[+] IP Status Detail:
        [NONE]

    Total scan sources: 0
    Total scan destinations: 0

[+] These results are available in: /var/log/psad/status.out

Non è ancora stato rilevato nulla. Possiamo anche vedere i diversi file log di psad nel seguente percorso /var/log/psad/.

Scansione di prova

Da un altro computer, dovremmo provare a scansionare le porte del nostro server. Possiamo farlo con l'utility nmap oppure utilizzando siti specifici per questa funzione.

Effettueremo una scansione della porta tcp SYN da un'altro computer:
sudo nmap -PN -sS dominio_oppure_ip

Output:

Starting Nmap 7.01 ( https://nmap.org ) at 2018-05-11 18:48 CEST
Nmap scan report for MIOIP (MIOIP)
Host is up (0.00043s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
443/tcp open  https

Possiamo provare a dare nuovamente il comando per controllare lo stato di psad:
sudo psad -S

Dovresti vedere una lista molto più ampia di avvisi.
Se hai impostato avvisi via email, dovresti aver ricevuto anche un'email.

Prevenzione delle intrusioni

Eventualmente possiamo implementare un meccanismo di prevenzione in cui psad può modificare automaticamente le regole di iptables per vietare gli scanner.

Apriamo il file auto_dl:
sudo nano /etc/psad/auto_dl

Questo file specifica quale livello di pericolo dovremmo impostare per determinati indirizzi IP. Ad esempio, se abbiamo un aggressore che cerca continuamente di sondare il nostro sistema, possiamo impostare automaticamente sul livello di pericolo 5:

Indirizzo_Ip_aggressore          5;

È possibile anche esonerare certi indirizzi IP dai controlli di psad. Potremmo aggiungere il nostro indirizzo IP locale e l'IP del nostro computer di casa o dell'ufficio per evitare di essere bloccati. Basterà impostare il valore su "0".

computer_locale_ip        0;

Salvare e chiudere il file.

Apriamo il seguente file:
sudo nano /etc/psad/psad.conf

Cerca il parametro chiamato ENABLE_AUTO_IDS. Questa è la regola che consente a psad di modificare il nostro firewall per bloccare determinati indirizzi:

ENABLE_AUTO_IDS         Y;

Possiamo impostare quale livello di minaccia consideriamo così grave da bloccare un indirizzo IP:

AUTO_IDS_DANGER_LEVEL       5;

Opzione fondamentale è l'AUTO_BLOCK_TIMEOUT, ovvero per quanto tempo l'indirizzo IP verrà bloccato, in secondi.

AUTO_BLOCK_TIMEOUT          3600;

Salvare e chiudere il file.

Test Di Prevenzione delle intrusioni

Possiamo testare come funziona vietando temporaneamente noi stessi. Nello stesso file di configurazione, imposteremo questi parametri:

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       4;
AUTO_BLOCK_TIMEOUT          60;

Questo attiverà la configurazione automatica del firewall, imposterà la soglia al livello di pericolo 4, che attiveremo con una normale scansione SYN e imposteremo il tempo di blocco per 60 secondi.

Salvare e chiudere il file.

Apriamo il file auto_dl se hai aggiunto il tuo indirizzo IP di casa o di ufficio e commentalo temporaneamente:
sudo nano /etc/psad/auto_dl

#local_computer_ip      0;

Riavviamo psad:
sudo service psad restart

Dal proprio computer avviare lo scan:
sudo nmap -PN -sS dominio_oppure_ip

Dopo pochi secondi, se si è connessi al server con psad tramite SSH, verrete disconnessi. Non potrete accedervi per 60 secondi.

Questo perché psad ha agito quando la tua scansione ha colpito abbastanza porte per raggiungere il livello di pericolo 4. Ha modificato le regole di iptables per deviare il traffico e bloccare il tuo IP.

Una volta che riesci ad accedere nuovamente, potrai vedere che PSAD ha bloccato il traffico da te generato:
sudo iptables -S

Ora che hai testato questa funzionalità, ripristina nuovamente i parametri che desideri utilizzare. Inoltre dovresti aggiungere nuovamente gli indirizzi IP desiderati, come quello dell'ufficio o di casa:

Apriamo il file auto_dl:
sudo nano /etc/psad/auto_dl

local_computer_ip           0;

Apriamo il seguente file:
sudo nano /etc/psad/psad.conf

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       5;
AUTO_BLOCK_TIMEOUT          3600;

Adesso è possibile riavviare psad:
sudo service psad restart

L'installazione e la configurazione di PSAD su Ubuntu 18.04 LTS è terminata