Krixx1337/burner-net
GitHub: Krixx1337/burner-net
BurnerNet 是一个 C++20 反取证网络引擎,通过内存物理擦除、调用栈隔离和轻量级导入等技术,在不可信主机环境中为敏感网络通信提供对抗调试器和内存扫描的隐蔽传输能力。
Stars: 14 | Forks: 0
# BurnerNet
**零信任反取证网络库。擦除秘密。切断踪迹。隐身坦克中的 CPR。👻**
BurnerNet 是一个基于 C++20 的**反取证网络引擎**。它为无法完全信任本地机器的应用程序提供了流畅的、类 CPR 的 API——可从物理内存中擦除秘密,并切断执行踪迹,从而向扫描器和调试器隐藏您的逻辑。
它倾向于短期客户端、显式信任控制、轻导入运行时选项,以及由应用主导的验证,而非以便利性为先的默认设置。
想要保护 BurnerNet 下载的 payload?请查看 [RipStop Codec](https://github.com/Krixx1337/ripstop-codec) 以了解内存中资产的去混淆(解扰)方案。
[原则](PRINCIPLES.md) • [快速开始](#getting-started) • [集成路径](#integration-paths) • [安全现实](#security-reality)
## 概览
| 领域 | BurnerNet |
| :--- | :--- |
| **语言** | C++20 |
| **平台** | Windows x64/x86 (**一等支持**),Linux (已验证) |
| **传输** | 基于 `libcurl` 的 HTTP(S) |
| **内存清理** | 安全擦除工具和擦除分配器 |
| **取证清理** | **完全熄灯。** 对 100% 的传输数据进行自动化的堆/栈擦洗。 |
| **动态分析** | **追踪免疫。** 调用栈隔离切断了消费者与传输层之间的联系。 |
| **构建加固** | 加固的错误字符串,混淆字面量,在加固构建中减少 C++ 运行时元数据 |
| **运行时加固** | 支持 DoH、基于 Provider 的秘密以及更严格的信任控制 |
| **集成方式** | CMake 或 Visual Studio 源码引入 |
## 为什么使用它
当普通的 HTTP 客户端对您的环境来说过于轻信时,请使用 BurnerNet。
它在以下情况下非常有用:
- 保持请求客户端短暂生命周期,而不是共享一个全局传输对象
- 减少对本地 DNS 和其他主机默认设置的依赖
- 仅在需要时获取 token、证书和验证秘密
- 将响应验证逻辑保留在您自己的应用程序代码中
- 在加固构建中减少明显的明文字符串和元数据
## 适用人群
BurnerNet 适用于以下项目:
- 具有高价值认证、许可或更新请求的 Windows 桌面应用程序
- 在您不完全信任的主机中运行的嵌入式或注入代码
- 既想要更严格的传输检查,又不想放弃流畅 C++ API 的工具
## 标准技术栈 vs BurnerNet
| 关注点 | 典型 HTTP 技术栈 | BurnerNet |
| :--- | :--- | :--- |
| **客户端生命周期** | 通常共享且长期存活 | 专为一次性客户端和突发作用域使用而设计 |
| **敏感值** | 秘密通常在配置或内存中停留过久 | Provider 回调在使用时临近获取 |
| **DNS 和信任** | 通常继承本地解析器和主机默认设置 | 支持更严格的信任控制,包括 DoH 回退和公钥锁定 |
| **验证** | 应用特定的完整性检查通常是后期补加的 | 设计用于配合预检、传输和响应验证钩子工作 |
## 防御效果
- **零幽灵内存架构**:BurnerNet 使用自定义的**前缀-大小擦洗器** 来劫持 `libcurl` 和 `OpenSSL` 的内部内存分配。URL、HTTP 头和 TLS 会话密钥的每一个字节在不再需要的那一刻都会被零覆盖。**这种清理机制已在 Windows 和 Linux 上得到验证。**
- **栈帧擦除**:每次请求后,库会主动擦洗其自身的线程栈(高水位线擦洗)。这确保了在 TLS 握手期间使用的短暂加密片段在控制权返回您的应用程序之前被物理销毁。
- **移动目标堆**:一次性传输对象和对齐元数据头的结合创造了高地址空间分散性,使得进程内存不可预测且抵抗稳定的指针映射。
- **短寿命请求状态**:BurnerNet 围绕一次性客户端而非进程级单例传输对象进行设计。
- **减少对主机的信任**:DoH 支持、公钥锁定支持和传输审计有助于减少对受损本地默认设置的依赖。
- **更低的明文暴露**:Provider 回调和安全擦除工具减少了证书、密钥、token 和其他敏感缓冲区的生命周期。
- **应用主导的验证**:响应验证通过 `WithResponseVerifier(...)` 保留在您的代码中,而不是硬编码在共享库中。
- **更难的静态指纹识别**:发布版本自动加固 `ErrorCodeToString(...)`,并且编译时字面量混淆开箱即用。
- **轻导入部署选项**:`BURNERNET_HARDEN_IMPORTS=1` 可以动态解析运行时依赖,而不是直接在导入表中通告它们,使用 BurnerNet 在 Windows 上的 `KernelResolver` 路径。
- **调用栈隔离(异步交接)**:当通过 `.WithStackIsolation(true)` 启用时,库在分离的匿名工作线程上执行整个传输生命周期。这在物理上切断了调用者的调用栈。即使攻击者在网络核心处下断点,调试器的“调用栈”窗口也只会指向一个通用的线程调度器——完全隐藏您的应用程序业务逻辑不被发现。
## 已验证的隐身能力
BurnerNet 不仅仅声称具有轻导入加固模式;它交付了**已验证的取证熄灯效果**。在开启 `BURNERNET_HARDEN_IMPORTS=ON` 的 Windows x64 Release 审计中:
- **IAT 熄灯**:`libcurl.dll`、`ws2_32.dll`、`bcrypt.dll` 或 `crypt32.dll` 的条目数为零。
- **内存熄灯**:取证扫描(Cheat Engine "All Strings")未能在进程堆或栈中发现敏感的哨兵 URL 或标头。
- **调试器致盲**:集成测试验证了该库触发“身份转移”。决策者(您的应用)和传输者运行在不同的线程 ID 上,防止了实时调试期间的自顶向下追踪。
- **信噪比**:该库在其擦除权限范围内实现了完全的取证清理,仅在内核中留下系统级的“阴影”。
审计细节和方法论:
- [docs/BINARY_STEALTH_AUDIT.md](docs/BINARY_STEALTH_AUDIT.md)
## 快速开始
最快路径:
- 使用 CMake 或 Visual Studio 源码引入将 BurnerNet 添加到您的构建中。
- 构建一个客户端。
- 发送请求。
- 一旦请求流程完成,立即销毁客户端。
最小示例:
```
#include
#include "burner/net/builder.h"
#include "burner/net/error.h"
int main() {
auto build_result = burner::net::ClientBuilder()
.WithUseNativeCa(true)
.Build();
if (!build_result.Ok()) {
std::cerr << burner::net::ErrorCodeToString(build_result.error) << '\n';
return 1;
}
const auto response = build_result.client
->Get("https://example.com")
.WithHeader("Accept", "text/html")
.WithTimeoutSeconds(10)
.Send();
if (!response.TransportOk()) {
std::cerr << burner::net::ErrorCodeToString(response.transport_error) << '\n';
return 1;
}
std::cout << "HTTP " << response.status_code << '\n';
return 0;
}
```
对于低信任度的实用流量,BurnerNet 还提供了一个便捷预设:
```
auto utility = burner::net::ClientBuilder()
.WithCasualDefaults()
.Build();
```
切断应用程序与传输层之间的调用栈(栈隔离):
```
auto build_result = burner::net::ClientBuilder()
.WithUseNativeCa(true)
.WithStackIsolation(true) // Sever the call stack from the consumer
.Build();
```
## 集成路径
### 1. 标准 CMake
当您的下游项目已经使用 CMake 且您想要最干净的依赖管理路径时,请使用此方式。
文档:
- [docs/CMAKE_INTEGRATION.md](docs/CMAKE_INTEGRATION.md)
- [examples/cmake-consumer/README.md](examples/cmake-consumer/README.md)
### 2. Visual Studio 源码引入
当您的环境是 MSBuild 优先,或者您希望 BurnerNet 直接在您的 `.vcxproj` 内部编译时,请使用此方式。
文档:
- [docs/VISUAL_STUDIO_INTEGRATION.md](docs/VISUAL_STUDIO_INTEGRATION.md)
- [examples/vs-consumer/README.md](examples/vs-consumer/README.md)
### 3. 加固运行时导入
当您希望减少明显的运行时依赖暴露,并准备好显式管理引导加载时,请使用此方式。
启用:
- `BURNERNET_HARDEN_IMPORTS=1`
- 在 Windows 上使用 BurnerNet 的 `KernelResolver` 路径,以支持更轻导入的运行时足迹
参考:
- [docs/USAGE_BEST_PRACTICES.md](docs/USAGE_BEST_PRACTICES.md)
- [docs/CMAKE_INTEGRATION.md](docs/CMAKE_INTEGRATION.md)
- [docs/VISUAL_STUDIO_INTEGRATION.md](docs/VISUAL_STUDIO_INTEGRATION.md)
## 使用说明
推荐默认设置:
- 将客户端视为一次性传输对象
- 将高信任度和低信任度流量分离到不同的客户端
- 为 mTLS 材料、bearer token 和响应验证秘密使用 Provider 回调
- 将业务规则和信任锚保留在您的应用程序中
## 示例与文档
示例:
- [examples/01_basic_usage.cpp](examples/01_basic_usage.cpp)
- [examples/02_zero_trust_pipeline.cpp](examples/02_zero_trust_pipeline.cpp)
- [examples/03_custom_security_policy.cpp](examples/03_custom_security_policy.cpp)
- [examples/04_bootstrap_runtime.cpp](examples/04_bootstrap_runtime.cpp)
- [examples/05_mtls_usage.cpp](examples/05_mtls_usage.cpp)
- [examples/06_hmac_custom_verifier.cpp](examples/06_hmac_custom_verifier.cpp)
文档:
- [PRINCIPLES.md](PRINCIPLES.md)
- [docs/USAGE_BEST_PRACTICES.md](docs/USAGE_BEST_PRACTICES.md)
- [docs/CMAKE_INTEGRATION.md](docs/CMAKE_INTEGRATION.md)
- [docs/VISUAL_STUDIO_INTEGRATION.md](docs/VISUAL_STUDIO_INTEGRATION.md)
- [docs/LINUX_USAGE.md](docs/LINUX_USAGE.md)
## 环境要求
- C++20
- Windows x64/x86 或 Linux (GCC 13+ / Clang 15+)
- `libcurl` 和 `OpenSSL` 头文件
- **Linux 指南:** 参见 [docs/LINUX_USAGE.md](docs/LINUX_USAGE.md)
## 安全现实与白盒防御
BurnerNet 是一个旨在将攻击成本提高到专业级别的加固层。我们遵循**隐身应当是架构性的,而不仅仅是表面功夫**这一原则。
**如果攻击者拥有源代码,他们能绕过 BurnerNet 吗?**
不能。BurnerNet 遵循柯克霍夫原则:即使攻击者在第二块屏幕上拥有完整的源代码,该库也被设计为安全的。因为您的特定信任锚(HMAC 秘密、公钥锁定、UI 逻辑)是由您的应用程序注入的,且二进制文件在编译时进行了随机化,所以对库的了解并不会导致针对您特定安全流程的“通用绕过”。
- **隐身即延迟:** 加固迫使攻击者放弃标准的便利工具,转而进行繁琐的指令级分析。
- **数据为根:** 使用**功能依赖**(原则 6)来确保如果没有服务器提供的数据,您的应用程序实际上无法运行。
- **幽灵优势:** 当攻击者发现您的请求逻辑时,**栈隔离**和**内存擦除**早已销毁了他们所需的取证证据。
C++20 • Windows x64/x86 • MIT
标签:Bash脚本, C++, C++20, Conpot, DNS-over-HTTPS, DNS 反向解析, Golang, HTTPS客户端, libcurl, Linux开发, Windows安全, 代码混淆, 内存安全, 动态分析防御, 反取证, 堆栈清洗, 安全测试工具, 安全编程, 安全评估, 数据擦除, 网络安全, 网络引擎, 规避技术, 调试器检测, 运行时加固, 隐匿行动, 隐私保护, 隐藏踪迹, 零信任网络