OVH Community, votre nouvel espace communautaire.

Guardian ( surveiller la modification de vos fichiers )


RomualdG
25/06/2014, 11h48
Citation Envoyé par batgrat
je te remercie, je vais juste ajouter la fonction mail et ça sera bon, je part en vacances demain matin c'est juste pour du monitoring sur du mutualisé par contre est ce qu'on peut exclure des répertoires?
Exemple :
les répertoires temp, cache tout se qui sert à la compilation des templates comme smarty pour prestashop?
Car ces répertoires contiennent des fichiers qui sont modifié leur de la compilation de smarty
Bonjour avez-vous amélioré le Script ?
Moi j'ai une erreur suivante quand je lance la page guardian.php depuis mon site :

Parse error: syntax error, unexpected T_STRING in /home/solumag/www/catalog/guardian.php on line 3

?? je vois pas pourquoi ?
La ligne c'est : namespace gardian;

Merci pour votre aide.

Romuald

batgrat
22/07/2012, 14h50
je te remercie, je vais juste ajouter la fonction mail et ça sera bon, je part en vacances demain matin c'est juste pour du monitoring sur du mutualisé par contre est ce qu'on peut exclure des répertoires?
Exemple :
les répertoires temp, cache tout se qui sert à la compilation des templates comme smarty pour prestashop?
Car ces répertoires contiennent des fichiers qui sont modifié leur de la compilation de smarty

ekozan
22/07/2012, 13h58
salut,

Hum j'en suis resté la pour les besoin de mes projets j'avais besoin d'un dédié
après si tu en a envie je peut te finir le script ou ajouter des fonctionnalités

batgrat
22/07/2012, 13h56
Bonjour ekozan,
Juste un petit up pour savoir si tu avais avancé sur le script?
Encore merci de ce petit script bien utile.

ekozan
30/08/2011, 19h13
cela ne détecte que les xss
sinon pas mal la pub

ps: le faux commentaire de cetelem.fr est bien marrant sur votre site on peut leur demander si c'est vraiment eux qui on poster ?

alinea49
30/08/2011, 18h49
Pour vérifier le hashage d'une page ou la modification de son contenu, il y a le monitoring de www.webcron.org, qui permet de recevoir une alerte si le header ou la page changent. efficace et fiable.. en plus des taches cron pouvant être mises en place.

ekozan
20/08/2011, 22h52
en gros les fichiers sont vérifier et une signature est crée a partir de la si après l'initialisation un hacker rajoute un fichier ou édite une ligne (ex : un mythique eval(base64_decode(*code64*)) se script détecte la modification du fichier et l'indique

son utilité on prend le post ( site hacké qui date de hier ) ou le site avais des fichiers de modifier qui pingé une ip roumaine si par exemple la personne avais fait tourné mon script a l'installation du ecommerce quand elle se serais rendu compte du hack elle aurai refait tourner mon script et aurai trouvé instantanément les 3 fichiers modifier qui lui on pris sans doute de nombreuse minutes sans

la prochaine version sera un cron qui fera se check toute les X jours et enverra un mail si des fichiers modifié on été trouver

voila

Gaston_Phone
20/08/2011, 22h40
Bonjour Ekozan,
Et si tu nous expliquais le principe de ton outil ?

