_ _______________________ _ -*4*- `^°*;:,.> IDS/LIDS/NIDS/SNORT <.,:;*°^` _____________________________/¯¯¯¯¯¯¯¯ Hertz ¯¯¯¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ Introduction à LIDS. hertz@securix.org 23-06-2000 Introduction à LIDS (Linux Intrusion Detection/Defense System). Présentation LIDS signifie en anglais "Linux Intrusion Detection/Defense System", en français cela pourrais donner : "Système Linux de détection et de protection contre l'intrusion. Ce document est en réfèrence du Howto sur Lids-0.8.1pre1. A l'heure actuelle, faute de moyens, seule les architectures i386 sont supportés. Le but du projet est de protèger les systèmes sous Linux contre des intrusions sous root par désactivation des appèles système au niveau même du kernel. Du fait que vous avez besoins d'administrer le système, LIDS peut être bien sur désactivé. La première partie est de protèger LIDS lui même contre des intrusion sous root. Ceci bien sur en admettant deux choses: -Le système est sain (pas de backdoors, ...) jusqu'à la première installation de LIDS. -Vous êtes la seule personne à avoir un accès sur la console de l'ordinateur (de sorte que vous pouvez passer des commandes au kernel à travers lilo, vous pouvez booter sur un noyau de sauvegarde ou vous pouvez booter sur une disquette). Protèger LIDS contre une intrusion sous root signifie: -Interdire les modules -Interdire l'accès à la "raw memory" (/dev/mem, /dev/kmem, /dev/kcore) -Interdire l'accès au "raw disk" (/dev/hdxx, /dev/sdxx) -Protèger les fichiers ayant pour rôle le démarage du système (lilo files, kernel image, daemons, rc scripts, modules) -Interdire "raw access" au ports I/O (/dev/port, ioperm and iopl syscalls) Ensuite, vous pouvez pensez à la détection d'intrusion. Pour cela LIDS fournit: -Journalise quasiment tous les refus d'accès. -Place des flags read-only et append-only sur les programmes ou journaux contre une intrusion sous root. -Cache votre propres détecteurs d'intrusion. Pour la protection de votre système, LIDS fournit: -Bloque contre toute modification vos tables de routage, ainsi que les règles du firewall. -Bloque les opérations de montage. -Protège les daemons contre les signaux. -N'importe quelle chose que vous pouvez interdire avec "linux capabilities bounding" Compilation de lidsadm Pour le compiler, allez dans le répertoire et tapez: make You can have lidsadm display the current lids status (capabilities/flags state). This is mainly for debugging purposes, as without this option and a correctly configured system2.1 nobody can know the current state of LIDS2.2. make VIEW=1 Installer lidsadm make install Vous devez aussi être sur que votre répertoire /etc se trouve sur votre partition racine (/) car LIDS à besoin de pouvoir lire /etc/lids.conf quand il n'y a que / de monté. Obtenir un mot de passe chiffre en RipeMD-160 vmlin1:~# lidsadm -P MAKE PASSWD enter password: Verifying enter password: RipeMD-160 encrypted password : 46a1492cc2d43652409abfdbb047e4ae099a62f3 Patcher un kernel cd /usr/src/linux-linversion patch -p1 < lidshome/lids-version-linversion.patch Configurer the kernel make sure you choose [*] Prompt for development and/or incomplete code/drivers6.1 and [*] Sysctl support6.2 for Linux Intrusion Detection System to appear. -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- IDS (Intrusion Detection Systems) hertz@securix.org 14-06-2000 Les systémes de détection d'intrusions. Brouillon de document, commentaires bienvenus. Présentation: Les systèmes de détection d'intrusions (IDS) sont des outils permettants de détecter des activitées suspectes. Il peuvent être mis en place sur une machine pour détecter les attaques effectués sur celle-ci (IDS locaux) et peuvent aussi être configurés pour détecter toutes les attaques effectués sur le réseau; dans ce dernier cas, l'on fera plutôt réfèrence à NIDS (Network Intrusion Detection Systems). L'approche la plus courament utilisé pour la détection d'intrusion est la recherche de signatures (un peu comme les anti-virus). Les systèmes de détection d'intrusion (IDS) Les IDS locaux, sont les systèmes qui ne vont détecter que les intrusions en local. Ce sont des logiciels que l'on installe sur tous les postes que l'on veux surveiller; contrairement au NIDS qui s'installent sur un poste puis surveillent la totalité du segement réseau auquel il appartient. Les IDS locaux et NIDS ont des avantages et des inconvenients chacuns, nous reviendrons plus tard sur ces différences. Il ne vont pas seulement analyser les connexions entrantes et sortantes, mais aussi les logs ainsi que les processus suspects. Il y a deux principaux types d'IDS locaux, les wrappers/firewalls et les agents. L'assemblage des deux est bien plus efficace qu'un NIDS. Wrapper/firewall Les wrapper/firewalls vont permettre l'analyse et la protection face au connexions entrantes et aussi sortantes. Le plus connu des wrapper est TCPWrapper: http://coast.cs.purdue.edu/pub/tools/unix Agents En addition, les agents devront analyser les accès et changement effectués sur les fichiers sensibles du system. Ils pourront par exemple analyser le contenu des fichiers de log pour détecter des messages suspects. Les outils qui fonctionnent de cette manière sont par exemple: - Logcheck --> http://www.psionic.com/abacus/logcheck/ - Swatch ----> ftp://ftp.stanford.edu/general/security-tools/swatch/ Les systèmes de détection d'instrusion réseau (NIDS). Les NIDS sont des détecteurs d'intrusion orientés réseau. C'est à dire qu'ils sont conçues pour détecter les activités suspectes se déroulant sur le réseau et non sur une seule machine. Architecture. Comment les NIDS font leurs détections. Il y a deux techniques principales: Détection d'activité anormale: L'approche la plus courante de la détection d'intrusion est la détection d'activité anormale grace aux statistiques. L'avantage de cette technique est qu'elle ne nécessite pas la connaissance de types d'attaques. Reconnaissance de signature: La plupart des outils commerciaux fonctionnent sous ce principe. En fait cela signifie que tout type d'attaque devant être détecté doit au préalable avoir sa signature ajoutée au system. Par exemple, le NIDS va en permanence rechercher des motifs telles que: "/cgi-bin/phf?" (ceci représente une requette sur une application CGI vulnérable). Les NIDS possèderont souvent une base de donnée de types d'attaque connues. Vous pouvez trouver des informations et récupèrer des fichiers de signatures sur http://www.whitehats.com Comment font-ils la comparaison des signatures avec le traffic entrant: Un NIDS capture les paquets circulants sur le réseau, puis appliques quelques techniques: -Protocol stack verification -Application protocol verification -Creating new loggable events Protocol stack verification: Un certain nombre d'attaques, tels que les "Ping- Of-Death", "TCP Stealth Scanning", effectuent des requettes IP, TCP, UDP, ICMP mal formés pour réaliser l'attaque. Une simple vérification sur chaque paquet permet de détecter de tels attaques. Application protocol verification: Les attaques sont aussi souvent effectués au niveau applicatif. "Winnuke" par exemple, ainsi que les attaques DNS. De ce fait les NIDS doivent comprendre certains protcoles de la couche applicative. Creating new loggable events: Un NIDS peut aussi être conçu pour rapatriller des logs (WinNT Event, UNIX syslog, SNMP TRAPS, etc.). Plus tard il pourra les réassembler/triller sur un machine dédiée. Placer le NIDS dans le réseau: Les NIDS sont plus efficaces en périphèrie du réseau, tel, qu'a côté d'un firewall, serveur d'accès distant, et sur le lien d'un réseau partenaire. Outils / Ressources: Vous pouvez consulter les sites suivants: -http://www.lids.org -->> Linux Intrusion Detection System. -http://www.snort.org -->> Snort is a lightweight network intrusion detection system. -http://www.whitehats.com -->> Base de donnée de règles pour Snort. -http://packetstorm.securify.com/UNIX/IDS/ -->> Archive de divers IDS / NIDS. -http://packetstorm.securify.com/papers/IDS/ -->> Documents sur les IDS (Anglais) -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- CONSTRUIRE UN SYSTEM SECURISE PAR LIDS Xie Huagang (/xhg@ncic.ac.cn,/ http://www.lids.org) Tue Apr 18 00:02:12 CST 2000. LIDS ( Linux Intrusion Detection System) est un patch du kernel de linux servant à augmenter ses capacités. Dans cet article, nous parlons de ce que lids est capable de faire et comment construire avec lui un système Linux sécurisé. Pourquoi LIDS. Avec l'augmentation de la popularité de Linux sur Internet, de plus en plus de bug de sécurité sont trouvés dans le système GNU/Linux. Vous pouvez entendre sur Internet que - Il y a des bugs dans Linux, qui rendront le système facilement attaquable par un hacker. Depuis que Linux est un art de la comunauté open source, les trous de sécurité peuvent être trouvés facilement et peuvent aussi être aussi vite corrigés. Mais quand un bug est publiquement connue, et que l'administrateur est trop fainéant pour corriger ce bug. Il est alors très facile de pénèter le système et parfois plus grave encore, il est possible d'obtenir un shell sous root. Maintenant vous pouvez vous demander quelle est la solution? Qu'est-ce qui ne va pas avec le système GNU/Linux. - superuser (root) peut abuser de ses droits Sous root, il peut faire absoluement ce qu'il veut. Il peut changer les fonctions propres au système. - De nombreux fichiers système peuvent être facilement changés. Il y a de nombreux fichiers importants, tel que /bin/login, dans ce système. Si le hacker entre dans ce système, il peut facilement changer ce programme pour qu'il puisse plus tard se reconnecter avec n'importe quel pseudo/mot de passe. Mais normalement ces même fichiers n'ont pas besoins d'être changés fréquement, sauf si vous faite un update du système. - Les Modules sont facilement utilisable pour s'interfacer au kernel. Le Modules sont un bon design pour le kernel de linux.Il le rendent plus flexible et modulaire. Mais une fois le module insèré dans le kernel, il devient une partie du kernel et peut faire ce que le kernel originel pouvait faire. De cette manière, du code néfaste peut être écrit et insèré dans le kernel à la manière des modules, le code peut même rediriger les appels système et fonctionner de la même manière qu'un virus. - Les processus ne sont pas protègés. Certains processus, tels que les daemon web, qui sont critiques pour le système ne sont pas protègés de manière stricte. De cette manière, ils sont vulnérable à l'attaque de crackers. Avec cette description, comment peut-on construire un système sécurisé? Nous devons premièrement avoir un kernel sécurisé et en suite construire construire une sécurité autour. C'est ce que LIDS fait. Le Fonctions de LIDS. "Linux Intrusion Detection System" est un patch qui augmente la sécurité du kernel de Linux. Quand il est en activite, l'accès à certains fichier, à chaque opération d'administration système/réseau, "raw device", "mem" et "I/O access" peuvent être rendus impossible, même pour root. Il utilise et augmente les capacité du système en placement ces fonctionnalités directement dans le kernel. En résumé, LIDS fournis Protection, Détection et Réponse aux intrusion dans le kernel de Linux. - Protection. LIDS peut protèger les fichiers importants de votre système, peu importe sur quel système de fichier ils se trouvent, personne ne pourra les modifier, même pas le root. LIDS peut aussi portèger les systèmes importants et les empècher de se faire tuer. LIDS peut prévenir contre des opérations de programmes non authorisé sur "RAW IO". Il peut aussi protèger le disque dur, en incluant une protection sur le MBR, etc. - Détection. Quand quelqu'un scan votre machine, LIDS peut le détecter et en informer l'administrateur. LIDS peut aussi détecter des activité annormales se déroulant sur le système. - Réponse. Quand quelqu'un viole les règles, LIDS tiens un journal détaillé en rapport avec cette violation. LIDS peut aussi envoyer un message par mail. Dans ce cas, LIDS peut aussi déconnecter l'utilisateur. Construire un système sécurisé par LIDS. Nous allons vous comment construire ce système, pas à pas. Télécharger le patch LIDS et le kernel correspondant. Vous pouvez télécharger le patch lids depuis http://www.lids.org et ftp://ftp.lids.org, vous pouvez aussi essayer les miroirs répartis mondialement sur http://www.lids.org/mirrors. Le nom du patch sera lids-x.xx-y.y.y.tar.gz, x.xx représente la version de lids et y.y.y représent la version du kernel. Vous devez absolument télécharger le kernel correspondant. Par exemple, si vous télécharger lids-0.9pre4-2.2.14.tar.gz, vous devrez télécharger les sources du kernel 2.2.14. Vous pouvez télécharger les sources du kernel sur ftp://ftp.linux.org 1. décompressez le code source du kernel. # cd linux_install_path # bzip2 -cd linux-2.2.14.tar.bz2 | tar -xvf - 2. décompressez le code source de LIDS.. # cd lids_install_path # tar -zxvf lids-0.9pre4-2.2.14.tar.gz Pacher LIDS sur le kernel de Linux Après avoir télécharger le code source du kernel et lids, décompressez les. Par exemple, si vous télécherger lids-0.9pre4-2.2.14.tar.gz et linux-2.2.14.tar.bz2, alors, 3. patcher lids sur le code source du kernel. # cd linux_install_path # patch -p0 </lids_install_path/lids-0.9pre4-2.2.14.patch # cd linux # make dep clean # make bzImage # make modules # make modules_install 4. copiez bzImage dans /boot/ et éditez /etc/lilo.conf 5 lancez /sbin/lilo pour installer le nouveau kernel. # /sbin/lilo Configurer le kernel linux Maintenant il est temp de configurer le kernel linux, mettez les options suivantes sur "on", [*] Prompt for development and/or incomplete code/drivers [*] Sysctl support 4. configurer le kernel linux # cd linux # make menuconfig ou make xconfig Initialiser le systme lids Maintenant, avant de rebooter, vous devez configurer lids pour opèrer vos besoins en sécurité. Vous pouvez définir les fichiers à protèger, les processus, etc. Dans le chapitre suivant, nous vous montrerons les détails de se sujet. Rebooter le système Après avoir configuré votre système, rebootez le. Quand lilo apparait, sélectionneez le kernel patché par lids. Après cela, vous entrerez dans le monde merveilleux de LIDS. Protèger le kernel. Après avoir rebooter, n'oubliez pas de protèger le kernle grace à lidsadm, vous pouvez placer cette commande à la dernière ligne de /etc/rc.local. # /sbin/lidsadm -I -- -CAP_SYS_RAWIO -CAP_NET_ADMIN Vous pouvez consulter LIDS HOWTO pour savoir ce que signifie chaques options de lidsadm. Online administration Après avoir protègé votre kernel, votre système est maintenant protègé par LIDS. Vous pouvez faire des tests dessus. Si vous souhaitez changer la configuration, vous pouvez changer votre niveau de sécurité en fournissant un mot de passe. # /sbin/lidsadm -S -- -LIDS Configurer LIDS Dans ce chapitre, nous vous montrerons comment configurer lids. Proteger vos fichiers. Premièrement, vous devez déterminer quels sont les fichiers à protèger. Dans la plupart des cas, vous pouvez protèger les fichiers binaires et de configuration tel que /usr/, /sbin/, /etc/, /var/log/. Deuxièmement, vous devez décider la manière pour protèger ces fichiers. LIDS fournis trois types de protection: - Fichiers en lecture seule. Les fichiers marqué en lecture seule, signifie que personne ne peut les changer. Nous pouvons penser que les fichiers suivants font partient de ce type. /etc/passwd, /bin/passwd, etc. USAGE: lidsadm -A -r filename_to_protect example, 1. Pour protèger l'ensemble des fichiers de /sbin/ en les mettant en lecture seule. # /sbin/lidsadm -A -r /sbin/ 2. Pour protèger le fichier /etc/passwd en lecture seule # /sbin/lidsadm -A -r /etc/passwd - Les fichiers en Ajout unique (append only). La plupart des fichiers qui doivent être en ajout unique sont les fichiers de journaux, tels que /var/log/message ,/var/log/secure. Ces fichiers peuvent uniquement être ouverts pour un ajout, et ne peuvent pas être modifiés du contenue précèdement ajouté, elle ne peuvent pas être supprimés non plus. USAGE: lidsadm -A -a filename_to_protect example, 1. Pour protèger les fichiers de journaux du système # /sbin/lidsadm -A -a /var/log/message # /sbin/lidsadm -A -a /var/log/secure 2. Pour portèger les fichiers de log httpd # /sbin/lidsadm -A -a /etc/httpd/logs/ # /sbin/lidsadm -A -a /var/log/httpd/ Voici un exemple provenant de LIDS HOWTO par Philippe Biond, lidsadm -Z lidsadm -A -r /boot lidsadm -A -r /vmlinuz lidsadm -A -r /lib lidsadm -A -r /root lidsadm -A -r /etc lidsadm -A -r /sbin lidsadm -A -r /usr/sbin lidsadm -A -r /bin lidsadm -A -r /usr/bin lidsadm -A -r /usr/lib lidsadm -A -a /var/log Proteger vos processus. LIDS peut protèger les processus qui ont pour père init(pid=1), pour cela, vous devez bloquer le kernel avec les options suivantes. # lidsadm -I -- +INIT_CHILDREN_LOCK Protèger avec les "capability". Les "Capabilities" sont comme des privilèges que vous pouvez donner à un process. Un process root a toutes les "capabilities". Mais il existe des "capabilities bonding set". Dans un kernel normal, quand vous retirez une "capability" d'un "bonding set", personne ne peux plus l'utiliser jusqu'au prochain redémarage. (Voir http://www.netcom.com/~spoon/lcap) LIDS modifie ce comportement pour vous permettre de les démarrer ou de les arrêter a tout moment. Un accès à /proc/sys/kernel/cap_bset est attrapé et lance une allerte de sécurité. lidadm fait tout le travail. Vous pouvez lister toures les capabilities en lançant lidsadm, et vous pouvez aussi voir le sens exacte de chaques capabilities. Nous vous en parllons ici de deux d'entre elles, CAP_SYS_RAWIO Avec cette "capability on", nous pouvons permettre l'accès à ioperm/iopl et /dev/port, permettre l'accès à /dev/mem et /dev/kmem et permettre l'accès à "raw block devices" (/dev/[sh]d??) Quand nous désactivons cette "capability", nous pouvons rendre touts les processus du system sans aucun droits sur la "raw device", tel que lilo. Mais certains processus peuvent avoir besoin de cette capacité pour pouvoir fonctionner, tel que XF86_SVGA. Dans ce cas, nous pouvons placer ce programme dans une liste d'execptions quand nous compilons le kernel. CAP_NET_ADMIN Cette "capability" à les fonctions suivantes, interface configuration administration of IP firewall, masquerading and accounting setting debug option on sockets modification of routing tables setting arbitrary process / process group ownership on sockets binding to any address for transparent proxying setting TOS (type of service) setting promiscuous mode clearing driver statistics multicasting read/write of device-specific registers Pour des raisons de sécurité, nous devons désactiver ceci pour interdire le changement de configuration réseau. Quand ceci est désactivé, les règles du firewall ne pouront être changés. Choisissez les "capability" et scellez le kernel, vous devez chosir quelles "capability" vous devez désactiver au moment de sceller le kernel. Voici un exemple. Vous pouvez placer ce script dans un script de rc/ (rc.local, /etc/init.d/lids, /etc/rc.d/init.d/lids, etc.) cela dépend de votre distribution et de la manière dont vous administrez le système. Cette commande est, par exemple: lidsadm -I -- -CAP_SYS_MODULE -CAP_SYS_RAWIO -CAP_SYS_ADMIN \ -CAP_SYS_PTRACE -CAP_NET_ADMIN \ +LOCK_INIT_CHILDREN NDT: Consultez les infos sur http://www.lwn.net/1999/0408/kernel.phtml, http://www.lwn.net/1999/0415/kernel.phtml et http://www.lwn.net/1999/1202/capabilities.phtml pour comprendre les "capabilities" et leur danger. Sécurité réseau. LIDS fournis des améliorations au niveau sécurité réseau.. Sécurité réseau avec "capbility" Avec les capability, nous pouvons augmenter la sécurité réseau. Nous pouvons faire de l'anti-sniffing, empècher l'ouverture d'un port infèrieur à 1024, empècher la modification des règles du firewall et la table de routage. Donc je vous conseille d'examiner avec attention chaque "capability" pour comprendre son sens. Détecteur de scan au niveau kernel LIDS fournis un détecteur de scan au niveau kernel pour pouvoir détecter qui l'a scanné. Cette fonction peut détecter des scan mi-ouvert, nomaux etc. L'utilisation d'outils tels que nmap, satan peut être détecté Ceci est très utile quand "raw socket" est désactivé. Dans ce cas, des outils fonctionnant de détection basés sur le sniff ne pourront fnctionner. Si vous souhaitez cette fonctionnalité, il vous faudra la sélectionner au moment de la compilation du kernel. Systeme de réponse face à l'intrusion. Quand LIDS détecte quelque chose violant les règle définient, il peut répondre à cette action par les méthodes suivantes. Journalise le message Quand quelqu'un viole les règles, lids_security_log journalisera les messages grace à klogd, la journalisation à aussi les capacités de lutter contre l'inondation "anti_logging_flood". Vous pouvez l'activer lors de la compilation du kernel. Journaliser les messages à travers un serveur de mail. LIDS à une nouvelle fonctionnalité pour envoyer les messages sur votre compte email. Vous pouvez déninir l'adresse IP du serveur de mail, l'adresse email, etc au moment de la compilation du kernel. Extinction de la console Quand un utilisateur viole une règle, le système fermera la session de cet utilisateur. Merci. Première je tiens à remercier mon amie, Kate lee, qui m'encourage à l'écriture de documents de ce type, ceci est une dédicace à elle. Je souhaite aussi remercier Philippe Biond et Christophe Long qui m'a beaucoup aidé sur le projet. Sans eux, ce projet n'aurait pas pu si bien se dévellopper. De nombreux remerciements à tous les utilisateurs de LIDS, sans leurs contributions et discussions, LIDS n'aurait pas eu de si bonnes idées. Traduction Document traduit le 24/06/2000 par hertz@securix.org [ndt: Certains mots ont été laissés tels quels, il est très souvent plus facile d'exprimer une notion technique en anglais, et souvent sa traduction en est impossible, du au fait que un grand nombre de mots n'existent pas en français ou sont encore que peu employés, mieux vaut se référer au jargon file.] -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Snort hertz@securix.org 18-06-2000 Snort. Début de documentation. Présentation de Snort "Snort est un detecteur d'intrusion, capable d'analyser en temps réel le trafic et les paquets IP. Il peut analyser le protocole, et détecter par rapport à une base de données de DOS et d'attaques diverses et variées (overflows, scans, SMB probes, CGI attacks, OS fingerprinting, et plein d'autres...) les tentatives d'intrusions. De base Snort utilise des régles pour collecter ou laisser passer le trafic, et posède un module de détection. le journal alerte utilise soit syslog ou un fichier personnel, ou encore un winpopup pour les clients smb. http://www.clark.net/~roesch/security.html il existe une petit programme pour convertir le journal d'alerte en page html. Consulter http://www.whitehats.com/ pour avoir la base de donnée d'intrusion.