Accueil > > > DÉTECTEUR DE VULNERABILITY SCANNER
DÉTECTEUR DE VULNERABILITY SCANNER
Information sur la source
Description
Bonjour, Ceux qui me connaissent savent qu'il y a une chose (parmi tant d'autres) que je ne supporte pas : les vulnerability scanner. Petit rappel sur ce qu'est un "vulnerability scanner", il s'agit d'un petit robot (bot) dont le but est de passer de serveur en serveur afin de vérifier l'existence d'un logiciel qu'il sait contenir une faille en vue de l'exploiter. Bien souvent ces vagabonds du web passent en revue de grandes plages d'adresses IP afin de trouver des victimes potentielles. Ici je vous propose une class qui, pour un serveur web, aide à détecter ces bots et à écrire un fichier de log en vue d'analyse. Le principe est très simple, le contenu de l'URL et de l'user-agent sont analysées afin de définir si oui ou non c'est un vulnerability scanner qui a fait la requête. Une fois détecté une entrée contenant toutes les informations utiles est écrite dans un fichier de log afin de l'administrateur puisse l'utiliser afin de luter contre ces menaces. A principe simple, utilisation simple. Un simple appel à la méthode start_analyze() est suffisant. Il faut cependant faire remarquer deux choses importantes : 1/ Il est nécessaire de faire un fichier bot_alerts.log afin que le script puisse y écrire. Ce fichier doit avoir 0622 comme droits. Une commande pour le créer est donc `touch bot_alerts.log && chmod 0622 bot_alerts.log`. On prendra soin de faire en sorte que le propriétaire du fichier ne soit pas le même utilisateur que celui utilisé par le serveur web afin d'éviter que le fichier ne soit visible depuis l'extérieur. 2/ Afin de connaître l'url demandée on utilise $_SERVER['REDIRECT_URL'] et non $_SERVER['QUERY_STRING']. La raison est simple : l'appel à cette classe se fera dans la page affichée lors d'une erreur 404. Ceci pour trois raisons évidentes : - De tels bots ciblent des logiciels grand public tels que PHPMyAdmin, pas vos pages perso. - Vu la quantité de tests fait ils déclenchent presque obligatoirement une erreur 404. - Si vous avez bien fait votre travail il ne doit y avoir presque que les bots qui déclenchent des 404 (avec exception sur les demandes de favicon, apple-touch-icon.png etc). Fonctionnalités : - Permet d'obtenir un log précis sur les activités repérées comme étant des vulnerability scanner. - Le fichier de log est épuré de tout caractère non affichable (meilleur lisibilité et prévention des risques d'attaques par utilisation de séquences d'échappement propres au terminal). - En cas de détection d'un bot, termine prématurément le script. - Redirige les bots vers un nom de domaine non valide (juste pour embêter ceux qui les suivent). Pour ceux qui veulent modifier certaines parties, au lieux de modifier directement la classe il est recommandé d'en créer une nouvelle qui hérite de celle-là afin de surcharger les membres et méthodes désirés. Le code est suffisamment découpé pour permettre une bonne utilisation de la surcharge. Nota : La présence de "Windows 98" dans les recherches sur le useragent est du à un bot que je rencontre régulièrement et qui se fait passer pour un IE6 sur Windows 98. Le nombre de clients réels restant sous windows 98 et générant des 404 est tellement insignifiant que je me suis permis de l'ajouter comme tel. Edit : Désolé pour l'indentation un peu foireuse par endroits, les tabulations ne sont pas gérées ici de la même manière que sur emacs. Si j'ai le temps je rectifierai ce point.
Source
- <?php
- // BotDetector.php for BotAnalyzer in /home/tycho/sources/php/class
- //
- // Made by Rodolphe Breard
- // Mail <rodolphe.breard@laposte.net>
- //
- // Started on Sat Nov 14 11:13:32 2009 Rodolphe Breard
- // Last update Thu Nov 19 15:54:30 2009 Rodolphe Breard
- //
- // Copyright (C) 2009 Rodolphe Breard
- //
- // This program is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
- //
-
- define('BOTDETECTOR_LOGFILE', './bot_alerts.log');
-
- class BotDetector
- {
- protected $log_msg = null;
- protected $url_patterns = array('config', 'admin', 'adm', 'sql', 'shop',
- 'store', 'cart', 'include', 'pma');
- protected $user_agent_patterns = array('Windows 98', 'Python', 'libwww',
- 'urllib', 'lwp',
- 'Morpheus', 'Fucking', 'Scanner',
- 'Toata', 'dragostea', 'pentru',
- 'diavola');
-
- public function start_analyze()
- {
- $this->check_patterns($_SERVER['REDIRECT_URL'], $this->url_patterns);
- if (!empty($_SERVER['HTTP_USER_AGENT']))
- $this->check_patterns($_SERVER['HTTP_USER_AGENT'],
- $this->user_agent_patterns);
- }
-
- protected function bot_handler()
- {
- $this->write_log();
- header('Location: http://no_bots.invalid/');
- die();
- }
-
- protected function write_log()
- {
- $LogFile = new SplFileInfo(BOTDETECTOR_LOGFILE);
- if (!$LogFile->isFile())
- throw new Exception('BotAnalyzer: write_log: invalid log file.');
- if ($LogFile->getPerms() & 0777 != 0622)
- if (!chmod(BOTDETECTOR_LOGFILE, 0622))
- throw new Exception('BotAnalyzer: write_log: bad log file mode.');
- if (!$LogFile->isWritable())
- throw new Exception('BotAnalyzer: write_log: unwritable log file.');
- $LogFile = $LogFile->openFile('a');
- $this->init_log_msg();
- $LogFile->fwrite($this->log_msg);
- }
-
- protected function init_log_msg()
- {
- $datas = array(date('r'),
- $_SERVER['REMOTE_ADDR'],
- $_SERVER['REQUEST_METHOD'],
- $_SERVER['SERVER_PROTOCOL'],
- $_SERVER['HTTP_HOST'],
- $_SERVER['REDIRECT_URL'],
- (isset($_SERVER['HTTP_USER_AGENT']) ?
- $_SERVER['HTTP_USER_AGENT'] : ''));
- foreach ($datas as $key => $val)
- $this->log_msg .= ($key != 0 ? ' - ' : '') . $this->protect_data($val);
- $this->log_msg .= "\n";
- }
-
- protected function protect_data($str)
- {
- if (empty($str))
- return 'unknown';
- $rep = str_split(' !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~');
- $replace = null;
- foreach ($rep as $val)
- $replace[urlencode($val)] = $val;
- return strtr(urlencode($str), $replace);
- }
-
- protected function check_patterns($var, array $patterns)
- {
- foreach ($patterns as $pat)
- {
- if (stripos($var, $pat) !== false)
- $this->bot_handler();
- }
- }
- }
-
- ?>
<?php
// BotDetector.php for BotAnalyzer in /home/tycho/sources/php/class
//
// Made by Rodolphe Breard
// Mail <rodolphe.breard@laposte.net>
//
// Started on Sat Nov 14 11:13:32 2009 Rodolphe Breard
// Last update Thu Nov 19 15:54:30 2009 Rodolphe Breard
//
// Copyright (C) 2009 Rodolphe Breard
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
define('BOTDETECTOR_LOGFILE', './bot_alerts.log');
class BotDetector
{
protected $log_msg = null;
protected $url_patterns = array('config', 'admin', 'adm', 'sql', 'shop',
'store', 'cart', 'include', 'pma');
protected $user_agent_patterns = array('Windows 98', 'Python', 'libwww',
'urllib', 'lwp',
'Morpheus', 'Fucking', 'Scanner',
'Toata', 'dragostea', 'pentru',
'diavola');
public function start_analyze()
{
$this->check_patterns($_SERVER['REDIRECT_URL'], $this->url_patterns);
if (!empty($_SERVER['HTTP_USER_AGENT']))
$this->check_patterns($_SERVER['HTTP_USER_AGENT'],
$this->user_agent_patterns);
}
protected function bot_handler()
{
$this->write_log();
header('Location: http://no_bots.invalid/');
die();
}
protected function write_log()
{
$LogFile = new SplFileInfo(BOTDETECTOR_LOGFILE);
if (!$LogFile->isFile())
throw new Exception('BotAnalyzer: write_log: invalid log file.');
if ($LogFile->getPerms() & 0777 != 0622)
if (!chmod(BOTDETECTOR_LOGFILE, 0622))
throw new Exception('BotAnalyzer: write_log: bad log file mode.');
if (!$LogFile->isWritable())
throw new Exception('BotAnalyzer: write_log: unwritable log file.');
$LogFile = $LogFile->openFile('a');
$this->init_log_msg();
$LogFile->fwrite($this->log_msg);
}
protected function init_log_msg()
{
$datas = array(date('r'),
$_SERVER['REMOTE_ADDR'],
$_SERVER['REQUEST_METHOD'],
$_SERVER['SERVER_PROTOCOL'],
$_SERVER['HTTP_HOST'],
$_SERVER['REDIRECT_URL'],
(isset($_SERVER['HTTP_USER_AGENT']) ?
$_SERVER['HTTP_USER_AGENT'] : ''));
foreach ($datas as $key => $val)
$this->log_msg .= ($key != 0 ? ' - ' : '') . $this->protect_data($val);
$this->log_msg .= "\n";
}
protected function protect_data($str)
{
if (empty($str))
return 'unknown';
$rep = str_split(' !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~');
$replace = null;
foreach ($rep as $val)
$replace[urlencode($val)] = $val;
return strtr(urlencode($str), $replace);
}
protected function check_patterns($var, array $patterns)
{
foreach ($patterns as $pat)
{
if (stripos($var, $pat) !== false)
$this->bot_handler();
}
}
}
?>
Conclusion
Ne vous attendez pas à ce que ça fasse le café, j'ai fait ça juste sur un coup de colère contre le présences quotidienne de ces saletés de bots dans un serveur dont j'ai la charge. Je doute que grand monde ne soit intéressé mais dans le doute je partage, et puis si certains ne connaissaient pas l'existence de ces vagabonds c'est une bonne occasion pour apprendre :)
Bonne chasse aux bots et tout mon amour aux filles du diable (les initiés comprendront).
Historique
- 19 novembre 2009 16:31:38 :
- Ajout d'une note concernant la raison du raté de l'indentation.
- 19 novembre 2009 16:39:31 :
- typo
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Les sockets php [ par PtitKev ]
Bonjour à toutes et a tous.Voila je test un bot socket en php. Je me suis rendu compte que les variables étaient propre a une page donc
faire un bot en php [ par lunetoile ]
salut à tous, j'aimerais réaliser un bot simple en php mais suis débutant...j'aimerais qu'il y ai un espace pour parler, et
Projet de bot irc [ par emilrom ]
Bonjour, Je cherche un bon codeur en tcl, C, php, python dans le but de crée un bot irc qui doit, par l'intermédiaire de socket, gérer
Compteurs de visites et Google Bot [ par MadM@tt ]
Salut à tous,Voilà j'ai récemment installé des compteurs divers sur un site (Xiti gratuit, compteur de visites principal et compteur de téléchargement
ALICE AIML [ par olbingo974 ]
Bonjour,Apres avoir installé un composant sous joomla pour afficher un bot pandora sur mon site je me suis plongé tête baissée dans ce sujet super int
indexage de google et autre bot [ par theblob01 ]
salut !! voila javais une petite question qui me trotait dans la tete vue que jai commencer par aprendre php/sql et que jarrive plus ou moin a me deme
Creation d'un bot pour skyblog ( aide ) [ par djhanzo ]
Bonjour je veux crée un bot pour la plateforme skyblog qui mais des commentaires sur un blog automatiquement voila des sites qui on le bot http://plei
Ajout d'un bot sur chat ajax open source ? [ par Near78 ]
Bonjour, J'ai télécharger il y a quelques heurs de cela un chat en ajax open source. Je suis actuellement de faire sa traduction car celui ci etant e
Bot Twitter [ par Senny26 ]
Salut à tous ! Bon, vous allez certainement me prendre pour un fou, mais vous êtes (presque) mon seul recours. Apres une semaine de recherches infruc
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|