GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Una guida definitiva per proteggere l'host Ubuntu

Ubuntu è definito come il sistema operativo altamente sicuro disponibile, ma presenta dei difetti nella sua installazione predefinita come ogni altro sistema operativo. Per rimuovere queste debolezze, lo specialista della sicurezza IT ha pubblicato linee guida per combattere le back-door/debolezze del tuo sistema e proteggerti da alcuni degli exploit comuni di Ubuntu. In questa guida esamineremo alcune importanti impostazioni di sicurezza che ogni amministratore di sistema desidera applicare al proprio server.

1. Rafforza le impostazioni di avvio

Per impedire agli utenti non root di modificare il file di configurazione del caricatore di avvio che è /boot/grub/grub.cfg, impostare i proprietari e i gruppi di questo file su root. Esegui il comando seguente per modificare la proprietà in root.

# chown root:root /boot/grub/grub.cfg

Per impedire agli utenti non root di leggere i parametri di avvio, impostare l'autorizzazione per il file del caricatore di avvio in sola lettura e scrittura. Esegui il comando seguente per ottenere questo benchmark.

# chmod og-rwx /boot/grub/grub.cfg

Impostare anche una password per il caricatore di avvio, in modo che qualsiasi utente non autorizzato che tenti di riavviare il sistema debba fornire una password per procedere al passaggio successivo. Ciò garantisce che un utente non autorizzato non sarà in grado di modificare il parametro di avvio come disabilitare SELinux o modificare la partizione di avvio. Esegui il comando seguente per creare una password del caricatore di avvio.

# grub-mkpasswd-pbkdf2

Ora crea un nuovo file dal nome /etc/grub.d/00_header e aggiungi le seguenti righe.

set superusers=""
password_pbkdf2

Rimuovere l'opzione --unrestricted nel parametro CLASS del file /etc/grub.d/10_linux . Ciò garantisce un requisito obbligatorio della password per procedere al passaggio successivo, ovvero la modifica dei parametri di avvio.

Aggiorna il grub

# update-grub

2. File system sicuro

Crea partizioni basate su diverse categorie come i dati degli utenti nella partizione /home, i file di scambio nella partizione /swap, i file temporanei nella partizione /tmp, i file di configurazione del sistema nella partizione /etc, i file del dispositivo nella partizione /dev ecc. Ciò impedirà l'esaurimento delle risorse poiché nonché opzioni di montaggio flessibili basate sull'uso previsto dei dati.

2.1 Crea partizione per /tmp

Il primo motivo per creare una partizione separata per /tmp è che ci sono possibilità di esaurimento delle risorse poiché la directory /tmp è scrivibile a livello mondiale. Inoltre, la creazione di una partizione separata per /temp consente di impostare l'opzione noexec contrassegnandola come inutilizzabile per l'esecuzione di codice da parte di utenti non autorizzati e l'hard-link al programma setuid di sistema.

2.2 Imposta l'opzione nodev per /tmp

Impostare l'opzione nodev per la partizione /tmp per impedire agli utenti di creare file di dispositivo a blocchi/caratteri. Modifica il file /etc/fstab e aggiungi la riga seguente.

# mount -o remount,nodev /tmp

2.3 Imposta l'opzione nosuid per /tmp

Per impedire agli utenti di creare file userid impostati nel file system /tmp, aggiungere la seguente riga in /etc/fstab poiché /tmp file-system viene utilizzato per l'archiviazione di file temporanei.

# mount -o remount,nosuid /tmp

2.4 Imposta l'opzione noexec per /tmp

Per impedire agli utenti di eseguire binari eseguibili, impostare l'opzione noexec per la partizione /tmp. Aggiungi la seguente riga in /etc/fstab per bloccare l'esecuzione di binari eseguibili.

# mount -o remount,noexec /tmp

2.5 Crea partizione separata per /var

I demoni di sistema e altri servizi memorizzano temporaneamente i dati dinamici in /var con alcune directory che possono essere scrivibili in tutto il mondo. Pertanto ci sono possibilità di esaurimento delle risorse in /var. Per prevenire l'esaurimento delle risorse in /var, crea una partizione separata per /var nella nuova installazione e per il sistema precedentemente installato, usa LVM per creare una nuova partizione.

