Назад к обновлениям
New releaseAug 2, 2026

burner-net v1.3.0

HTTP-клиент с нулевым доверием и анти-форензикой. Уничтожает секреты. Обрывает следы. CPR в стелс-танке. 👻

Поделиться

BurnerNet

HTTP-клиент с нулевым доверием и антифорензикой. Стирает секреты. Уничтожает следы. Реанимация в стелс-танке. 👻

BurnerNet — это антифорензический HTTP-клиент на C++20. Он предоставляет плавный, CPR-подобный API для приложений, которые не могут полностью доверять локальной машине, физически стирая секреты из ОЗУ и разрывая следы выполнения, чтобы скрыть вашу логику от сканеров и отладчиков.

Он предлагает знакомые, совместимые с хостом настройки по умолчанию для обычного HTTP и явный профиль Hardened для враждебных сред. Оба пути отдают предпочтение недолговечным клиентам; расширенное доверие остаётся на стороне приложения.

Ищете защиту полезных нагрузок, загруженных BurnerNet? Ознакомьтесь с RipStop Codec для дешифровки активов в памяти.

ПринципыНачало работыСпособы интеграцииРеалии безопасности

Краткий обзор

ОбластьBurnerNet
ЯзыкC++20
ПлатформаWindows x64/x86 (Первый класс), Linux (Проверено)
ТранспортHTTP(S) на базе libcurl
Гигиена памятиУтилиты безопасного стирания и распределители с затиранием
Форензическая гигиенаАвтоматическая очистка кучи/стека на всём протяжении управляемого BurnerNet транспортного состояния
Динамический анализИзоляция стека вызовов может разорвать связь между потребителем и транспортом
Укрепление сборкиОпциональное удаление диагностических строк, обфусцированные литералы, уменьшение метаданных среды выполнения C++ в укреплённых сборках
Укрепление выполненияПоддержка DoH, поставщики секретов и более строгие элементы управления доверием
ИнтеграцияCMake или Visual Studio — добавление исходников

Зачем это использовать

Используйте BurnerNet, когда обычный HTTP-клиент слишком доверчив для вашего окружения.

Он помогает, когда вы хотите:

  • сделать клиенты запросов недолговечными вместо единого глобального транспорта
  • уменьшить зависимость от локального DNS и других настроек хоста по умолчанию
  • получать токены, сертификаты и секреты проверки только по мере необходимости
  • оставить логику проверки ответов в собственном коде приложения
  • уменьшить количество открытых строковых констант и метаданных в укреплённых сборках

Для кого это

BurnerNet подходит для таких проектов, как:

  • Windows-приложения на рабочем столе с запросами высокой ценности (аутентификация, лицензирование, обновления)
  • встраиваемый или инжектированный код, выполняющийся в хосте, которому вы не до конца доверяете
  • инструменты, которым нужны более строгие транспортные проверки без отказа от удобного C++ API

Стандартный стек против BurnerNet

АспектТипичный HTTP-стекBurnerNet
Время жизни клиентаЧасто общий и долгоживущийПредназначен для одноразовых клиентов и всплесковых задач
Чувствительные значенияСекреты часто находятся в конфиге или памяти дольше необходимогоОбратные вызовы поставщиков получают их непосредственно перед использованием
DNS и довериеОбычно наследует локальный резолвер и настройки хостаПоддерживает более строгие элементы управления доверием, включая DoH и закреплённые ключи
ПроверкаСпецифичные для приложения проверки целостности часто добавляются позжеСоздан для работы с хуками предварительной проверки, транспортной проверки и проверки ответов

Оборонительные результаты

  • Архитектура памяти "Zero-Ghost": BurnerNet использует собственный префиксно-размерный очиститель для перехвата внутренних путей выделения памяти в libcurl и потоках OpenSSL. Чувствительные транспортные буферы стираются, когда покидают управляемый BurnerNet жизненный цикл. Эта гигиена проверена как на Windows, так и на Linux в рамках аудируемых конфигураций, описанных в документации.
  • Затирание кадров стека: После каждого запроса библиотека активно очищает собственный стек потока (очистка по отметке верхнего уровня воды). Это предназначено для уничтожения эфемерных транспортных фрагментов до возврата управления вашему приложению.
  • Динамическая куча: Сочетание одноразовых транспортов и выровненных заголовков метаданных создаёт высокую дисперсию адресного пространства, делая память процесса непредсказуемой и устойчивой к стабильному отображению указателей.
  • Недолговечное состояние запроса: BurnerNet спроектирован вокруг одноразовых клиентов вместо общепроцессных синглтонов-транспортов.
  • Меньше доверия к хосту: Поддержка DoH, закреплённых ключей и аудит транспорта помогают снизить зависимость от скомпрометированных локальных настроек.
  • Меньшая открытость текстовых данных: Обратные вызовы поставщиков и утилиты безопасного стирания сокращают время жизни сертификатов, ключей, токенов и других чувствительных буферов.
  • Проверка, принадлежащая приложению: Проверка ответов остаётся в вашем коде через WithResponseVerifier(...) вместо того, чтобы быть жёстко закодированной в общей библиотеке.
  • Усложнение статического снятия отпечатков: Укреплённые сборки могут установить BURNERNET_DIAGNOSTIC_STRINGS=0, чтобы ErrorCodeToString(...) возвращала стабильные значения E<number> без встраивания символьных имён ошибок.
  • Варианты развёртывания с лёгким импортом: BURNERNET_HARDEN_IMPORTS=1 может динамически разрешать зависимости среды выполнения вместо прямого объявления их в таблице импорта, используя путь KernelResolver BurnerNet в Windows.
  • Изоляция стека вызовов (асинхронная передача): При включении через .WithStackIsolation(true) библиотека выполняет жизненный цикл транспорта на отдельном рабочем потоке. Это может физически разорвать стек вызовов вызывающей стороны и уменьшить прямое нисходящее отслеживание логики приложения.

