Hai mai pensato a quanto sia davvero sicura la tua macchina Linux? Esistono numerose distribuzioni Linux, ognuna con le proprie impostazioni predefinite, su cui esegui dozzine di pacchetti software con numeri di versione diversi e numerosi servizi in esecuzione in background, che a malapena conosciamo o ci interessano.
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
Per trovare la posizione di sicurezza, lo stato di sicurezza generale del software, della rete e dei servizi in esecuzione sulla tua macchina Linux, potresti eseguire alcuni comandi e ottenere bit e frammenti di informazioni rilevanti, ma la quantità di dati che devi analizzare è enorme .
Sarebbe molto meglio se potessi semplicemente eseguire uno strumento che genera un rapporto sullo stato di sicurezza di una macchina. E per fortuna ce n'è uno:Lynis. È uno strumento di controllo della sicurezza open source estremamente popolare che aiuta a rafforzare i sistemi basati su Linux e Unix. Secondo il progetto:
"Esegue una scansione di sicurezza approfondita e viene eseguito sul sistema stesso. L'obiettivo principale è testare le difese di sicurezza e fornire suggerimenti per un ulteriore rafforzamento del sistema. Eseguirà inoltre la scansione per informazioni generali sul sistema, pacchetti software vulnerabili e possibili problemi di configurazione. Lynis [è] comunemente utilizzato dagli amministratori di sistema e dai revisori dei conti per valutare le difese di sicurezza dei loro sistemi."
Installa Lynis
Lynis potrebbe essere disponibile nel tuo repository software Linux. In tal caso, puoi installarlo utilizzando:
dnf install lynis
o
apt install lynis
Tuttavia, se la versione nel tuo repository non è l'ultima, è meglio installarla da GitHub. (Sto usando un sistema Red Hat Linux, ma puoi eseguirlo su qualsiasi distribuzione Linux.) Come con tutti gli strumenti, ha senso provarlo prima su una macchina virtuale. Per installarlo da GitHub:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.8 (Maipo)
$
$ uname -r
3.10.0-1127.el7.x86_64
$
$ git clone https://github.com/CISOfy/lynis.git
Cloning into 'lynis'...
remote: Enumerating objects: 30, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 12566 (delta 15), reused 8 (delta 0), pack-reused 12536
Receiving objects: 100% (12566/12566), 6.36 MiB | 911.00 KiB/s, done.
Resolving deltas: 100% (9264/9264), done.
$
Dopo aver clonato il repository, spostati al suo interno e guarda cosa è disponibile. Lo strumento principale si trova in un file chiamato lynis . In realtà è uno script di shell, quindi puoi aprirlo e leggere cosa sta facendo. In effetti, Lynis viene implementato principalmente utilizzando script di shell:
$ cd lynis/
$ ls
CHANGELOG.md CONTRIBUTING.md db developer.prf FAQ include LICENSE lynis.8 README SECURITY.md
CODE_OF_CONDUCT.md CONTRIBUTORS.md default.prf extras HAPPY_USERS.md INSTALL lynis plugins README.md
$
$ file lynis
lynis: POSIX shell script, ASCII text executable, with very long lines
$
Esegui Lynis
Porta Lynis a fare un giro dandogli un -h opzione per vedere la sezione Aiuto:
$ ./lynis -h
Verrà visualizzata una breve schermata informativa seguita da tutti i comandi supportati da Lynis.
Quindi, prova alcuni comandi di prova per avere un'idea delle cose e metterti a tuo agio. Per vedere con quale versione di Lynis stai lavorando, esegui:
$ ./lynis show version
3.0.0
$
Per vedere tutti i comandi disponibili in Lynis:
$ ./lynis show commands
Commands:
lynis audit
lynis configure
lynis generate
lynis show
lynis update
lynis upload-only
$
Controlla un sistema Linux
Per controllare lo stato di sicurezza del tuo sistema, esegui il comando seguente:
$ ./lynis audit system
Questo viene eseguito rapidamente e restituisce un rapporto dettagliato:l'output potrebbe sembrare intimidatorio all'inizio, ma ti illustrerò di seguito. L'output del comando viene anche salvato in un file di registro, quindi puoi sempre tornare indietro in un secondo momento e controllare tutto ciò che potrebbe essere di interesse.
Lynis salva i registri qui:
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
Puoi verificare se i file di registro sono stati creati e in effetti lo erano:
$ ls -l /var/log/lynis.log
-rw-r-----. 1 root root 341489 Apr 30 05:52 /var/log/lynis.log
$
$ ls -l /var/log/lynis-report.dat
-rw-r-----. 1 root root 638 Apr 30 05:55 /var/log/lynis-report.dat
$
Esplora i rapporti
Lynis fornisce rapporti piuttosto completi, quindi tratterò alcune delle sezioni importanti. La prima cosa che Lynis fa come parte dell'inizializzazione è trovare informazioni complete sul sistema operativo in esecuzione sulla macchina. Questo è seguito da controlli per vedere quali strumenti di sistema e plugin sono installati:
[+] Initializing program
------------------------------------
- Detecting OS... [ DONE ]
- Checking profiles... [ DONE ]
---------------------------------------------------
Program version: 3.0.0
Operating system: Linux
Operating system name: Red Hat Enterprise Linux Server 7.8 (Maipo)
Operating system version: 7.8
Kernel version: 3.10.0
Hardware platform: x86_64
Hostname: example
---------------------------------------------------
<<snip>>
[+] System Tools
------------------------------------
- Scanning available tools...
- Checking system binaries...
[+] Plugins (phase 1)
------------------------------------
Note: plugins have more extensive tests and may take several minutes to complete
- Plugin: pam
[..]
- Plugin: systemd
[................]
Successivamente, il rapporto è suddiviso in varie sezioni e ciascuna sezione inizia con un [+] simbolo. Alcune delle sezioni possono essere viste di seguito. (Wow, ci sono così tante aree da controllare e Lynis è lo strumento giusto per il lavoro!)
[+] Boot and services
[+] Kernel
[+] Memory and Processes
[+] Users, Groups and Authentication
[+] Shells
[+] File systems
[+] USB Devices
[+] Storage
[+] NFS
[+] Name services
[+] Ports and packages
[+] Networking
[+] Printers and Spools
[+] Software: e-mail and messaging
[+] Software: firewalls
[+] Software: webserver
[+] SSH Support
[+] SNMP Support
[+] Databases
[+] LDAP Services
[+] PHP
[+] Squid Support
[+] Logging and files
[+] Insecure services
[+] Banners and identification
[+] Scheduled tasks
[+] Accounting
[+] Time and Synchronization
[+] Cryptography
[+] Virtualization
[+] Containers
[+] Security frameworks
[+] Software: file integrity
[+] Software: System tooling
[+] Software: Malware
[+] File Permissions
[+] Home directories
[+] Kernel Hardening
[+] Hardening
[+] Custom tests
Lynis utilizza la codifica a colori per semplificare l'analisi del rapporto:
- Verde:tutto bene
- Giallo:ignorato, non trovato o potrebbe contenere un suggerimento
- Rosso:potrebbe essere necessario dare un'occhiata più da vicino
Nel mio caso, la maggior parte dei segni rossi è stata trovata nella sezione Kernel Hardening. Il kernel ha varie impostazioni sintonizzabili che definiscono come funziona il kernel e alcune di queste impostazioni possono avere un contesto di sicurezza. La distribuzione potrebbe non impostarli per impostazione predefinita per vari motivi, ma dovresti esaminarli e vedere se è necessario modificarne il valore in base alla tua posizione di sicurezza:
[+] Kernel Hardening
------------------------------------
- Comparing sysctl key pairs with scan profile
- fs.protected_hardlinks (exp: 1) [ OK ]
- fs.protected_symlinks (exp: 1) [ OK ]
- fs.suid_dumpable (exp: 0) [ OK ]
- kernel.core_uses_pid (exp: 1) [ OK ]
- kernel.ctrl-alt-del (exp: 0) [ OK ]
- kernel.dmesg_restrict (exp: 1) [ DIFFERENT ]
- kernel.kptr_restrict (exp: 2) [ DIFFERENT ]
- kernel.randomize_va_space (exp: 2) [ OK ]
- kernel.sysrq (exp: 0) [ DIFFERENT ]
- kernel.yama.ptrace_scope (exp: 1 2 3) [ DIFFERENT ]
- net.ipv4.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.all.bootp_relay (exp: 0) [ OK ]
- net.ipv4.conf.all.forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.conf.all.mc_forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.proxy_arp (exp: 0) [ OK ]
- net.ipv4.conf.all.rp_filter (exp: 1) [ OK ]
- net.ipv4.conf.all.send_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.default.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.icmp_echo_ignore_broadcasts (exp: 1) [ OK ]
- net.ipv4.icmp_ignore_bogus_error_responses (exp: 1) [ OK ]
- net.ipv4.tcp_syncookies (exp: 1) [ OK ]
- net.ipv4.tcp_timestamps (exp: 0 1) [ OK ]
- net.ipv6.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv6.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.default.accept_source_route (exp: 0) [ OK ]
Guarda SSH, un esempio, poiché è un'area chiave e deve essere protetta. Non c'è niente in rosso qui, ma Lynis ha molti suggerimenti per rafforzare il servizio SSH sulla mia configurazione:
[+] SSH Support
------------------------------------
- Checking running SSH daemon [ FOUND ]
- Searching SSH configuration [ FOUND ]
- OpenSSH option: AllowTcpForwarding [ SUGGESTION ]
- OpenSSH option: ClientAliveCountMax [ SUGGESTION ]
- OpenSSH option: ClientAliveInterval [ OK ]
- OpenSSH option: Compression [ SUGGESTION ]
- OpenSSH option: FingerprintHash [ OK ]
- OpenSSH option: GatewayPorts [ OK ]
- OpenSSH option: IgnoreRhosts [ OK ]
- OpenSSH option: LoginGraceTime [ OK ]
- OpenSSH option: LogLevel [ SUGGESTION ]
- OpenSSH option: MaxAuthTries [ SUGGESTION ]
- OpenSSH option: MaxSessions [ SUGGESTION ]
- OpenSSH option: PermitRootLogin [ SUGGESTION ]
- OpenSSH option: PermitUserEnvironment [ OK ]
- OpenSSH option: PermitTunnel [ OK ]
- OpenSSH option: Port [ SUGGESTION ]
- OpenSSH option: PrintLastLog [ OK ]
- OpenSSH option: StrictModes [ OK ]
- OpenSSH option: TCPKeepAlive [ SUGGESTION ]
- OpenSSH option: UseDNS [ SUGGESTION ]
- OpenSSH option: X11Forwarding [ SUGGESTION ]
- OpenSSH option: AllowAgentForwarding [ SUGGESTION ]
- OpenSSH option: UsePrivilegeSeparation [ OK ]
- OpenSSH option: AllowUsers [ NOT FOUND ]
- OpenSSH option: AllowGroups [ NOT FOUND ]
Non ho macchine virtuali o container in esecuzione sul mio sistema, quindi mostrano risultati vuoti:
[+] Virtualization
------------------------------------
[+] Containers
------------------------------------
Lynis controlla le autorizzazioni dei file su alcuni file importanti dal punto di vista della sicurezza:
[+] File Permissions
------------------------------------
- Starting file permissions check
File: /boot/grub2/grub.cfg [ SUGGESTION ]
File: /etc/cron.deny [ OK ]
File: /etc/crontab [ SUGGESTION ]
File: /etc/group [ OK ]
File: /etc/group- [ OK ]
File: /etc/hosts.allow [ OK ]
File: /etc/hosts.deny [ OK ]
File: /etc/issue [ OK ]
File: /etc/issue.net [ OK ]
File: /etc/motd [ OK ]
File: /etc/passwd [ OK ]
File: /etc/passwd- [ OK ]
File: /etc/ssh/sshd_config [ OK ]
Directory: /root/.ssh [ SUGGESTION ]
Directory: /etc/cron.d [ SUGGESTION ]
Directory: /etc/cron.daily [ SUGGESTION ]
Directory: /etc/cron.hourly [ SUGGESTION ]
Directory: /etc/cron.weekly [ SUGGESTION ]
Directory: /etc/cron.monthly [ SUGGESTION ]
Verso la fine del rapporto, Lynis offre suggerimenti basati sui risultati del rapporto. Ogni suggerimento è seguito da un TEST-ID (tieni questo a portata di mano per la parte successiva):
Suggestions (47):
----------------------------
* If not required, consider explicit disabling of core dump in /etc/security/limits.conf file [KRNL-5820]
https://cisofy.com/lynis/controls/KRNL-5820/
* Check PAM configuration, add rounds if applicable and expire passwords to encrypt with new values [AUTH-9229]
https://cisofy.com/lynis/controls/AUTH-9229/
Lynis offre un'opzione per trovare ulteriori informazioni su ciascun suggerimento, a cui puoi accedere utilizzando mostra dettagli comando seguito dal numero ID del test:
./lynis show details TEST-ID
Questo mostrerà ulteriori informazioni su quel test. Ad esempio, ho controllato i dettagli di SSH-7408:
$ ./lynis show details SSH-7408
2020-04-30 05:52:23 Performing test ID SSH-7408 (Check SSH specific defined options)
2020-04-30 05:52:23 Test: Checking specific defined options in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: added additional options for OpenSSH < 7.5
2020-04-30 05:52:23 Test: Checking AllowTcpForwarding in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: Option AllowTcpForwarding found
2020-04-30 05:52:23 Result: Option AllowTcpForwarding value is YES
2020-04-30 05:52:23 Result: OpenSSH option AllowTcpForwarding is in a weak configuration state and should be fixed
2020-04-30 05:52:23 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowTcpForwarding (set YES to NO)] [solution:-]
Fai una prova
Se vuoi saperne di più sulla sicurezza della tua macchina Linux, dai un'occhiata a Lynis. E, se vuoi scoprire come funziona Lynis, esplora i suoi script di shell per vedere come raccoglie tutte queste informazioni.