[Présentation | libpcap ( Présentation , installation )  | Wireshark ( présentation , installation  , utilisation ) |  Snort ( Présentation, Installation , Syntaxe, Quelques exemples ) | Suricata ]

Dernière modification 27 décembre 2016

"Sniffer" son réseau avec Wireshark, Snort et Suricata

Présentation

Wireshark est un analyseur de trafic réseau ou "sniffer". Il utilise une interface graphique basée sur GTK+, il est basé sur la bibliothèque libpcap qui fournit des outils pour capturer les paquets réseau. Il a pris la suite d'ethereal qui n'est plus maintenu.

Contrairement à wireshark, snort et suricata permettent de sniffer le réseau en temps réel (real time detection system IDS) alors que le premier permet l'analyse uniquement après une période de capture.
[Retour haut de la page]

Libpcap

Présentation

libpcap est une bibliothèque d'outils permettant de faire la capture des paquets qui circulent sur le réseau, on peut ainsi faire des stats, de la surveillance de réseau, du débugage et bien d'autres choses.
[Retour haut de la page]

Installation

Vous avez le choix entre installer le package fourni avec votre distribution ou d'installer le tarball qu'on trouvera sur le site www.tcpdump.org. L'archive est le tarball libpcap-1.8.1.tar.gz  qu'on décompressera en tapant :

tar xvfz libpcap-1.8.1.tar.gz

Cela va nous donner le répertoire  libpcap-1.8.1, dans ce répertoire on tapera pour créer le Makefile:

./configure

A présent tapons :

make

NOTE :  Les packages suivants sont nécessaires byacc et flex

Puis en tant que root

make install

Si vous avez choisi d'installer avec le package RPM, pour la suite des opérations il vous faudra aussi installer le package de développement libpcap-devel
 

[Retour haut de la page]

Wireshark

Présentation

