_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
Detect potentially malicious PHP files.
PHP-Malware-Finder tut sein Bestes, um verschleierten/zwielichtigen Code sowie Dateien mithilfe von PHP-Funktionen zu erkennen, die häufig in Malware/Webshells verwendet werden.
Die folgende Liste von Encodern/Obfuscators/Webshells wird ebenfalls erkannt:
Natürlich ist es trivial , PMF zu umgehen, aber sein Ziel besteht darin, Kinder und Idioten zu fangen, nicht Menschen mit einem funktionierenden Gehirn. Wenn Sie einen dummen maßgeschneiderten Bypass für PMF melden, gehören Sie wahrscheinlich zu einer (oder beiden) Kategorie und sollten die vorherige Aussage noch einmal lesen.
Die Erkennung erfolgt durch Crawlen des Dateisystems und Testen der Dateien anhand einer Reihe von YARA-Regeln. Ja, so einfach ist das!
Anstatt einen Hash-basierten Ansatz zu verwenden, versucht PMF so weit wie möglich, semantische Muster zu verwenden, um Dinge wie „eine $_GET
Variable wird zweimal dekodiert, entpackt und dann an eine gefährliche Funktion wie system
übergeben“ zu erkennen.
git clone https://github.com/jvoisin/php-malware-finder.git
cd php-malware-finder && make
oder ersetzen Sie die letzten beiden Schritte durch go install github.com/jvoisin/php-malware-finder
, wodurch PMF direkt in Ihrem Ordner ${GOROOT}/bin
kompiliert und installiert wird.
$ ./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
Oder wenn Sie lieber yara
verwenden möchten:
$ yara -r ./data/php.yar /var/www
Bitte beachten Sie, dass Sie mindestens YARA 3.4 verwenden sollten, da wir Hashes für das Whitelist-System und gierige reguläre Ausdrücke verwenden. Bitte beachten Sie, dass libssl-dev auf Ihrem System installiert sein muss, wenn Sie vorhaben, Yara aus Quellen zu erstellen, um Hashes zu unterstützen.
Oh, und übrigens können Sie die umfassende Testsuite mit make tests
ausführen.
Wenn Sie die Installation von Go und libyara vermeiden möchten, können Sie auch unser Docker-Image verwenden und den Ordner, den Sie scannen möchten, einfach im Verzeichnis /data
des Containers mounten:
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
Überprüfen Sie die Datei „whitelist.yar“. Wenn Sie faul sind, können Sie mit dem Skript „generate_whitelist.py“ Whitelists für ganze Ordner erstellen.
Weil:
PHP-Malware-Finder ist unter der GNU Lesser General Public License v3 lizenziert.
Das erstaunliche YARA-Projekt ist unter der Apache v2.0-Lizenz lizenziert.
Patches, Whitelists oder Samples sind natürlich herzlich willkommen.