
Detectar arquivos PHP potencialmente maliciosos
_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
Detecta arquivos PHP potencialmente maliciosos.
O PHP-malware-finder faz o possível para detectar código ofuscado/duvidoso, bem como arquivos que usam funções PHP frequentemente utilizadas em malwares/webshells.
A seguinte lista de codificadores/ofuscadores/webshells também é detectada:
Claro que é trivial contornar o PMF, mas seu objetivo é pegar garotos script e idiotas, não pessoas com um cérebro funcional. Se você relatar um bypass estúpido e personalizado para o PMF, você provavelmente pertence a uma (ou ambas) categorias e deve reler a declaração anterior.
A detecção é realizada percorrendo o sistema de arquivos e testando arquivos contra um conjunto de regras YARA. Sim, é simples assim!
Em vez de usar uma abordagem baseada em hash, o PMF tenta ao máximo usar padrões semânticos para detectar coisas como "uma variável $_GET é decodificada duas vezes, descompactada e então passada para alguma função perigosa como system".
git clone https://github.com/jvoisin/php-malware-finder.gitcd php-malware-finder && makeou substitua as últimas 2 etapas por go install github.com/jvoisin/php-malware-finder, que irá compilar e instalar o PMF diretamente na sua pasta ${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 se preferir usar yara:
$ yara -r ./data/php.yar /var/www
Lembre-se de que você deve usar pelo menos YARA 3.4 porque estamos usando hashes para o sistema de lista de permissões e regexp gananciosos. Observe que se você planeja compilar o yara a partir do código fonte, o libssl-dev deve estar instalado em seu sistema para ter suporte a hashes.
Ah, e a propósito, você pode executar a abrangente suíte de testes com make tests.
Se você quiser evitar ter que instalar Go e libyara, também pode usar nossa imagem docker e simplesmente montar a pasta que deseja escanear no diretório /data do contêiner:
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
Verifique o arquivo whitelist.yar. Se você é preguiçoso, pode gerar listas de permissões para pastas inteiras com o script generate_whitelist.py.
Porque:
O PHP-malware-finder é licenciado sob a GNU Lesser General Public License v3.
O incrível projeto YARA é licenciado sob a licença Apache v2.0.
Patches, listas de permissões ou amostras são, claro, mais que bem-vindos.