SICUREZZA DEI SISTEMI INFORMATICI LINUX
Le password, inetd e tcpd

Bertera Pietro (dr.iggy@iol.it)

indice

PASSWORD

Le password (pwd) sono lo strumento basilare per evitare intrusioni indesiderate nel proprio sistema Linux.
Solitamente si sceglie una pwd facile da ricordare ma questo caratterizza una pwd facile da individuare; un cracker, utilizzando un metodo di brute force, che consiste nel cercare di eseguire il login ad un sistema utilizzando come pwd le parole più comuni del dizionario inglese o italiano, non ha molte difficoltà ad individuare velocemente le pwd infatti solitamente questo attacco è automatizzato in modo da effettuare moltissimi tentativi di accesso in poco tempo. Per questo motivo la scelta di buone pwd è un elemento fondamentale della configurazione del sistema linux.
Ecco alcuni criteri da seguire per creare delle buone pwd:

Un consiglio per scegliere delle buone pwd è quello di mettere una lettera iniziale di una frase riguardante solo il singolo utente e facile da ricordare.


PASSWORD		FRASE
LmFP750èuR	La mia Fiat Panda 750 è un Rottame
Hb2Ci1m		Ho bruciato 200 CD in 1 mese

In questo modo le pwd sembrano incomprensibili ma sono facili da ricordare. La pwd si imposta dalla shell tramite il comando passwd. Immettere il comando passwd all'interno di una shell permette all'utente che sta utilizzando la shell di modificare la propria pwd, dopo aver lanciato passwd il sistema chiederà la vecchia pwd e se voi la immettete correttamente vi consentirà di immettere la nuova che dovrà essere lunga almeno 6 caratteri altrimenti vi dirà che è una pwd "cattiva".
NB
quando si digitano le pwd non si vedono i caratteri o sono coperti da asterischi, questo per proteggere la vostra pwd da occhi indiscreti. Come utente root potete cambiare in qualsiasi momentola pwd di un utente, digitando il comando passwd passandogli come parametro il nome dell'utente. Purtroppo anche le migliori pwd possono essere scovate da un cracker che ha abbastanza tempo per fare tentativi.
La modifica periodica delle pwd è quindi sempre una buona idea.
Le pwd di linux possono essere impostate con una data di scadenza oltre la quale l'utente dovrà cambiarla. Per permettere ciò il comando change per esempio, per impostare che l'utente lamer debba reimpostare la propria pwd dopo 15 giorni si dovrà digitare:



[mil@pedrobert.com \] change -M 15 lamer


Il parametro -M indica al comando che si sta impostando la durata massima della pwd, allo scadere dei 15 giorni, l'utente che tenterà di effettuare il login si vedrà:



Your password has expiried,  please change it! 
Changing password for lamer 
Tramite il passaggio di parametri è possibile impostare il numero minimo di giorni prima che l'utente possa modificare la pwd , la data dell' ultima modifica della pwd, il numero max di giorni concessi all'account di inattività prima di essere disattivato ed altre opzioni per le quali si rimanda alla documentazione del comando change.


I FILE PASSWORD e SHADOW

Nelle vecchie versioni di UNIX le informazioni relative agli account venivano registrate in un file password che tutti gli utenti potevano leggere ma che solo root poteva modificare, questo generalmente non costituisce un grosso buco alla sicurezza del sistema in quanto le pwd all' interno del file sono cifrate secondo un algoritmo di hash: la pwd può essere trasformata in una stringa di caratteri in codice che non può più essere tradotta nella stringa iniziale. Con questo metodo il sistema operativo quando viene effettuato un login codifica la pwd immessa e la confronta con quella esistente nel file password se sono uguali autorizza l'accesso. Così nemmeno l'utente root è in grado di risalire alle pwd di un utente.
In effetti nel sistema esiste solo la pwd cifrata mentre quella non cifrata esiste solo nel breve istante durante il quale viene digitata. Il problema legato all' utilizzo del file password è che un utente può vedere la pwd cifrata di qualsiasi utente e, anche se è difficile se non impossibile invertire la cifratura di un algoritmo di hash è possibile cifrare un gran numero di stringhe e confrontare le stringe cifrate con il contenuto del file password.
I tentativi di confronto delle cifrature delle pwd sono più efficaci per intromettersi in un sistema che il ripetere tentativi di login. Un cracker che ha in possesso il file password di un sistema ha molte più possibilità di intromettersi!!. Fortunatamente i sistemi moderni UNIX consentono di utilizzare un file chiamato shadow che contiene le pwd in forma cifrata, il file shadow è una versione speciale del file password che solo l'utente root può vedere. E' quindi molto consigliabile di utilizzare il file shadow sempre in quanto costituisce un supplementare sistema di difesa dagli attacchi di un cracker.