2.6 Associa /var/tmp a /tmp

L'associazione del montaggio di /var/tmp a /tmp consentirà di proteggere /var/tmp nello stesso modo in cui lo è /tmp. Ciò impedirà anche a /var di esaurire la memoria in /var/tmp con file temporanei. Esegui il comando seguente per associare /tmp e /var/tmp

# sudo mount --bind /tmp /var/tmp

Per renderlo permanente aggiungi la seguente riga in /etc/fstab

# /tmp /var/tmp none bind 0 0

2.7 Crea partizione separata per /var/log

Per proteggere i dati di controllo sensibili e la protezione dall'esaurimento delle risorse, crea una partizione separata per /var/log in nuova installazione e per il sistema precedentemente installato, usa LVM per creare una nuova partizione.

2.8 Crea partizione separata per /var/log/audit

Il demone di controllo memorizza i dati di registro nella directory /var/log/audit. Per proteggere dall'esaurimento delle risorse poiché il registro di controllo può crescere fino a raggiungere dimensioni elevate e anche per proteggere i dati di controllo sensibili, creare una partizione separata per /var/log/audit nella nuova installazione e per il sistema precedentemente installato, utilizzare LVM per creare una nuova partizione.

2.9 Crea partizione separata per /home

I dati degli utenti sono memorizzati nella directory /home. È possibile limitare il tipo di file che possono essere archiviati in /home. Per ottenere ciò creare una partizione separata per /home nella nuova installazione e per il sistema precedentemente installato, utilizzare LVM per creare una nuova partizione. Anche una partizione separata per /home protegge dall'esaurimento delle risorse.

2.10 Imposta nodev per /home

Per evitare che la directory /home venga utilizzata per definire il carattere e bloccare il dispositivo speciale, impostare l'opzione nodev in modo che gli utenti non possano creare questi tipi di file. Modifica il file /etc/fstab e aggiungi le seguenti righe.

# mount -o remount, nodev /home

2.11 Imposta nodev per i supporti rimovibili

Un utente può ingannare i controlli di sicurezza utilizzando caratteri e bloccare dispositivi speciali da supporti rimovibili per accedere a file di dispositivi sensibili come /dev/kmem. Modifica il file /etc/fstab e aggiungi le seguenti righe.

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12 Imposta noexec su supporto rimovibile

Per impedire l'esecuzione di programmi da supporti rimovibili in modo che nessun programma dannoso possa essere inserito nel sistema, aggiungere le seguenti righe in /etc/fstab

# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13 Aggiungi nosuid al supporto rimovibile

Per impedire che il supporto rimovibile venga utilizzato come setuid/setgid, che consente agli utenti non root di posizionare programmi privilegiati nel sistema. Modifica /etc/fstab e aggiungi le seguenti righe

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 Aggiungi l'opzione nodev per la partizione /run/shm

Per impedire agli utenti di creare file di dispositivo speciali nelle partizioni /run/shm, aggiungere la seguente riga in /etc/fstab. Ciò garantisce che gli utenti non saranno in grado di creare dispositivi in ​​/run/shm

# mount -o remount,nodev /run/shm

2.15 Aggiungi l'opzione nosuid alla partizione /run/shm

Per impedire che /run/shm venga utilizzato come setuid/setgid, ciò consente agli utenti non root di posizionare programmi privilegiati nel sistema. Gli utenti possono eseguire il programma con il proprio uid e gid. Modifica /etc/fstab e aggiungi le seguenti righe

# mount -o remount,nosuid /run/shm

2.16 Aggiungi noexec alla partizione /run/shm

Per impedire che la partizione /run/shm venga utilizzata per l'esecuzione di programmi, aggiungi le seguenti righe in /etc/fstab

# mount -o remount, noexec /run/shm

2.17 Imposta sticky bit su directory scrivibili mondiali

Per impedire agli utenti di eliminare o rinominare i file in questa directory che non sono di loro proprietà , imposta sticky bit su.

# chmod +t /tmp
or
# chmod 1777 /tmp

3. Elimina i sistemi legacy

