
Potenziell schädliche PHP-Dateien erkennen
_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
Erkennt potenziell bösartige PHP-Dateien.
PHP-Malware-Finder gibt sein Bestes, um obfuskierten/fragwürdigen Code sowie Dateien zu erkennen, die PHP-Funktionen verwenden, die häufig in Malware/Webshells vorkommen.
Die folgende Liste von Encodern/Obfuskatoren/Webshells wird ebenfalls erkannt:
Natürlich ist es trivial, PMF zu umgehen, aber sein Ziel ist es, Kiddies und Idioten zu erwischen, nicht Leute mit einem funktionierenden Gehirn. Wenn du einen dummen, maßgeschneiderten Bypass für PMF meldest, gehörst du wahrscheinlich zu einer (oder beiden) Kategorien und solltest die vorherige Aussage noch einmal lesen.
Die Erkennung erfolgt, indem das Dateisystem durchsucht und Dateien gegen einen Satz von YARA-Regeln getestet werden. Ja, so einfach ist das!
Statt eines hashbasierten Ansatzes
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.gitcd php-malware-finder && makeoder ersetze die letzten 2 Schritte mit go install github.com/jvoisin/php-malware-finder,
wodurch PMF direkt kompiliert und in deinem ${GOROOT}/bin-Ordner 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 du lieber yara verwendest:
$ yara -r ./data/php.yar /var/www
Bitte beachte, dass du mindestens YARA 3.4 verwenden solltest, da wir Hashes für das Whitelist-System und gierige Regexps verwenden. Beachte auch, dass wenn du yara aus den Quellen bauen möchtest, libssl-dev auf deinem System installiert sein muss, um Unterstützung für Hashes zu haben.
Ach ja, und du kannst die umfassende Testsammlung mit make tests ausführen.
Wenn du die Installation von Go und libyara vermeiden möchtest, kannst du auch unser
Docker-Image verwenden und einfach den Ordner, den du scannen möchtest, in das
/data-Verzeichnis des Containers mounten:
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
Überprüfe die Datei whitelist.yar. Wenn du faul bist, kannst du mit dem Skript generate_whitelist.py Whitelists für ganze Ordner generieren.
Weil:
PHP-malware-finder ist unter der GNU Lesser General Public License v3 lizenziert.
Das großartige YARA-Projekt ist unter der Apache v2.0-Lizenz lizenziert.
Patches, Whitelists oder Beispiele sind natürlich mehr als willkommen.