UP | HOME
LPASRSI

Modules « Système Linux »

Vacations en licence professionnelle « Audit et Sécurité des Réseaux et Systèmes d'Information » à l'antenne de Ifs du pôle de Caen de l'IUT Grand Ouest Normandie


M81 : Détection d’intrusion

Préambule : CentOS n’est plus maintenue !

Suricata, NIDS

Installation

  1. Le cas échéant, installer les sources de paquetages EPEL (Extra Packages for Enterprise Linux).
  2. Installer le paquetage suricata.

Configuration

  1. Lister le contenu du répertoire de configuration du NIDS. Que signifie l’extension du fichier de configuration principal ?
  2. Configurer le nom de l’interface dans le fichier /etc/sysconfig/suricata.
  3. Afin de protéger le serveur, on considérera tout trafic venant de l’extérieur comme étranger. On parle alors de bastion. Configurer les variables HOME_NET, EXTERNAL_NET et DNS_SERVERS en conséquence. Rapporter ces valeurs.
  4. Lancer suricata en mode capture temps réel. Quelle commande avez-vous utilisé ?
  5. Démarrer le service.

Sorties

  1. Lister les fichiers présents dans le répertoire des journaux du NIDS.
  2. Retrouver les éléments de configuration de ces journaux dans la configuration. Quelle est leur fonction respective ?
  3. De quoi EVE est-il l’acronyme ?
  4. Quel est le format du fichier eve.json ?
  5. Désactiver la journalisation de la mise à jour des statistiques. Quelle directive avez-vous modifié ?
  6. Installer le paquetage jq (json query). Utiliser cette commande pour lire le fichier :

    tail -f -n0 /var/log/suricata/eve.json | jq -c 'select(.event_type=="dns")'
    

Règles de détection

L’entreprise Proofpoint, spécialisée dans la veille sur les menaces, met à disposition de la comunauté des règles de détection d’intrusion tirant partie des capacités multithread de Suricata sur http://rules.emergingthreats.net/

  • Quelle est la méthode conseillée pour installer ces règles ? (penser au proxy)
  • Installer les règles (toujours avec le proxy), les activer en redémarrant suricata.
  • Dans les règles, rechercher le nom de la vulnérabilité CVE-2021-44228. Quelles sont les lignes correspondant ?
  • Déclencher l’IDS avec une requête DNS et examiner les fichiers journaux de Suricata. Quelles lignes sont apparues ?

Annexe : Les règles Snort

Une règle Snort s’écrit sur une seule ligne. Elle est composée de deux parties :

  1. l’entête qui contient
    • l’action : pass, log ou alert
    • la spécification des paquets à inspecter (pour limiter la charge de la comparaison) :
      • protocole : tcp, udp ou icmp
      • adresses IP et ports de la source et de la destination
  2. les options qui spécifient notamment
    • le message d’alerte éventuel
    • la signature dont la reconnaissance déclenchera l’action.

Exemples (sur plusieurs lignes pour la lisibilité seulement):

alert tcp any any -> $HOME_NET 80 (flags :A ; content : "passwd";
 msg: "detection de 'passwd'" ;)

alert ssh $EXTERNAL_NET any -> $HOME_NET 22 (msg:"ET SCAN LibSSH Based
 Frequent SSH Connections Likely BruteForce Attack";
 flow:established,to_server; content:"SSH-"; content:"libssh";
 within:20; threshold: type both, count 5, seconds 30, track by_src;
 reference:url,doc.emergingthreats.net/2006546;
 classtype:attempted-admin; sid:2006546; rev:9; metadata:created_at
 2010_07_30, updated_at 2010_07_30;)

alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"ET WEB_CLIENT
 Spectre Kernel Memory Leakage JavaScript (POC Based)";
 flow:established,from_server; file_data; content:"<script";
 content:"|3c 20|simpleByteArray.length|29|"; distance:0;
 content:"simpleByteArray|5b|"; within:50; content:"|2a
 20|TABLE1_STRIDE|29 7c 30 29 20 26 20 28|TABLE1_BYTES-1|29|";
 distance:0; fast_pattern; content:"|5e 3d 20|probeTable|5b|";
 distance:0; content:"|7c 30 5d 7c 30 3b|"; distance:0; metadata:
 former_category WEB_CLIENT;
 reference:url,spectreattack.com/spectre.pdf; classtype:attempted-user;
 sid:2025184; rev:1; metadata:affected_product
 Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target
 Client_Endpoint, deployment Perimeter, signature_severity Major,
 created_at 2018_01_04, updated_at 2018_01_04;)

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -f
 -sX"; fragbits:!M; dsize:0; flags:FPU,12; ack:0; window:2048;
 threshold: type both, track by_dst, count 1, seconds 60;
 reference:url,doc.emergingthreats.net/2000546;
 classtype:attempted-recon; sid:2000546; rev:7; metadata:created_at
 2010_07_30, updated_at 2010_07_30;)

Construction détaillée d’une règle Snort

Une règle s’écrit totalement sur une seule ligne (Snort ne gère pas les sauts de ligne) et elle se divise en 2 parties principales:

  1. l’entête de règle contient :
    • l’action de la règle, c’est à dire la réaction de snort en fonction des paquets inspectés ; Il existe 5 actions dans Snort:
      alert
      génère une alerte définie et journalise le paquet ;
      log
      journalise le paquet ;
      pass
      ignore le paquet ;
      activate
      fait une alerte et active une règle dynamique ;
      dynamic
      reste passif jusqu’à avoir été activé par une règle activate et puis agit comme une règle log.
    • le protocole utilisé pour la transmission des données (snort en distingue trois: TCP, UDP et ICMP) ;
    • les adresses IP source et destination et leur masque ; =!= est l’opérateur de négation qui indique à Snort de considérer toutes les adresses IP sauf celle⋅s indiquée⋅s. any permet de considérer toutes les adresses IP
    • les ports source et destination sur lesquels il faudra vérifier les paquets, précisément ou sur un intervalle. Par exemple 1:1024 signifie tous les ports de 1 à 1024. Un numéro de port suivi de : indique tous les ports supérieurs ou égaux, un numéro de port précédé de : indique tous les ports inférieurs ou égaux au port donné. Les opérateurs ! et any peuvent également être utilisés. La direction du trafic sur lequel les règles s’appliquent est indiqué par un des opérateurs : ->, <- ou <>.
  2. les options de la règle :
    • le message d’alerte ;
    • les informations permettant de dire si oui ou non il faut déclencher une alerte en fonction du paquet inspecté. Toutes les conditions permettant d’accepter ou de rejeter le paquet doivent être vraies pour que le paquet vérifie la règle et que l’action correspondante soit enclenchée. Ces options sont au cœur de la détection. Elles peuvent être combinées pour former la règle la plus adéquate pour repérer les paquets. Deux options consécutives sont séparées par ; :
      msg
      affiche un message dans les alertes et journalise les paquets
      logto
      journalise le paquet dans un fichier nommé par l’utilisateur au lieu de la sortie standard
      content
      recherche un motif dans la charge d’un paquet
      offset
      modifie l’option content, fixe le décalage du début de la tentative de correspondance de motif
      depth
      modifie l’option content, fixe la profondeur maximale de recherche pour la tentative de correspondance de motif
      nocase
      correspond à la procédure de chaîne de contenu sans sensibilité aux différences majuscules/minuscules
      session
      affiche l’information de la couche applicative pour la session donnée
      ip_proto
      permet de définir un protocole au dessus de IP
      classtype
      assigne un classification à l’attaque (virus, cheval de troie, …)
      flow
      permet de fixer le sens d’un flux, l’état de la connexion, …
      react
      réponse active
      (no term)

Pour faire face, par exemple, à la gestion des faux positifs, il est possible d’activer et désactiver les signatures en utilisant leur SID, identifiant unique. Il faut donc veiller à systématiquement mettre à jour le fichier de correspondance message/SID.