Подтверждённая скрытность

BurnerNet не просто заявляет о режиме укрепления с лёгким импортом; он также поставляется с примечаниями аудита для конкретных протестированных конфигураций. В аудите Windows x64 Release с BURNERNET_HARDEN_IMPORTS=ON:

  • Затемнение IAT: В аудируемом бинарном файле не было обнаружено записей для libcurl.dll, ws2_32.dll, bcrypt.dll или crypt32.dll.
  • Темнота памяти: Судебные сканы (Cheat Engine "All Strings") не смогли обнаружить чувствительные канальные URL или заголовки в куче или стеке процесса.
  • Слепота отладчика: Интегрированные тесты подтверждают, что библиотека вызывает «Сдвиг идентичности». Лицо, принимающее решения (ваше приложение), и Транспортёр (BurnerNet) работают на разных идентификаторах потоков, уменьшая нисходящее отслеживание во время сеансов живой отладки.
  • Шум против сигнала: Библиотека стремится к судебной гигиене в рамках своих полномочий по стиранию, признавая оставшиеся системные «тени» в ОС и среде выполнения.

Подробности аудита и методология:

Начало работы

Самый быстрый путь:

  • Добавьте BurnerNet в свою сборку через CMake или Visual Studio source-drop.
  • Включите <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() остаётся доступным как псевдоним совместимости со Standard.

Для критического с точки зрения безопасности трафика используйте профиль Hardened. 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();

Hardened требует проверки однорангового узла и имени хоста, изоляции стека, маршрутизации через DoH в первую очередь, проверщика ответов приложения и точки доверия, принадлежащей приложению. Постоянные учётные данные WithMtls(...) отклоняются; используйте WithMtlsProvider(...).

Способы интеграции

1. Стандартный CMake

Используйте это, если ваш downstream-проект уже использует CMake и вы хотите самый чистый путь с управлением зависимостями.

Документация:

2. Visual Studio Source-Drop

Используйте это, если ваша среда ориентирована на MSBuild или вы хотите, чтобы BurnerNet компилировался непосредственно внутри вашего .vcxproj.

Документация:

3. Укреплённые импорты среды выполнения

Используйте это, если вы хотите уменьшить очевидное воздействие зависимостей среды выполнения и готовы явно управлять загрузкой начальной загрузки.

Включите:

  • BURNERNET_HARDEN_IMPORTS=1
  • Использует путь KernelResolver BurnerNet в Windows для поддержки более лёгкого по импорту следа среды выполнения

Ссылки:

Поддержка Linux: BurnerNet обеспечивает полную судебную паритетность (стирание памяти и изоляцию стека) в Linux. См. docs/LINUX_USAGE.md для инструкций по сборке.

Примечания по использованию

Рекомендуемые настройки по умолчанию:

  • рассматривать клиентов как одноразовые транспорты
  • разделять трафик с высоким и низким доверием на разные клиенты
  • использовать обратные вызовы поставщиков для материала mTLS, токенов-носителей и секретов проверки ответов
  • оставлять бизнес-правила и точки доверия в вашем приложении

Примеры и документация

Примеры:

Документация:

Требования

  • C++20
  • Windows x64/x86 или Linux (GCC 13+ / Clang 15+)
  • libcurl 7.87.0+ и заголовки OpenSSL
  • Руководство для Linux: См. docs/LINUX_USAGE.md

Реалии безопасности и защита "Белого ящика"

BurnerNet — это уровень укрепления, предназначенный для повышения стоимости атаки до профессионального уровня. Мы исходим из принципа, что скрытность должна быть архитектурной, а не просто поверхностной.

Может ли злоумышленник обойти BurnerNet, имея исходный код? Знание исходного кода BurnerNet само по себе не является мастер-ключом к каждому downstream-приложению. BurnerNet следует принципу Керкгоффса: библиотека спроектирована так, чтобы ваши специфичные для приложения точки доверия (секреты HMAC, закреплённые ключи, логика UI, политики) оставались в собственности приложения. Знание транспортного уровня не даёт автоматического универсального обхода вашего конкретного потока безопасности.

  • Скрытность как задержка: Укрепление вынуждает злоумышленников покидать стандартные удобные инструменты и переходить к утомительному анализу на уровне инструкций.
  • Данные как корень: Используйте Функциональную зависимость (Принцип 6), чтобы ваше приложение было буквально сломано без данных, предоставляемых сервером.
  • Преимущество призрака: К тому времени, как злоумышленник найдёт вашу логику запроса, Изоляция стека и Стирание памяти уже уничтожат нужные им судебные доказательства.

Категории