Installation de Snort et Utilisation de Base
par Dale Coddington <dalec@eEye.com>
Dernière modification le lundi 17 Juillet 2000

Traduction: skoop@users.sourceforge.net
Derniere modification:02/05/2001


  1. Introduction

    Le taux des Intrusions systèmes est en hausse. Que ce soit des "script kids" tentant de changer la page d'accueil d'un site ou bien un attaquant tentant de voler des numéros de cartes de crédits, les serveurs doivent s'équiper et non pas seulement pour éviter ces attaques mais aussi pour savoir si celles-ci ont lieu. C'est ici que les IDS (Systèmes de Détection d' Intrusion) rentrent en jeu. En bref, un IDS est installé sur un réseau et tente d'y découvrir les anomalies. Un IDS de base capture tout le trafic ou bien une bien partie des communications. Il compare alors le trafic à une base de donnée d' "empreintes d'attaques" ou a des signatures d'attaques connues. Si une attaque est détectée, l'IDS peut entreprendre diverses actions selon la réponse configurable à l'attaque. Ces actions sont multiples, allant de prévenir l'administrateur! par message jusqu'à interdire tout trafic provenant de l'attaquant. Des IDS plus performants reconnaîtront aussi des anomalies dans des modèles d'utilisateurs systèmes. Par exemple, Bob se log toujours en provenance d'une machine que nous nommerons "defiant" entre 9 et 17 heures. Soudainement bob commence à se logger d'une machine se nommant "regret" entre 1 et 3 heure du matin le samedi. Un IDS puissant noterait cela comme suspect.

    Naturellement un tel système peut avoir des défauts. Comme un scanner de virus, un IDS n'est effectif uniquement contre des attaques qu'il sonnait ou desquelles il a des signatures. Un attaquant intelligent pourrait légèrement modifier une attaque et changer la signature de l'attaque et ainsi éviter toute détection par l'IDS.

    Cet article se centralisera sur l'installation et l'utilisation de base de Snort, un IDS librement disponible et populaire qui tourne sous Linux, *BSD, Solaris / SunOS, HP-UX, AIX, IRIX, et MAC OS X. Snort fut même récemment porté sur Win32. La deuxième partie de cet article portera sur des particularitées plus avancées tels que les rapports et les écritures de règles personnalisées.

    Snort est facile a utiliser, un IDS léger écrit par Marty Roesch qui est capable d'exécuter l'analyse de trafic en temps réel et la sauvegarde des paquets sur des réseaux IP. Certaines des autres particularités de Snort sont :

    • Analyse des protocoles
    • Recherche et comparaison par contenu
    • Possibilité d' Alertes en temps réel
    • Peut lire dans une trace de TCPDump et s'exécuter en prenant en compte une règle donnée
    • Langage des règles flexible pour définir le trafic a collecter ou a ignorer

    Snort est aussi en constante évolution.

  2. Prérequis

    Installer un IDS sur un système non-securisé s'apparente a installer une alarme bulgare high-tech dans votre maison en laissant les portes et les fenêtres ouvertes. Assurer vous que le système sur lequel vous installerez votre IDS est le plus sécuriser possible. Par ailleurs, étant donné que les IDS sont assez demandeurs, c'est génerallement une bonne idée de dédié une machine pour le Système de Détection D'Intrusion Réseau.

    Selon le type de services désiré vous pouvez a votre avantage installer un serveur web ainsi qu'un serveur SMTP sur votre Système IDS. (plus d'informations en partie II)

    Les deux articles suivants constituent une bonne base pour sécuriser des machines sous Linux:


  3. Banc d'essai

    Les instructions ont été testées sur les sytèmes suivants:

    • Slackware 4.x
    • Solaris 7 sparc et Intel
    • FreeBSD 4.0

  4. Récupérer les Logiciels Nécessaires

    • Snort www.snort.org
      Cet article se base sur la version la plus récente de Snort, v1.6.6.2
    • libpcap ftp://ftp.ee.lbl.gov/libpcap.tar.Z
      Snort est dépendant de lipbcap pour la capture de paquet. Les dérivés des *BSD incluent généralement la libpcap; Au contraire de Linux

    Après avoir récupérer les logiciels nécessaires, placé les dans /usr/local

  5. Installation

    • Etape 1 - Installer libpcap (Aller à l'étape 2 si la libpcap est déja installée)
      # gzip -d -c libpcap.tar.Z | tar xvf -
      # cd libpcap-0.4/
      # ./configure
      # make
      # make install
      # make install-incl
      # make install-man
    • Etape 2 - Installer Snort
      # gzip -d -c snort-1.6.2.2.tar.gz | tar xvf -
      # cd snort-1.6.2.2/
      # ./configure
      # make
      # make install

  6. Utiliser Snort

    Pour voir comment Snort peut-être utilisé pour capturer des paquets sur le réseau, essayer la commande suivante:

    #snort -v

    -*> Snort! <*-
    Version 1.6.2.2
    By Martin Roesch (roesch@clark.net, www.clark.net/~roesch)
    07/11-20:33:59.675507 192.168.1.10:3436 -> 192.168.1.1:53
    UDP TTL:64 TOS:0x0 ID:22707
    Len: 36

    07/11-20:33:59.916825 192.168.1.1.436 -> 192.168.1.10:3436
    UDP TTL:57 TOS:0x0 ID:1177
    Len: 91

    07/11-20:33:59.917642 192.168.1.10:3437 -> 192.168.1.153
    UDP TTL:64 TOS:0x0 ID:22708
    Len: 47

    07/11-20:34:00.078208 192.168.1.1:53 -> 192.168.1.10:3437
    UDP TTL:57 TOS:0x0 ID:1367
    Len: 109

    ^C
    Exiting...

    ======================================

    Snort received 72 packets.
    Packet loss statistics are unavailable under Linux. Sorry!

    Breakdown by protocol:
        TCP: 0          (0.000%)
        UDP: 4          (5.556%)
       ICMP: 0          (0.000%)
        ARP: 66         (91.667%)
       IPv6: 0          (0.000%)
        IPX: 0          (0.000%)
      OTHER: 0          (0.000%)
    ======================================

    Examinons le premier paquet que nous avons capturé:

    07/11-20:33:59.675507 192.168.1.10:3436 -> 192.168.1.1:53
    |---------a---------|  |---b---|   |-c-|   |---d---| |-e-|

    UDP TTL:64 TOS:0x0 ID:22707
    |f| |-g-|  |--h--| |--i--|

    Len: 36
    |--j--|

    1. Affiche la date et l'heure
    2. Adresse ip source
    3. Port source
    4. Adresse ip de déstination
    5. Port de déstination
    6. Protocol
    7. Temps à vivre (time to live)
    8. Type de service
    9. Identification du paquet
    10. Taille du paquet

    Nous remarquons ci-dessus que le client a fait une requête DNS au serveur.

    Remarquer que Snort peut aussi générer un beau tableau de statistiques. Malheureusement, Snort ne peut pas faire de statistiques sur le taux de paquets perdus sous Linux mais peut le faire sous FreeBSD et Solaris.

  7. Executer Snort avec un jeu de Règles

    Le pouvoir réel de Snort vient du fait qu'il est capable de lire des règles, d'observer le trafic sur le réseau et de comparer les deux afin d'y voir des ressemblances. Des règles peuvent être crées pour observer les pings, scans, tentatives de connections sur des backdoors, failles-cgi, et d'autres méthodes communes utilisées par des attaquants pour gagner le contrôle d'une machine cible. Les Alertes peuvent être logger dans un fichier spécifier sur la ligne de commande ou même en passant par syslog et les ajoutées ainsi aux messages système. Tout ceci peut être exécuter en tache de fond.

    Les jeux de Règles peuvent être écrits à la main. Souvent, les gens utilisent un de ces jeux de règles disponibles gratuitement sur le site de Snort : http://www.snort.org/snort-files.htm. Une interface personnalisé est capable de créer vos règles afin de subvenir à vos besoins "à la volée" sur http://www.snort.org/Database/rules.asp.

    Afin de laisser les choses simples pour le moment nous ne générerons qu'une simple règle et examinerons son contenu. La règle suivante a été automatiquement générée pour répondre aux requêtes ICMP.

    #---------------------------------------------
    # http://www.snort.org       Snort 1.6 Ruleset
    #    Current Database Updated -- 07/12/2000
    #Contact:  Jim Forster - jforster@rapidnet.com
    #---------------------------------------------

    preprocessor http_decode: 80 443 8080
    preprocessor minfrag: 128
    preprocessor portscan: 192.168.1.1/24 3 5 /var/log/snort_portscan.log
    #                      ^^^^^^^^^^^    ^ ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    #                               |     | |              |
    #Votre Adresse IP ou Réseau ici-+     | |              |
    #                                     | |              |
    #Nombre de Ports connéctés------------+ |              |
    #  dans cet                             |              |
    #Intervalle (en secondes)---------------+              |
    #                                                      |
    #Fichier de Log (chemin/nom)---------------------------+

    preprocessor portscan-ignorehosts: 192.168.1.4

    #---------------------------------------------

    #----------------------------------------------------
    # CHANGEZ LA LIGNE SUIVANTE POUR ADAPTER VOTRE RÉSEAU
    # (Systeme Seul = votre ip/32)
    var HOME_NET 192.168.1.1/24
    #----------------------------------------------------

    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS166 - PING Seer
    Windows"; content:"|88042020202020202020202020202020|";itype:8;depth:32;)

    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS152 - PING BSD";
    content: "|08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17|"; itype: 8;
    depth: 32;)

    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS153 - PING Cisco
    Type.x"; content:"|abcdabcdabcdabcdabcdabcdabcdabcd|";itype:8;depth:32;)
    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS154 - PING CyberKit 2.2
    Windows"; content:"|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|";itype:8;depth:32;)

    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS155 - PING Delphi-Piette
    Windows"; content:"|50696e67696e672066726f6d2044656c|";itype:8;depth:32;)

    alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS156 - PING Flowpoint
    2200DSL Router"; content:"|0102 0304 0506 0708 090a 0b0c 0d0e
    0f10|";itype:8;depth:32;)

    -- SNIP --

    Snort n'accepte qu'une règle par ligne. Les lignes ont été coupées dans l'exemple ci-dessus pour une meilleure lisibilité.

    La première partie de la règle (la tête) traite avec les directives du préprocesseur, les hôtes desquels il faut ignorer les scans, et de configurer l'adresse IP de la machine.

    Les directives du Préprocesseur: Permet d'ajouter des fonctionnalités a Snort en autorisant les programmeurs d'utiliser des plug-ins sous la forme de modules aisemant. Un exemple est une directive du préprocesseur pour détecter les scans de ports. En entrant une adresse IP ou une adresse réseau, en mettant des seuils pour les ports étant connectés pour un certain temps et en spécifiant un répertoire pour enregistrer les logs, Snort observera les tentatives de connections semblables au critères précédents et les enregistrera en conséquence. Si vous utilisez cette directive, vous devriez aussi prendre avantage de la directive du préprocesseur nommée portscan-ignorehosts. Mettez n'importe quelle adresse sur cette ligne séparée par un espace que Snort devrait ignorer lors de la détection d'un scan. Certains serveurs comme les DNS feraient voyager le d&ea! cute;tecteur de scan donc il est préférable de les ignorer. Par contre, si vous avez déjà un programme en place qui détecte les scans, cette directive peut-être commentée.

    Le Préprocesseur httpd_decode est utilisé pour capturer les chaînes de caractères contenus dans les URL HTTP et de les convertir en chaînes ASCII. C'est pour avoir la possibilité d'analyser et de comparer les chaînes de caractères contenus dans les jeux de règles avec celles capturées.

    Le Préprocesseur minifrag observe les paquets qui ont atteint la taille d'un seuil spécifié. Les paquets Fragmentés sont souvent utilisés par des attaquants pour éviter toute détection.

    HOME_NET: Cette directive spécifie l'adresse IP et le bloc CIDR que Snort doit observer.

    Snort peut lire les règles uniquement sur une ligne non-cassé (pas de retour a la ligne au milieu de la règle). Cependant les règles ci-dessous sont en plusieurs morceaux pour plus de clarté. La deuxième partie de cet article se centrera sur la manière dont ces règles fonctionnent. En attendant de se pencher techniquement sur le jeu de règles, il est assez facile de comprendre ce que chacune d'entre elles fait.

    Maintenant nous pouvons exécuter Snort avec ces règles et voir comment elles fonctionnent:

    # snort -d -h 192.168.1.1/24 -l ./log -c ping.rules -s -i eth0 -D

        -d décharge la couche application
        -h reseau principale
        -l chemin du fichier d'enregistrement
        -c nom du fichier qui comporte les règles
        -s envoi les alertes a syslog
        -i interface sur laquelle écouter
        -D lance Snort en processus de fond (mode Daemon)

    La première fois que vous lancerez Snort avec un jeu de règles il serait une bonne idée de laisser l'argument -D de côté afin de s'assurer que Snort se charge sans erreurs. La plupart des autres options s'expliquent d'elles-mêmes à l'exception de la fonction de log. Etant donné que nous avons spécifié a Snort d'envoyer les messages d'alertes a syslog, d'autres enregistrements seront ajoutés. Le répertoire que l'on spécifie sur la ligne de commande contiendra un répertoire supplémentaire pour chaque hôte détecter comme violant une règle et les actions entreprises qui ont fait que l'alerte s'est produit. En utilisant l'exemple d'un jeu de règle provoquant une alerte pour un ping, on verra un extrait de ce qui serait dans /var/adm/messages si Snort détectait des ping.

    Jul 12 19:18:22 strife snort[370]: IDS152 - PING BSD: 192.168.1.10 -> 192.168.1.1
    Jul 12 19:18:23 strife snort[370]: IDS152 - PING BSD: 192.168.1.10 -> 192.168.1.1
    Jul 12 19:18:24 strife snort[370]: IDS152 - PING BSD: 192.168.1.10 -> 192.168.1.1
    Jul 12 19:18:25 strife snort[370]: IDS152 - PING BSD: 192.168.1.10 -> 192.168.1.1

    Note: Pour avoir plus d'informations sur des attaques listées comme ci-dessus vous pouvez visiter http://dev.whitehats.com/ids/ids.html et faire une recherche sur le numero de l'IDS affiché. Dans ce cas précis, faites une recherche sur IDS 152.

    Maintenant si nous regardons dans notre fichier de log, Snort devrait avoir créer un repertoire contenant des informations sur l' hôte nous ayant pingé.

    # ls log
    192.168.1.10

    # cd log/192.168.1.10
    # ls
    ICMP_ECHO

    # more ICMP_ECHO

    [**] IDS152 - PING BSD [**]
    07/12-19:18:22.311702 192.168.1.10.200 -> 192.168.1.1
    ICMP TTL:49 TOS:0x0 ID:17933
    ID:48507   Seq:0  ECHO
    06 28 6D 39 5A C8 04 00 08 09 0A 0B 0C 0D 0E 0F  .(m9Z...........
    10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
    20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
    30 31 32 33 34 35 36 37                          01234567

    [**] IDS152 - PING BSD [**]
    07/12-19:18:23.310086 192.168.1.10:200 -> 192.168.1.1
    ICMP TTL:49 TOS:0x0 ID:18002
    ID:48507   Seq:256  ECHO
    07 28 6D 39 F1 BA 04 00 08 09 0A 0B 0C 0D 0E 0F  .(m9............
    10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
    20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
    30 31 32 33 34 35 36 37                          01234567

    -- SNIP --

    Ainsi le fichier de log crée contient les paquets capturés de l'action offensive.

  8. Conclusion

    Ce fut un bref aperçu de l'utilisation de Snort autant pour la capture des paquets sur le réseau que de lancer Snort avec un jeu de règles pour détecter des attaques. Faites des expériences avec les différents jeux de règles disponibles sur www.snort.org . Essayer de faire quelques attaques pour voir si la machine sur laquelle Snort est exécuté les détecte bien.
    Dans la partie II de cet article nous nous intéresserons plus profondément sur Snort en incluant le contrôle des fichiers de log, la réponse a des attaques, la création de rapports et de jeux de règles personnalisés.

Privacy Statement
Copyright © 1999-2001 SecurityFocus.com