
Cliente HTTP anti-forense de confiança zero. Apaga segredos. Corta rastros. RCP em um tanque furtivo. 👻
Cliente HTTP antiforense de confiança zero. Elimina segredos. Rompe rastros. CPR em um Tanque Stealth. 👻
BurnerNet é um cliente HTTP antiforense em C++20. Oferece uma API fluente, semelhante ao CPR, para aplicativos que não podem confiar totalmente na máquina local—eliminando fisicamente segredos da RAM e rompendo rastros de execução para esconder sua lógica de scanners e depuradores.
Oferece padrões familiares e compatíveis com o host para HTTP comum e um perfil Hardened explícito para ambientes hostis. Ambos os caminhos favorecem clientes de curta duração; a confiança avançada permanece de propriedade do aplicativo.
Quer proteger os payloads baixados pelo BurnerNet? Confira o RipStop Codec para desembaralhamento de ativos em memória.
Princípios • Introdução • Caminhos de Integração • Realidade de Segurança
| Área | BurnerNet |
|---|---|
| Idioma | C++20 |
| Plataforma | Windows x64/x86 (Primeira Classe), Linux (Verificado) |
| Transporte | HTTP(S) baseado em libcurl |
| Higiene de memória | Utilitários de limpeza segura e alocadores de limpeza |
| Higiene forense | Limpeza automatizada de heap/stack em todo o estado de transporte gerenciado pelo BurnerNet |
| Análise Dinâmica | O isolamento da pilha de chamadas pode romper o vínculo entre consumidor e transporte |
| Endurecimento de build | Remoção opcional de strings de diagnóstico, literais ofuscados, metadados reduzidos do runtime C++ em builds endurecidos |
| Endurecimento de runtime | Suporte a DoH, segredos baseados em provedores e controles de confiança mais rígidos |
| Integração | CMake ou Visual Studio source-drop |
Use BurnerNet quando um cliente HTTP normal é confiável demais para o seu ambiente.
Ajuda quando você deseja:
BurnerNet se adequa a projetos como:
| Preocupação | Stack HTTP típico | BurnerNet |
|---|---|---|
| Tempo de vida do cliente | Frequentemente compartilhado e de longa duração | Projetado para clientes descartáveis e escopo de rajada |
| Valores sensíveis | Segredos geralmente permanecem em configuração ou memória por mais tempo que o necessário | Callbacks de provedor os obtêm próximo ao uso |
| DNS e confiança | Geralmente herda o resolvedor local e os padrões do host | Suporta controles de confiança mais rigorosos, incluindo fallback DoH e chaves fixadas |
| Verificação | Verificações de integridade específicas do aplicativo são frequentemente adicionadas depois | Construído para trabalhar com hooks de verificação de pré-voo, transporte e resposta |
libcurl e fluxos baseados em OpenSSL. Buffers de transporte sensíveis são limpos ao sair do tempo de vida gerenciado pelo BurnerNet. Essa higiene é verificada tanto no Windows quanto no Linux nas configurações auditadas descritas na documentação.WithResponseVerifier(...) em vez de ser hardcoded em uma biblioteca compartilhada.BURNERNET_DIAGNOSTIC_STRINGS=0 para que ErrorCodeToString(...) retorne valores estáveis E<número> sem incorporar nomes de erro simbólicos.BURNERNET_HARDEN_IMPORTS=1 pode resolver dependências de runtime dinamicamente em vez de anunciá-las diretamente na tabela de importações, usando o caminho KernelResolver do BurnerNet no Windows..WithStackIsolation(true), a biblioteca executa o ciclo de vida do transporte em uma thread de trabalho destacada. Isso pode romper fisicamente a pilha de chamadas do chamador e reduzir o rastreamento top-down direto da lógica do aplicativo.BurnerNet não apenas alega um modo endurecido com importação leve; também inclui notas de auditoria para configurações testadas específicas. Em uma auditoria Windows x64 Release com BURNERNET_HARDEN_IMPORTS=ON:
libcurl.dll, ws2_32.dll, bcrypt.dll ou crypt32.dll foi observada no binário auditado.Detalhes e metodologia da auditoria:
Caminho mais rápido:
<burner/net.h>.Exemplo mínimo:
#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;
}