Non installare/utilizzare i seguenti servizi e utilità legacy poiché esistono vulnerabilità in questi sistemi/utilità. Questi sono:NIS, server/client RSH, server di conversazione/client, Telenet, TFTP, XINETD, Chargen, Daytime, eco, scarto, ora

4. Elimina i servizi per scopi speciali

Non installare/utilizzare i seguenti servizi poiché sono presenti vulnerabilità in questi servizi. Questi sono-
Sistema X Window, server di stampa Avahi Server, server DHCP, LDAP, NFS e RPC, server DNS, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. Pochi dei servizi di cui sopra sono effettivamente necessari per il funzionamento quotidiano come il server DNS. In tale situazione, è consigliabile installare questi server in un host separato che non contenga dati sensibili.

5. Configurazione di rete e firewall

5.1 Disabilita l'inoltro IP

Per evitare che il server venga utilizzato per inoltrare pacchetti, ovvero per fungere da router, impostare il parametro net.ipv4.ip_forward su 0 in /etc/sysctl.conf

net.ipv4.ip_forward = 0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.2 Disabilita il reindirizzamento sendpacket

Un utente non autorizzato può utilizzare un host compromesso dall'invio di pacchetti di reindirizzamenti ICMP a un altro dispositivo di routing per corrompere il routing. Per disabilitare il reindirizzamento dei pacchetti, impostare il parametro net.ipv4.conf.all.send_redirects e net.ipv4.conf.default.send_redirects su 0 in /etc/sysctl.conf

# net.ipv4.conf.all.send_redirects = 0

# net.ipv4.conf.default.send_redirects =0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.3 Disattiva l'accettazione del pacchetto di route di origine

Utilizzando i pacchetti instradati di origine, un utente può accedere all'indirizzo privato del sistema poiché è possibile specificare il percorso.
Impostare i parametri net.ipv4.conf.all.accept_source_route e net.ipv4.conf.default.accept_source_route su 0 in /etc/sysctl.conf

# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.4 Disattiva l'accettazione del reindirizzamento ICMP

Un utente può modificare la tabella di routing per inviare pacchetti a reti errate utilizzando un reindirizzamento ICMP fasullo, consentendo così l'acquisizione dei pacchetti. Per disabilitare l'accettazione del reindirizzamento ICMP, impostare i parametri net.ipv4.conf.all.accept_redirects e net.ipv4.conf.default.accept_redirects su 0 in /etc/sysctl.conf

# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.5 Disattiva l'accettazione del reindirizzamento ICMP sicuro

I reindirizzamenti ICMP sicuri e i reindirizzamenti ICMP sono quasi gli stessi, l'unica differenza è che l'origine dei pacchetti di reindirizzamenti ICMP sicuri è un gateway. Se il gateway di origine è compromesso, un utente può aggiornare la tabella di routing utilizzando i reindirizzamenti ICMP sicuri.
Impostare i parametri net.ipv4.conf.all.secure_redirects e net.ipv4.conf.default.secure_redirects su 0 in /etc/sysctl.conf per disabilitare Secure ICMP Redirect Acceptance.

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.6 Registra pacchetti sospetti

Un amministratore può diagnosticare il sistema quando un utente malintenzionato invia pacchetti contraffatti.

Impostare i parametri net.ipv4.conf.all.log_martians e net.ipv4.conf.default.log_martians su 1 in /etc/sysctl.conf per impedirlo.

# net.ipv4.conf.all.log_martians=1

# net.ipv4.conf.default.log_martians=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.7 Abilita richiesta di trasmissione ignorata

Per prevenire l'attacco smurf in una rete, impostare net.ipv4.icmp_echo_ignore_broadcasts su 1 che consentirà al sistema di ignorare tutte le richieste di eco e timestamp ICMP per trasmettere e multicast gli indirizzi. Impostare il parametro net.ipv4.icmp_echo_ignore_broadcasts su 1 in /etc/sysctl.conf

# net.ipv4.icmp_echo_ignore_broadcasts=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.8 Abilita la protezione dei messaggi di errore errati