ekozan
20/08/2011, 20h58
Voila je vois pas mal de personne qui subisse des hack alors je vous fille un ptit script que je suis entrain de developé pour mon panel admin sur mutu ( attention c'est pas très propre pour le moment on pourrai appeler ça une alpha )

donc crée 2 fichier dans un meme dossier : conf.guardian.php et guardian.php

guardian.php contient :

Code PHP:

namespace gardian;

class 
DirectoriesAutoloaderException extends \Exception {
    
}

class 
ExtensionFilterIteratorDecorator extends \FilterIterator {

    private 
$_ext = array();

    public function 
accept() {
        foreach (
$this->_ext as $ext) {
            if (
substr($this->current(), -strlen($ext)) === $ext) {
                return 
is_readable($this->current());
            }
            return 
false;
        }
    }

    public function 
setExtension($pExt) {
        
$this->_ext[] = $pExt;
    }

}

class 
guardian {

    private function 
__construct() {
        
    }

    private static 
$_instance false;

    public static function 
instance($pTmpPath '') {
        if (
self::$_instance === false) {
            
self::$_instance = new guardian();
            
self::$_instance->setConfPath($pTmpPath);
            
self::$_instance->getConf();
        }
        return 
self::$_instance;
    }

    private 
$_conf;
    private 
$_crcarray;

    public function 
getConf() {
        if (
file_exists($this->_ConfPath 'conf.guardian.php')) {
            include 
$this->_ConfPath 'conf.guardian.php';
            
$this->_conf $conf;

            foreach (
$conf['dir'] as $dir => $recurcive) {
                
$this->addDirectory($dir,$recurcive);
            }
            if(isset(
$crc) and is_array($crc)){
                
$this->_cacheload 1;
                
$this->_crcarray $crc;
            }
        }
    }

    private 
$_ConfPath;

    public function 
setConfPath($pTmp) {
        
$this->_ConfPath $pTmp;
    }

    public function 
get_crc($file) {
        
$file_string file_get_contents($file);
        
$crc crc32($file_string);
        return 
sprintf("%u"$crc);
    }

    public function 
addDirectory($pDirectory$pRecursive true) {
        if (!
is_readable($pDirectory)) {
            throw new 
DirectoriesAutoloaderException('Cannot read from [' $pDirectory ']');
        }
        
$this->_directories[$pDirectory] = $pRecursive true false;
        return 
$this;
    }

    private 
$_directories = array();

    public function 
save() {
        
$this->_getfilelist();
        
$toSave "var_export($this->_conftrue) . ";  \n \$crc = " var_export($this->_ftrue) . ";\n ?>";
        if (
file_put_contents($this->_ConfPath 'conf.guardian.php'$toSave) === false) {
            throw new 
DirectoriesAutoloaderException('Cannot write cache file ' $this->_ConfPath 'conf.guardian.php');
        }
    }

    private 
$_cacheload 0;

    public function 
checkall() {
        if (
$this->_cacheload == "1") {
            
$this->_getfilelist();
            foreach (
$this->_f as $md5 => $info) {
                if (
$info[0] != $this->_crcarray[$md5][0]) {
                    
$file_info stat($info[1]);
                    echo 
'la signature du fichier : ' $info[1] . ' n\'est pas valide ( newsign :' .$info[0].' , last modif : ' date('d/m/Y'$file_info[9]) . ")
\n"
;
                }
            }
        } else {
            
$this->save();
            echo 
'initialisation ok';
        }
    }

    private function 
_getfilelist() {


        foreach (
$this->_directories as $directory => $recursive) {
            
$directories = new \AppendIterator ();


            if (
$recursive) {
                
$directories->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory)));
            } else {
                
$directories->append(new \DirectoryIterator($directory));
            }


            
$files = new ExtensionFilterIteratorDecorator($directories);
            
$files->setExtension('.php');
            foreach (
$files as $fileName) {

                
$this->_f[md5($fileName)] = array($this->get_crc($fileName), strtolower($fileName));
            }
        }

    }

    private 
$_f = array();

}

guardian::instance()->checkall();

?>

conf.guardian.php c'est le fichier de sauvegarde de crc et des dossier a surveiller :
ex :
je veut que tout les dossier et sous dossier de www/forum soit surveillier
et que les fichier de www2/ le soit aussi mais sans les sous dossier je taperai alors dans conf.guardian.php

Code PHP:
 $conf=array (
  
'dir' => 
  array (
    
'/homez.xxx/yyy/www/forum' => '1',
    
'/homez.xxx/yyy/www2/' => '0',
  ),
);  
?>
pour l'utilisation une fois les 2 fichier dans sur votre serveur vous allez sur guardian.php
vous devrai voir initialisation ok. les crc ( signatures ) des fichiers sont enregistrés
si vous accédé encore sur guardian.php vous verrez tous les fichiers modifié depuis l'initialisation,

je vous conseille de faire une copie du fichier conf.guardian.php que le hackeur ne le supprime pas ça serré dommage

je suis encore entrain de le coder mais la version final ( avec un cron qui envoi un mail si il y a du changement et la version avec interface graphique serons publier en même temps que mon panel )

au niveau perf le script scan 404 fichiers en 0,9s