_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
Detect potentially malicious PHP files.
PHP-malware-finder faz o seu melhor para detectar códigos ofuscados/duvidosos, bem como arquivos usando funções PHP frequentemente usadas em malwares/webshells.
A seguinte lista de codificadores/ofuscadores/webshells também é detectada:
É claro que é trivial contornar o PMF, mas seu objetivo é pegar crianças e idiotas, não pessoas com cérebro funcionando. Se você relatar um bypass personalizado estúpido para PMF, provavelmente pertence a uma (ou ambas) categorias e deve reler a declaração anterior.
A detecção é realizada rastreando o sistema de arquivos e testando os arquivos em relação a um conjunto de regras YARA. Sim, é simples assim!
Em vez de usar uma abordagem baseada em hash , o PMF tenta, tanto quanto possível, 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.git
cd php-malware-finder && make
ou substitua as duas últimas etapas por go install github.com/jvoisin/php-malware-finder
, que irá compilar e instalar diretamente o PMF em 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
Tenha em mente que você deve usar pelo menos YARA 3.4 porque estamos usando hashes para o sistema de lista de permissões e regexps gananciosos. Observe que se você planeja construir o yara a partir dos fontes, libssl-dev deve estar instalado em seu sistema para ter suporte para hashes.
Ah, e a propósito, você pode executar o conjunto de testes abrangente com make tests
.
Se quiser evitar a instalação do Go e da libyara, você também pode usar nossa imagem docker e simplesmente montar a pasta que deseja digitalizar 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ê for preguiçoso, poderá gerar listas de permissões para pastas inteiras com o script generate_whitelist.py.
Porque:
O PHP-malware-finder está licenciado sob a Licença Pública Geral Menor GNU v3.
O incrível projeto YARA está licenciado sob a licença Apache v2.0.
Patches, listas de permissões ou amostras são obviamente mais que bem-vindos.