Per impedire all'attaccante di inviare risposte che violano RFC-1122 nel tentativo di inserire file di registro di sistema con messaggi di errore inutili. Impostare il parametro net.ipv4.icmp_ignore_bogus_error_responses su 1 in /etc/sysctl.conf per bloccare le risposte di errore fasulle.

# net.ipv4.icmp_ignore_bogus_error_responses=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.9 Abilita la convalida del percorso di origine consigliato da RFC

Usando il filtro del percorso inverso, il kernel può determinare se il pacchetto è valido, altrimenti eliminerà il pacchetto.
Impostare i parametri net.ipv4.conf.all.rp_filter e net.ipv4.conf.default.rp_filter su 1 in /etc/sysctl.conf

# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.10 Abilita i cookie TCP SYN

Un utente malintenzionato può avviare un attacco DOS nel server inondando i pacchetti SYN senza inizializzare l'handshake a tre vie. Per evitare ciò, impostare il parametro net.ipv4.tcp_syncookies su 1 in /etc/sysctl.conf

# net.ipv4.tcp_syncookies=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.10 Disattiva annuncio router IPv6

Consenti al server di non accettare annunci sul router poiché ciò può intrappolare il traffico di instradamento verso sistemi compromessi.
Impostare il parametro net.ipv6.conf.all.accept_ra e net.ipv6.conf.default.accept_ra su 0 in /etc/sysctl.conf

# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.12 ​​Disattiva l'accettazione del reindirizzamento IPv6

Consenti al server di non accettare annunci sul router poiché ciò può intrappolare il traffico di instradamento verso sistemi compromessi. Si consiglia di impostare hard route all'interno del sistema per proteggere il sistema da cattive route.

Impostare i parametri net.ipv6.conf.all.accept_redirects e net.ipv6.conf.default.accept_redirects su 0 in /etc/sysctl.conf

# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.13 Disattiva IPv6

Per ridurre la probabilità di attacco nel sistema, disabilitare IPv6
Modifica il file /etc/sysctl.conf e aggiungi le seguenti righe:

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

Ora ricarica la configurazione di sysctl

# sudo sysctl -p

5.14 Installare i wrapper TCP

Usa i wrapper TCP per tutti i servizi che supportano i wrapper TCP.

Installa TCP:

# apt-get install tcpd

5.15 Crea /etc/hosts.allow

Per garantire che solo i sistemi autorizzati possano connettersi al server, utilizzare /etc/hosts.allow
Modifica /etc/hosts.allow e aggiungi quanto segue

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 Verifica i permessi su /etc/hosts.allow

È importante proteggere /etc/hosts.allow da accessi in scrittura non autorizzati. Esegui il comando seguente per trovare l'autorizzazione di /etc/hosts.allow

# ls -l /etc/hosts.allow

-rw-r--r-- 1 root root 2055 15 febbraio 11:30 /etc/hosts.allow

Se l'autorizzazione non è corretta, utilizza il seguente comando per correggerla

#chmod 644 /etc/hosts.allow

5.17 Crea /etc/host negare

Nega l'accesso al server usando /etc/hosts.deny . Il file /etc/hosts.deny è configurato per negare

tutti gli host non sono menzionati in /etc/hosts.allow. Crea il file /etc/hosts.deny

echo "TUTTI:TUTTI">> /etc/hosts.deny

5.18 Verifica i permessi su /etc/hosts.deny

È importante proteggere /etc/hosts.deny dall'accesso in scrittura non autorizzato. Esegui il comando seguente per trovare l'autorizzazione di /etc/hosts.deny

# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19 Assicurati che il firewall sia attivo

Per limitare la comunicazione in entrata e in uscita a un indirizzo IP e una porta specifici, utilizzare il firewall. Ubuntu fornisce Uncomplicated Firewall (UFW) per configurare facilmente la configurazione del firewall.
Installa UFW

# sudo apt-get install ufw

Attiva ufw:

# sudo ufw enable

esempio:
Consenti servizi SSH e http.

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6. Registrazione e controllo

Utilizzando un potente framework di controllo, il sistema può tenere traccia di molti tipi di eventi per monitorare e controllare il sistema.
Installa auditd usando il seguente comando

sudo apt-get install auditd audispd-plugins

