23 Suggerimenti per la sicurezza del rafforzamento del server CentOS - Parte 2
Continuando il tutorial precedente su Come proteggere e rafforzare il server CentOS, in questo articolo discuteremo altri suggerimenti sulla sicurezza che verranno presentati nell'elenco di controllo seguente.
Requisiti
- 20 suggerimenti per la sicurezza del rafforzamento del server CentOS - Parte 1
21. Disabilita i comandi SUID e SGID inutili
Se i bit setuid e setgid sono impostati sui programmi binari, questi comandi possono eseguire attività con diritti di altri utenti o gruppi, come i privilegi di root che può esporre a seri problemi di sicurezza.
Spesso, gli attacchi di sovraccarico del buffer possono sfruttare tali file binari eseguibili per eseguire codice non autorizzato con i diritti di un utente esperto root.
find / -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
Per disattivare il bit setuid eseguire il comando seguente:
chmod u-s /path/to/binary_file
Per disattivare il bit setgid eseguire il comando seguente:
chmod g-s /path/to/binary_file
22. Verifica la presenza di file e directory senza proprietario
I file o le directory non di proprietà di un account valido devono essere eliminati o assegnati con autorizzazioni da un utente e un gruppo.
Emettere il comando find seguente per elencare file o directory senza utente e gruppo.
find / -nouser -o -nogroup -exec ls -l {} \;
23. Elenca i file scrivibili da tutti
Mantenere un file scrivibile da tutti nel sistema può essere pericoloso perché chiunque può modificarlo. Esegui il comando seguente per visualizzare i file scrivibili in parole, ad eccezione dei Link simbolici, che sono sempre scrivibili da tutti.
find / -path /proc -prune -o -perm -2 ! -type l –ls
24. Crea password complesse
Crea una password composta da un minimo di otto caratteri. La password deve contenere cifre, caratteri speciali e lettere maiuscole. Utilizza pwmake per generare una password di 128 bit dal file /dev/urandom.
pwmake 128
25. Applicare una politica di password complessa
Forza il sistema a utilizzare password complesse aggiungendo la riga seguente nel file /etc/pam.d/passwd.
password required pam_pwquality.so retry=3
Aggiungendo la riga precedente, la password inserita non può contenere più di 3 caratteri in sequenza monotona, come abcd, e più di 3 caratteri consecutivi identici, come 1111.
Per forzare gli utenti a utilizzare una password con una lunghezza minima di 8 caratteri, comprese tutte le classi di caratteri, controllare la forza per sequenze di caratteri e caratteri consecutivi aggiungere le seguenti righe a /etc/security /pwquality.conf.
minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3
26. Utilizza la durata della password
Il comando chage può essere utilizzato per l'invecchiamento della password dell'utente. Per impostare la scadenza della password di un utente entro 45 giorni, utilizza il seguente comando:
chage -M 45 username
Per disabilitare la scadenza della password utilizzare il comando:
chage -M -1 username
Forza la scadenza immediata della password (l'utente deve modificare la password all'accesso successivo) eseguendo il comando seguente:
chage -d 0 username
27. Blocca account
Gli account utente possono essere bloccati eseguendo il comando passwd o usermod:
passwd -l username
usermod -L username
Per sbloccare gli account utilizza l'opzione -u
per il comando passwd e l'opzione -U
per usermod.
28. Impedire l'accesso alla Shell degli account
Per impedire a un account di sistema (account ordinario o di servizio) di accedere a una shell bash, modificare la shell di root in /usr/sbin/nologin o /bin/false in il file /etc/passwd immettendo il comando seguente:
usermod -s /bin/false username
Per cambiare la shell durante la creazione di un nuovo utente, eseguire il seguente comando:
useradd -s /usr/sbin/nologin username
29. Blocca la console utente virtuale con vlock
vlock è un programma utilizzato per bloccare una sessione multipla sulla console Linux. Installa il programma e inizia a bloccare la sessione del terminale eseguendo i comandi seguenti:
yum install vlock
vlock
30. Utilizzare un sistema centralizzato per gestire account e autenticazione
L'utilizzo di un sistema di autenticazione centralizzato può semplificare notevolmente la gestione e il controllo degli account. I servizi che possono offrire questo tipo di gestione degli account sono IPA Server, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS o Winbind.
Alcuni di questi servizi sono per impostazione predefinita altamente protetti con protocolli crittografici e crittografia a chiave simmetrica, come Kerberos.
31. Forzare il montaggio di sola lettura del supporto USB
Utilizzando l'utilità blockdev puoi forzare il montaggio di tutti i supporti rimovibili in sola lettura. Ad esempio, crea un nuovo file di configurazione udev denominato 80-readonly-usb.rules nella directory /etc/udev/rules.d/ con il seguente contenuto:
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
Quindi, applica la regola con il comando seguente:
udevadm control -reload
32. Disabilitare l'accesso root tramite TTY
Per impedire all'account root di eseguire l'accesso al sistema tramite tutti i dispositivi della console (TTY), cancellare il contenuto del file securetty digitando il seguente prompt del terminale di comando come root.
cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty
Ricorda che questa regola non si applica alle sessioni di accesso SSH
Per impedire l'accesso root tramite SSH, modifica il file /etc/ssh/sshd_config e aggiungi la riga seguente:
PermitRootLogin no
33. Utilizzare gli ACL POSIX per espandere le autorizzazioni di sistema
Gli elenchi di controllo di accesso possono definire i diritti di accesso per più di un singolo utente o gruppo e possono specificare i diritti per programmi, processi, file e directory. Se imposti l'ACL su una directory, i suoi discendenti erediteranno automaticamente gli stessi diritti.
Per esempio,
setfacl -m u:user:rw file
getfacl file
34. Configura SELinux in modalità Enforce
Il miglioramento SELinux del kernel Linux implementa la politica di controllo degli accessi obbligatori (MAC), consentendo agli utenti di definire una politica di sicurezza che fornisce autorizzazioni granulari per tutti gli utenti, programmi, processi, file e dispositivi.
Le decisioni di controllo degli accessi del kernel si basano su tutto il contesto rilevante per la sicurezza e non sull’identità dell’utente autenticato.
Per ottenere lo stato di Selinux e applicare la politica, esegui i comandi seguenti:
getenforce
setenforce 1
sestatus
35. Installare le utilità aggiuntive di SELinux
Installa il pacchetto policycoreutils-python che fornisce utilità Python aggiuntive per il funzionamento di SELinux: audit2allow, audit2why, chcat e semanage.
Per visualizzare tutti i valori booleani insieme ad una breve descrizione, utilizzare il seguente comando:
semanage boolean -l
Ad esempio, per visualizzare e impostare il valore di httpd_enable_ftp_server, esegui il comando seguente:
getsebool httpd_enable_ftp_server
Per far sì che il valore di un valore booleano persista dopo i riavvii, specifica l'opzione -P
su setsebool, come illustrato nell'esempio seguente:
setsebool -P httpd_enable_ftp_server on
36. Utilizzare il server di registro centralizzato
Configura il demone rsyslog per inviare messaggi di registro di utilità sensibili a un server di registro centralizzato. Inoltre, monitora i file di registro con l'aiuto dell'utilità logwatch.
L'invio di messaggi di registro a un server remoto garantisce che una volta che il sistema è stato compromesso, gli utenti malintenzionati non possano nascondere completamente la propria attività, lasciando sempre tracce sui file di registro remoti.
37. Abilita contabilità di processo
Abilita la contabilità del processo installando l'utilità psacct e utilizza il comando lastcomm per visualizzare le informazioni sui comandi eseguiti in precedenza come registrati nel file di contabilità del sistema e sa per riepilogare le informazioni sui comandi eseguiti in precedenza come registrati nel file della contabilità di sistema.
38. Rafforzamento di /etc/sysctl.conf
Utilizzare le seguenti regole dei parametri del kernel per proteggere il sistema:
Disabilitazione del routing di origine
net.ipv4.conf.all.accept_source_route=0
Disabilita l'inoltro IPv4
ipv4.conf.all.forwarding=0
Disabilita IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Disabilitare l'accettazione e l'invio di pacchetti reindirizzati ICMP a meno che non sia specificamente richiesto.
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
Disabilita l'inoltro del percorso inverso
net.ipv4.conf.all.rp_filter=2
Ignora tutte le richieste eco ICMP (impostare su 1 per abilitare)
net.ipv4.icmp_echo_ignore_all = 0
39. Utilizza i servizi VPN per accedere ai tuoi locali su reti pubbliche non protette
Utilizza sempre i servizi VPN per gli operatori per accedere in remoto ai locali della LAN su Internet. Tali tipi di servizi possono essere configurati utilizzando una soluzione open source gratuita, come OpenVPN, o utilizzando una soluzione proprietaria, come Cisco VPN (installa l'utilità della riga di comando vpnc fornita da Epel Repositories).
40. Eseguire la scansione del sistema esterno
Valuta la sicurezza del tuo sistema per individuare eventuali vulnerabilità eseguendo la scansione del sistema da punti remoti sulla tua LAN utilizzando strumenti specifici come:
- Nmap – scanner di rete 29 Esempi di comando Nmap
- Nessus: scanner di sicurezza
- OpenVAS: utilizzato per la scansione delle vulnerabilità e per la gestione completa delle vulnerabilità.
- Nikto: un eccellente scanner di script CGI (Common Gateway Interface) Scansione delle vulnerabilità Web in Linux
41. Proteggi il sistema internamente
Utilizzare la protezione interna del sistema contro virus, rootkit, malware e, come buona pratica, installare sistemi di rilevamento delle intrusioni in grado di rilevare attività non autorizzate (attacchi DDOS, scansioni delle porte), come:
- AIDE – Ambiente avanzato di rilevamento delle intrusioni – http://aide.sourceforge.net/
- ClamAV – Scanner antivirus https://www.clamav.net
- Rkhunter – Scanner rootkit
- Lynis – Strumento di controllo e scansione della sicurezza per Linux
- Tripwire – Sicurezza e integrità dei dati http://www.tripwire.com/
- Fail2Ban: prevenzione delle intrusioni nella rete
- OSSEC – (HIDS) Sistema di rilevamento delle intrusioni basato su host http://ossec.github.io/
- Mod_Security: proteggi gli attacchi di forza bruta o DDoS
42. Modifica variabili di ambiente utente
Aggiungi il formato data e ora per memorizzare l'esecuzione dei comandi emettendo il comando seguente:
echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> .bashrc'
Forza la registrazione istantanea di HISTFILE ogni volta che viene digitato un comando (invece del logout):
echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc
Limita il timeout della sessione di accesso. Elimina automaticamente il guscio quando non viene eseguita alcuna attività durante un periodo di inattività. Molto utile per disconnettere automaticamente le sessioni SSH.
echo ‘TMOUT=120’ >> .bashrc
Applicare tutte le regole eseguendo:
source .bashrc
43. Backup dei dati
Utilizza utilità di backup, come tar, cat, rsync, scp, snapshot LVM, ecc. per archiviare una copia del tuo sistema, preferibilmente fuori sede, in caso di guasto del sistema.
Se il sistema viene compromesso è possibile eseguire il ripristino dei dati dai backup precedenti.
Infine, non dimenticare che, indipendentemente da quante misure di sicurezza e contromisure prendi per mantenere il tuo sistema sicuro, non sarai mai completamente sicuro al 100% finché la tua macchina è collegata e accesa.