scr34m/php-malware-scanner

扫描 PHP 文件中的恶意软件和已知威胁

1.0.27 2024-05-22 12:16 UTC

README

遍历目录以查找具有 php 扩展名的文件,并将文件与文本或正则表达式规则进行测试,规则基于自行收集的样本和公开可用的恶意软件/webshells。目标是找到感染文件并与儿童对抗,因为规则很容易被绕过。

如何安装?

只需克隆存储库或使用 composer 全局安装 composer global require scr34m/php-malware-scanner

如何使用?

Usage: php scan.php -d <directory>
    -h                   --help               Show this help message
    -d <directory>       --directory          Directory for searching
    -e <file extension>  --extension          File Extension to Scan
    -E                   --scan-everything    Scan all files, with or without extensions
    -i <directory|file>  --ignore             Directory of file to ignore
    -a                   --all-output         Enables --checksum,--comment,--pattern,--time
    -b                   --base64             Scan for base64 encoded PHP keywords
    -m                   --checksum           Display MD5 Hash/Checksum of file
    -c                   --comment            Display comments for matched patterns
    -x                   --extra-check        Adds GoogleBot and htaccess to Scan List
    -l                   --follow-symlink     Follow symlinked directories
    -k                   --hide-ok            Hide results with 'OK' status
    -r                   --hide-err           Hide results with 'ER' status
    -w                   --hide-whitelist     Hide results with 'WL' status
    -n                   --no-color           Disable color mode
    -s                   --no-stop            Continue scanning file after first hit
    -p                   --pattern            Show Patterns next to the file name
    -t                   --time               Show time of last file change
    -L                   --line-number        Display matching pattern line number in file
    -o                   --output-format      Custom defined output format
    -j <version>         --wordpress-version  Version of wordpress to get md5 signatures
                         --combined-whitelist Combined whitelist
                         --custom-whitelist   Loads whitelist from specified file and merge with existing
                         --disable-stats      Disable statistics output

可以多次使用 ignore 参数,并接受 glob 风格的匹配,例如:"cache*","??-cache.php" 或 "/cache" 等。

extension 参数默认为 ".php",也可以多次使用。

  • --base64 是一种替代扫描模式,它忽略主模式文件并使用大量已转换为 base64 的 php 关键字和函数。速度较慢且易出现误报,但提供了额外的 base64 扫描覆盖。这些模式文件位于 base64_patterns 目录中,并基于 php 7 关键字和函数生成。不包含许多 PHP 扩展。
  • --comment 标志将显示出现在匹配模式之前的模式文件中的最后一条注释,因此记录模式文件很重要。

输出格式

默认输出取决于指定的参数,但完整的格式是 "%S %T %M # {%F} %C %P # %L" 并使用 ANSI 颜色。

可能的变量是

  • %S - 匹配指示器,可能的值是 OK、ER、WL
  • %T - 文件更改时间
  • %M - 文件 md5 哈希值
  • %F - 带路径的文件
  • %P - 模式
  • %C - 模式注释
  • %L - 匹配模式行号

模式

有三个主要模式文件,涵盖不同类型的模式匹配。每行都有一个模式。所有以 "#" 为首字符的行被视为注释,不作为模式使用。模式文件中的空白字符不使用。

  • patterns_raw.txt - 原始字符串匹配
  • patterns-iraw.txt - 不区分大小写的原始字符串匹配
  • patterns-re.txt- 正则表达式匹配。

白名单

请参阅 whitelist.txt 文件,其中包含预定义的 MD5 哈希列表。仅使用行的前 32 个字符,忽略其余部分,因此可以自由添加注释。

Wordpress md5 求和白名单

您可以通过指定 --wordpress-version 或 -j 作为参数来自动添加从 wordpress 核心文件中获取的 md5sum。示例

scan -d . -j 4.9.2

这将自动从 wordpress API (https://api.wordpress.org/core/checksums/1.0/?version=x.x.x) 获取 md5sum 并将其添加到白名单中。要检查您的版本,只需检查 wp-includes/version.php 文件即可。

组合白名单

此列表是针对开源项目的预生成数据库,更多信息请参阅 https://scr34m.github.io/php-malware-scanner/ 网站。扫描器检查数据库哈希的有效性,并且仅在它不同时才下载,当然,当使用参数时。

工具

text2base64.py

接收明文字符串作为输入,并返回3个对应的base64字符串。需要从终端执行此Python脚本才能使用。

值得注意的是,在一段文本块中存在这三个输出字符串之一并不能100%保证该字符串原本存在于原始代码中。可以保证的是,如果主题字符串原本存在于原始代码中,那么在base64版本中这三个输出字符串之一一定会存在。

$ python tools/text2base64.py 'base64_decode'  
YmFzZTY0X2RlY29kZ  
Jhc2U2NF9kZWNvZG  
iYXNlNjRfZGVjb2Rl

例如:'YmFzZTY0X2RlY29kZ' 的存在并不能保证 'base64_decode' 在明文代码中。
可以保证的是,如果 'base64_decode' 存在于明文代码中,那么这三个base64字符串中至少有一个会存在。在代码块中 'YmFzZTY0X2RlY29kZ' 的存在可能是因为 'ase64_decod' 存在于原始代码中。
注意缺失的边缘字符,这是由于位错位和字符溢出造成的。

作为库使用

scan.php 执行时检查是否是通过命令行调用,因此作为库使用时,请使用与 scan.php 本身不同的目录。

<?php

require_once '../scan.php';

$scan = new MalwareScanner();
$scan->setFlagHideWhitelist(true);
$scan->setFlagHideOk(true);
$scan->run('../samples/test');

资源

许可

PHP恶意软件扫描器遵循GNU通用公共许可证v3 许可协议