original in en Georges Tarbouriech
en to frGeorges Tarbouriech
Georges est un vieil utilisateur d'Unix. Il pense que la sécurité
informatique est l'un des grands défis de ce siècle.
Psionic portsentry fait partie de la suite d'outils du projet Abacus (en plus de portsentry, la suite propose logcheck et hostsentry). C'est un IDS (Système de Détection d'Intrusion) destiné à la détection des scans de ports et à la défense active. Il fonctionne sous de nombreuses saveurs d'Unix y compris Mac OS X. La caractéristique première d'un IDS est d'informer l'administrateur réseau sur les tentatives d'intrusion. Portsentry va plus loin puisqu'il est capable de réagir à une attaque. La dernière version (1.1) de cet outil génial est disponible sur http://www.psionic.com, et au fait, la version 1.0 fait maintenant partie de quelques distributions Linux principales (Debian, RedHat...).
Pendant la dernière décennie, les réseaux ont bénéficié d'une croissance à
grande vitesse. Le but était de permettre la communication entre des
machines fonctionnant sous différents OS. Ainsi, les systèmes de réseau
propriétaires se sont vus petit à petit remplacés par TCP/IP. Internet a
fait le reste ! Aujourd'hui, la plupart des réseaux sont basés sur TCP/IP et
TCP/IP est basé sur les ports. En bref, les ports sont liés à des programmes
(clients ou serveurs). Le serveur est à l'écoute jusqu'à ce qu'un client le
contacte afin d'établir une connexion. Les services (les programmes
mentionnés ci-dessus) sont assignés à un port spécifique. Sur les systèmes
Unix, le schéma d'assignation se trouve dans le fichier /etc/services.
Autrement dit, tout le monde sait quel port est dédié à quel service. Si
chacun le sait, les "crackers" le savent encore mieux ! Si nous considérons
un port comme une porte, lorsqu'un port est ouvert (à l'écoute), c'est comme
une porte non verrouillée. Et comment entrez-vous dans une maison ?
Normalement par la porte (à moins que vous ne préfériez la fenêtre, chacun
son truc !). Eh bien, les "chapeaux noirs" font de même pour pénétrer dans
votre ordinateur...
La première chose à faire pour limiter les risques est de fermer le plus
grand nombre de ports possible, c'est-à-dire d'arrêter les services. Moins
il y en a mieux c'est. Mais vous pouvez difficilement fermer tous les ports
sur une machine en réseau : elle ne pourrait plus communiquer, ce qui serait
dommage !
Comment limiter le nombre de services actifs ou comment fermer les ports
n'entre pas dans le cadre de cet article. Vous trouverez une grande quantité
de littérature sur le sujet en visitant par exemple le
Linux Documentation Project ou en cherchant
dans les numéros de LinuxFocus (par exemple,
Bastille Linux ou bien Outils de sécurité). Même chose
pour ce qui concerne les différentes manières de protéger une machine ou un
réseau. Sous Linux, considérez
Bastille Linux comme une nécessité.
Et c'est là qu'arrive portsentry. Portsentry peut surveiller les ports et il
est capable de les bloquer si vous le lui demandez. Il vous propose
différents modes d'opération, certains étant spécifiques à quelques OS. En
fait, quelques OS, signifie Linux.
Portsentry peut bénéficier du filtrage de paquet fourni par ipfwadm,
ipchains ou iptables selon le noyau Linux que vous utilisez. C'est vrai pour
d'autres saveurs d'Unix en utilisant différents outils (nous y reviendrons).
Nous y voici : la caractéristique essentielle de portsentry est
"l'auto-blocage".
Comment fait-il ? Allons-y !
Portsentry se présente sous la forme d'une très petite archive. Après
extraction, vous obtenez le code source et plusieurs fichiers de
configuration et README. Evidemment, il est recommandé de lire tout cela.
Puisque nous parlons de sécurité, n'oubliez pas de télécharger les fichiers
PGP (signature et clé).
Installer portsentry est évident : make (votre système) et make install.
Mais avant de l'installer vous devez le préparer. En clair, vous devriez
lire la documentation, modifier le fichier portsentry.conf pour le faire
correspondre à vos besoins, et vérifier le Makefile ainsi que le fichier
portsentry_config.h.
Pour que portsentry soit le plus efficace possible, il vous faut au moins
les TCPWrappers. Au moins, parce qu'il serait préférable de l'utiliser en
parallèle à un outil de filtrage de paquet. Bien sûr, si vous utilisez
Linux, vous avez déjà tout sous la main. Qu'en est-il des autres Unices ?
Comme nous avons testé portsentry sur différentes plate-formes, parlons de
ce qu'ils réclament.
Sous MAC OS X, c'est comme pour Linux : tout y est. Vous avez les
TCPWrappers et ipfw (la version BSD). Il suffit donc de taper "make osx" et
c'est tout fini.
Sous Solaris 2.6 (SPARC), vous n'avez pas TCPWrappers. Vous pouvez l'obtenir
depuis ftp://ftp.porcupine.org/pub/security.
Vous pouvez également essayer IPFilter disponible sur ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.9.tar.gz
(mais seulement si vous possédez le compilateur Solaris !!!).
Sous Irix 6.5, vous n'avez pas non plus TCPWrappers. Vous pouvez l'obtenir sous
forme de paquetage à
http://freeware.sgi.com/index-by-alpha.html
Pour le filtrage de paquet vous avez ipfilterd, qui fait partie de la
distribution Irix mais qui n'est pas installé par défaut.
Enfin, à moins de trouver un vsnprintf() fonctionnel, vous ne pourrez pas
installer portsentry sur NeXTSTEP... et je n'en ai trouvé aucun !
Donc, encore une fois, vous devriez configurer portsentry avant de l'installer.
Bon, c'est comme vous le sentez, mais ce serait peut-être mieux de comprendre sa
philosophie avant toute autre chose... mais ce n'est qu'une question d'opinion !
Très bien, merci !
Plus sérieusement, portsentry dépend de fichiers de configuration. Le plus
important est le fichier portsentry.conf. C'est là que vous allez dire à
portsentry comment réagir face à l'adversité.
Avant de vous pencher sur ce fichier, vous devez connaître les différents modes
d'opération et ce qu'ils provoquent.
Portsentry peut utiliser six modes différents, selon l'option choisie au
démarrage.
- La première option "-tcp" est le mode de base. Avec cette option,
portsentry lie les ports TCP trouvés dans le fichier de config dans la partie "port
configuration". Il peut lier jusqu'à 64 ports.
- La seconde "-udp" fait la même chose que la précédente pour les ports UDP.
- La troisième est "-stcp", le "s" signifiant stealth (furtif). Cette option et
les suivantes ne sont disponibles que sous Linux. Avec l'option "-stcp",
portsentry utilise un "socket" pour surveiller les paquets en entrée, autrement
dit, les ports ne sont liés à rien.
-La quatrième "-sudp" fait la même chose que la précédente pour les ports UDP.
- Les cinquième et sixième sont "-atcp" et "-audp". Ce sont les options les plus
efficaces (le "a" signifie avancé). Avec ces options, portsentry établit une
liste des ports à l'écoute, TCP et UDP si vous sélectionnez les deux, et bloque
l'hôte qui se connecte à ces ports, à moins qu'il ne figure dans le
fichier portsentry.ignore.
Tout ceci est bien mieux expliqué dans les fichiers README distribués avec
portsentry. En conséquence, nous n'allons pas réinventer la roue en essayant de
réécrire la documentation. La lecture de ces fichiers README est obligatoire
(comme d'habitude, soyons un peu fascistes !).
Evidemment, portsentry peut générer des logs. Si vous faites partie de ces
administrateurs qui ne lisent pas les logs (quelle honte !), vous pouvez utiliser
logcheck en complément de portsentry. De cette manière, portsentry envoie un
courrier pour vous informer d'une tentative d'intrusion.
Il peut ajouter l'hôte cible dans le fichier /etc/hosts.deny, pour bénéficier
des TCPWrappers.
L'hôte local est capable de router le trafic du réseau vers un hôte mort.
Enfin, l'hôte local peut "jeter" les paquets via l'outil de filtrage de paquet.
Maintenant que vous en savez un peu plus sur la philosophie de portsentry, vous
pouvez commencer à écrire votre fichier portsentry.conf.
- La première partie du fichier concerne les ports. Ici, vous pouvez définir les
ports à lier. Rappelez-vous, ceci est ignoré si vous utilisez les modes avancés
sous Linux. Soyez prudents avec les ports que vous souhaitez lier (par exemple,
ne liez pas le port 6000 si vous utilisez X).
- La partie suivante concerne les options de détection avancées. Par défaut,
tous les ports au-dessous de 1024 sont surveillés, qu'il s'agisse de TCP ou
d'UDP. Ici, vous pouvez exclure les ports que vous voulez ignorer. C'est très
important pour éviter les fausses alarmes et les "logging" énormes,
particulièrement si vous avez des machines Windos dans votre réseau. Par
exemple, attention au port 111 si portmap est utilisé et que les hôtes ne
figurent pas dans le fichier portsentry.ignore. Bien sûr, ce serait un peu fou,
puisque portmap signifie serveurs RPC tels que NFS, mais vous voici avertis. En
clair, NFS n'est pas particulièrement sûr sous Unix alors ne parlons pas des
machines Windos.
Voici l'habituelle partie hors-sujet : lorsque j'écris "Windos", ce n'est pas
une faute de frappe; c'est juste pour insister sur le fait que Windows est un
environnement au-dessus du DOS (D pour désolant ?)... et ça fait un caractère de
moins à taper (quel fainéant !). Pardon pour la digression.
- La partie "configuration files" concerne les fichiers utilisés par portsentry
dans un but d'historique ou pour définir les hôtes à ignorer. Si vous effectuez
une installation par défaut, ne changez rien ici.
- La partie "miscellaneous config" permet d'activer ou de désactiver les
"lookups" de DNS.
- La partie "response options" est le coeur de la configuration. C'est là que
vous définissez la manière dont portsentry va réagir.
D'abord, vous trouvez les "ignore options". Vous pouvez choisir de bloquer les
scans, de ne pas les bloquer ou de lancer une commande externe.
Ensuite, dans la partie "dropping routes", vous indiquez à portsentry comment
rediriger la route ou comment bénéficier de l'outil de filtrage de paquet
présent sur votre machine. Vous disposez de nombreux exemples pour de nombreuses
plate-formes. Choisissez celui (seulement un) qui correspond à vos besoins.
- La partie TCPWrappers indique si vous voulez écrire dans le fichier
/etc/hosts.deny.
- La partie "external commands" permet de définir une commande à lancer
lorsqu'un hôte se connecte.
- La partie "scan trigger value" permet de choisir le temps de réaction. La
valeur par défaut, "0" est la plus immédiate puisqu'elle envoie une alarme à la
première tentative de connexion.
- La dernière partie permet d'afficher un message en cas de tentative
d'intrusion. Ca ne fonctionne pas avec les modes "stealth".
Lorsque vous en avez terminé avec ça, c'est presque bon. Encore une fois, pour
éviter les fausses alarmes et les "logging" gigantesques, vérifiez le fichier
portsentry.ignore. Vous pouvez y ajouter l'adresse de votre réseau local avec
les bits du netmask, ou l'adresse IP de quelques machines.
Ca y est ! Vous pouvez maintenant taper "make votresystème" et "make install".
Le script d'installation fait tout le travail puisqu'il restreint les droits sur
le répertoire et les fichiers. Maintenant vous n'avez plus qu'à lancer
portsentry avec les options de votre choix. Vérifiez les logs pour voir ce qui
s'est passé. Si tout s'est bien déroulé, portsentry a démarré et amélioré la
sécurité de l'hôte.
En utilisant des outils tels que nmap, vous pouvez simuler un scan de ports sur votre hôte nouvellement sécurisé. (Plus sur nmap ici). Voila la réponse que vous pouvez obtenir :
C'est-à-dire que votre machine ne fournit pas beaucoup d'information au pirate que vous êtes devenu !
Absolument PAS ! Il existe des tas d'IDS, libres ou non. La plupart sont très
bons. Mentionnons par exemple le bien connu snort disponible depuis
http://www.snort.org.
Habituellement ces IDS sont passifs. C'est-à-dire qu'ils sont utilisés pour
informer sur les intrusions. Ils ont été conçus pour ça. Par exemple, snort est
très sophistiqué puisqu'il repose sur des scripts de règles, vous permettant
ainsi d'écrire les votres. Le site de snort propose d'ailleurs une base de
données de règles. Et au fait, si vous n'avez pas peur des logs à rallonge, vous
pouvez utiliser portsentry et snort ensemble. Ce n'est pas si stupide !
Toutefois, la force de portsentry est d'être un IDS actif. La façon dont il est
capable de réagir est à couper le souffle. Le combiner à un outil de filtrage de
paquet en fait l'outil indispensable. Nous pourrions poser la question :
portsentry est-il le complément du filtrage de paquet ou le filtrage de paquet
est-il un complément de portsentry ?
De toutes façons, nous pourrions ajouter des tas d'autres choses sur portsentry.
Par exemple, vous devez être très prudents avec la détection de scan UDP en mode
avancé. Lisez la doc (encore !) pour bien comprendre les problèmes relatifs à
UDP. Solaris peut également poser quelques problèmes puisqu'il utilise des ports
très élevés autour de 32700 (soit pout TCP, soit pour UDP). Mais cet article
n'est qu'un survol et en aucun cas une étude complète de ce superbe logiciel.
La sécurité informatique est une responsabilité, et pas seulement pour les
administrateurs système. L'incroyable croissance d'Internet rend les choses
encore plus délicates. En clair, le danger d'intrusion est tous les jours plus
grand. La communauté du logiciel libre nous propose d'extraordinaires logiciels
: portsentry est l'un d'eux. Ne les laissez pas de côté ! Mais rappelez-vous,
ces outils ne font que réduire le risque et ne fournissent en aucun cas un
système sûr à 100%. C'est une autre bonne raison de se pencher sur le domaine
des outils de sécurité.
Enfin, les gens de Psionic travaillent actuellement sur un produit commercial et
nous disent "vous ne serez pas déçus". Attendons et voyons, alors !
Dans l'intervalle, récupérez portsentry 1.1, vous ne serez pas déçus non plus.
Ils font un très beau travail à Psionic. Au fait, hostsentry vaut également la
peine d'être essayé... et utilisé.
Quand je vous dis que nous vivons une époque formidable !
Les sites qui suivent sont des références absolues lorsqu'il s'agit de sécurité.
De plus, ils vous enverront vers d'autres sites, ces derniers vous envoyant vers
d'autres sites... Vous savez, les poupées Russes ? Le seul problème, si vous
voulez tout lire, c'est que vous ne vivrez pas assez longtemps !!!
http://www.linuxsecurity.com
http://www.sans.org
http://www.infosyssec.org
http://www.securityfocus.com
http://www.cs.purdue.edu/coast/hotlist/