Fiche de sécurité

inetd

Copyright Olivier Grisal

(13 avril 1995)

1. Introduction

Le processus inetd, démon lancé au démarrage du système, est le père de nombreux processus serveurs de la famille tcp/ip. Il utilise deux fichiers de configuration "/etc/inetd.conf" et "/etc/services". En plus des services configurés, Inetd inclut aussi des services internes.

Fonctionnement standard : Lors d'une demande de connexion TCP, inetd extrait le numéro de port destination du message, il recherche le nom de service dans "/etc/services". En cas de succès, il crée un processus (fork) et lance l'exécution du binaire (exec) dont le chemin est spécifié dans "/etc/inetd.conf". Les messages qui suivent seront dirigés vers ce processus.

Modification des fichiers de configuration : Quand un administrateur de machine modifie ses fichiers de configuration, l'envoi du signal HUP Hang Up vers inetd provoque la relecture de ceux-ci. Ceci n'affectera pas les connexions en cours.

2. Risques potentiels

Attaque contre la disponibilité : Le simple fait de générer du trafic (echo et discard), peut entraîner une saturation des files d'attente du noyau.

Cheval de Troie : la modification des fichiers de configuration permet d'activer des logiciels différents de ceux qui sont attendus en standard. Chaque serveur spécifié dans "inetd.conf" est une menace potentielle, la plupart s'exécute avec uid de root (cf. "/etc/inetd.conf"). telnetd après s'être fait affecter un pseudo tty, lance le processus login.

3. fonctionnalités à rechercher

Il ne faut laisser dans le fichier inetd.conf que les services nécessaires au fonctionnement normal. Les autres services peuvent être invalidés en mettant la ligne en commentaire ( # ) ou bien en la supprimant.

4. A faire

Il existe dans certains systèmes (HP-UX par exemple) des options qui permettent la journalisation

Xinetd (freeware sur Internet) : c'est un bon remplaçant d'inetd, il permet de préciser des critères pour l'activation des processus serveurs. Voir aussi tcp-wrapper et inetd.sec (de HP). Se référer aux présentations de Xinetd (réunion du groupe sécurité de l'AFUU du 28 juin 1994) et de tcp-wrapper.

telnetd : sur certains systèmes, on peut interdire le login root par telnet. On peut restreindre le telnet aux utilisateurs ne faisant pas partie du groupe wheel. On trouvera des informations complémentaires dans la fiche de sécurité "su".

ftpd : on peut interdire certains comptes en les mentionnant dans le fichier "/etc/ftpusers". Là aussi, on se référera utilement à la fiche de sécurité "ftp".

tftpd : attention car il existe des options différentes d'un système à l'autre.

rcommands : on peut supprimer le fichier "/etc/hosts.equiv". Attention certaines installations à distance de logiciel ont besoin de rsh avec les droits de root pour accéder à des supports amovibles (DAT, CD-ROM ou streamer), après l'installation détruire le fichier "/.rhosts".

rexecd : il est souhaitable, avec quelques précautions car des logiciels s'en servent, de mettre rexec en commentaire dans "inetd.conf".

fingerd : finger permet d'avoir des informations sur les utilisateurs d'une machine, on peut avoir les identificateurs des utilisateurs en cours de session. Si vous considérez ces information comme sensibles, mettez alors ce service en commentaire dans "inetd.conf".

5. A éviter

Il faut éviter d'autoriser l'ajout de services par une personne différente de l'administrateur de la machine. De même, il est conseillé d'éviter dans "inetd.conf" les binaires avec le premier argument différent du nom de fichier. Il est essentiel que les serveurs ainsi que le fichier "inetd.conf" ne soient pas accessibles en écriture aux utilisateurs.

6. Autres services

Inetd n'est pas le seul service de ce type. D'autres fiches de sécurité traiteront de ces services.

exemples de fichier /etc/services

format d'une ligne de /etc/services :

nom_du_service numero_de_port/protocole

- le nom du service servira de clé à inetd pour retrouver la ligne dans inetd.conf

- le numéro de port est le well known port affecté par l'Internet.

- le protocole est soit tcp soit udp.

#
# Network services, Internet style
#
#	@(#)services	5.8 (Berkeley) 5/9/91
#
ftp			21/tcp
telnet		23/tcp
smtp		25/tcp		mail
nameserver	42/tcp		name			# IEN 116
domain		53/tcp		nameserver		# name-domain server
domain		53/udp		nameserver
# Bootp experimental
bootp		67/udp						# bootp server
#
tftp		69/udp
pop			109/tcp		postoffice
sunrpc		111/tcp
sunrpc		111/udp
nntp		119/tcp		readnews untp	# USENET News Transfer prot.
ntp			123/udp		ntpd			# network time protocol
snmp		161/udp
snmp-trap	162/udp
#
# UNIX specific services
#
exec		512/tcp
login		513/tcp
shell		514/tcp		cmd				# no passwords used
syslog		514/udp
printer		515/tcp		spooler			# line printer spooler
uucp		540/tcp		uucpd			# uucp daemon
 exemples de fichier /etc/inetd.conf

format d'une ligne de /etc/inetd.conf :
nom_service type_socket protocole type_attente user pathname args
avec :
- type_socket : dgram ou stream
- protocole : tcp ou udp
- type_attente : wait ou nowait pour le mode datagram sinon toujours nowait
- user : pour affecter des droits qui peuvent être inférieurs à root
- pathname : absolu pour atteindre l'exécutable
- argument : pour l'exécutable

#
# Internet server configuration database
#
#	@(#)inetd.conf	5.4 (Berkeley) 6/30/90
#
ftp		stream	tcp	nowait	root	/usr/libexec/ftpd		ftpd -l -A
telnet	stream	tcp	nowait	root	/usr/libexec/telnetd	telnetd
shell	stream	tcp	nowait	root	/usr/libexec/rshd		rshd
login	stream	tcp	nowait	root	/usr/libexec/rlogind	rlogind -a
exec	stream	tcp	nowait	root	/usr/libexec/rexecd	rexecd
# attention, l'option pour tftp varie selon les systemes
tftp	dgram	udp	wait	nobody	/usr/libexec/tftpd		tftpd -s