
burner-net v1.3.0
零信任反取证HTTP客户端。清除机密。切断痕迹。隐形坦克中的CPR。👻
BurnerNet
零信任、反取证HTTP客户端。清除秘密。切断痕迹。隐形坦克中的CPR。👻
BurnerNet 是一个 C++20 反取证 HTTP 客户端。它提供一个流畅的、类似CPR的API,适用于不能完全信任本地机器的应用程序——从RAM中物理擦除秘密,并切断执行痕迹,以隐藏你的逻辑不被扫描器和调试器发现。
它为普通HTTP提供熟悉的主机兼容默认设置,并为敌对环境提供明确的强化配置文件。两种路径都偏爱短生命周期的客户端;高级信任由应用程序自行掌握。
正在寻找保护由BurnerNet下载的负载的方法?请查看 RipStop Codec 以进行内存中的资产解扰。
概览
| 领域 | BurnerNet |
|---|---|
| 语言 | C++20 |
| 平台 | Windows x64/x86(一级支持),Linux(已验证) |
| 传输层 | 基于 libcurl 的 HTTP(S) |
| 内存卫生 | 安全擦除工具和擦除分配器 |
| 取证卫生 | 自动堆/栈清理,覆盖 BurnerNet 管理的传输状态 |
| 动态分析 | 调用栈隔离可以切断消费者与传输层之间的链接 |
| 构建加固 | 可选的诊断字符串移除、混淆字面量、在加固构建中减少 C++ 运行时元数据 |
| 运行时加固 | DoH 支持、基于提供者的密钥、更严格的信任控制 |
| 集成方式 | CMake 或 Visual Studio 源码植入 |
为什么使用它
当普通 HTTP 客户端对你的环境来说过于信任时,请使用 BurnerNet。
当你希望:
- 使请求客户端短生命周期,而不是共享一个全局传输层
- 减少对本地 DNS 和其他主机默认设置的依赖
- 仅在需要时获取令牌、证书和验证密钥
- 在应用程序代码中保持响应验证逻辑
- 在加固构建中减少明显的明文字符串和元数据
它将有所帮助。
适用对象
BurnerNet 适用于以下项目:
- 具有高价值认证、许可或更新请求的 Windows 桌面应用
- 在你不完全信任的主机上运行的嵌入式或注入代码
- 希望在不放弃流畅 C++ API 的情况下进行更严格传输检查的工具
标准栈与 BurnerNet 对比
| 关注点 | 典型 HTTP 栈 | BurnerNet |
|---|---|---|
| 客户端生命周期 | 通常共享且长生命周期 | 设计为可丢弃的客户端和爆发式使用 |
| 敏感值 | 秘密往往在配置或内存中停留超过所需时间 | 提供者回调在接近使用时获取它们 |
| DNS 和信任 | 通常继承本地解析器和主机默认设置 | 支持更严格的信任控制,包括 DoH 回退和固定密钥 |
| 验证 | 特定应用的完整性检查通常事后附加 | 设计为与预检、传输和响应验证钩子一起工作 |
防御成果
- 零幽灵内存架构:BurnerNet 使用自定义的前缀大小擦除器来挂钩
libcurl和 OpenSSL 支持流的内部内存分配路径。敏感的传输缓冲区在离开 BurnerNet 管理生命周期时被擦除。在文档所述的审计配置中,此卫生措施已在 Windows 和 Linux 上得到验证。 - 栈帧清刷:每次请求后,库会主动擦除其自身的线程栈(高水位标记擦除)。这旨在在控制权返回给应用程序之前销毁短暂的传输片段。
- 移动目标堆:可丢弃的传输与对齐的元数据头相结合,产生较高的地址空间分散性,使进程内存不可预测,并能抵抗稳定的指针映射。
- 短生命周期请求状态:BurnerNet 围绕可丢弃的客户端设计,而不是进程范围内的单例传输。
- 减少对主机的信任:DoH 支持、固定密钥支持和传输审计有助于减少对可能受损的本地默认设置的依赖。
- 降低明文暴露:提供者回调和安全擦除工具减少了证书、密钥、令牌和其他敏感缓冲区的生命周期。
- 应用程序拥有的验证:通过
WithResponseVerifier(...)将响应验证保留在你的代码中,而不是硬编码到共享库中。 - 更难的静态指纹识别:加固构建可以设置
BURNERNET_DIAGNOSTIC_STRINGS=0,使ErrorCodeToString(...)返回稳定的E<数字>值,而不嵌入符号化的错误名称。 - 精简导入的部署选项:
BURNERNET_HARDEN_IMPORTS=1可以动态解析运行时依赖,而不是直接在导入表中声明它们,在 Windows 上使用 BurnerNet 的KernelResolver路径。 - 调用栈隔离(异步移交):当通过
.WithStackIsolation(true)启用时,库在分离的工作线程上执行传输生命周期。这可以从物理上切断调用者的调用栈,并减少应用逻辑的直接自上而下的追踪。
已验证的隐身性
BurnerNet 不仅仅声称具有精简导入的加固模式;它还附带针对特定测试配置的审计说明。在启用了 BURNERNET_HARDEN_IMPORTS=ON 的 Windows x64 Release 审计中:
- IAT 黑洞:在审计的二进制文件中未观察到
libcurl.dll、ws2_32.dll、bcrypt.dll或crypt32.dll的条目。 - 内存暗场:取证扫描(Cheat Engine “所有字符串”)未能在进程堆或栈中发现敏感的蜜罐 URL 或标头。
- 调试器盲区:集成测试验证库会触发“身份切换”。决策者(你的应用)和传输者(BurnerNet)在不同的线程 ID 上运行,在实时调试会话期间减少自上而下的追踪。
- 信噪比:库旨在在其擦除权限范围内实现取证卫生,同时承认在操作系统和运行时环境中存在剩余的系统级“阴影”。
审计细节和方法:
快速开始
最快路径:
- 使用 CMake 或 Visual Studio 源码植入将 BurnerNet 添加到你的构建中。
- 包含
<burner/net.h>。 - 创建一个栈客户端,发送一个请求,然后让它离开作用域。
最小示例:
#include <iostream>
#include <burner/net.h>
int main() {
burner::net::Client client;
if (!client.IsReady()) {
std::cerr << burner::net::ErrorCodeToString(client.InitError()) << '\n';
return 1;
}
const auto response = 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;
}
Client 使用标准默认设置:系统 CA、DNS 和代理,并启用了 TLS 对等体验证和主机名验证。WithCasualDefaults() 仍然可用作标准兼容别名。
对于安全关键的流量,请使用加固配置文件。Build() 在任何请求之前拒绝缺少的控制:
auto secure = burner::net::ClientBuilder(burner::net::ClientProfile::Hardened)
.WithMtlsProvider(ProvideMtlsCredentials)
.WithSecurityPolicy(AppSecurityPolicy{})
.WithDnsFallback(burner::net::DnsMode::Doh,
"https://resolver.example/dns-query",
"Primary DoH")
.AllowSystemDns(true) // 显式回退,在 DoH 之后
.WithResponseVerifier(VerifySignedResponse)
.Build();
加固配置文件要求对等体验证和主机名验证、栈隔离、DoH 优先路由、应用程序响应验证器和应用程序拥有的信任挂载。持久化的 WithMtls(...) 凭据被拒绝;请使用 WithMtlsProvider(...)。
集成路径
1. 标准 CMake
当你的下游项目已经使用 CMake 并且你希望采用最干净的依赖管理路径时,请使用此方式。
文档:
2. Visual Studio 源码植入
当你的环境以 MSBuild 为主,或者你希望将 BurnerNet 直接编译在你的 .vcxproj 内部时,请使用此方式。
文档:
3. 加固运行时导入
当你希望减少明显的运行时依赖暴露,并准备显式管理引导加载时,请使用此方式。
启用:
BURNERNET_HARDEN_IMPORTS=1- 在 Windows 上使用 BurnerNet 的
KernelResolver路径,以支持更精简导入的运行时足迹
参考:
Linux 支持: BurnerNet 在 Linux 上提供完整的取证功能对等(内存擦除和栈隔离)。请参阅 docs/LINUX_USAGE.md 了解构建说明。
使用说明
推荐的默认做法:
- 将客户端视为可丢弃的传输层
- 将高信任度和低信任度的流量分离到不同的客户端
- 使用提供者回调处理 mTLS 材料、承载令牌和响应验证密钥
- 将业务规则和信任锚保留在你的应用程序中
示例和文档
示例:
- examples/01_basic_usage.cpp
- examples/02_zero_trust_pipeline.cpp
- examples/03_custom_security_policy.cpp
- examples/04_bootstrap_runtime.cpp
- examples/05_mtls_usage.cpp
- examples/06_hmac_custom_verifier.cpp
文档:
- PRINCIPLES.md
- docs/USAGE_BEST_PRACTICES.md
- docs/CMAKE_INTEGRATION.md
- docs/VISUAL_STUDIO_INTEGRATION.md
- docs/LINUX_USAGE.md
要求
- C++20
- Windows x64/x86 或 Linux(GCC 13+ / Clang 15+)
libcurl7.87.0+ 和OpenSSL头文件- Linux 指南: 请参阅 docs/LINUX_USAGE.md
安全现实 & 白盒防御
BurnerNet 是一个加固层,旨在将攻击成本提升到专业级别。我们遵循的原则是:隐身性应该是架构性的,而不仅仅是表面性的。
如果攻击者拥有源代码,他们能绕过 BurnerNet 吗? 了解 BurnerNet 的源代码本身并不能成为每个下游应用程序的万能钥匙。BurnerNet 遵循 Kerckhoffs 原则:该库的设计使得你的应用程序特定的信任锚(HMAC 密钥、固定密钥、UI 逻辑、策略钩子)仍然由应用程序拥有。了解传输层并不能自动实现对你特定安全流程的通用绕过。
- 隐身作为一种延迟: 加固迫使攻击者放弃标准的便捷工具,进入繁琐的指令级分析。
- 数据作为根源: 使用功能依赖(原则 6)确保你的应用程序在没有服务器提供的数据时实际上被破坏。
- 幽灵优势: 当攻击者找到你的请求逻辑时,栈隔离和内存擦除已经销毁了他们所需的取证证据。