Quando ho letto l'articolo di Gaurav Kamathe Scansiona la tua sicurezza Linux con Lynis , mi ha ricordato il mio tempo come amministratore di sistema per il Dipartimento del lavoro degli Stati Uniti. Uno dei miei compiti era mantenere i nostri server Unix rinforzati. Ogni trimestre, un verificatore indipendente è intervenuto per esaminare lo stato di sicurezza dei nostri server. Ogni volta che il giorno in cui era previsto l'arrivo del verificatore, eseguivo Security Readiness Review (SRR), uno strumento di scansione che utilizzava un'ampia serie di script per identificare e segnalare eventuali risultati di sicurezza. SRR era open source, quindi potevo visualizzare tutti gli script di origine e le loro funzioni. Questo mi ha permesso di esaminare il codice, determinare cosa specificamente non andava e risolvere rapidamente ogni problema riscontrato.
Cos'è Lynis?
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Lynis è uno strumento di controllo della sicurezza open source che funziona in modo molto simile a SRR scansionando un sistema Linux e fornendo report dettagliati su eventuali punti deboli rilevati. Inoltre, come SRR, è costituito da un ampio set di script e ogni script verifica la presenza di un elemento specifico, ad esempio i requisiti di età minima e massima della password.
Dopo aver eseguito Lynis, puoi utilizzare il relativo report per individuare lo script di ogni elemento e scoprire esattamente come Lynis ha verificato e segnalato ogni problema. Puoi anche utilizzare lo stesso codice script per creare un nuovo codice per automatizzare una risoluzione.
Come leggere i rapporti Lynis
Poiché l'articolo di Gaurav trattava l'installazione e l'utilizzo di Lynis, in questo articolo mostrerò alcuni esempi di come leggere e utilizzare i suoi rapporti.
Per iniziare, esegui un controllo:
# lynis audit system --quick
Al termine, il rapporto completo verrà visualizzato sullo schermo. Verso il basso, i Suggerimenti la sezione elenca tutti gli elementi che potrebbero essere necessari triage per rafforzare meglio il sistema, oltre a un TEST-ID per ciascuno.
Per rafforzare il sistema e ridurre le dimensioni dell'elenco, inizia a inseguire ogni elemento. La descrizione nei Suggerimenti la sezione potrebbe essere tutto ciò di cui hai bisogno per sapere quale azione intraprendere. In caso contrario, puoi utilizzare show details
comando:
# lynis show details TEST-ID
Ad esempio, uno dei suggerimenti sul mio sistema è:
Il database richiesto per locate
non può essere trovato. Esegui updatedb
o locate.updatedb
per creare questo file. [FILE-6410]
Sembra che io debba solo eseguire il comando updatedb
, ma se voglio essere sicuro, posso usare show details
di Lynis opzione:
# lynis show details FILE-6410
2020-06-16 20:54:33 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 20:54:33 Test: Checking locate database
2020-06-16 20:54:33 Result: file /var/lib/mlocate/mlocate.db not found
2020-06-16 20:54:33 Result: file /var/lib/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 20:54:33 Result: file /var/cache/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/db/locate.database not found
2020-06-16 20:54:33 Result: database not found
2020-06-16 20:54:33 Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
2020-06-16 20:54:33 ====
Questi dettagli indicano che Lynis non è stato in grado di trovare vari file. Questo caso è molto chiaro. Posso eseguire updatedb
comanda e ricontrolla questo test:
# updatedb
# lynis --tests FILE-6410
Inoltre, ricontrollando i dettagli mostra quale file ha trovato che ha soddisfatto il test:
# lynis show details FILE-6410
2020-06-16 21:38:40 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 21:38:40 Test: Checking locate database
2020-06-16 21:38:40 Result: locate database found (/var/lib/mlocate/mlocate.db)
2020-06-16 21:38:40 Result: file /var/lib/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 21:38:40 Result: file /var/cache/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/db/locate.database not found
2020-06-16 21:38:40 ====
Immergersi più in profondità
Molti dei suggerimenti di Lynis non sono così semplici come questo. Se non sei sicuro di cosa si riferisca a una scoperta o a un suggerimento, può essere difficile sapere come risolvere il problema. Si supponga di eseguire Lynis su un nuovo server Linux e che siano presenti diversi elementi relativi al demone Secure Shell (SSH), uno dei quali fa riferimento a MaxAuthTries
impostazione:
* Consider hardening SSH configuration [SSH-7408]
- Details : MaxAuthTries (6 --> 3)
https://cisofy.com/lynis/controls/SSH-7408/
Per risolvere questo problema, è necessario conoscere la posizione dei file di configurazione SSH. Un amministratore Linux esperto potrebbe già sapere dove trovarli, ma in caso contrario, c'è un modo per vedere dove li ha trovati Lynis.
Trova gli script di test di Lynis
Lynis supporta molti sistemi operativi; pertanto, il percorso di installazione potrebbe variare. Su un sistema Red Hat Enterprise Linux o Fedora Linux, utilizzare rpm
per trovare i file di prova:
# rpm -ql lynis
Questo elenca tutti i file di test e riporta la loro posizione in lynis/include
directory. Cerca in questa directory il TEST-ID che desideri conoscere (SSH-7408 in questo caso):
# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh: # Test : SSH-7408
Trova problemi SSH
Il file denominato tests_ssh
contiene il TEST-ID, ed è qui che puoi trovare le funzioni di scansione relative a SSH. Dai un'occhiata a questo file per vedere le varie funzioni chiamate dallo scanner Lynis. La prima sezione definisce un elenco di directory in una variabile chiamata SSH_DAEMON_CONFIG_LOCS
. Le seguenti sezioni sono responsabili del controllo dello stato del demone SSH, dell'individuazione del suo file di configurazione e dell'identificazione della sua versione. Ho trovato il codice che cerca il file di configurazione nella sezione per Test SSH-7404, descritto come "Determina la posizione del file di configurazione del demone SSH". Questo codice contiene un for
loop che ricerca gli elementi nell'elenco per un file chiamato sshd_config
. Posso usare questa logica per fare la mia ricerca:
# find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: ‘/usr/local/etc/ssh’: No such file or directory
find: ‘/opt/csw/etc/ssh’: No such file or directory
L'ulteriore esplorazione di questo file rivela il codice relativo alla ricerca di SSH-7408. Questo test copre MaxAuthTries
e molte altre impostazioni. Ora posso trovare la variabile nel file di configurazione SSH:
# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6
Risolvi i problemi relativi ai banner legali
Lynis ha anche segnalato una scoperta relativa ai banner legali mostrati quando si accede a un sistema. Sul mio sistema desktop di casa (dove non mi aspetto che molte altre persone accedano), non mi sono preso la briga di modificare il issue
predefinito File. È probabile che un sistema aziendale o governativo includa un banner legale per avvisare gli utenti che i loro accessi e le loro attività potrebbero essere registrati e monitorati. Lynis lo segnala con i test BANN-7126 e BANN-7130:
* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
https://cisofy.com/lynis/controls/BANN-7126/
* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
https://cisofy.com/lynis/controls/BANN-7130/
Non trovo molto sul mio sistema che esegue Fedora 32 Workstation:
# cat /etc/issue /etc/issue.net
\S
Kernel \r on an \m (\l)
\S
Kernel \r on an \m (\l)
Potrei aggiungere qualcosa come "Tieni fuori" o "Non rompere nulla", ma la descrizione del test non fornisce informazioni sufficienti per risolvere il problema, quindi ho dato un'altra occhiata agli script di Lynis. Ho notato che include
directory conteneva un file chiamato tests_banners
; questo sembrava un buon posto dove guardare. Con l'aiuto di grep
, ho visto i test associati:
# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
# Test : BANN-7126
Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
# Test : BANN-7130
Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"
Dopo aver esaminato il codice associato nel file per il test, ho scoperto che entrambi questi test ripetono alcuni termini legali predefiniti con un for
ciclo:
for ITEM in ${LEGAL_BANNER_STRINGS}; do
Questi termini legali sono memorizzati nella variabile LEGAL_BANNER_STRINGS
definito nella parte superiore del file. Scorrendo verso l'alto viene visualizzato l'elenco completo:
LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"
I miei suggerimenti iniziali ("tenere fuori" e "non rompere niente") non avrebbero soddisfatto la prova, perché non contengono nessuna parola di questo elenco.
Questo messaggio banner contiene molte delle parole richieste e, pertanto, soddisferà questo test e impedirà a Lynis di segnalarlo:
Attenzione, continuando a connetterti a questo sistema, acconsenti al proprietario che memorizzi un registro di tutte le attività. È vietato l'accesso non autorizzato.
Nota che questo messaggio deve essere aggiunto a entrambi /etc/issue
e /etc/issue.net
.
Renderlo ripetibile
Puoi apportare queste modifiche manualmente, ma potresti invece prendere in considerazione l'automazione. Ad esempio, potrebbero esserci molte impostazioni che devono essere modificate o potrebbe essere necessario eseguire queste modifiche su base regolare su molti server. La creazione di uno script di rafforzamento sarebbe un ottimo modo per semplificare questo processo. Per le configurazioni SSH, alcuni sed
i comandi nello script di rafforzamento risolveranno questi risultati. Oppure, potresti utilizzare una dichiarazione eco per aggiungere i banner legali:
sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
echo "Legal Banner" | tee -a /etc/issue /etc/issue.net
L'automazione consente di creare uno script ripetibile che può essere salvato e gestito nell'intera infrastruttura. Potresti anche incorporare questo script nel provisioning iniziale del server.
Potenzia il tuo sistema
Questo tipo di esercizio può migliorare le tue capacità di scripting sia seguendo il codice esistente sia scrivendo i tuoi script. Poiché è open source, Lynis rende facile vedere sotto il cofano come viene controllato il tuo sistema e cosa significano i suoi rapporti. Il risultato finale sarà un sistema ben consolidato che puoi sfoggiare ogni volta che si presentano quegli auditor.