The-Adimension/REDACTS

GitHub: The-Adimension/REDACTS

一款专为 REDCap 平台设计的取证安全扫描器,通过基线差异分析检测文件篡改、后门和 INFINITERED 恶意软件活动。

Stars: 2 | Forks: 0

## 免责声明 # REDACTS | **REDCap 任意代码威胁扫描** [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white)](https://www.python.org/downloads/) [![Version](https://img.shields.io/badge/Version-2.0.0-green.svg)](CHANGELOG.md) [![Tests](https://img.shields.io/badge/Tests-321_passing-brightgreen?logo=pytest&logoColor=white)](tests/) [![SARIF](https://img.shields.io/badge/SARIF-v2.1.0-orange?logo=github&logoColor=white)](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) [![MITRE ATT&CK](https://img.shields.io/badge/MITRE_ATT%26CK-20_Techniques-red?logo=shield&logoColor=white)](https://attack.mitre.org/) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey)](#quick-start) [![Security Rules](https://img.shields.io/badge/Security_Rules-57-critical)](#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](https://img.shields.io/badge/INFINITERED-Active_Threat-red?logo=bitwarden&logoColor=white)](#infinitered-detection) [![IoCs](https://img.shields.io/badge/IoCs-17_Indicators-orange)](#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 ``` ## 输出格式 [![SARIF v2.1.0](https://img.shields.io/badge/SARIF-v2.1.0-orange?logo=github&logoColor=white)](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) [![HTML](https://img.shields.io/badge/HTML-Report-E34F26?logo=html5&logoColor=white)](#output-formats) [![JSON](https://img.shields.io/badge/JSON-Report-000000?logo=json&logoColor=white)](#output-formats) [![Markdown](https://img.shields.io/badge/Markdown-Report-083fa1?logo=markdown&logoColor=white)](#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)。 ## 依赖项和第三方致谢 [![Dependencies](https://img.shields.io/badge/Dependencies-11_Packages-blue?logo=pypi&logoColor=white)](#python-packages-installed-via-pip) [![System Tools](https://img.shields.io/badge/System_Tools-2_Required-yellow)](#system-tools-auto-downloaded-on-first-run) [![Optional Tools](https://img.shields.io/badge/Optional_Tools-8_Available-lightgrey)](#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安全, 临床研究安全, 后门检测, 基线分析, 威胁扫描, 安全合规, 差异分析, 无后门, 特征检测, 篡改检测, 网络代理, 网络安全, 网络安全审计, 蓝队分析, 请求拦截, 逆向工具, 隐私保护