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