_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ 网站后门查找器,
| ___|| || ___| 脚本小子猎手,
| | | ||_|| || | 网站清理器。
|___| |_| |_||___|
检测潜在的恶意 PHP 文件。
PHP-malware-finder 尽全力检测经过混淆/可疑的代码,以及那些使用恶意软件/后门中常见 PHP 函数的文件。
同时也会检测以下编码器/混淆器/后门列表:
当然,绕过 PMF 是微不足道的, 但它的目标是抓住脚本小子和傻瓜, 而不是那些有正常头脑的人。 如果你报告一个愚蠢的针对 PMF 的定制绕过方法,你很可能属于上述一个(或两个)类别,并且应该重新阅读前面的声明。
通过遍历文件系统并将文件与一个YARA规则集进行测试来执行检测。是的,就是这么简单!
PMF 没有采用基于哈希的方法,
而是尽可能使用语义模式来检测诸如“一个 $_GET 变量被解码两次、解压,
然后传递给像 system 这样的危险函数”之类的情况。
git clone https://github.com/jvoisin/php-malware-finder.gitcd php-malware-finder && make或者用以下命令替换最后两步:go install github.com/jvoisin/php-malware-finder,
这将直接编译并安装 PMF 到你的 ${GOROOT}/bin 文件夹中。
$ ./php-malware-finder -h
Usage:
php-malware-finder [OPTIONS] [Target]
Application Options:
-r, --rules-dir= 替代规则位置(默认:内嵌规则)
-a, --show-all 显示所有匹配的规则
-f, --fast 启用 YARA 的快速模式
-R, --rate-limit= 最大每秒文件系统操作数,0 表示无限制(默认:0)
-v, --verbose 详细模式
-w, --workers= 用于扫描的工作线程数(默认:32)
-L, --long-lines 检查长行
-c, --exclude-common 不扫描常见扩展名的文件
-i, --exclude-imgs 不扫描图像文件
-x, --exclude-ext= 要排除的其他文件扩展名
-u, --update 更新规则
-V, --version 显示版本号并退出
Help Options:
-h, --help 显示此帮助信息
或者如果你更愿意使用 yara:
$ yara -r ./data/php.yar /var/www
请记住,你应该至少使用 YARA 3.4,因为我们在白名单系统中使用了哈希以及贪婪的正则表达式。请注意,如果你打算从源码构建 yara,则必须在系统上安装 libssl-dev 以支持哈希。
哦,顺便说一句,你可以用 make tests 运行全面的测试套件。
如果你想避免安装 Go 和 libyara,也可以使用我们的
docker 镜像,只需将要扫描的文件夹挂载到容器的
/data 目录:
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
检查 whitelist.yar 文件。 如果你比较懒,可以使用 generate_whitelist.py 脚本为整个文件夹生成白名单。
因为:
PHP-malware-finder 采用 GNU Lesser General Public License v3 许可。
出色的 YARA 项目采用 Apache v2.0 许可证。
当然,非常欢迎补丁、白名单或样本。