cisec : détecte et bannit les scanners de vulnérabilités

Les scanners de vulnérabilité de site web sont des logiciels qui analysent les pages d’un site web (“crawling”), puis effectuent des requêtes HTTP en ajoutant des codes malicieux dans l’URL (ainsi que dans les variables POST, etc.) et analysent le contenu de la page obtenue pour détecter si le code malicieux a été filtré ou non.

L’utilisation de scanners est intéressante dans le cadre de l’audit de sécurité d’un site (à noter que l’usage non autorisé d’un de ces logiciels sur un site est susceptible de relever de l’article 323 du code pénal).

En revanche, ces scanners de vulnérabilité sont dangereux lorsque ce sont des pirates qui les utilisent.

Par ailleurs, certains scanners sollicitent fortement le serveur (exemple : 2 millions de requêtes en 15 heures de scan). Enfin, les variations d’URL, effectuées par les scanners de vulnérabilité, remplissent inutilement le cache de SPIP (exemple : 59 900 fichiers ajoutés dans le cache de second niveau SPIP au bout d’une heure de scan).

Les objectifs de ce plugin sont les suivants :

  • Ne pas donner les véritables pages au scanner de vulnérabilité, afin de l’empêcher de conduire ses recherches de vulnérabilité.
  • Réduire le temps de traitement des pages demandées par le scanner de vulnérabilité (une fois détecté).
  • Diminuer l’impact, sur le cache de SPIP, des variations d’URL envoyées par le scanner de vulnérabilité.

Le bannissement est temporaire, afin de limiter l’impact d’éventuels faux positifs. Une réponse compréhensible avec un décompte de temps est affichée en cas de bannissement.

Différentes mesures effectuées, montrent que les gains obtenus avec le plugin CISEC, lors d’un scan de vulnérabilité, sont conséquents (cf. documentation ci-jointe).

Le périmètre porte sur le site public uniquement. Le périmètre ne porte pas sur les attaques de type spam (un plugin pour SPIP existe déjà sur ce sujet), ni sur les attaques de type déni de service ou déni de service distribué.

Pour plus de détails, se reporter à la documentation ci-jointe.

Version 1.2 du plugin CISEC

  • Ajout de la raison du bannissement dans le courriel, qui est automatiquement envoyé, ainsi que dans le fichier de log "cisec_detail.log".
  • Si la constante _CISEC_EMAIL est définie dans un fichier d’options, avec comme valeur une adresse email avec une syntaxe valide, le courriel sera envoyé à cette adresse email (et non pas à l’adresse du webmestre qui figure dans le menu configuration de SPIP).
    Exemple : define(’_CISEC_EMAIL’,’assistance@test.fr’) ;
  • Possibilité d’augmenter les seuils (mais pas de les diminuer) via deux constantes dans un fichier d’options :
    -  Au moins N POST d’une même adresse IP pendant une seconde.
    -  Au moins M POST d’une même adresse IP pendant 10 secondes.
    Exemple :
    define(’_CISEC_MAX_POST_EN_1_S’,5) ;
    define(’_CISEC_MAX_POST_EN_10_S’,15) ;

Versions 1.3 du plugin CISEC

Ajout d’une règle qui rejette les tentatives d’injection qui utilisent dans l’URL une double occurence de page=recherche

Discussion

