SOMA9-Cloud/wp-shell-hunter
GitHub: SOMA9-Cloud/wp-shell-hunter
专注检测 WordPress 环境中伪装成媒体文件的 PHP webshell 及隐藏在重复目录结构中的后门,弥补常规恶意软件扫描器的盲区。
Stars: 0 | Forks: 0
# wp-shell-hunter
[](https://github.com/SOMA9-Cloud/wp-shell-hunter/actions/workflows/test.yml)
[](LICENSE)
[](https://www.python.org)
[](#requirements)
检测 WordPress 和 cPanel 托管环境中**伪装成媒体文件**的 PHP webshell。能够捕获表层恶意软件扫描器通常遗漏的模式。
## 为什么开发此工具
大多数 WordPress 恶意软件工具会寻找标准路径中的 `.php` 文件。现代 webshell 家族通过以下方式绕过此检测:
- 将 PHP 代码嵌入到带有媒体扩展名的文件中(`.tiff`、`.gif`、`.png`、`.mp4`、`.flv`、`.3gp`、`.webp`、`.zip`)。
- 隐藏在攻击者创建的**双重目录**中(`wp-admin/maint/maint/`、`cgi-bin/cgi-bin/cgi-bin/`、`images/images/images/images/`)。
- 使用 `goto` 语句面条代码、四层嵌套的 `md5()` 密码门以及 `eval()` 与 `curl_exec()` 的链式调用来混淆投放器。
当管理员只找到并删除了明显的 `.php` 文件时,非 `.php` 的投放器会残留下来,导致网站在几小时内再次被感染。
`wp-shell-hunter` 专为捕获那些非显而易见的威胁而构建。
## 快速开始
```
# 一次性安装(无需 pip,无需 virtualenv)
curl -fsSL https://raw.githubusercontent.com/SOMA9-Cloud/wp-shell-hunter/main/install.sh | sudo bash
# 扫描 webroot
wp-shell-hunter /var/www/html
# /home 下的多个 WordPress 安装
wp-shell-hunter /home --workers 8
# 用于 SIEM/CI 导入的 JSON 输出
wp-shell-hunter /var/www/html --json > findings.json
# 默认跳过(非常嘈杂的)WordPress uploads 目录;
# 如需同时扫描请显式启用:
wp-shell-hunter /var/www/html --scan-uploads
```
退出代码:
| 代码 | 含义 |
|------|------------------------------------------------------|
| `0` | 未发现可疑内容 |
| `1` | 至少有一个可疑发现(需人工复查) |
| `2` | 至少有一个被评级为 `malicious` 的发现(紧急情况) |
这些代码在各个版本中保持稳定,可安全用于 CI 关卡。
## 检测器
### 1. `disguised_php`
读取每个带有媒体或资源扩展名文件的前 16 个字节,如果内容以 ` shell-hunter.json
```
当发现 `malicious` 结果时,非零退出代码(`2`)将默认导致任务失败,从而尽早暴露问题。
## 性能
在多站点 cPanel/WP 主机上进行代表性扫描的指示性数据:
| 文件数 | 工作线程数 | 耗时 |
|------:|--------:|-----:|
| 50,000 | 4 | ~12秒 |
| 250,000 | 8 | ~45秒 |
| 1,000,000 | 16 | ~3分钟 |
遍历器默认会修剪大型无关目录树(`node_modules`、`vendor`、`__pycache__`、`cache` 等)。如果您的环境有需要,可以通过 `--scan-uploads` 和 `--follow-symlinks` 进行覆盖。
## 局限性
- 有动机的攻击者可以避开所有这三个检测器。此工具捕获当前常见的模式;但不能保证绝对的安全。
- 仅限静态分析。无行为检测。
- 混淆检测器是基于启发式的。在高度混淆但良性的代码上可能会出现误报(在 WordPress 环境中很少见)。
## 贡献
欢迎提交 Issue 和 Pull Request。新的检测器模块应放在 `src/wp_shell_hunter/detectors/` 下,并公开一个 `check(path: Path) -> Optional[Finding]` 方法。请参阅 `disguised_php.py` 以获取最简单的参考实现。
## 许可证
MIT。详情请见 [LICENSE](LICENSE)。
## 作者
由 **SOMA9™ Security Team**(SOMA9™ Holdings, LLC 的安全运营团队)构建并维护。该工具是我们对我们管理的 WordPress 托管账户运行的内部狩猎检查的开源版本。
我们不接受通过此存储库提交的私人漏洞报告。如需报告,请发送邮件至 `security@soma9.cloud`(PGP 公钥位于众所周知的位置)。
SOMA9™ 是 SOMA9 Holdings, LLC 的商标。
标签:AppImage, cPanel安全, DNS 反向解析, DNS 解析, Homebrew安装, PB级数据处理, PHP木马, Python, SIEM集成, Webshell检测, Web应用防火墙, WordPress安全, 代码混淆, 媒体文件解析, 安全运维, 开源安全工具, 恶意代码分析, 恶意软件扫描, 操作系统监控, 数据展示, 文件伪装检测, 文件系统监控, 无依赖, 无后门, 沙箱逃逸, 红队, 网站安全, 逆向工具, 逆向工程平台, 配置文件