jazz-max/gitmon
GitHub: jazz-max/gitmon
gitmon 是一个基于 git status 的 Web 服务器文件完整性入侵监控器,用于检测和告警未经授权的文件变更(如植入的 Web Shell 和代码注入)。
Stars: 0 | Forks: 0
**English** · [Русский](README.ru.md)
# gitmon — git-status 入侵监控器
一个小巧、可审计的监控器,可检测您的 Web 应用程序中的**未经授权的文件更改**,
并通过 **Telegram、MAX 和电子邮件**提醒您。它按计划对每个受跟踪的工作树运行 `git status`,
并仅报告真正*新增的*偏差 —— 正是这一信号
可以捕获被植入的 Web Shell(未跟踪的 `?? evil.php`)和注入的文件(修改了
`vendor/composer/autoload_real.php`)。
纯 Python 3 + coreutils,无外部依赖包。设计用于在嘈杂的代码库中保持安静,并
抵御常见的规避手段。
## 为什么使用 git status?
发生入侵后,攻击者会植入 Shell 并将代码注入到文档根目录中。在由 Git 管理的
站点中,这些会立即显示为**未跟踪**(`??`)或**已修改**(` M`)条目 —— 这正是
`git status` 所呈现的内容。gitmon 将这种一次性的取证技巧转变为持续的监控。
## 工作原理
- **发现并去重**已配置的 git 工作树(基于 realpath)。
- 对每个代码库运行 `git status --porcelain=v1 --untracked-files=all -z`(支持 NUL 安全解析,对
文件名中的空格/换行符/UTF-8 具有鲁棒性),以及当前的 HEAD 和受跟踪的
`.gitignore` 文件的哈希值。
- **增量告警**:首次运行会静默记录基线;之后它仅对与基线相比*新增的*
记录发出警报。这是必不可少的 —— 一个真实的站点可能有成千上万
未跟踪的上传文件;您绝不能对它们全部发出警报,而只能对最新出现的进行警报。
- **严重程度**
- `HIGH` — 带有可执行 PHP 扩展名的新文件(`.php .phtml .php5 .pht .suspected .htaccess`),
受跟踪的代码文件被修改/添加/删除,强制判定为 HIGH 的 IOC(`vendor/composer/autoload_real.php`,
任何 `index.php`、`.htaccess`、`.gitignore` 的更改)。
- `INFO` — 所有其他情况(正常的媒体上传 `.jpg/.png/.gif`、文档等)。当
`notify_level = HIGH`(默认值)时,INFO 会被记录并归入基线,但**不会进行推送**。
- **内容二次检查(可选)**:新增的未跟踪媒体/文本文件将被传递给内容
扫描器([scan-webshells](https://github.com/jazz-max/scan-webshells))。一个*伪装成图片*的 Shell
(`GIF89a
标签:Git, Python, 告警通知, 无后门, 网络信息收集, 网络安全研究, 运维