8 discussions

  • 7

    Bonjour,
    Je découvre ce plugin suite à l’installation de cibloc.
    Encore une production très intéressante, merci (déjà des bannissements, en quelques heures seulement).
    Est-il prévu de déposer cette série de plugins sur la zone ?

    • Toute modification d’un plugin est susceptible d’impacter sa fiabilité, sa sécurité, ses performances, etc.

      Les plugins Giseh (le plugin CIPR en fait partie) ont fait l’objet :
      -  d’une batterie de tests pour s’assurer de leur fiabilité,
      -  de tests d’intrusion (pour l’aspect sécurité),
      -  de tests de charge (pour l’aspect performance),
      -  etc.

      C’est pour ces raisons que les plugins Giseh ne sont volontairement pas sur la zone et ne doivent pas l’être.

    • Tu le verras jamais sur la zone car il a peur qu’on l’améliore sans lui.
      Il faut éviter ce type de plugins.

    • Désolé, mais je ne vois pas pourquoi.

      Si le plugin est bien conçu, me convient, et qu’il n’y a pas mieux à disposition, le seul inconvénient à court terme est de ne pas être averti des mises à jour.

    • Tu l’a via le chargeur auto de SPIP mais quand tu fais que tu svn, tu peux pas le prendre, donc c’est dommage.

    • @Pierre Khun :

      Tu le verras jamais sur la zone car il a peur qu’on l’améliore sans lui.

      Qu’en sais-tu ? Comment peux-tu affirmer ça ? Cela n’a rien à voir avec « la peur qu’on améliore sans lui ». Ça n’est certainement pas en trollant que tu feras avancer le sujet.

    • @ Pierre Kuhn : l ’auteur met à la disposition de la communauté des plugins de grande qualité. Qu’il décide de les mettre ou non sur la zone, cela reste son choix. Tu as le droit d’en penser ce que tu veux mais pour ma part je me réjouis avant tout d’avoir la chance de pouvoir en disposer (et, puis, rien n’empêche l’utilisateur d’y apporter les modifications/ajustements qu’il a envie d’y faire pour l’adapter son propre usage).

      Le

      Il faut éviter ce type de plugins.

      me parait donc bien déplacé... et pas vraiment dans l’esprit d’entraide et de bienveillance que chacun souhaite pour notre brave polatouche ;-)

    • Je pense que les fonctionnalités du plugin CISEC devraient figurer dans SPIP (par exemple dans l’écran de sécurité).

    Répondre à ce message

  • Depuis l’installation du plugin, il me semble détecter une hausse des connexions à mon site.

    Est-il possible que certains acharnés (disons plutôt systèmes de scanners de vulnérabilités évolués) changent à la volée d’ip une fois bloqués pour continuer leur scan, ce qui donne pour SPIP un gonflement artificiel des visites ?

    Répondre à ce message

  • 3

    Bonjour,

    En modifiant la borne en compatibilite=« [3.0.0 ;3.2.*] » dans le fichier paquet.xml, ce plugin est compatible SPIP 3.2.

    Par ailleurs ce plugin ne prend apparemment pas en compte le paramètre « timezone » du plugin https://contrib.spip.net/Timezone-4591

    [23-Nov-2017 10:09:31 UTC] PHP Warning : date() : It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ’UTC’ for now, but please set date.timezone to select your timezone. in /home/dd/public_html/site.fr/plugins/auto/cisec_160413/cisec_options.php on line 83

    merci

    • Pour le bon fonctionnement de SPIP, il convient d’indiquer le paramètre « timezone » dans le fichier config/mes_options.php, par exemple : date_default_timezone_set(’Europe/Paris’) ;

      Remarque : Le plugin Timezone peut rester sans effet sur un autre plugin qui est chargé (par SPIP) avant lui.

    • OK donc il faut que je désinstalle le plugin timezone et modifie mon fichier mes_options

    • mouais, ou bien il faudrait que cisce indique qu’il « utilise » timezone. A priori il n’y a pas non plus de masse de plugins qui sont impactés par ces questions de timezone.

    Répondre à ce message

  • 2

    Bonjour,

    Est-il possible d’indiquer une adresse IP à ignorer ?
    Je faisais des tests sur un site et donc recalculais régulièrement une page du site et à chaque recalcul mon IP adresse est bannie.
    Merci

    • Je viens de faire les tests suivants (sous SPIP 3.0 avec le plugin CISEC activé ) :
      -  recalcul régulier d’un article du site en étant authentifié
      -  recalcul régulier d’un article du site sans être authentifié
      -  recalcul régulier d’un article, avec le formulaire pour déposer un commentaire, en étant authentifié
      -  recalcul régulier d’un article, avec le formulaire pour déposer un commentaire, sans être authentifié

      Mon adresse IP n’a jamais été bannie.

      Est-ce que le site est situé derrière un reverse proxy ?

    • Hello,

      Non le site n’est pas derrière un reverse proxy. Je ne reproduis plus le message de bannissement, si cela se reproduit je reposterai ici.
      Merci d’avoir testé.

    Répondre à ce message

  • 4

    Bonjour,
    Mon hébergement ne permet pas à SPIP d’envoyer des mails, aussi je surcharge la fonction inc_envoyer_mail_dist de SPIP dans le fichier d’options d’un plugin que j’ai réalisé. Avec cette surcharge, SPIP arrive à envoyer des mails.
    Le problème c’est que les mails envoyés par le plugin CISEC ne partent pas.

    • Dans le cas précité, il convient de surcharger la fonction inc_envoyer_mail_dist de SPIP dans le fichier config/mes_options.php (au lieu du fichier d’options du plugin que vous avez réalisé).

    • ne serait-il pas plus pertinent d’utiliser le plugin facteur ? et si vous ne passez pas par un smtp, il serait bon d’ouvrir un ticket (https://core.spip.net/projects/spip/issues) expliquant en quoi la surcharge permet de contourner une limite de spip, pour que cela soit intégré en natif dans SPIP.

    • Pour surcharger l’envoi de mails, une autre approche consiste à surcharger le fichier ecrire/inc/envoyer_mails.php (qui est chargé uniquement lorsque l’on a besoin d’envoyer un mail).

      L’inconvénient est que cette approche est plus sensible aux évolutions de SPIP. En effet, il faut prendre en compte les évolutions des 3 autres fonctions contenues dans ecrire/inc/envoyer_mails.php.

      L’avantage est que cette approche est meilleure en termes de performance. En effet, comme l’indique la documentation de SPIP : « Tous les fichiers d’options (celui du site, puis de tous les plugins) sont chargés à chaque appel de l’espace public et de l’espace privé ; ils doivent donc être les plus légers et économes possible. »

    • A noter que le plugin facteur, cité par Maïeul, utilise cette seconde approche qui consiste à surcharger le fichier ecrire/inc/envoyer_mails.php.

    Répondre à ce message

  • 5

    Lorsque CISEC bannit une adresse IP, il bannit celle du reverse proxy.

    • Le plugin CISEC utilise l’adresse IP qui est stockée dans la variable $ip de SPIP.

      SPIP initialise la variable $ip avec le contenu de ’REMOTE_ADDR’ s’il existe, sinon avec le contenu de ’HTTP_X_FORWARDED_FOR’.

      Si un reverse proxy est utilisé par l’hébergement, il est possible que l’adresse IP de l’utilisateur figure dans ’HTTP_X_FORWARDED_FOR’ et que celle du proxy figure dans ’REMOTE_ADDR’.

      Pour contourner ce problème, la solution, qui est très simple, consiste à mettre dans un fichier d’option propre à l’hébergeur (par exemple le fichier mes_options) la ligne suivante :
      $ip = $_SERVER[’HTTP_X_FORWARDED_FOR’] ;

    • SPIP utilise le contenu de la variable $ip, par exemple lors du dépôt d’un commentaire. Aussi, même si le site ne dispose pas du plugin CISEC, il est indispensable d’adapter SPIP à la présence du reverse proxy (cf. solution précitée).

    • Dans le cas où l’on utilise un reverse proxy et que l’on peut ajouter des modules à Apache, il peut être intéressant d’examiner les modules mod_rpaf (apache v2.2) et mod_remoteip (apache v2.4+).

      Pour en savoir plus : https://github.com/spip/SPIP/pull/13

    • Une précision :
      Pour contourner ce problème, la solution, qui est très simple, consiste à mettre dans le fichier config/mes_options.php la ligne suivante :
      $ip = $_SERVER[’HTTP_X_FORWARDED_FOR’] ;

    • Pour pallier au cas où la modification du fichier config/mes_options.php poserait de réels problèmes, je viens de joindre, à la présente page, la version 1.1.0 du plugin CISEC, qui tient compte du cas où la ligne précitée ne figure pas dans le fichier config/mes_options.php.
      Pour plus de détails, se reporter au nouveau chapitre 4.3 de la documentation.

    Répondre à ce message

  • 1

    Dans le cas d’un POST suspect dans un formulaire, le plugin CISEC enregistre les logs dans un fichier sans nom (uniquement « .log »).

    • La version 1.0.1 du plugin CISEC, qui figure dans la présente page (cisec_161010.zip), donne un nom complet à ce fichier (dans le cas d’un POST suspect dans un formulaire).

    Répondre à ce message

  • 2

    Bonjour,

    Dans la doc il est question des fichiers de log :
    cisec_bannir.log
    cisec_detail.log
    cisec_mail.log
    cisec_post.log

    Je ne les trouve pas dans le répertoire du plugin sur mon site.
    Sinon comment peut-on voir si des scanners de vulnérabilités ont été détectés ?

    Merci

    • Les fichiers de logs sont dans le sous dossier ’log’ du dossier ’tmp’ à la racine de SPIP.

    • Bonsoir et merci de ta réponse. J’aurais pu y penser..

      Je viens de voir un log cisec_log.txt : c’est marrant il a enregistré ma propre adresse IP.

      dd

    Répondre à ce message

Ajouter un commentaire

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom

Dernière modification de cette page le 21 septembre 2018