Se necessario, crea i collegamenti di avvio appropriati per auditd in /etc/rc*.d eseguendo il seguente comando da ciascuna delle directory pertinenti:

# ln -s /etc/init.d/auditd S37auditd

I collegamenti di avvio devono essere creati per i livelli di esecuzione

6.1 Configurazione delle dimensioni di archiviazione del registro di controllo

La dimensione del file di registro di controllo deve essere scelta con attenzione in modo che non influisca sul sistema e non vada perso alcun dato di controllo.
Imposta il parametro max_log_file in /etc/audit/auditd.conf

max_log_file = <MB>

6.2 Disabilita il sistema se il registro di controllo è pieno

Il demone auditd può essere configurato per arrestare il sistema quando i log di controllo sono pieni. Eseguire quanto segue per determinare se auditd è configurato per notificare all'amministratore e arrestare il sistema quando i log di audit sono pieni.

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3 Conserva tutte le informazioni di controllo

In contesti di sicurezza elevata, i vantaggi del mantenimento di una lunga cronologia di audit superano il costo dell'archiviazione della cronologia di audit. Aggiungi la seguente riga al file /etc/audit/auditd.conf.

max_log_file_action = keep_logs

6.4 Registrare eventi che modificano le informazioni su data e ora

Per monitorare modifiche insolite della data e/o dell'ora del sistema che indicano un'attività non autorizzata sul sistema.
Per i sistemi a 64 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

Per i sistemi a 32 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.6 Registrare eventi che modificano informazioni su utenti/gruppi

Modifiche impreviste a /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd indicano chiaramente che un utente non autorizzato sta cercando di nascondere le proprie attività o di compromettere account aggiuntivi.
Aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.7 Registrare eventi che modificano l'ambiente di rete del sistema

Per impedire che modifiche non autorizzate all'host e al nome di dominio di un sistema interrompano i parametri di sicurezza impostati in base a tali nomi, aggiungere le seguenti righe in /etc/audit/audit.rules
Per i sistemi a 64 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

Per i sistemi a 32 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.8 Registrare eventi che modificano i controlli di accesso obbligatori del sistema

Qualsiasi modifica ai file in /etc/selinux è un'indicazione che un utente non autorizzato sta tentando di modificare i controlli di accesso e cambiare i contesti di sicurezza per ottenere l'accesso al sistema.
Aggiungi le seguenti righe a /etc/audit/audit.rules

-w /etc/selinux/ -p wa -k MAC-policy

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.9 Raccogli eventi di accesso e disconnessione

Per monitorare le informazioni relative agli attacchi di login/logout/brute force, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.10 Raccogliere informazioni sull'avvio della sessione

Monitorare gli eventi di avvio della sessione. Un amministratore di sistema può monitorare gli accessi che si verificano in orari insoliti, il che potrebbe indicare un'attività non autorizzata.
Aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.11 Raccogliere eventi di modifica dell'autorizzazione al controllo di accesso discrezionale

Trova le modifiche agli attributi del file che sono un'indicazione dell'attività di un intruso.
Per i sistemi a 64 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Esegui il comando seguente per riavviare auditd

# sudo service auditd riavvio

Per i sistemi a 32 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.12 Raccogliere tentativi di accesso non autorizzato ai file non riusciti

Trova tentativi falliti di aprire, creare o troncare file per ottenere l'accesso non autorizzato al sistema.
Per i sistemi a 64 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

Per i sistemi a 32 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.13 Utilizzo collettivo dei comandi privilegiati

Scopri se ci sono usi di comandi privilegiati da parte di utenti non privilegiati per ottenere l'accesso al sistema. Per prima cosa esegui il comando seguente, quindi aggiungi l'output del comando seguente al file /etc/audit/audit.rules

# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14 Raccogliere montaggi di file system non riusciti

Per tenere traccia del montaggio dei file system da parte di utenti non privilegiati aggiungere le seguenti regole nel file /etc/audit/audit.rules
Per i sistemi a 64 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

Per i sistemi a 32 bit, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.15 Raccogli eventi di eliminazione file per utente

Per scoprire se si sta verificando la rimozione di file e attributi di file associati ai file protetti, aggiungere le seguenti regole.
Per i sistemi a 64 bit, aggiungi quanto segue al file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