wireshark a été développé par les développeurs d'Ethereal, d'ailleurs il en est issu (c'est un fork), il n'y a que le nom qui a changé. Tout laisse penser qu'ethereal a été abandonné au profit de wireshark.

[Retour haut de la page]

Installation

Le site officiel est  http://www.wireshark.org/ on y récupère l'archive qu'on décompresse en tapant

tar xvfj wireshark-2.2.3.tar.bz2

cela donne le répertoire wireshark-2.2.3 dans lequel on tape

./configure --with-qt=5 --enable-wireshark

voilà le résultat

The Wireshark package has been configured with the following options:
                       GLib version : v2.50.2
                    Build wireshark : yes (with Qt5 v5.6.2)
                Build wireshark-gtk : yes (with GTK+ v3.22.5)
                       Build tshark : yes
                      Build tfshark : no
                     Build capinfos : yes
                      Build captype : yes
                      Build editcap : yes
                      Build dumpcap : yes
                     Build mergecap : yes
                   Build reordercap : yes
                    Build text2pcap : yes
                      Build randpkt : yes
                       Build dftest : yes
                     Build rawshark : yes
                  Build androiddump : yes
                      Build sshdump : no
                    Build ciscodump : no
                  Build randpktdump : yes
                        Build echld : no

   Save files as pcap-ng by default : yes
  Install dumpcap with capabilities : no
             Install dumpcap setuid : no
                  Use dumpcap group : (none)
                        Use plugins : yes
       Use external capture sources : yes
                    Use Lua library : yes
                Build Qt RTP player : yes
              Build GTK+ RTP player : no
             Build profile binaries : no
                   Use pcap library : yes
                   Use zlib library : yes
               Use kerberos library : yes (MIT)
                 Use c-ares library : no (name resolution will be disabled)
                Use SMI MIB library : no
             Use GNU gcrypt library : yes
             Use SSL crypto library : no
                 Use GnuTLS library : yes
     Use POSIX capabilities library : yes
                  Use GeoIP library : no
                 Use libssh library : no
            Have ssh_userauth_agent : no
                     Use nl library : yes (v3)
              Use SBC codec library : no

puis on tape

make

avec le package de libpcap installé sur mon système j'ai l'erreur suivante

capture-pcap-util.c:614:1: erreur : static declaration of ‘pcap_datalink_name_to_val’ follows non-static declaration
 pcap_datalink_name_to_val(const char *name)


pour y remédier, je suis passé par l'installation par tarball en le précisant dans le configure

./configure --with-libpcap=/usr/local --with-qt=5 --enable-wireshark

on retape make

si vous obtenez

/usr/include/QtGui/qtextedit.h:235:16: erreur : ‘QPrinter’ has not been declared
     void print(QPrinter *printer) const;
                ^
In file included from bluetooth_device_dialog.cpp:23:0:
./ui_bluetooth_device_dialog.h: Dans la fonction membre ‘void Ui_BluetoothDeviceDialog::retranslateUi(QDialog*)’:
./ui_bluetooth_device_dialog.h:151:119: erreur : ‘UnicodeUTF8’ is not a member of ‘QApplication’


visiblement la version Qt5 c'est pas encore ça, on se contentera donc de la version GTK en tapant

./configure --with-libpcap=/usr/local --with-qt=no --enable-wireshark

on retape make et en tant que root

make install

on rajoutera dans le fichier /etc/ld.so.conf la ligne suivante

/usr/local/lib/wireshark/plugins/2.2.3

puis on tape ldconfig

maintenant on va mettre en place la séparation des privilèges pour éviter de lancer wireshark en tant que root. L'idée est de n'avoir à utiliser les droits root que quand c'est strictement nécessaire (lors des captures notamment). Pour cela on installera le package libcap-utils.

et on tapera en tant que root

setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/local/bin/dumpcap

voilà c'est fait

[Retour haut de la page]

Utilisation

Il suffit de taper wireshark-gtk en tant que simple utilisateur, au niveau de Capture on retrouve toutes les interfaces qui peuvent être scannées, elles ne se limitent pas au réseau


si je lance une capture du réseau, je sélectionne mon inteface eno1 et je clique sur Capture Options



on clique ensuite sur Start


on interrompt la capture en cliquant sur le bouton carré rouge. Voilà ce que ça donne pour une connexion au serveur de mail dovecot




on sélectionne la ligne correspondante et avec le bouton droit de la souris on sélectionne dans le menu déroulant Follow TCP Stream et voilà le résultat de la session, je peux constater que les échanges de mot de passe sont bien cryptés.



Pour le reste je vous conseille de lire la doc par ici https://www.wireshark.org/docs/wsug_html_chunked/index.html
[Retour haut de la page]

snort

Présentation

Snort est aussi un sniffer de réseau, à la différence de WireShark il agit en temps réel. Le site officiel de snort est http://www.snort.org.

Installation

On doit préalablement installer pcre qui est une bibliothèque fournissant des outils gérant des expressions régulières compatibles avec Perl. L'URL officiel http://www.pcre.org/ on y récupère l'archive qu'on décompresse en tapant:

tar xvfz pcre-8.39.tar.gz

Cela donne le répertoire pcre-8.39 dans lequel on tape successivement

./configure
make

Puis en tant que root

make install
ldconfig

On récupèrera DAQ (Data Acquisition library) qu'on trouvera également sur le site de snort, on le décompresse en tapant

tar xvfz daq-2.0.6.tar.gz

cela donne le répertoire daq-2.0.6 dans lequel on tape

./configure
make

puis en tant que root

make install

on rajoute ensuite la ligne suivante dans le fichier /etc/ld.so.conf

/usr/local/lib/daq

et on tape ldconfig

on se rend maintenant sur ce site http://code.google.com/p/libdnet/libdnet-libdnet-1.12/ pour récupérer une bibliothèque pour gérer des packets bruts IP et les transmissions ethernet. On décompresse l'archive en tapant

tar xvfz libdnet-libdnet-1.12.tar.gz

cela donne le répertoire libdnet-libdnet-1.12 dans lequel on tape

./configure
make


puis en tant que root

make install


Ensuite on décompresse l'archive de snort en tapant

tar xvfz snort-2.9.9.0.tar.gz

Cela va nous créer un répertoire snort-2.9.9.0. Avant d'aller plus loin, vous devez vous assurer que la bibliothèque libpcap est bien installée. On tape d'abord :

./configure  --enable-sourcefire

l'option enable-sourcefire permet de faire du monitoring de performance. Attention s'il ne trouve pas DAQ avec ce type d'erreur dans le fichier config.log

/usr/local/lib/libsfbpf.so.0: undefined symbol: yy_scan_string

cela vient de flex 2.6.2, il faudra downgrader en récupérant la version 2.6.0 par là https://github.com/westes/flex/releases qu'on décompresse en tapant

tar xvfz flex-2.6.2.tar.gz

cela donne le répertoire flex-2.6.0 dans lequel on tape

./autogen.sh
./configure
make

Puis en tant que root

make install

on reprend depuis la compilation de DAQ et on revient au répertoire de snort où on retape ./configure  --enable-sourcefire puis make

Puis en tant que root

make install

on rajoute dans le fichier /etc/ld.so.conf la ligne suivante

/usr/local/lib/snort_dynamicengine
/usr/local/lib/snort_dynamicpreprocessor
/usr/local/lib/snort/dynamic_output

/usr/local/lib/snort/dynamic_preproc

puis on tape ldconfig

Pour voir si tout est OK, en tant que root on lance snort en tant

snort -V

voilà le résultat

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.9.0 GRE (Build 56)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2016 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.8.1
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.8

si vous rencontrez cette erreur

snort: error while loading shared libraries: libdnet.1: cannot open shared object file: No such file or directory

en tant que root il faudra créer le lien suivant

ln -s /usr/local/lib/libdnet.1 /usr/local/lib/libdnet.so.1

puis on retape ldconfig

maintenant pour des raisons de sécurité on mettra en oeuvre la séparation des privilèges, on va créer un utilisateur et un groupe snort

groupadd snort
useradd snort -d /var/log/snort -s /sbin/nologin -g snort


on va créer maintenant manuellement un certain nombre de répertoires pour la configuration de snort

mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /etc/snort/rules/iplists
mkdir /etc/snort/prepoc_rules
mkdir /usr/local/lib/snort_dynamicrules
mkdir /etc/snort/so_rules


on crée un certain nombre de fichiers pour stocker les règles et les listes d'adresses IP

touch /etc/snort/rules/iplists/black_list.rules
touch /etc/snort/rules/iplists/white_list.rules
touch /etc/snort/rules/local.rules
touch /etc/snort/sid-msg.map


on crée les répertoires pour les logs

mkdir /var/log/snort
mkdir /var/log/snort/archived_logs


on ajuste quelques droits

chmod -R 5775 /etc/snort
chmod -R 5775 /var/log/snort
chmod -R 5775 /var/log/snort/archived_logs
chmod -R 5775 /etc/snort/so_rules
chmod -R 5775 /usr/local/lib/snort_dynamicrules


on change le propriétaire

chown -R snort:snort /etc/snort
chown -R snort:snort /var/log/snort
chown -R snort:snort /usr/local/lib/snort_dynamicrules


on va récupérer maintenant quelques fichiers de configuration par défaut dans le répertoire de snort.

cd snort-2.9.9.0/etc
cp *.conf* /etc/snort
cp *.map /etc/snort
cp  *.dtd /etc/snort


dans le fichier /etc/snort/snort.conf on veillera à préciser l'adresse du réseau privé sur cette ligne

ipvar HOME_NET 192.68.0.0/24

les variables d'environnement suivantes doivent être bien définies

var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/rules
var PREPOC_RULE_PATH /etc/snort/prepoc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists


on doit mettre en commentaire tous les appels aux règles qui ne sont pas encore présentes dans les répertoires qui va bien en tapant

sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf


on teste la configuration en tapant

snort -T -i eno1 -c /etc/snort/snort.conf


eno1 correspond à mon interface réseau. La commande doit se terminer par

Snort successfully validated the configuration!
Snort exiting


on téléchargera maintenant toujours sur le site de snort des règles (rules) qui sont basées sur des vulnérabilités actuelles. Dans l'archive community-rules.tar.gz on récupèrera juste le fichier community.rules qu'on placera sous /etc/snort/rules. On éditera le fichier /etc/snort/snort.conf et on rajoute à l'endroit qui va bien

include $RULE_PATH/community.rules

maintenant si on lance

snort -T -i eno1 -u snort -g snort -c /etc/snort/snort.conf


dans le flot de message on peut voir un

+++++++++++++++++++++++++++++++++++++++++++++++++++
Initializing rule chains...
868 Snort rules read
    868 detection rules
    0 decoder rules
    0 preprocessor rules
868 Option Chains linked into 49 Chain Headers
0 Dynamic rules
+++++++++++++++++++++++++++++++++++++++++++++++++++

+-------------------[Rule Port Counts]---------------------------------------
|             tcp     udp    icmp      ip
|     src     117       3       0       0
|     dst     495     191       0       0
|     any      60       3       0       0
|      nc       0       0       0       0
|     s+d       0       1       0       0
+----------------------------------------------------------------------------


Les règles ont bien été prises en compte. Je vous invite maintenant à installer et configurer PulledPork (ce qui nécessite l'ouverture d'un compte sur snort.org) permettant de pouvoir récupérer de manière régulière des règles de manière automatique.


[Retour haut de la page]

Syntaxe

La syntaxe de la commande est la suivante :

snort -options expression

Parmi les nombreuses options disponibles (accessible par snort --help) on trouve :

-b    les paquets sont logués dans un fichier au format tcpdump appelé snort.log.numéro. C'est l'option qu'il faut prendre si on ne veut pas que snort perdre du temps à faire la conversion binaire->ASCII pour ne rater aucun paquets, l'option -r permet de relire ces fichiers en temps différé.

-c <cf> on utilise le fichier de règles <cf>, ce fichier indique ce que le système doit loguer.

-h <hn>  on définit ici l'adresse du réseau local, cela sert uniquement pour le formatage du texte pour mettre la flèche qui va bien en fonction du sens du trafic par rapport au réseau (entrant ou sortant)

-i <if>        on utilise l'interface <if>, par défaut eth0

-s             Les alertes sont archivées au travers de la journalisation de systemd

-l log-dir pour définir le répertoire d'archivage pour les logs. Par défaut le répertoire est /var/log/snort

-d     Pour extraire uniquement la couche transport (layer) du paquet

-v     mode verbeux, les paquets apparaissent dans la console ou le shell à partir duquel a été lancée la commande, contrairement à l'option -b ça ralentit considéralement le fonctionnement de snort du coup on peut perdre des paquets, à déconseiller donc, si vous ne voulez pas perdre une miette des échanges de paquets

L'expression fixe les critères pour les paquets qui seront logués. Si aucune expression n'est donnée, tous les paquets seront logués. Une expression consiste en un ou plusieurs primitives, une primitive consiste en une identité (nom ou adresse) précédée par un ou plusieurs qualificateurs, dont il existe trois types:
- type: pour définir le type précis de l'identité, on a le choix entre host pour une machine, net pour un réseau et port pour un port, par défaut on utilise le type host.
Exemple: host www.breizland.bz pour l'hôte du même nom, ou encore net 192.168.13  pour un réseau du type 192.168.13.X
- dir: pour définir la direction à partir ou vers l'identité, les directions possibles sont src, pour en provenance de, et dst, pour à destination de. Par défaut on prend les paquets dans les deux sens (src et dst).
Exemple: src www.breizland.bz les paquets provenant de l'hôte www.breizland.bz, ou encore dst port 20 les paquets à destination du ports 20 (ftp).
- proto: pour restreindre les paquets utilisant un protocole particulier, les protocoles possibles sont : ether, fddi, ip, arp, rarp,decnet,lat,sca,moprc,mopdl, tcpet udp. Si aucun protocole n'est spécifié on capture les paquets quel que soit le protocole utilisé.
Exemple: ether src www.breizland.bz les paquets utilisant ethernet provenant de www.breizand.bz, ou encore tcp port 21, les paquets allant ou venant du port 21 et utilisant TCP.

[Retour haut de la page]

Utilisation

Commençons par la base, on va afficher à la console tous les entêtes de paquets TCP/IP :

snort -v

voilà le résultat

Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eno1".
Decoding Ethernet

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.9.0 GRE (Build 56)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2016 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.8.1
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.8

Commencing packet processing (pid=28380)
WARNING: No preprocessors configured for policy 0.
12/26-16:39:28.532036 192.168.0.1:1900 -> 239.255.255.250:1900
UDP TTL:4 TOS:0x0 ID:36692 IpLen:20 DgmLen:367
Len: 339
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/26-16:39:28.533178 192.168.0.1:1900 -> 239.255.255.250:1900
UDP TTL:4 TOS:0x0 ID:36693 IpLen:20 DgmLen:312
Len: 284
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/26-16:39:28.539928 192.168.0.1:1900 -> 239.255.255.250:1900
UDP TTL:4 TOS:0x0 ID:36694 IpLen:20 DgmLen:303
Len: 275
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/26-16:39:28.539943 192.168.0.1:1900 -> 239.255.255.250:1900
UDP TTL:4 TOS:0x0 ID:36695 IpLen:20 DgmLen:377
Len: 349
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

En faisant un CTRL-C pour stopper la commande, on obtient le bilan suivant sur eno1

*** Caught Int-Signal

12/26-16:39:32.724851 192.168.0.16:910 -> 192.168.0.11:2049
TCP TTL:64 TOS:0x0 ID:17479 IpLen:20 DgmLen:248 DF
***AP*** Seq: 0x40FE9FE5  Ack: 0xA3870523  Win: 0x5DCE  TcpLen: 32
TCP Options (3) => NOP NOP TS: 27649006 25680589
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

===============================================================================
Run time for packet processing was 6.583762 seconds
Snort processed 5 packets.
Snort ran for 0 days 0 hours 0 minutes 6 seconds
   Pkts/sec:            0
===============================================================================
Memory usage summary:
  Total non-mmapped bytes (arena):       782336
  Bytes in mapped regions (hblkhd):      21590016
  Total allocated space (uordblks):      699984
  Total free space (fordblks):           82352
  Topmost releasable block (keepcost):   76400
===============================================================================
Packet I/O Totals:
   Received:          235
   Analyzed:            5 (  2.128%)
    Dropped:            0 (  0.000%)
   Filtered:            0 (  0.000%)
Outstanding:          230 ( 97.872%)
   Injected:            0
===============================================================================
Breakdown by protocol (includes rebuilt packets):
        Eth:            5 (100.000%)
       VLAN:            0 (  0.000%)
        IP4:            5 (100.000%)
       Frag:            0 (  0.000%)
       ICMP:            0 (  0.000%)
        UDP:            4 ( 80.000%)
        TCP:            1 ( 20.000%)
        IP6:            0 (  0.000%)
    IP6 Ext:            0 (  0.000%)
   IP6 Opts:            0 (  0.000%)
      Frag6:            0 (  0.000%)
      ICMP6:            0 (  0.000%)
       UDP6:            0 (  0.000%)
       TCP6:            0 (  0.000%)
     Teredo:            0 (  0.000%)
    ICMP-IP:            0 (  0.000%)
    IP4/IP4:            0 (  0.000%)
    IP4/IP6:            0 (  0.000%)
    IP6/IP4:            0 (  0.000%)
    IP6/IP6:            0 (  0.000%)
        GRE:            0 (  0.000%)
    GRE Eth:            0 (  0.000%)
   GRE VLAN:            0 (  0.000%)
    GRE IP4:            0 (  0.000%)
    GRE IP6:            0 (  0.000%)
GRE IP6 Ext:            0 (  0.000%)
   GRE PPTP:            0 (  0.000%)
    GRE ARP:            0 (  0.000%)
    GRE IPX:            0 (  0.000%)
   GRE Loop:            0 (  0.000%)
       MPLS:            0 (  0.000%)
        ARP:            0 (  0.000%)
        IPX:            0 (  0.000%)
   Eth Loop:            0 (  0.000%)
   Eth Disc:            0 (  0.000%)
   IP4 Disc:            0 (  0.000%)
   IP6 Disc:            0 (  0.000%)
   TCP Disc:            0 (  0.000%)
   UDP Disc:            0 (  0.000%)
  ICMP Disc:            0 (  0.000%)
All Discard:            0 (  0.000%)
      Other:            0 (  0.000%)
Bad Chk Sum:            1 ( 20.000%)
    Bad TTL:            0 (  0.000%)
     S5 G 1:            0 (  0.000%)
     S5 G 2:            0 (  0.000%)
      Total:            5
===============================================================================
Snort exiting

Si vous voulez voir le contenu du paquet en plus de l'entête, vous pouvez taper:

snort -vd

voilà le résultat

Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to read-file.
Acquiring network traffic from "/var/log/snort/snort.log.1482767046".

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.9.0 GRE (Build 56)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2016 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.8.1
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.8

Commencing packet processing (pid=29179)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
12/26-16:44:07.072743 192.168.0.16:49618 -> 192.229.220.95:80
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
TCP TTL:64 TOS:0x0 ID:9166 IpLen:20 DgmLen:40 DF
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
***A***F Seq: 0xE0C5DE43  Ack: 0xE93A9963  Win: 0xE5  TcpLen: 20
WARNING: No preprocessors configured for policy 0.

WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/26-16:44:07.072757 192.168.0.16:54728 -> 87.248.221.254:80
WARNING: No preprocessors configured for policy 0.
TCP TTL:64 TOS:0x0 ID:15967 IpLen:20 DgmLen:52 DF
***A***F Seq: 0x1524C2C1  Ack: 0x432EE1B9  Win: 0xE5  TcpLen: 32
TCP Options (3) => NOP NOP TS: 27923354 2022426350

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

12/26-16:44:07.072762 192.168.0.16:54722 -> 87.248.221.254:80
TCP TTL:64 TOS:0x0 ID:58911 IpLen:20 DgmLen:52 DF
***A***F Seq: 0x70CC1A27  Ack: 0x919AAF6C  Win: 0xE5  TcpLen: 32
TCP Options (3) => NOP NOP TS: 27923354 158057773

WARNING: No preprocessors configured for policy 0.
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.

WARNING: No preprocessors configured for policy 0.
12/26-16:44:07.072768 192.168.0.16:54730 -> 87.248.221.254:80
WARNING: No preprocessors configured for policy 0.
TCP TTL:64 TOS:0x0 ID:33298 IpLen:20 DgmLen:52 DF
***A***F Seq: 0xB527E8E  Ack: 0x6DDA3298  Win: 0xE5  TcpLen: 32
WARNING: No preprocessors configured for policy 0.
TCP Options (3) => NOP NOP TS: 27923354 3018475770


(...)

===============================================================================
Run time for packet processing was 18.307601 seconds
Snort processed 44 packets.
Snort ran for 0 days 0 hours 0 minutes 18 seconds
   Pkts/sec:            2
===============================================================================
Memory usage summary:
  Total non-mmapped bytes (arena):       782336
  Bytes in mapped regions (hblkhd):      21864448
  Total allocated space (uordblks):      692064
  Total free space (fordblks):           90272
  Topmost releasable block (keepcost):   83952
===============================================================================
Packet I/O Totals:
   Received:           44
   Analyzed:           44 (100.000%)
    Dropped:            0 (  0.000%)
   Filtered:            0 (  0.000%)
Outstanding:            0 (  0.000%)
   Injected:            0
===============================================================================
Breakdown by protocol (includes rebuilt packets):
        Eth:           44 (100.000%)
       VLAN:            0 (  0.000%)
        IP4:           44 (100.000%)
       Frag:            0 (  0.000%)
       ICMP:            0 (  0.000%)
        UDP:            0 (  0.000%)
        TCP:           44 (100.000%)
        IP6:            0 (  0.000%)
    IP6 Ext:            0 (  0.000%)
   IP6 Opts:            0 (  0.000%)
      Frag6:            0 (  0.000%)
      ICMP6:            0 (  0.000%)
       UDP6:            0 (  0.000%)
       TCP6:            0 (  0.000%)
     Teredo:            0 (  0.000%)
    ICMP-IP:            0 (  0.000%)
    IP4/IP4:            0 (  0.000%)
    IP4/IP6:            0 (  0.000%)
    IP6/IP4:            0 (  0.000%)
    IP6/IP6:            0 (  0.000%)
        GRE:            0 (  0.000%)
    GRE Eth:            0 (  0.000%)
   GRE VLAN:            0 (  0.000%)
    GRE IP4:            0 (  0.000%)
    GRE IP6:            0 (  0.000%)
GRE IP6 Ext:            0 (  0.000%)
   GRE PPTP:            0 (  0.000%)
    GRE ARP:            0 (  0.000%)
    GRE IPX:            0 (  0.000%)
   GRE Loop:            0 (  0.000%)
       MPLS:            0 (  0.000%)
        ARP:            0 (  0.000%)
        IPX:            0 (  0.000%)
   Eth Loop:            0 (  0.000%)
   Eth Disc:            0 (  0.000%)
   IP4 Disc:            0 (  0.000%)
   IP6 Disc:            0 (  0.000%)
   TCP Disc:            0 (  0.000%)
   UDP Disc:            0 (  0.000%)
  ICMP Disc:            0 (  0.000%)
All Discard:            0 (  0.000%)
      Other:            0 (  0.000%)
Bad Chk Sum:           22 ( 50.000%)
    Bad TTL:            0 (  0.000%)
     S5 G 1:            0 (  0.000%)
     S5 G 2:            0 (  0.000%)
      Total:           44

journalctl -f===============================================================================
Snort exiting
 
Si vous voulez afficher les aussi l'entête des paquets ethernet, vous pouvez taper :

snort -vde

Maintenant on va loguer les paquets en tapant

snort -vde -l /var/log/snort

Maintenant si vous voulez exploiter en temps différé un fichier de log qui est enregistré en binaire au format tcpdump, vous taperez:

snort -vde -r /var/log/nom-du-fichier-format-tcpdump

Pour afficher les alertes dans /var/log/secure au moyen de systemd  on tapera:

snort -vde -l /var/log/snort -s

voilà ce que ça peut donner au lancement de la commande quand on fait un journalctl -f

déc. 26 16:54:48 predator.kervao.fr audit: ANOM_PROMISCUOUS dev=eno1 prom=256 old_prom=0 auid=4294967295 uid=0 gid=0 ses=4294967295
déc. 26 16:54:48 predator.kervao.fr kernel: device eno1 entered promiscuous mode
déc. 26 16:54:48 predator.kervao.fr kernel: audit: type=1700 audit(1482767688.036:245): dev=eno1 prom=256 old_prom=0 auid=4294967295 uid=0 gid=0 ses=4294967295
déc. 26 16:54:48 predator.kervao.fr kernel: audit: type=1300 audit(1482767688.036:245): arch=c000003e syscall=54 success=yes exit=0 a0=4 a1=107 a2=1 a3=7ffd32d761b0 items=0 ppid=12232 pid=29854 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=4294967295 comm="snort" exe="/usr/local/bin/snort" key=(null)
déc. 26 16:54:48 predator.kervao.fr kernel: audit: type=1327 audit(1482767688.036:245): proctitle=736E6F7274002D766465002D6C002F7661722F6C6F672F736E6F7274002D73
déc. 26 16:54:48 predator.kervao.fr audit[29854]: SYSCALL arch=c000003e syscall=54 success=yes exit=0 a0=4 a1=107 a2=1 a3=7ffd32d761b0 items=0 ppid=12232 pid=29854 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=4294967295 comm="snort" exe="/usr/local/bin/snort" key=(null)

Pour regarder maintenant un peu les paquets qui circulent lors d'une connexion PPP, on peut taper (l'adresse devant host correspond à l'adresse IP attribuée par le FAI) :

 snort -h 192.168.13.0/24 -d -v host 213.228.15.14 -i ppp0

Voilà un extrait d'une session POP

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.048632 194.158.97.244:110 -> 213.36.44.26:1292
TCP TTL:59 TOS:0x0 ID:62404  DF
*****PA* Seq: 0xDCC4E1BD   Ack: 0xF1084599   Win: 0x8218
TCP Options => NOP NOP TS: 240412927 876595
2B 4F 4B 20 50 4F 50 33 20 73 65 72 76 65 72 20  +OK POP3 server
4D 65 64 69 61 6E 65 74 2F 31 2E 31 33 20 3C 32  Medianet/1.13 <2
32 37 38 34 2E 39 37 31 37 32 34 36 36 37 40 6D  2784.971724667@m
65 64 69 61 6E 65 74 2D 31 76 2E 67 72 6F 6C 69  edianet-1v.groli
65 72 2E 66 72 3E 0D 0A                                          er.fr>..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.058729 213.36.44.26:1292 -> 194.158.97.244:110
TCP TTL:64 TOS:0x0 ID:4594  DF
******A* Seq: 0xF1084599   Ack: 0xDCC4E205   Win: 0x7F40
TCP Options => NOP NOP TS: 876617 240412927

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.058988 213.36.44.26:1292 -> 194.158.97.244:110
TCP TTL:64 TOS:0x0 ID:4595  DF
*****PA* Seq: 0xF1084599   Ack: 0xDCC4E205   Win: 0x7F88
TCP Options => NOP NOP TS: 876617 240412927
55 53 45 52 20 6F 6C 69 76 69 65 72 2E 68 6F 61  USER mon-login

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.208661 194.158.97.244:110 -> 213.36.44.26:1292
TCP TTL:59 TOS:0x0 ID:62405  DF
******A* Seq: 0xDCC4E205   Ack: 0xF10845AE   Win: 0x8218
TCP Options => NOP NOP TS: 240412944 876617

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.218671 194.158.97.244:110 -> 213.36.44.26:1292
TCP TTL:59 TOS:0x0 ID:62406  DF
*****PA* Seq: 0xDCC4E205   Ack: 0xF10845AE   Win: 0x8218
TCP Options => NOP NOP TS: 240412944 876617
2B 4F 4B 20 6F 6C 69 76 69 65 72 2E 68 6F 61 72   +OK mon-login
61 75 20 70 6C 65 61 73 65 20 65 6E 74 65 72 20      please enter
70 61 73 73 77 6F 72 64 0D 0A                                    password..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.218898 213.36.44.26:1292 -> 194.158.97.244:110
TCP TTL:64 TOS:0x0 ID:4596  DF
*****PA* Seq: 0xF10845AE   Ack: 0xDCC4E22F   Win: 0x7F88
TCP Options => NOP NOP TS: 876633 240412944
50 41 53 53 20 73 61 78 6F 32 37 30 0D 0A        PASS mot-de-passe-en-clair..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.428660 194.158.97.244:110 -> 213.36.44.26:1292
TCP TTL:59 TOS:0x0 ID:62407  DF
******A* Seq: 0xDCC4E22F   Ack: 0xF10845BC   Win: 0x8218
TCP Options => NOP NOP TS: 240412969 876633

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
10/16-21:31:09.638641 194.158.97.244:110 -> 213.36.44.26:1292
TCP TTL:59 TOS:0x0 ID:62408  DF
*****PA* Seq: 0xDCC4E22F   Ack: 0xF10845BC   Win: 0x8218
TCP Options => NOP NOP TS: 240412987 876633
2B 4F 4B 20 6F 6C 69 76 69 65 72 2E 68 6F 61 72  +OK mon-login
61 75 20 68 61 73 20 30 20 6D 65 73 73 61 67 65  has 0 message
73 20 28 30 20 6F 63 74 65 74 73 29 0D 0A           s (0 octets)..*

snort peut être utilisé comme sonde pour le SIEM Prelude.

Suricata

Suricata est également un système de détection temps réel (IDS) et d'une manière générale de monitoring du réseau. Le site officiel est https://suricata-ids.org/ on installe préalablement les packages lib64yaml-devel, lib64magic-devel et lib64cap-ng-devel. On décompresse l'archive en tapant

tar xvfz suricata-3.2.tar.gz

cela donne le répertoire suricata-3.2

./configure  --enable-geoip  --localstatedir=/var
make

puis en tant que root

make install
make install-full

on éditera le fichier /usr/local/etc/suricata/suricata.yaml et on veillera à bien renseigner la variable

 HOME_NET:

on lance suricata en tant

suricata -c /usr/local/etc/suricata/suricata.yaml -i eno2

voilà le résultat

27/12/2016 -- 10:41:59 - <Notice> - This is Suricata version 3.2 RELEASE
27/12/2016 -- 10:42:05 - <Notice> - all 8 packet processing threads, 4 management threads initialized, engine started.

la trace s'enrichit dans le répertoire /var/log/suricata et en particulier dans le fichier stats.log (extrait)

------------------------------------------------------------------------------------
Date: 12/27/2016 -- 10:42:13 (uptime: 0d, 00h 00m 09s)
------------------------------------------------------------------------------------
Counter                                    | TM Name                   | Value
------------------------------------------------------------------------------------
capture.kernel_packets                     | Total                     | 46
decoder.pkts                               | Total                     | 75
decoder.bytes                              | Total                     | 14033
decoder.ipv4                               | Total                     | 75
decoder.ethernet                           | Total                     | 75
decoder.tcp                                | Total                     | 65
decoder.udp                                | Total                     | 10
decoder.avg_pkt_size                       | Total                     | 187
decoder.max_pkt_size                       | Total                     | 398
app_layer.flow.failed_udp                  | Total                     | 1
flow.spare                                 | Total                     | 10000
flow_mgr.rows_checked                      | Total                     | 65536
flow_mgr.rows_skipped                      | Total                     | 65536
4                                          | Total                     | 3276800

suricata peut être utilisé comme sonde pour le SIEM Prelude.

pour plus d'info voir la doc officielle par ici http://suricata.readthedocs.io/en/latest/


[Retour page d'accueil FUNIX] [Retour haut de la page]