
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может динамически разрешать зависимости среды выполнения вместо прямого объявления их в таблице импорта, используя путьKernelResolverBurnerNet в 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;
}