In linux i file password e shadow sono contenuti nella directory /etc/ . Se il file shadow non è disponibile probabilmente si sta utilizzando il file password per memorizzare le pwd. Il file password è chiamato passwd, per visualizzarlo utilizzare il comando cat:


[mil@pedrobert.com \] cat /etc/passwd

e dovrebbe comparire un elenco simile a questo:


root:DkkS6799Fq:0:0:root:/root:/bin/bash 
bin:*:1:1:bin:/bin: 
daemon:*:2:2:daemon:/sbin: 
adm:*:3:4:adm:/var/adm: 
lp:*:4:7:lp:/var/spool/lpd: 
sync:*:5:0:sync:/sbin:/bin/sync 
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown 
halt:*:7:0:halt:/sbin:/sbin/halt 
mail:*:8:12:mail:/var/spool/mail: 
news:*:9:13:news:/var/spool/news: 
uucp:*:10:14:uucp:/var/spool/uucp: 
operator:*:11:0:operator:/root: 
games:*:12:100:games:/usr/games: 
named:*:25:25:Bind User:/var/named: 
sympa:*:89:89:Sympa Mailing list manager:/var/lib/sympa:/bin/bash 
gopher:*:13:30:gopher:/usr/lib/gopher-data: 
ftp:*:14:50:FTP User:/var/ftp: 
nobody:*:99:99:Nobody:/: 
xfs:x:100:102:X Font Server:/etc/X11/fs:/bin/false 
htdig:*:101:104::/var/lib/htdig: 
postfix:*:102:233:postfix:/var/spool/postfix: 
lamer:Kyj34v7A0x6:501:501:lamer lamer:/home/pietro:/bin/bash

