The-Adimension/REDACTS
GitHub: The-Adimension/REDACTS
一款专为 REDCap 平台设计的取证安全扫描器,通过基线差异分析检测文件篡改、后门和 INFINITERED 恶意软件活动。
Stars: 2 | Forks: 0
## 免责声明
# REDACTS | **REDCap 任意代码威胁扫描**
[](LICENSE)
[](https://www.python.org/downloads/)
[](CHANGELOG.md)
[](tests/)
[](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html)
[](https://attack.mitre.org/)
[](#quick-start)
[](#security-rules)
一款专为 [REDCap](https://projectredcap.org) 安装环境构建的取证安全扫描器。REDACTS 执行基线驱动的差异分析,以检测篡改、后门和活跃威胁 —— 包括 2026 年 2 月发现的 [INFINITERED](https://projectredcap.org/resources/blog/) 恶意软件活动。
## 为什么选择 REDACTS
REDCap 为全球数千家机构的临床研究提供支持。2026 年初,INFINITERED 攻击活动表明,攻击者正积极利用自定义漏洞针对 REDCap 服务器发起攻击,这些攻击在升级后依然存在。手动的 `grep` 命令和临时的校验和检查无法应对此类威胁。
REDACTS 自动化了取证工作流程:将您正在运行的安装环境与已知良好的参考版本进行比较,标记每一处偏差,并生成符合审计要求的报告 —— 所有这些都不会修改您的服务器。
## 工作原理
REDACTS 在命令行中运行引导式交互工作流。它会通过提示引导您完成每一步 —— 无需复杂的参数标志。
### 流水线阶段
1. **证据收集** — 加载您的 REDCap 文件(ZIP、7z、RAR、本地目录、HTTP 或 FTP/SFTP),构建 SHA-256 文件清单,并使用 Google Magika AI 对每个文件进行分类。
2. **基线差异对比** — 将目标与干净的参考版本进行比较。跳过哈希值相同的文件,仅将分析集中在实际的偏差上。
3. **深度取证** — 运行 57 条安全规则、tree-sitter PHP AST 分析、17 个 IoC 指标、34 个攻击向量评估以及敏感数据检测 —— 仅针对修改/新增的文件集进行。
4. **外部工具增强** — 调用 Semgrep、Trivy 和 YARA(首次运行时自动安装)。如果系统中有 PHP lint、Lizard 复杂度分析和 Radon 可维护性评分工具,也会选择性运行。
5. **DAST (动态分析)** — 在 Docker 中运行的实时 REDCap 实例上进行 Playwright 驱动的浏览器测试。测试认证边界、升级完整性和导出安全性。_需要 Docker 和 Node.js。_
6. **报告生成** — 生成 HTML、JSON、Markdown 和 SARIF v2.1.0 输出。
### 流水线图
```
Reference ZIP ──┐
├── Phase 1: Build SHA-256 manifests
Target files ───┘
│
Phase 2: Structural diff (added / removed / matched)
│
Phase 3: Hash comparison
│ │
identical MODIFIED + ADDED
(skip) │
Phase 4: Deep forensic scan
│
┌─────┴──────┐
│ 57 rules │
│ AST parse │
│ IoC match │
│ Semgrep │
│ Trivy │
│ YARA │
└─────┬──────┘
│
Reports (HTML/JSON/MD/SARIF)
```
## INFINITERED 检测
[](#infinitered-detection)
[](#infinitered-detection)
REDACTS 包含针对 INFINITERED 恶意软件活动的专用检测功能:
| 规则 ID | 检测内容 | 严重程度 |
|---------|----------------|----------|
| `SEC060` | PHP 文件中的 `REDCAP-TOKEN` 标记字符串 | CRITICAL |
| `SEC061` | `eval(gzinflate(base64_decode()))` 混淆链 | CRITICAL |
| `SEC062` | `redcap.db` SQLite 持久化工件引用 | HIGH |
| `IOC-INF-001` | `redcap.db` 文件存在(SQLite C2/持久化层) | CRITICAL |
| `IOC-INF-002` | SQLite WAL/journal 伴随文件(证明存在活动数据库写入) | CRITICAL |
| `IOC-INF-003` | `hook_functions.php` 中注入的函数与已知 REDCap 钩子不匹配 | CRITICAL |
| `IOC-INF-004` | `eval(gzinflate(base64_decode()))` 载荷投递模式 | CRITICAL |
**基线验证器** 将这些文件归类为 CRITICAL 完整性目标:
- `Hooks.php` — “主要 INFINITERED 持久化目标”
- `Upgrade.php` — “持久化受损指标”
- `Authentication.php` / `auth_functions.php` — “凭据盗窃风险”
- `.htaccess` — “检查 auto_prepend_file 持久化”
- `.user.ini` — “PHP 运行时持久化”
**升级劫持** — 11 条规则(`UPG001`, `UPG002`, `UPG003`, `UPG010`, `UPG011`, `UPG020`, `UPG021`, `UPG030`, `UPG031`, `UPG040`, `UPG050`)检测升级脚本中的持久化注入、文件删除绕过、跳过逻辑、混淆和配置篡改。
**MITRE ATT&CK 映射** — 发现结果被映射到 8 个战术下的 20 个技术 ID,包括 T1505.003 (Web Shell)、T1195 (供应链入侵)、T1546 (事件触发执行) 和 T1027 (混淆文件)。
## 快速开始
### 系统要求
| 需求 | 版本 | 用途 | 下载 |
|-------------|---------|---------|----------|
| [Python](https://www.python.org/downloads/) | 3.11+ | 核心运行时 | [python.org](https://www.python.org/downloads/) |
| [Docker](https://docs.docker.com/get-docker/) | 任意近期版本 | 仅 DAST 阶段 | [docs.docker.com](https://docs.docker.com/get-docker/) |
| [Docker Compose](https://docs.docker.com/compose/install/) | v2+ | 仅 DAST 阶段 | [docs.docker.com](https://docs.docker.com/compose/install/) |
| [Node.js](https://nodejs.org/) | 18+ | 仅 DAST 阶段 | [nodejs.org](https://nodejs.org/en/download/) |
### 安装
```
# Clone the repository
git clone https://github.com/The-Adimension/REDACTS.git
cd REDACTS
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# Install Python dependencies
pip install -r requirements.txt
```
首次运行时,如果 **Semgrep**、**Trivy** 和 **YARA** 尚不存在,REDACTS 会自动下载并安装它们。系统工具缓存在 `~/.redacts/tools/` 中,并在虚拟环境重建后保留。您可以使用 `REDACTS_TOOLS_DIR` 环境变量覆盖此路径。
### 运行扫描
REDACTS 使用交互式引导工作流:
```
python -m REDACTS
```
CLI 将会:
1. 显示包含版本信息的横幅
2. 检查并报告所有依赖项
3. 自动安装任何缺失的 Python 包
4. 提示您输入要扫描的 **目标** REDCap 文件(ZIP 路径、目录、URL 或 FTP 地址)
5. 提示您输入 **参考** REDCap 包(从 REDCap Consortium 下载的干净版本)
6. 执行完整的扫描流水线并生成报告
使用 `python -m REDACTS --help` 获取用法信息。
### 运行 DAST (动态分析)
DAST 阶段需要 Docker 和 Node.js。它会启动一个容器化的 REDCap 实例(MariaDB + Apache/PHP)并对其运行 Playwright 浏览器测试。
```
cd dast
npm install
docker compose -f docker-compose.dast.yml up -d
npx playwright test
```
### 运行测试
```
python -m pytest tests/ -x -q
```
测试套件包含 321 个测试。
## 项目结构
```
REDACTS/
├── __main__.py # Interactive CLI entry point
├── __init__.py # Package metadata (v2.0.0)
├── audit/
│ └── pipeline.py # 4-phase baseline-driven audit pipeline
├── core/
│ ├── config.py # Typed configuration dataclasses
│ ├── constants.py # Canonical version string
│ ├── dependencies.py # Dependency checker and auto-installer
│ ├── models.py # Unified finding model (SARIF/CVSS/CWE/MITRE)
│ └── logging_setup.py # Logging configuration
├── dast/
│ ├── orchestrator.py # Docker Compose + Playwright orchestration
│ ├── docker-compose.dast.yml # REDCap + MariaDB + Playwright stack
│ ├── docker-compose.crawlmaze.yml # Google Crawl Maze benchmark stack
│ ├── Dockerfile.playwright # Playwright test runner container
│ ├── Dockerfile.crawlmaze # Crawl Maze container
│ ├── playwright.config.ts # Playwright configuration
│ ├── tests/ # 4 Playwright spec files (102 test cases)
│ │ ├── admin-access.spec.ts # Auth boundary tests (10)
│ │ ├── crawlmaze-coverage.spec.ts # Crawl Maze benchmark (76)
│ │ ├── export-report.spec.ts # Data export security (6)
│ │ └── upgrade-flow.spec.ts # Upgrade integrity tests (10)
│ └── helpers/ # Shared test utilities
│ ├── auth.ts # REDCap authentication helper
│ ├── security-assertions.ts # Security check assertions
│ ├── filesystem-snapshot.ts # File snapshot and diff
│ └── network-monitor.ts # Network traffic monitoring
├── evidence/
│ ├── collector.py # Evidence package builder
│ └── manifest.py # File manifest with SHA-256 hashing
├── forensics/
│ ├── baseline_validator.py # Structural diff + integrity checking
│ ├── security_scanner.py # Security rule engine
│ ├── security_rules.py # 57 PHP security rule definitions
│ ├── tree_sitter_analyzer.py # PHP AST analysis via tree-sitter
│ ├── upgrade_analyzer.py # 11 upgrade hijacking detection rules
│ ├── file_analyzer.py # Hashing, entropy, Magika classification
│ ├── magika_analyzer.py # Google Magika integration
│ └── database_forensics.py # Database artifact analysis
├── integration/
│ └── repomix.py # Repomix codebase snapshot integration
├── investigation/
│ ├── investigator.py # 7-step investigation orchestrator
│ ├── semgrep_adapter.py # Semgrep CLI adapter
│ ├── trivy_adapter.py # Trivy CLI adapter
│ └── external_tools.py # External tool runner
├── knowledge/
│ ├── attack_vectors.py # 34 attack vectors across 7 categories
│ ├── ioc_database.py # 17 Indicators of Compromise
│ ├── mitre_mapping.py # 20 MITRE ATT&CK technique mappings
│ └── sensitive_data.py # PHI/PII/credential detection patterns
├── loaders/
│ ├── base.py # Loader protocol + auto-detection
│ ├── zip_loader.py # ZIP, 7z, RAR, tar.gz, tar.bz2, tar.xz
│ ├── local_loader.py # Local directory loading
│ ├── http_loader.py # HTTP/HTTPS download
│ └── ftp_loader.py # FTP/SFTP loading (via Paramiko)
├── orchestration/
│ └── tool_orchestrator.py # External tool coordination
├── reporting/
│ ├── forensic_report.py # Report generator with pluggable renderers
│ ├── sarif_exporter.py # SARIF v2.1.0 exporter
│ └── renderers/ # HTML, JSON, Markdown renderer plugins
├── sandbox/
│ └── isolation.py # Integrity checking utilities
└── tests/ # 321 pytest tests
```
## 输出格式
[](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html)
[](#output-formats)
[](#output-formats)
[](#output-formats)
| 格式 | 用例 |
|--------|----------|
| **HTML** | 人工审查 —— 暗色主题、交互式 |
| **JSON** | 机器消费、CI/CD 集成 |
| **Markdown** | 文档、Pull Request 评论 |
| **SARIF v2.1.0** | GitHub Code Scanning、SonarQube、DefectDojo、Azure DevOps |
SARIF 输出符合 [OASIS SARIF v2.1.0 规范](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html)。
## 依赖项和第三方致谢
[](#python-packages-installed-via-pip)
[](#system-tools-auto-downloaded-on-first-run)
[](#optional-tools-not-auto-installed)
REDACTS 依赖于以下开源工具和库。所有功劳归于其各自的作者和社区。
### Python 包(通过 pip 安装)
| 包 | 最低版本 | 许可证 | 用途 | 链接 |
|---------|-------------|---------|---------|-------|
| [chardet](https://github.com/chardet/chardet) | 5.0.0 | LGPL-2.1 | 字符编码检测 | [PyPI](https://pypi.org/project/chardet/) |
| [magika](https://github.com/google/magika) | 0.6.0 | Apache-2.0 | Google 提供的 AI 驱动文件类型分类 | [PyPI](https://pypi.org/project/magika/) |
| [paramiko](https://github.com/paramiko/paramiko) | 3.4.0 | LGPL-2.1 | 用于远程文件加载的 SSH/SFTP 传输 | [PyPI](https://pypi.org/project/paramiko/) |
| [requests](https://github.com/psf/requests) | 2.31.0 | Apache-2.0 | 用于加载器和下载的 HTTP 客户端 | [PyPI](https://pypi.org/project/requests/) |
| [py7zr](https://github.com/miurahr/py7zr) | 0.20.0 | LGPL-2.1+ | 7-Zip 存档解压 | [PyPI](https://pypi.org/project/py7zr/) |
| [rarfile](https://github.com/markokr/rarfile) | 4.1 | ISC | RAR 存档解压 | [PyPI](https://pypi.org/project/rarfile/) |
| [rich](https://github.com/Textualize/rich) | 13.0.0 | MIT | 终端格式化、进度条、表格 | [PyPI](https://pypi.org/project/rich/) |
| [PyYAML](https://github.com/yaml/pyyaml) | 6.0 | MIT | YAML 配置文件解析 | [PyPI](https://pypi.org/project/PyYAML/) |
| [tree-sitter](https://github.com/tree-sitter/py-tree-sitter) | 0.23.0 | MIT | 用于 AST 分析的增量解析系统 | [PyPI](https://pypi.org/project/tree-sitter/) |
| [tree-sitter-php](https://github.com/tree-sitter/tree-sitter-php) | 0.23.0 | MIT | 用于 tree-sitter 的 PHP 语法 | [PyPI](https://pypi.org/project/tree-sitter-php/) |
| [semgrep](https://github.com/semgrep/semgrep) | 1.0.0 | LGPL-2.1 | 用于 PHP 漏洞扫描的基于 AST 的静态分析 | [PyPI](https://pypi.org/project/semgrep/) · [semgrep.dev](https://semgrep.dev) |
### 系统工具(首次运行时自动下载)
| 工具 | 必需 | 许可证 | 用途 | 下载 |
|------|:--------:|---------|---------|----------|
| [Trivy](https://github.com/aquasecurity/trivy) | 是 | Apache-2.0 | 文件系统漏洞和机密扫描 | [GitHub Releases](https://github.com/aquasecurity/trivy/releases) · [trivy.dev](https://trivy.dev) |
| [YARA](https://github.com/VirusTotal/yara) | 是 | BSD-3-Clause | 基于模式的恶意软件签名匹配 | [GitHub Releases](https://github.com/VirusTotal/yara/releases) · [Docs](https://virustotal.github.io/yara/) |
REDACTS 在首次运行时将 Trivy 和 YARA 二进制文件自动下载到 `~/.redacts/tools/`。使用 `REDACTS_TOOLS_DIR` 环境变量进行覆盖。
### 可选工具(不自动安装)
| 工具 | 许可证 | 用途 | 安装 |
|------|---------|---------|---------|
| [Docker](https://www.docker.com) | Apache-2.0 | DAST 阶段的容器运行时 | [Get Docker](https://docs.docker.com/get-docker/) |
| [Docker Compose](https://docs.docker.com/compose/) | Apache-2.0 | DAST 的多容器编排 | [Install Compose](https://docs.docker.com/compose/install/) |
| [Node.js](https://nodejs.org) | MIT | DAST (Playwright) 和 Repomix 必需 | [Download]() |
| [Playwright](https://playwright.dev) | Apache-2.0 | 用于 DAST 测试的浏览器自动化 | `npm install` (在 `dast/` 中) |
| [Repomix](https://github.com/yamadashy/repomix) | MIT | 用于 LLM 分析的压缩代码库快照 | `npm install -g repomix` |
| [PHP CLI](https://www.php.net) | PHP License | PHP lint 语法检查(增强分析) | [Download](https://www.php.net/downloads) |
| [Lizard](https://github.com/terryyin/lizard) | MIT | 圈复杂度分析 | `pip install lizard` |
| [Radon](https://github.com/rubik/radon) | MIT | 可维护性指数指标 | `pip install radon` |
## 调查步骤
当 REDACTS 对修改/新增的文件集运行深度调查时,它会按顺序执行 7 个步骤:
| # | 步骤 | 作用 |
|---|------|-------------|
| 1 | IoC 扫描 | 将文件与 17 个已知的失陷指标 进行匹配 |
| 2 | 配置完整性 | 检查 `database.php`, `.htaccess`, `.user.ini`, `hook_functions.php` |
| 3 | 安全扫描 | 对每个文件应用 57 条 PHP 安全规则 |
| 4 | 敏感数据 | 检测 PHI、PII、凭据、API 密钥 |
| 5 | 外部工具 | 运行 Semgrep、Trivy、YARA、PHP lint、Lizard、Radon |
| 6 | 攻击向量 | 评估对 34 个已知攻击向量的暴露程度 |
| 7 | 风险计算 | 根据所有发现计算总体风险评分 |
## 安全规则
REDACTS 在 `forensics/security_rules.py` 中定义了 57 条安全规则:
| 范围 | 数量 | 严重程度 | 类别 |
|-------|:-----:|----------|----------|
| SEC001–SEC004 | 4 | CRITICAL | Eval 注入、exec、SQL 注入、硬编码凭据 |
| SEC010–SEC014 | 5 | HIGH | 动态函数调用、XSS、echo 输出、文件读/写 |
| SEC020–SEC023 | 4 | MEDIUM | LDAP 注入、XXE、SSRF、开放重定向 |
| SEC030–SEC031 | 2 | LOW | 弱加密、弱随机数生成 |
| SEC040–SEC041 | 2 | INFO | 通用后门签名 |
| SEC060–SEC069 | 10 | CRITICAL–MEDIUM | INFINITERED IoC、调试暴露、信息泄露 |
| SEC070–SEC079 | 10 | CRITICAL–HIGH | REDCap 变更日志披露的 CVE 模式 |
| SEC080–SEC099 | 20 | CRITICAL–MEDIUM | 持久化、配置篡改、供应链指标 |
## 许可证
Copyright 2024–2026 The Adimension / Shehab Anwer
根据 Apache License 2.0 版本授权。完整文本请参见 [LICENSE](LICENSE)。
## 联系方式
- **Email:** ·
- **GitHub:** [github.com/The-Adimension/REDACTS](https://github.com/The-Adimension/REDACTS)
标签:CISA项目, DNS 反向解析, HTTP工具, INFINITERED, MITM代理, Python, REDCap, SARIF, Web安全, 临床研究安全, 后门检测, 基线分析, 威胁扫描, 安全合规, 差异分析, 无后门, 特征检测, 篡改检测, 网络代理, 网络安全, 网络安全审计, 蓝队分析, 请求拦截, 逆向工具, 隐私保护