Per i sistemi a 32 bit, aggiungi quanto segue al file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.16 Raccogli le modifiche all'ambito dell'amministrazione del sistema

Le modifiche al file /etc/sudoers possono indicare che è stata apportata una modifica non autorizzata all'ambito dell'attività dell'amministratore di sistema.

Aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /etc/sudoers -p wa -k scope

# Esegui il comando seguente per riavviare auditd

# sudo service auditd restart

6.17 Raccogli le azioni dell'amministratore di sistema (sudolog)

Per impedire agli utenti non autorizzati di utilizzare il comando privilegiato, scopri se vengono apportate modifiche in /var/log/sudo.log.
Aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /var/log/sudo.log -p wa -k actions

Riavvia audit

# sudo service auditd restart

6.18 Raccogli il caricamento e lo scaricamento del modulo del kernel

Per scoprire se un utente non autorizzato sta utilizzando insmod, rmmod e modprobe compromettendo così la sicurezza del sistema, aggiungi le seguenti righe al file /etc/audit/audit.rules.

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

Per i sistemi a 32 bit, aggiungi

-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

Per i sistemi a 64 bit, aggiungi

-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

Riavvia audit

# sudo service auditd restart

6.19 Rendi immutabile la configurazione di audit

Per impedire agli utenti non autorizzati di apportare modifiche al sistema di controllo per nascondere la loro attività dannosa e quindi ripristinare le regole di controllo, aggiungi le seguenti righe al

/etc/audit/audit.rules.

-e 2

Questa deve essere l'ultima riga nel file /etc/audit/audit.rules
Riavvia audit

# sudo service auditd restart

7. Accesso al sistema, autenticazione e autorizzazione

7.1 Imposta proprietario utente/gruppo e autorizzazione su cron

Esegui i seguenti comandi per limitare l'accesso in lettura/scrittura e ricerca all'utente root e ai gruppi, impedendo agli utenti normali di accedere a questi file/directory.

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2 Configura PAM

PAM (Pluggable Authentication Modules) è un servizio che implementa moduli di autenticazione modulari su sistemi UNIX. PAM deve essere configurato con cura per proteggere l'autenticazione del sistema.

7.2.1 Impostare i parametri dei requisiti per la creazione della password utilizzando pam_cracklib

Il modulo pam_cracklib controlla la forza delle password. Esegue controlli come assicurarsi che una password non sia una parola del dizionario, sia di una certa lunghezza, contenga un mix di caratteri (ad es. alfabeto, numerico, altro) e altro ancora.
Impostare i parametri pam_cracklib.so come segue in /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2 Imposta blocco per tentativi di password non riusciti

Bloccare gli utenti dopo tentativi di accesso consecutivi non riusciti per prevenire attacchi di forza bruta alle password contro i tuoi sistemi.
Modifica il file /etc/pam.d/login e aggiungi la riga di autenticazione di seguito:

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3 Limitare il riutilizzo della password

Obbligare gli utenti a non riutilizzare le ultime 5 password rende meno probabile che un utente malintenzionato sia in grado di indovinare la password. Imposta il parametro pam_unix.so remember su 5 in /etc/pam.d/common-password

password sufficient pam_unix.so remember=5

8. Configura SSH

Modifica il file /etc/ssh/sshd_config per impostare il seguente parametro come segue per renderlo sicuro.

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9. Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10. User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11. System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12. Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13. Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14. PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Debian – Spostare /var, /home in una partizione separata?

  3. Ubuntu – /usr/bin/host non rileva le modifiche a /etc/hosts anche dopo il riavvio?

  4. Montare /tmp e /home su disco rigido separato?

  5. Come systemd-tmpfiles pulisce /tmp/ o /var/tmp (sostituzione di tmpwatch) in CentOS/RHEL 7

Guida di Ubuntu 20.04

Guida di Ubuntu 22.04

Guida all'installazione desktop di Ubuntu 15.10

Come liberare spazio nella partizione /boot su Ubuntu Linux?

Installa FOG Server su Ubuntu Server - Guida definitiva

Come modificare /tmp predefinito in /home/user/tmp