Ogni riga corrisponde ad un singolo account e ciascuna è separata in 7 campi separati tra di loro da : . I campi indicano il nome dell'utente. la pwd cifrata, l'ID dell'utente, l'ID del gruppo, la descrizione, la directory home e la shell di default. Se si guarda la prima riga (quella riguardante l'utente root) si può vedere la pwd cifrata: DkkS6799Fq , si nota anche l'ID di root è 0, l'ID di gruppo è 0, la directory home è la /root e la shell di default è /bin/bash. Vedere la pwd cifrata dovrebbe mettere in guardia un amministratore di sistema infatti questo conferma che non si sta utilizzando il file shadow per memorizzare le pwd. E' vivamente consigliabile di cambiare tale configurazione e di utilizzare il file shadow: si può fare utilizzando il comando pwcon dopo aver effettuato il login come root, non verrà visualizzato alcun messaggio ed il prompt della shell visualizzerà il file /etc/shadow e il file /etc/passwd dovrebbe apparire nel seguente modo:

root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin: 
daemon:x:2:2:daemon:/sbin: 
adm:x:3:4:adm:/var/adm: 
lp:x:4:7:lp:/var/spool/lpd: 
sync:x:5:0:sync:/sbin:/bin/sync 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
halt:x:7:0:halt:/sbin:/sbin/halt 
mail:x:8:12:mail:/var/spool/mail: 
news:x:9:13:news:/var/spool/news: 
uucp:x:10:14:uucp:/var/spool/uucp: 
operator:x:11:0:operator:/root: 
games:x:12:100:games:/usr/games: 
named:x:25:25:Bind User:/var/named: 
sympa:x:89:89:Sympa Mailing list manager:/var/lib/sympa:/bin/bash 
gopher:x:13:30:gopher:/usr/lib/gopher-data: 
ftp:x:14:50:FTP User:/var/ftp: 
nobody:x:99:99:Nobody:/: 
xfs:x:100:102:X Font Server:/etc/X11/fs:/bin/false 
htdig:x:101:104::/var/lib/htdig: 
postfix:x:102:233:postfix:/var/spool/postfix:
lamer:x:501:501:lamer:/home/pietro:/bin/bash

Tutti i campi relativi alle pwd contengono una x infatti i dati relativi a queste sono stati spostati nel file /etc/shadow.

 

PROTEGGERSI DALLE INTRUSIONI (Password Cracking)

I crackers hanno a disposizione un'infinità di strumenti e tecniche che gli permettono di entrare nei sistemi informatici. Per fortuna esistono anche numerose applicazioni per contrastarli.
Se l'utilizzatore del sistema linux è anche l'amministratore e sceglie delle pwd difficili da identificare non è un grosso problema controllare la validità delle pwd. A riguardo di un sistema multiutente con numerosi account è probabile che qualche utente abbia scelto delle pwd troppo semplici da violare. In che modo avvisare gli utenti di ciò? Il modo più ovvio è quello di utilizzare strumenti simili a quelli utilizzati dai cracker. Uno dei migliori strumenti utilizzabili per tentare un accesso ad un sistema UNIX è l'utility Crack.
Il pacchetto Crack è disponibile qui http://www.users.dircon.co.uk/~crypto/download/c50-faq.html
Al momento della stesura di questo documento la versione più aggiornata è la 5.0 il file è crack5.0.tar.gz Dopo aver scaricato il file occorre estrarlo utilizzando tar:tar -xzvf crack5.0.tar.gz che creerà una directory chiamata c50a all'interno della directory corrente.
NB il pacchetto crak5.0 ha problemi di compilazione su sistemi Red Hat, Alec Muffet ha fornito una soluzione al problema: per utilizzare crack5.0 si seguano le istruzioni successive:

Ora Crack è pronto all'esecuzione. Prima di fare ciò occorre però prima trasformare il file delle password in un formato che Crack possa leggere. Per questo tramite su diventare root ed eseguire lo script shadmrg.sv che ritrova nella directory scripts all' interno della directory primaria di Crack. Lo script visualizza i dati delle password sullo schermo, quindi occorre redirigere l'output del comando in un file:


[mil@pedrobert.com \] ./scripts/shadmrg.sv > mypasswd 

Ritornati al prompt della shell bisogna far passare di proprietà il file mypasswd infatti ora è di root e, a meno che si ha intenzione di usare Crack solo da root occorre modificare il proprietario del file:


[mil@pedrobert.com \] Chown  myname  mypasswd 
[mil@pedrobert.com \] Chmod  600  mypasswd 

Il comando chown modifica il file in modo che il proprietario sia myname (immettere al posto di myname il nome dell'utente che dovrà essere il proprietario del file), il comando chmod modifica il file in modo che ha l'autorizzazione di eseguire il file solo il proprietario.
!!!!!! Questo è molto importante perché se si lascia il permesso di eseguire il file a tutti gli utenti, tutti potrebbero utilizzare Crack per violare le pwd!!!!!
Uscire dalla shell di root con exit e effettuare il login con il proprietario del file mypasswd
Ora si è veramente pronti per utilizzare il Crack:
entrare nella directory c50a e eseguire Crack:


[mil@pedrobert.com \] ./Crack mypasswd

Questo inizierà a lavorare sulle pwd e lo metterà in background e ripresenterà il prompt dei comandi.
Il Crack delle pwd può impiegare ore o persino giorni a seconda delle dimensioni del file.

Le opzioni del comando Crack:

  
./Crack mypasswd			Elabora il file delle pwd.
  
./Crack -mail mypasswd		Elabora il file delle pwd ed invia una mail ad ogni
				utente al quale riesce a violare la pwd.
  
./Crack -nice 10 mypasswd		Esegue Crack con bassa priorità in modo che impiega
				più tempo ma utilizza meno risorse.
  
./Crack -kill mypasswd		Termina l'esecuzione di Crack.
  
.(Crack -recover mypasswd		Riprende l'elaborazione delle pwd che non è stata 
				conclusa normalmente.
  
./Reporter			Mostra l'avanzamento od i risultati finali 
				dell'esecuzione di Crack.
Per ulteriore documentazione su Crack si consiglia di leggere i file manual.txt e manual.html .


 

PROTEGGERE IL COMPUTER FILTRANDO L'ACCESSO ALLA RETE (inetd e tcpd)

La vulnerabilità delle pwd non è l'unica falla da cui un cracker può entrare nel sistema. Linux, come del resto UNIX, fornisce un'innumerevole quantità di servizi di rete, molti di questi sono elencati nel file /etc/services.

# /etc/services:
# $Id: services,v 1.4 2000/05/15 15:54:48 chmouel Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
# are included, only the more common ones.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp # message send protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp # Remote Mail Checking Protocol
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by CSO name server
csnet-ns 105/udp cso-ns
# unfortunately the poppassd (Eudora) uses a port which has already
# been assigned to a different service. We list the poppassd as an
# alias here. This should work for programs asking for this service.
# (due to a bug in inetd the 3com-tsmux line is disabled)
#3com-tsmux 106/tcp poppassd
#3com-tsmux 106/udp poppassd
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop2 109/tcp pop-2 postoffice # POP version 2
pop2 109/udp pop-2
pop3 110/tcp pop-3 # POP version 3
pop3 110/udp pop-3
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
auth 113/tcp authentication tap ident
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/tcp
ntp 123/udp # Network Time Protocol
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp imap # Interim Mail Access Proto v2
imap2 143/udp imap
snmp 161/udp # Simple Net Mgmt Proto
snmp-trap 162/udp snmptrap # Traps for SNMP
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
xdmcp 177/tcp # X Display Mgr. Control Proto
xdmcp 177/udp
nextstep 178/tcp NeXTStep NextStep # NeXTStep window
nextstep 178/udp NeXTStep NextStep # server
bgp 179/tcp # Border Gateway Proto.
bgp 179/udp
prospero 191/tcp # Cliff Neuman's Prospero
prospero 191/udp
irc 194/tcp # Internet Relay Chat
irc 194/udp
smux 199/tcp # SNMP Unix Multiplexer
smux 199/udp
at-rtmp 201/tcp # AppleTalk routing
at-rtmp 201/udp
at-nbp 202/tcp # AppleTalk name binding
at-nbp 202/udp
at-echo 204/tcp # AppleTalk echo
at-echo 204/udp
at-zis 206/tcp # AppleTalk zone information
at-zis 206/udp
qmtp 209/tcp # The Quick Mail Transfer Protocol
qmtp 209/udp # The Quick Mail Transfer Protocol
z3950 210/tcp wais # NISO Z39.50 database
z3950 210/udp wais
ipx 213/tcp # IPX
ipx 213/udp
imap3 220/tcp # Interactive Mail Access
imap3 220/udp # Protocol v3
rpc2portmap 369/tcp
rpc2portmap 369/udp # Coda portmapper
codaauth2 370/tcp
codaauth2 370/udp # Coda authentication server
ulistserv 372/tcp # UNIX Listserv
ulistserv 372/udp
ldap 389/tcp # Lightweight Directory Access Protocol
ldap 389/udp # Lightweight Directory Access Protocol
https 443/tcp # MCom
https 443/udp # MCom
snpp 444/tcp # Simple Network Paging Protocol
snpp 444/udp # Simple Network Paging Protocol
saft 487/tcp # Simple Asynchronous File Transfer
saft 487/udp # Simple Asynchronous File Transfer
npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS
npmp-local 610/udp dqs313_qmaster # npmp-local / DQS
npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS
npmp-gui 611/udp dqs313_execd # npmp-gui / DQS
hmmp-ind 612/tcp dqs313_intercell# HMMP Indication / DQS
hmmp-ind 612/udp dqs313_intercell# HMMP Indication / DQS
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/tcp
ntalk 518/udp
route 520/udp router routed # RIP
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
afpovertcp 548/tcp # AFP over TCP
afpovertcp 548/udp # AFP over TCP
remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
webster 765/tcp # Network dictionary
webster 765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
ingreslock 1524/tcp
ingreslock 1524/udp
prospero-np 1525/tcp # Prospero non-privileged
prospero-np 1525/udp
datametrics 1645/tcp old-radius # datametrics / old radius entry
datametrics 1645/udp old-radius # datametrics / old radius entry
sa-msg-port 1646/tcp old-radacct # sa-msg-port / old radacct entry
sa-msg-port 1646/udp old-radacct # sa-msg-port / old radacct entry
radius 1812/tcp # Radius
radius 1812/udp # Radius
radacct 1813/tcp # Radius Accounting
radacct 1813/udp # Radius Accounting
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
venus 2430/tcp # codacon port
venus 2430/udp # Venus callback/wbc interface
venus-se 2431/tcp # tcp side effects
venus-se 2431/udp # udp sftp side effect
codasrv 2432/tcp # not used
codasrv 2432/udp # server port
codasrv-se 2433/tcp # tcp side effects
codasrv-se 2433/udp # udp sftp side effect
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
rfe 5002/tcp # Radio Free Ethernet
rfe 5002/udp # Actually uses UDP only
cfengine 5308/tcp # CFengine
cfengine 5308/udp # CFengine
bbs 7000/tcp # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4, and are unofficial. Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4 750/udp kerberos-iv kdc # Kerberos (server) udp
kerberos4 750/tcp kerberos-iv kdc # Kerberos (server) tcp
kerberos_master 751/udp # Kerberos authentication
kerberos_master 751/tcp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
krb_prop 754/tcp # Kerberos slave propagation
krbupdate 760/tcp kreg # Kerberos registration
kpasswd 761/tcp kpwd # Kerberos "passwd"
kpop 1109/tcp # Pop with Kerberos
knetd 2053/tcp # Kerberos de-multiplexor
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
eklogin 2105/tcp # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv 871/tcp # SUP server
supfiledbg 1127/tcp # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#
# Services added for the Debian GNU/Linux distribution
poppassd 106/tcp # Eudora
poppassd 106/udp # Eudora
mailq 174/udp # Mailer transport queue for Zmailer
mailq 174/tcp # Mailer transport queue for Zmailer
ssmtp 465/tcp # SMTP over SSL
gdomap 538/tcp # GNUstep distributed objects
gdomap 538/udp # GNUstep distributed objects
snews 563/tcp # NNTP over SSL
ssl-ldap 636/tcp # LDAP over SSL
omirr 808/tcp omirrd # online mirror
omirr 808/udp omirrd # online mirror
rsync 873/tcp # rsync
rsync 873/udp # rsync
swat 901/tcp # Add swat service used via inetd
simap 993/tcp # IMAP over SSL
spop3 995/tcp # POP-3 over SSL
socks 1080/tcp # socks proxy server
socks 1080/udp # socks proxy server
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
support 1529/tcp # GNATS
cfinger 2003/tcp # GNU Finger
ninstall 2150/tcp # ninstall service
ninstall 2150/udp # ninstall service
afbackup 2988/tcp # Afbackup system
afbackup 2988/udp # Afbackup system
icp 3130/tcp # Internet Cache Protocol (Squid)
icp 3130/udp # Internet Cache Protocol (Squid)
postgres 5432/tcp # POSTGRES
postgres 5432/udp # POSTGRES
fax 4557/tcp # FAX transmission service (old)
hylafax 4559/tcp # HylaFAX client-server protocol (new)
noclog 5354/tcp # noclogd with TCP (nocol)
noclog 5354/udp # noclogd with UDP (nocol)
hostmon 5355/tcp # hostmon uses TCP (nocol)
hostmon 5355/udp # hostmon uses TCP (nocol)
ircd 6667/tcp # Internet Relay Chat
ircd 6667/udp # Internet Relay Chat
webcache 8080/tcp # WWW caching service
webcache 8080/udp # WWW caching service
tproxy 8081/tcp # Transparent Proxy
tproxy 8081/udp # Transparent Proxy
mandelspawn 9359/udp mandelbrot # network mandelbrot
amanda 10080/udp # amanda backup services
kamanda 10081/tcp # amanda backup services (Kerberos)
kamanda 10081/udp # amanda backup services (Kerberos)
amandaidx 10082/tcp # amanda backup services
amidxtape 10083/tcp # amanda backup services
isdnlog 20011/tcp # isdn logging system
isdnlog 20011/udp # isdn logging system
vboxd 20012/tcp # voice box system
vboxd 20012/udp # voice box system
jserver 22273/tcp
binkp 24554/tcp # Binkley
binkp 24554/udp # Binkley
asp 27374/tcp # Address Search Protocol
asp 27374/udp # Address Search Protocol
tfido 60177/tcp # Ifmail
tfido 60177/udp # Ifmail
fido 60179/tcp # Ifmail
fido 60179/udp # Ifmail
# Local services
linuxconf 98/tcp
smtp 465/tcp
imaps 993
pop3s 995

La colonna di sinistra indica il nome di ogni sevizio, quella centrale indica il port ed il protocollo utilizzato, nella colonna di destra c'è un alias opzionale del servizio.
UNIX, ha una grandissima "esperienza" alle spalle per quanto riguarda la gestione della condivisione di informazioni tra computer remoti. Linux, segue le sue orme e quindi comprende tutti i servizi di controllo remoto, anche se questi servizi sono molto utili ed interessanti, possono mettere a repentaglio la sicurezza della nostra macchina.
Una di queste caratteristiche è il servizio di shell remota, che viene eseguito con una connessione sul port TCP 154 ed è gestito dal demone in.rshd caricato da inetd. Questo sevizio permette di eseguire comandi in remoto su di una macchina senza fornire la pwd di accesso per quel sistema.
Ad esempio se si è fatto il login alla macchina homer e si vuole controllare il contenuto della propria directory home sulla macchina bart, tramite il comando della shell rsh:


[mil@pedrobert.com \] rsh bart ls

Questo comando richiama il comando ls sulla macchina bart come se si è fatto il login, si ha lanciato il comando e poi si ha fatto il logout, questo perché bart è configurato per accettare l'accesso di utenti da homer.
Un modo per impedire questo è quello di configurare gli utenti di fiducia che possono accedere a bart nel file /etc/hosts.equiv di bart.
Nel file /etc/hosts.equiv sono elencati gli hosts di cui qualsiasi utente può esequire comandi in remoto sulla macchina senza effettuare il login.Per eseguire qualunque operazione gli utenti devono avere un none utente sul sistema remoto(homer) che corrisponda al nome utente sul sistema locale(bart). Il sistema locale supporrà che questo utente sia la stessa persona e quindi consentirà all'utente remoto di eseguire operazioni con gli stessi privilegi dell' utente locale con lo stesso nome. Un segno + nel file hosts.eqiv consente l'accesso al sistema da qualunque macchina remota.
Ovviamente questa è una configurazione suicida!!!
Se il file hosts.equiv non è configurato i singoli utenti possono configurare degli hosts di fiducia nel file .rhosts all'interno della propria directory home.
~/.rhosts è fondamentalmente uguale a /etc/hosts.eqiv ma ha effetti solo su quell'account e non su tutti gli utenti del sistema.
Altri comandi che utilizzano questi due file sono: rlogin (login remoto) e rcp (copia remota).
Il sevizio di shell remota è solo uno dei servizi gestiti dal processo inetd, un demone che verifica le richieste di accesso ad un elevato numero di porte. Quando viene avviata una connessione, inetd , inbase al port utilizzato, avvia il programma adeguato a quella connessione e gli affida la gestione di tale connessione.
Le porte da aprire ed i programmi da avviare sono configurati nel file /etc/inetd.conf.

  

# inetd.conf This file describes the services that will be available
# through the INETD TCP/IP super server. To re-configure
# the running INETD process, edit this file, then send the
# INETD process a SIGHUP signal.
#
# Version: @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors: Original taken from BSD UNIX 4.3/TAHOE.
# Fred N. van Kempen, 
#
# Modified for Debian Linux by Ian A. Murdock 
#
# Modified for RHS Linux by Marc Ewing 
#
#       
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
discard dgram udp wait root internal
#daytime stream tcp nowait root internal
daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#time stream tcp nowait root internal
#time dgram udp wait root internal
#
# These are standard services.
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
#talk dgram tcp wait root /usr/sbin/tcpd in.talkd
#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
#
# The Internet UUCP service.
#
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.
#
#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
#bootps dgram udp wait root /usr/sbin/tcpd bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers." Many sites choose to disable
# some or all of these services to improve security.
#
#finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd
#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx
#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet
#
# The Rsync Server
# rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
# swat stream tcp nowait.400 root /usr/sbin/swat swat'
#
# Authentication
#
# auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o
#
# CVS server
#
# cvspserver stream tcp nowait root /usr/sbin/cvspserver cvspserver
#
# End of inetd.conf

I servizi elencati si possono riconoscere nel file /etc/services e si possono disattivare inserendo il simbolo di commento # davanti alla riga appropriata.
In questo modo vengono disabilitati completamente tal servizi, cosa giusta se il servizio non lo si utilizza ma come fare per quei servizi di cui si ha bisogno?

  
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
#talk dgram tcp wait root /usr/sbin/tcpd in.talkd

Si vede che nel campo di destra viene inserito il nome del programma che gestisce il sevizio, nel campo precedente dovrebbe esserci il percorso completo del programma ma si vede che inetd è configurato per eseguire sempre il programma /usr/sbin/tcpd invece di quello normalmente richiamato per ogni servizio. Il demone tcpd ha la funzione di intermediario tra inetd ed il programma effettivo che gestisce la connessione, infatti inetd controlla l'indirizzo dell' host remoto e, se soddisfatto di tale indirizzo passa la connessione al programma designato. tcpd utilizza i file /etc/hosts.allow e etc/hosts.deny per stabilire se accettare o meno la connessione.
Se l'indirizzo è presente nel file /etc/hosts.allow autorizza la connessione, se l'indirizzo è contenuto nel file /etc/hosts.deny blocca la connessione, se l'indirizzo non è incluso in nessuno dei due files accetta la connessione. Nei files /etc/hosts.allow e in /etc/hosts.deny non è necessario (o possibile) elencare tutti gli indirizzi che possono connettersi alla macchina locale infatti si possono indicare intere sottoreti o gruppi di indirizzi.

  
# host.allow
imap, ipop3d : 199.170.177.
in.telnetd: 199.170.177., .pedrobert.com
#ALL accetta tutti gli indirizzi.
ftpd: ALL
# hosts.deny
#blocca tutti gli indirizzi tranne quelli in hosts.allow
ALL: ALL

Questa configurazione è molto limitativa infatti questi due file consentono la connessione a servizi imap e telnet ad alcune macchine specifiche e negano qualsiasi altra connessione. Tutte le righe dei files (commenti a parte) sono composte da un elenco di demoni, ciascuno separato da una virgola e seguito dai due punti (:) e da un elenco di indirizzi client separati da una virgola da controllare. Un client può essere indicato con un indirizzo IP (199.170.177.45) o da un nome di host (homer.pedrobert.com), di solito si usano i caratteri jolly per indicare una categoria di indirizzi.
Nei files scritti prima:
La voce 199.170.177 corrisponde ad ogni indirizzo che inizia con quella stringa ad esempio 199.170.177.30, la voce client .pedrobert.com definisce i nomi host come homer.pedrobert.com o bart.pedrobert.com.

Per esempio analizziamo cosa succede quando un client marge.pedrobert.com con IP 199.170.188.34 tenta di connettersi alla nostra postazione Linux.
- inetd riceve la richiesta di connessione e la passa a tcpd
- rcpd inizia a confrontare il dominio marge.pedrobert.com
Con le regole indicate in /etc/hosts.allow, scorrendo nel file tenta di trovare una definizione che corrisponda al nome di dominio oppure all' indirizzo IP, quando arriva alla riga in.telnetd: 199.170.177., .pedrobert.com vede che marge.pedrobert.com non si trova nella sottorete 199.170.177. ma appartiene al dominio pedrobert.com, tcpd termina la ricerca ed avvia la connessione. Se marge tentasse di connettersi con il protocollo imap non verrebbe accettato perché marge non appartiene alla sottorete 199.170.177 e nella riga riguardante imapd non compare il dominio pedrobert.com.

indice

- password

- i file password e shadow

- proteggersi dalle intrusioni: password cracking

- proteggere il computer filtrando l'accesso alla rete (inetd e tcpd)

 


Pubblicato sotto GPL da Pietro Bertera [Aprile 2001]
Revisione e versione HTML di Ruggero Tonelli [Maggio 2001]
LA RIPRODUZIONE DI QUESTO DUCUMENTO O DI SUE PARTI E' LIBERAMENTE CONSENTITA ALLE PERSONE FISICHE, PURCHE' NON EFFETTUATA A FINI DI LUCRO