The-Adimension/REDACTS-legacy
GitHub: The-Adimension/REDACTS-legacy
针对 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(动态分析)** — 通过 Playwright 驱动的浏览器测试,对运行在 Docker 中的活跃 REDCap 实例进行测试。测试身份验证边界、升级完整性和导出安全性。_需要 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 hooks 不匹配 | 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 runtime 持久化"
**升级劫持** — 11 条规则(`UPG001`、`UPG002`、`UPG003`、`UPG010`、`UPG011`、`UPG020`、`UPG021`、`UPG030`、`UPG031`、`UPG040`、`UPG050`)检测升级脚本中的持久化注入、文件删除绕过、跳过逻辑、混淆和配置篡改。
**MITRE ATT&CK 映射** — 发现结果被映射到 8 种战术下的 20 个技术 ID,包括 T1505.003 (Web Shell)、T1195 (Supply Chain Compromise)、T1546 (Event Triggered Execution) 和 T1027 (Obfuscated Files)。
## 快速开始
### 系统要求
| 需求 | 版本 | 用途 | 下载 |
|-------------|---------|---------|----------|
| [Python](https://www.python.org/downloads/) | 3.11+ | 核心 runtime | [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 repository
git clone https://github.com/The-Adimension/REDACTS.git
cd REDACTS
# 创建 virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# 安装 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. 提示您输入要扫描的 **target** REDCap 文件(ZIP 的路径、目录、URL 或 FTP 地址)
5. 提示您输入 **reference** 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 阶段的容器 runtime | [Get Docker](https://docs.docker.com/get-docker/) |
| [Docker Composehttps://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](https://nodejs.org/en/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, Version 2.0 授权。完整文本请参见 [LICENSE](LICENSE)。
## 联系方式
- **Email:** ·
- **GitHub:** [github.com/The-Adimension/REDACTS](https://github.com/The-Adimension/REDACTS)
标签:CISA项目, Cloudflare, DNS 反向解析, INFINITERED, MITM代理, MITRE ATT&CK, Python, REDCap, SARIF, 临床研究安全, 代码安全, 后门检测, 基线差异分析, 安全扫描, 数字取证, 无后门, 无线安全, 时序注入, 漏洞枚举, 特征检测, 篡改检测, 网络安全审计, 聊天机器人, 自动化脚本, 请求拦截, 逆向工具