Psionic Portsentry 1.1, le défenseur des ports

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Georges Tarbouriech 

en to frGeorges Tarbouriech 

AboutTheAuthor:[A small biography about the author]

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.

Abstract:[Here you write a little summary]

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...).

ArticleIllustration:[This is the title picture for your article]

[illustration]

ArticleBody:[The article body]

Pourquoi utiliser portsentry ?

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 !

Comment installer portsentry ?

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 !

Comment fonctionne portsentry ?

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 !).

Comment réagit portsentry ?

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.

Que se passe-t-il alors ?

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 :

portsentry en
fonction sur l'hôte scanné

C'est-à-dire que votre machine ne fournit pas beaucoup d'information au pirate que vous êtes devenu !
Habituellement, cette tentative aurait dû vous procurer la version de l'OS et les ports ouverts de l'hôte scanné. Ce type d'information est particulièrement utile à un pirate puisqu'il sait alors mieux où et comment attaquer. Avec portsentry en fonction avec une valeur de 0 pour temps de réaction instantané en mode avancé, le blocage est immédiat. S'il avait été lancé avec une valeur de 1 en mode normal, l'attaquant aurait obtenu la liste des ports ouverts et probablement le type de l'OS en service sur la machine. Mais alors, essayer de se connecter sur un port connu pour être ouvert aurait échoué. Portsentry a bloqué le port après la première tentative. Simple mais efficace !
Donc, si vous utilisez seulement TCPWrappers, l'adresse IP de l'attaquant a été écrite dans le fichier /etc/hosts.deny. Si vous avez choisi de "jeter" la route en la redirigeant vers un hôte mort, portsentry est encore efficace mais ne protège pas totalement des attaques UDP.
Si vous utilisez un outil de filtrage de paquet, l'hôte attaqué redirige les paquets venant de l'attaquant vers cet outil.
Bien sûr, il s'agit du meilleur moyen de bénéficier de toute la puissance de portsentry.
Encore une fois, le mode avancé sous Linux est l'idéal. Cela ne signifie pas que portsentry ne soit pas aussi bon sous d'autres OS, il est juste un peu moins efficace... enfin, pas vraiment !
Pour mieux comprendre, vérifiez les logs après différentes tentatives d'intrusion sur différents OS utilisant portsentry sous différents modes. Ca résume tout !
Selon les modes utilisés, les logs vont fournir quelques fausses alarmes. Pour améliorer la qualité de l'information, vous devrez travailler sur le fichier de config. après une phase de test, vous devriez obtenir exactement ce que vous souhaitez.

Peut-on vivre sans portsentry ?

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 !

Références

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/