
Detect potentially malicious PHP files
_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___| Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
Détecte les fichiers PHP potentiellement malveillants.
PHP-malware-finder fait de son mieux pour détecter du code obfusqué/douteux ainsi que des fichiers utilisant des fonctions PHP souvent employées dans les malwares/webshells.
La liste suivante d'encodeurs/obfusqueurs/webshells est également détectée :
Bien sûr, il est trivial de contourner PMF, mais son but est d'attraper les kiddies et les idiots, pas les personnes dotées d'un cerveau fonctionnel. Si vous signalez un contournement idiot et sur-mesure pour PMF, vous appartenez probablement à l'une (ou aux deux) catégories, et devriez relire la déclaration précédente.
La détection est effectuée en parcourant le système de fichiers et en testant les fichiers par rapport à un ensemble de règles YARA. Oui, c'est aussi simple que ça !
Au lieu d'utiliser une approche basée sur les hashs,
PMF essaie autant que possible d'utiliser des motifs sémantiques, pour détecter des choses comme
"une variable $_GET est décodée deux fois, décompressée,
puis passée à une fonction dangereuse comme system".
git clone https://github.com/jvoisin/php-malware-finder.gitcd php-malware-finder && makeou remplacez les 2 dernières étapes par go install github.com/jvoisin/php-malware-finder,
ce qui compilera et installera PMF directement dans votre dossier ${GOROOT}/bin.
$ ./php-malware-finder -h
Usage:
php-malware-finder [OPTIONS] [Target]
Application Options:
-r, --rules-dir= Alternative rules location (default: embedded rules)
-a, --show-all Display all matched rules
-f, --fast Enable YARA's fast mode
-R, --rate-limit= Max. filesystem ops per second, 0 for no limit (default: 0)
-v, --verbose Verbose mode
-w, --workers= Number of workers to spawn for scanning (default: 32)
-L, --long-lines Check long lines
-c, --exclude-common Do not scan files with common extensions
-i, --exclude-imgs Do not scan image files
-x, --exclude-ext= Additional file extensions to exclude
-u, --update Update rules
-V, --version Show version number and exit
Help Options:
-h, --help Show this help message
Ou si vous préférez utiliser yara :
$ yara -r ./data/php.yar /var/www
Veuillez garder à l'esprit que vous devez utiliser au moins YARA 3.4 car nous utilisons des hashs pour le système de liste blanche, et des regex gourmandes. Notez que si vous prévoyez de compiler yara à partir des sources, libssl-dev doit être installé sur votre système pour avoir le support des hashs.
Oh, et au fait, vous pouvez exécuter la suite de tests complète avec make tests.
Si vous souhaitez éviter d'installer Go et libyara, vous pouvez également utiliser notre
image docker et simplement monter le dossier que vous voulez analyser dans le répertoire
/data du conteneur :
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
Consultez le fichier whitelist.yar. Si vous êtes paresseux, vous pouvez générer des listes blanches pour des dossiers entiers avec le script generate_whitelist.py.
Parce que :
PHP-malware-finder est licencié sous la licence publique générale limitée GNU v3.
Le projet incroyable YARA est sous licence Apache v2.0.
Les correctifs, listes blanches ou échantillons sont bien sûr les bienvenus.