JVBotelho/RASP.Net

GitHub: JVBotelho/RASP.Net

一款针对 .NET 10 高吞吐量应用设计的超低延迟 RASP 安全引擎,通过零分配架构在进程内实时检测并拦截各类注入攻击。

Stars: 9 | Forks: 0

# 🛡️ RASP.Net ![.NET 10](https://img.shields.io/badge/.NET%2010-512BD4?style=for-the-badge&logo=dotnet&logoColor=white) ![Security](https://img.shields.io/badge/Security-RASP-red?style=for-the-badge&logo=shield&logoColor=white) ![Architecture](https://img.shields.io/badge/Architecture-Composite-blue?style=for-the-badge) ![Build](https://img.shields.io/github/actions/workflow/status/JVBotelho/RASP.Net/build.yml?style=for-the-badge) ![Coverage](https://img.shields.io/codecov/c/github/JVBotelho/RASP.Net?style=for-the-badge) [![威胁模型](https://img.shields.io/badge/📄_Threat_Model-Read-orange?style=for-the-badge)](docs/ATTACK_SCENARIOS.md) [![逆向工程](https://img.shields.io/badge/🕵️_Anti--Debug-Research-blueviolet?style=for-the-badge)](docs/REVERSE_ENGINEERING.md) ## 🎮 为什么这对游戏安全至关重要 **问题所在**:多人游戏服务每秒处理**数百万笔事务**。传统的 WAF 会引入网络延迟,且无法深入加密的 gRPC payload 内部或理解游戏逻辑上下文。 **解决方案**:RASP.Net 在游戏服务器进程内部充当**最后一道防线**。它对 runtime 进行插桩,以检测绕过边界防御的攻击——例如检测物品复制漏洞或经济操纵等逻辑缺陷。 **核心工程目标:** 1. **零 GC 压力**:安全检查绝对不能触发会导致掉帧/卡顿的 Garbage Collection 暂停 2. **亚微秒级延迟**:检查在纳秒级别完成,而非毫秒 3. **纵深防御**:通过保护后端 API 层,补充内核级的 Anti-Cheat (BattlEye/EAC) ## ⚡ 性能基准测试 ### 边界扫描:Source Generator vs. Reflection **测试方法:** 使用 `BenchmarkDotNet` 对比 Source Generator(编译时)与 Reflection(runtime)插桩。 **硬件:** AMD Ryzen 7 7800X3D | **Runtime:** .NET 10.0.2 (RyuJIT AVX-512) | 方法 | 场景 | 平均值 | 分配内存 | 加速比 | |:-------|:---------|-----:|----------:|:-------:| | **Source Generator** | ✅ 正常扫描 | **108.9 ns** | 136 B | **快 10.3 倍** 🚀 | | Reflection | ✅ 正常扫描 | 1,120.0 ns | 136 B | *基准线* | | **Source Generator** | 🛡️ 拦截攻击 | **4,090 ns** | 1,912 B | **快 1.04 倍** | | Reflection | 🛡️ 拦截攻击 | 4,260 ns | 1,552 B | *基准线* | ### 持续负载下的 Sink 开销 (开启 vs. 关闭 RASP) **测试方法:** 使用真实的 Kestrel 宿主、真实的后端(通过 Testcontainers 连接的 Postgres、真实子进程、真实的出站 HTTP),25 个并发 worker 对每个 endpoint 持续请求 20 秒。这不是孤立的合成 `Inspect()` 调用——而是在完整接入或完全不使用该 sink 的情况下的 p50/p99 请求延迟。完整测试方法及各项防护的微基准测试见 [ADR 006](docs/ADR/006-sink-instrumentation-strategy.md#measured-end-to-end-latency-under-sustained-load-2026-07-02)。 | Sink | 关闭 RASP (p50 / p99) | 开启 RASP (p50 / p99) | 结论 | |:-----|----------------------:|----------------------:|:--------| | 路径遍历 (`FileStream`) | 851 µs / 1349 µs | 858 µs / 1404 µs | 与噪音无异 | | 命令注入 (`Process.Start`) | 60.76 ms / 108.22 ms | 61.50 ms / 104.59 ms | 与噪音无异 | | SQL (EF Core → Postgres) | 7.76 ms / 16.97 ms | 7.50 ms / 16.50 ms | 与噪音无异 | | SSRF (`HttpClient`) | 299 µs / 756 µs | 306 µs / 914 µs | 与噪音无异 | ## 🛡️ 安全分析与威胁建模 专业级的安全文档展示 **Purple Team** 能力。 | 文档 | 描述 | |:---------|:------------| | 📄 [威胁模型与攻击场景](docs/ATTACK_SCENARIOS.md) | STRIDE 分析:gRPC SQL 注入、Protobuf 篡改、GC 压力 DoS | | 🕵️ [逆向工程与防篡改](docs/REVERSE_ENGINEERING.md) | Native C++ 保护:`IsDebuggerPresent`、PEB 操纵、时序检查 | ## 🏗️ 架构 本仓库采用**复合架构策略**——通过在不污染源代码的情况下,对真实的“受害”应用程序进行插桩,从而开发和验证该 Security SDK。 ``` RASP.Net/ ├── src/ # 🛡️ RASP SDK (Defense) │ ├── Rasp.Core/ # Detection engines & telemetry │ ├── Rasp.SourceGenerators/ # Roslyn code generation │ ├── Rasp.Instrumentation.Grpc/ # gRPC interceptors │ └── Rasp.Bootstrapper/ # DI extensions (AddRasp()) ├── modules/ # 🎯 Victim App (Target) │ └── dotnet-grpc-library-api/ # Git submodule - Clean Architecture sample ├── attack/ # ⚔️ Red Team Tools │ ├── exploit_xss.py # XSS attack suite │ └── exploit_grpc.py # SQLi attack suite └── scripts/ # Automation scripts ``` ## 🛡️ 工作原理 ``` sequenceDiagram participant Attacker participant gRPC as gRPC Gateway participant RASP as 🛡️ RASP.Net participant GameAPI as Game Service participant DB as Database Note over Attacker,RASP: 🔴 Attack Scenario Attacker->>gRPC: POST /inventory/add {item: "Sword' OR 1=1"} gRPC->>RASP: Intercept Request activate RASP RASP->>RASP: ⚡ Zero-Alloc Inspection RASP-->>Attacker: ❌ 403 Forbidden (Threat Detected) deactivate RASP Note over Attacker,DB: 🟢 Legitimate Scenario Attacker->>gRPC: POST /inventory/add {item: "Legendary Sword"} gRPC->>RASP: Intercept Request activate RASP RASP->>GameAPI: ✅ Clean - Forward Request deactivate RASP GameAPI->>DB: INSERT INTO inventory... DB-->>GameAPI: Success GameAPI-->>Attacker: 200 OK ``` ## 🚀 快速开始 ### 1. 使用 Submodule 克隆 ``` git clone --recursive https://github.com/JVBotelho/RASP.Net.git cd RASP.Net # 如果已经在没有 --recursive 的情况下进行了 clone: git submodule update --init --recursive ``` ### 2. 构建与运行 ``` # 选项 A:使用自动化 setup script ./scripts/pack-local.ps1 # Windows ./scripts/pack-local.sh # Linux/macOS # 选项 B:直接 build dotnet build Rasp.sln ``` ### 3. 运行受害应用 ``` cd modules/dotnet-grpc-library-api dotnet run --project LibrarySystem.Grpc ``` ## ⚔️ 安全测试 (Red Team) ### 前置条件 ``` pip install grpcio grpcio-tools ``` ### 生成攻击 Proto ``` # Windows python -m grpc_tools.protoc ` -I ./modules/dotnet-grpc-library-api/LibrarySystem.Contracts/Protos ` --python_out=./attack --grpc_python_out=./attack ` ./modules/dotnet-grpc-library-api/LibrarySystem.Contracts/Protos/library.proto ``` ``` # Linux/macOS python3 -m grpc_tools.protoc \ -I ./modules/dotnet-grpc-library-api/LibrarySystem.Contracts/Protos \ --python_out=./attack --grpc_python_out=./attack \ ./modules/dotnet-grpc-library-api/LibrarySystem.Contracts/Protos/library.proto ``` ### 运行漏洞利用套件 ``` # Target app 必须在 localhost:5049 上运行 python attack/exploit_xss.py localhost:5049 python attack/exploit_grpc.py localhost:5049 ``` **预期输出:** ``` 📊 XSS Security Report ======================================== Attacks Blocked: ✅ 7 Bypasses Found: ❌ 0 False Positives: ✅ 0 ``` ## 🔧 故障排除 | 问题 | 解决方案 | |:--------|:---------| | `Submodule not found` | 运行 `git submodule update --init --recursive` | | `Namespace 'Rasp' not found` | 打开 `Rasp.sln`,而不是单独的 `.csproj` 文件 | | `gRPC UNAVAILABLE` | 检查目标端口是否匹配(默认:`localhost:5049`) | | `Proto files not found` | 运行 `pip install --upgrade grpcio-tools` | ## 🎯 路线图 按项目目标排序:为 .NET 生态系统提供一个生产级的开源 RASP,提交给 OWASP(从 Incubator 到 Lab),并在包发布并获得社区关注后,最终 提交给 .NET Foundation。落地基础设施(阶段 1–2)刻意安排在新的检测 功能(阶段 3)之前:一个没人能通过 `dotnet add package` 安装的安全产品仅仅是一个代码仓库,而不是一个产品。 ### ✅ 已交付 — 基础架构 - [x] 复合解决方案设置与漏洞注入 - [x] 带有 XSS/SQLi 检测的 gRPC Interceptor - [x] 实现零配置集成的 Source Generator - [x] 带有 SQL 分析的 EF Core Interceptor - [x] Native 防篡改层([ADR 003](docs/ADR/003-native-integrity-guard.md) — Windows 已发布,Linux 计划中) - [x] 以 Sink 为中心的防护转向:SQL / SSRF / 路径遍历 / 命令注入 / 反序列化防护 ([ADR 006](docs/ADR/006-sink-instrumentation-strategy.md) Phases A & B) - [x] CLR Profiler + 污点追踪([ADR 006](docs/ADR/006-sink-instrumentation-strategy.md) Phase C — v1 范围:`String.Concat(string, string)` 传递) - [x] 环境执行上下文:关联 source 到 sink 的告警([ADR 007](docs/ADR/007-execution-context.md)) ### 📦 阶段 1 — 将其作为产品发布 (NuGet) 待 ADRs 006/007 最终确定并合并后开始。 - [ ] **托管 SDK 的 NuGet 包**。跨平台、受支持的 API 核心 (ADR 006 Phase A 防护 + ADR 007 上下文层)将成为可安装的产品; MonoMod runtime 修补 (Phase B) 仍保持可选;CLR profiler (Phase C) 将单独 作为仅限 Windows 的高级预览版发布。 - [ ] **多目标 `net8.0;net10.0`** 以便两个受支持的 LTS 版本都能采用。 - [ ] **SemVer + 发布流水线** — 版本化、签名的包(CI 签名钩子已 接通;详见 [ADR 006](docs/ADR/006-sink-instrumentation-strategy.md) 附录第 5 点)。 ### 🌐 阶段 2 — 提交至 OWASP Incubator 提交前: - [ ] 社区基础:`CODE_OF_CONDUCT.md`、Issue 模板、`GOVERNANCE.md`、 `good-first-issue` 积压任务(污点传递目标是理想的入门 Issue)。 - [ ] 隔离并清晰标记故意设为易受攻击的演示目标 (`modules/`),以便其 已知存在漏洞的包永远不会被误认为是产品依赖项。 - [ ] **招募第二位项目负责人** — 当前的 OWASP 政策要求有多名负责人 (不能全来自同一雇主),因此这将直接决定申请能否进行。 - [ ] 启动 [OSSF Best Practices](https://www.bestpractices.dev/) 自我认证 — 这是晋升 Lab 的标准之一,尽早开始成本很低。 - [ ] 提前起草 OWASP 项目页面的内容(`index.md`、描述、路线图) — `www-project-rasp-net` 仓库本身由 OWASP Foundation 在 `github.com/OWASP` 下**仅在**获批后开通;准备好内容意味着页面可以 立即上线,而不是空置在那里。 - [ ] 作为 [OWASP Incubator 项目](https://owasp.org/projects/)提交 — MIT 许可证、 供应商中立性、[威胁模型](docs/ATTACK_SCENARIOS.md)和 [SECURITY.md](SECURITY.md) 已经满足了入门门槛。 获批后: - [ ] 将此仓库转移至 `github.com/OWASP`(GitHub 会保留 stars/issues/历史记录并 重定向旧 URL),重新创建 Actions 密钥,重新指向徽章和 Codecov。 - [ ] 使用起草好的页面内容填充 `www-project-rasp-net` 并保持更新 — 陈旧的项目页面是导致 OWASP 项目被标记为不活跃的原因。 ### 🛡️ 阶段 3 — 覆盖 [OWASP Top 10 (2025)](https://owasp.org/Top10/2025/) (功能轨道) 一旦产品可供安装,这便是主要的功能轨道 — 补齐下方 ⬜ 的项目是推动 Incubator 晋级 Lab 的动力。 基于 sink 的 RASP 非常适合注入/完整性/异常处理类的范畴, 而对于那些本质上属于访问控制策略、密码学或供应链的类别则不太适合 ——这种映射保持务实而不盲目凑数。请注意,2025 版将 SSRF (CWE-918) 合并到了 **A01 Broken Access Control** 中,而不是将其作为一个单独的类别,同时增加了 **A10 Mishandling of Exceptional Conditions**,这比 2021 版的 A04/A09 更适合推迟的 Lean Sentinel 工作: | 类别 | 覆盖范围 | 机制 | |:---|:---|:---| | **A01 Broken Access Control** (SSRF — CWE-918, 路径遍历) | ✅ 完成 | `SsrfGuard`(防 DNS-rebinding 的 `HttpClient` 处理程序,[ADR 006](docs/ADR/006-sink-instrumentation-strategy.md)),`PathTraversalGuard` (MonoMod)。A01 的其余部分 — IDOR、JWT/session 处理、CORS — 属于访问控制*策略*,而不是 RASP 可以验证的 sink。 | | **A02 Security Misconfiguration** (Headers) | ✅ 完成 | `RaspSecurityHeadersMiddleware` (CSP 等) | | **A02 / A05 XXE** (`XmlReader` / `XmlDocument.Load`) | ⬜ 计划中 | 禁用 DTD/外部实体的策略防护 (MonoMod) | | **A05 Injection** (SQLi, XSS, Command Injection) | ✅ 完成 | `SqlSinkGuard`、源生成的 XSS/SQLi 扫描、`CommandInjectionGuard` (MonoMod) | | **A05 Injection** (LDAP Injection — `DirectorySearcher`) | ⬜ 计划中 | 新的 `LdapInjectionDetectionEngine` (MonoMod) | | **A08 Software or Data Integrity Failures** (不安全的反序列化) | ✅ 完成 | `DeserializationGuard` + `System.Text.Json` type-info modifier | | **A09 Security Logging & Alerting Failures** | ✅ 完成 | `RaspAlertBus`、关联的结构化告警 ([ADR 007](docs/ADR/007-execution-context.md))、审计模式、指标 | | **A10 Mishandling of Exceptional Conditions** (错误消息/堆栈跟踪泄露系统细节) | ⬜ 推迟 | Lean Sentinel ([ADR 004](docs/ADR/004-memory-disclosure-protection.md) — 已采纳,推迟实施) | A03 (Software Supply Chain), A04 (Cryptographic Failures), A06 (Insecure Design), A07 (Authentication Failures) | 超出范围 | 依赖项/CI-CD 完整性、密码学、架构级设计审查和身份验证属于与基于 sink 的 RASP 不同的工具类别;在此特意不作尝试。 | ### 🔭 阶段 4 — 深度、平台覆盖范围、基金会 - [ ] **拓宽污点传递**,超越 `String.Concat(string, string)`:支持 `string.Format`、 插值降低、`Substring`、`StringBuilder` — [ADR 006](docs/ADR/006-sink-instrumentation-strategy.md) 将其记录为 v1 版本可接受的局限性。 - [ ] **Native 测试工具 + Linux profiler 移植** — IL 重写器目前仅有冒烟 测试,且 profiler 构建仅限 Windows(`profiler_pal.h` 中已存在非 Windows 的 PAL 脚手架)。大部分 ASP.NET Core 生产环境运行在 Linux 上;这就是能移除 Phase C 中“仅限 Windows 的高级预览版”标签的关键。 - [ ] **Linux native 完整性对齐**(基于 eBPF 的监控,[ADR 003](docs/ADR/003-native-integrity-guard.md))。 - [ ] **申请加入 .NET Foundation** — 一旦包已发布、存在采用信号,且 维护者巴士因子大于一。基金会充当成熟度印章,而非发布 杠杆;按照它自己的准入标准,在此之前申请是为时过早的。 ## 📚 参考资料 - [OWASP RASP](https://owasp.org/www-community/controls/Runtime_Application_Self_Protection) - [.NET Source Generators](https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview) - [gRPC Interceptors](https://learn.microsoft.com/en-us/aspnet/core/grpc/interceptors) - [.NET 中的 SIMD](https://learn.microsoft.com/en-us/dotnet/standard/simd) ## 📜 许可证 **MIT 许可证** - 免费开源。完整条款请参见 [LICENSE](LICENSE)。 🔐 发现安全问题?请查阅 [SECURITY.md](SECURITY.md) 进行负责任的漏洞披露。 **⚡ 由 .NET 10 构建 | 基于 Clean Architecture 驱动**
标签:Go语言工具, Python工具, RASP, XSS注入, 反作弊, 运行时防护, 逆向工具, 配置错误