thaikolja/checkwp

GitHub: thaikolja/checkwp

一款面向WordPress插件的离线安全扫描CLI工具,通过特征匹配与启发式分析检测恶意代码和常见漏洞,并可选接入AI辅助验证。

Stars: 0 | Forks: 0

# 检查WP CheckWP 是一款面向 WordPress 插件的离线优先安全扫描器。它可以扫描插件目录和 `.zip` 压缩包,以检测恶意软件、后门、不安全的代码模式以及常见的漏洞类别,例如远程代码执行、SQL 注入、跨站脚本攻击 (XSS)、CSRF、不安全的文件上传以及权限问题。 AI 验证是可选的。扫描器只有在提供 `--ai-key` 时才会启用 AI 支持。 ## CheckWP 的功能 - 扫描插件目录和插件 ZIP 压缩包 - 在扫描前验证 WordPress 插件的结构 - 检测 PHP 和 JavaScript 恶意软件特征 - 发现插件代码中常见的安全缺陷 - 生成 HTML、JSON、Markdown 和 PDF 报告 - 通过 `checkwp-api` 提供 FastAPI 服务 - 包含用于本地验证的 `mock-malicious-plugin/` ## 为什么离线模式很重要 默认扫描旨在即使不调用任何外部 API 也能发挥作用。它结合了: 1. 基于特征的检测 2. 全文件正则表达式匹配 3. 上下文感知的误报检查 4. 针对代码混淆和恶意载荷执行的复合恶意软件启发式分析 这提高了对后门和可疑载荷的检测能力,即使在不使用 AI 的情况下也是如此。 ## 工作原理 | 阶段 | 具体内容 | |--------------------------|----------------------------------------------------------------------------------------------------| | 输入验证 | CheckWP 接受一个插件文件夹或 ZIP 压缩包,并验证其是否符合 WordPress 插件的特征 | | 安全解压 | ZIP 压缩包在提取时会采取路径遍历和符号链接保护措施 | | 文件发现 | 根据扩展名、大小和排除的文件夹对文件进行过滤 | | 离线扫描 | 对完整文件内容应用特征库和启发式规则 | | 可选的 AI 验证 | 如果提供了 `--ai-key`,则可以通过与 OpenAI 兼容的端点对发现的问题进行复查 | | 报告生成 | 结果将被输出为 HTML、JSON、Markdown 和 PDF 格式 | ## 检测覆盖范围 | 类别 | 示例 | |-----------------------|------------------------------------------------------------------------------------------| | 远程代码执行 | `eval()`、`assert()`、`create_function()`、可变函数执行 | | 命令注入 | `system()`、`exec()`、`passthru()`、`shell_exec()`、`popen()` | | SQL 注入 | 不安全的 `$wpdb` 查询以及 SQL 中的原生超全局变量 | | XSS | 未转义的输出、`innerHTML`、`document.write()` | | CSRF | 缺少 nonce 验证的表单和 AJAX 处理程序 | | 文件问题 | 动态 include/require、不安全的文件读取、不安全的文件上传 | | 反序列化 | 对用户可控输入使用 `unserialize()` | | 授权 | 公开的 REST 路由、薄弱的权限检查 | | 恶意软件特征 | `eval(base64_decode())`、编码后的恶意载荷、数据窃取、隐藏管理员账户创建、盗刷脚本 | | 混淆 | `chr()` 链式调用、`String.fromCharCode()`、过长的编码块、熵值激增 | ## 安装说明 ### pipx ``` pipx install checkwp ``` ### PyPI / pip ``` pip install checkwp ``` ### Homebrew ``` brew tap thaikolja/checkwp brew install checkwp ``` ### 本地开发安装 ``` git clone https://gitlab.com/thaikolja/checkwp.git cd checkwp python3 -m venv .venv source .venv/bin/activate pip install -e ".[dev]" ``` ## 快速入门 ``` checkwp ./my-plugin checkwp ./my-plugin.zip checkwp ./my-plugin --deep -o report.html --no-open checkwp ./mock-malicious-plugin --deep --no-open ``` ## CLI 用法 ``` checkwp [options] ``` ### 核心选项 | 选项 | 描述 | |---------------------------------------------|-----------------------------------------------------------| | `-o, --output PATH` | 输出文件路径 | | `-f, --format {html,json}` | 报告格式 | | `--stdout` | 将报告打印到标准输出 | | `--no-open` | 不自动打开 HTML 报告 | | `-s, --severity {critical,high,medium,low}` | 最低报告严重程度 | | `--deep` | 启用更深入的离线启发式规则和基于熵的检查 | | `--quick` | 将输出限制为高和严重级别的发现项 | | `-t, --threads N` | 工作线程数量 | | `--max-file-size KB` | 要扫描的最大文件大小 | | `--context-lines N` | 要包含在发现项周围的上下文行数 | | `--exclude NAME` | 排除某个目录名称;可重复使用 | | `--include-ext EXT` | 添加额外的文件扩展名;可重复使用 | | `--php-only` | 仅扫描类 PHP 文件 | | `--js-only` | 仅扫描类 JavaScript / TypeScript 文件 | | `--no-banner` | 隐藏启动横幅 | | `--no-color` | 禁用彩色输出 | | `-V, --version` | 显示版本号 | ### AI 选项 | 选项 | 描述 | |--------------------------|-------------------------------------------------------------------| | `--ai-key KEY` | 启用 AI 验证 | | `--ai-endpoint URL` | 与 OpenAI 兼容的 Base URL。如果省略,则默认使用 OpenAI | | `--ai-model MODEL` | 用于 AI 验证的模型名称 | | `--ai-temperature FLOAT` | 采样温度 | 重要提示: - `--ai-endpoint` 仅接受完整的与 OpenAI 兼容的 URL - 不使用任何提供商别名 - 如果省略 `--ai-endpoint`,CheckWP 将使用 `https://api.openai.com/v1` ### AI 示例 OpenAI: ``` checkwp ./my-plugin \ --ai-key "sk-..." \ --ai-model "gpt-4o" ``` 使用显式 OpenAI 兼容 URL 的 DeepSeek: ``` checkwp ./my-plugin \ --ai-key "sk-..." \ --ai-endpoint "https://api.deepseek.com/v1" \ --ai-model "deepseek-chat" ``` 通用的 OpenAI 兼容端点: ``` checkwp ./my-plugin \ --ai-key "token" \ --ai-endpoint "https://example.com/v1" \ --ai-model "my-model" ``` ## API 用法 在本地启动 API: ``` checkwp-api ``` 默认本地地址: - `http://127.0.0.1:8000` ### API 端点 | 方法 | 端点 | 用途 | |--------|-----------------------------|------------------------------| | `GET` | `/` | 服务索引 | | `GET` | `/health` | 健康检查 | | `GET` | `/version` | API 版本 | | `POST` | `/scan` | 上传并扫描一个插件 ZIP | | `GET` | `/static/reports/{id}.html` | 访问已保存的 HTML 报告 | ### 常见的 OpenAI 兼容端点 URL | 提供商 | 用于 `--ai-endpoint` 或 `ai_endpoint` 的 Base URL | |------------|-----------------------------------------------| | OpenAI | `https://api.openai.com/v1` | | DeepSeek | `https://api.deepseek.com/v1` | | OpenRouter | `https://openrouter.ai/api/v1` | | Groq | `https://api.groq.com/openai/v1` | | Together | `https://api.together.xyz/v1` | ### 上传并扫描 ZIP ``` curl -X POST "http://127.0.0.1:8000/scan?format=json" \ -F "file=@./my-plugin.zip" ``` ### 上传并使用 AI 验证进行扫描 ``` curl -X POST "http://127.0.0.1:8000/scan?format=json&ai_key=sk-...&ai_endpoint=https://api.deepseek.com/v1&ai_model=deepseek-chat" \ -F "file=@./my-plugin.zip" ``` ## 报告 | 格式 | 用例 | |----------|--------------------------------------------------| | HTML | 人工审查、分享以及基于浏览器的分类评估 | | JSON | CI/CD、脚本编写和自动化 | | Markdown | 轻量级文本报告 | | PDF | 便携式报告移交 | 当生成 HTML 输出时,CheckWP 还会写入配套的 `.md` 和 `.pdf` 文件。 ## 用于验证的模拟插件 代码库中包含 `mock-malicious-plugin/`,这是一个故意留下漏洞的示例插件,包含: - SQL 注入 - XSS - 不安全的重定向 - 不安全的文件上传 - 公开的 REST 路由 - 隐藏管理员创建 - 混淆的 PHP 恶意载荷 - 可疑的 JavaScript 恶意载荷 在本地运行它以验证检测质量: ``` checkwp ./mock-malicious-plugin --deep --no-open ``` ## 开发 ``` pytest ruff check . mypy src/ python -m build ``` ## 发布 ### PyPI ``` python -m build python -m twine check dist/* python -m twine upload dist/* ``` ### pipx 发布到 PyPI 之后: ``` pipx install checkwp ``` ### Homebrew 使用已发布的 PyPI 源码压缩包的 SHA256 值更新 `homebrew/checkwp.rb`。 相关文件: - `homebrew/HOMEBREW.md` - `.github/workflows/release.yml` ## 作者 | 字段 | 值 | |---------------|----------------------------------------| | 姓名 | Kolja Nolte | | 网站 | `https://checkwp.org` | | 邮箱 | `kolja.nolte@gmail.com` | | GitLab | `https://gitlab.com/thaikolja/checkwp` | | GitHub 镜像 | `https://github.com/thaikolja/checkwp` | ## 许可证 MIT。请参阅 `LICENSE`。
标签:AV绕过, CISA项目, CLI, CSRF, FastAPI, Go语言工具, PDF报告生成, Petitpotam, PHP安全, SEO安全扫描, SQL注入检测, Web安全, WiFi技术, WordPress安全, XSS检测, ZIP解压安全, ZIP路径穿越防护, 人工智能辅助检测, 代码安全审计, 后门检测, 启发式分析, 威胁情报, 安全合规, 开发者工具, 恶意广告软件检测, 提示词注入, 插件扫描器, 操作系统监控, 攻击路径可视化, 正则表达式匹配, 特征码检测, 离线扫描, 符号链接防护, 网站安全检测, 网络代理, 自定义DNS解析器, 蓝队分析, 跨站脚本攻击, 远程代码执行检测, 逆向工具, 错误基检测, 静态代码分析, 黑客工具