
제로 트러스트 안티-포렌식 HTTP 클라이언트. 비밀을 삭제합니다. 흔적을 차단합니다. 스텔스 탱크 속의 CPR. 👻
제로 트러스트, 안티-포렌식 HTTP 클라이언트. 비밀을 지우고, 흔적을 끊습니다. 스텔스 탱크의 CPR. 👻
BurnerNet은 C++20 안티-포렌식 HTTP 클라이언트입니다. 로컬 머신을 완전히 신뢰할 수 없는 애플리케이션을 위해 유연하고 CPR과 유사한 API를 제공합니다. RAM에서 비밀을 물리적으로 지우고 실행 흔적을 차단하여 스캐너와 디버거로부터 로직을 숨깁니다.
일반 HTTP에는 친숙한 호스트 호환 기본값을 제공하고, 적대적 환경에는 명시적인 Hardened 프로필을 제공합니다. 두 경로 모두 수명이 짧은 클라이언트를 선호하며, 고급 신뢰는 애플리케이션이 소유합니다.
BurnerNet이 다운로드한 페이로드를 보호하고 싶으신가요? 메모리 내 자산 디스크램블링을 위해 RipStop Codec을 확인하세요.
원칙 • 시작하기 • 통합 경로 • 보안 현실: 화이트박스 방어
| 영역 | BurnerNet |
|---|---|
| 언어 | C++20 |
| 플랫폼 | Windows x64/x86 (최우선 지원), Linux (검증됨) |
| 전송 | libcurl 기반 HTTP(S) |
| 메모리 위생 | 안전한 지우기 유틸리티 및 지우기 할당자 |
| 포렌식 위생 | BurnerNet 관리 전송 상태 전반에 걸친 자동 힙/스택 스크러빙 |
| 동적 분석 | 호출 스택 격리를 통해 소비자와 전송 간 연결을 차단할 수 있음 |
| 빌드 강화 | 선택적 진단 문자열 제거, 난독화된 리터럴, 강화된 빌드에서 C++ 런타임 메타데이터 감소 |
| 런타임 강화 | DoH 지원, 제공자 기반 비밀, 더 엄격한 신뢰 제어 |
| 통합 | CMake 또는 Visual Studio 소스 드롭 |
일반 HTTP 클라이언트가 환경에 비해 너무 신뢰적일 때 BurnerNet을 사용하세요.
다음과 같은 경우에 도움이 됩니다:
BurnerNet은 다음과 같은 프로젝트에 적합합니다:
libcurl 및 OpenSSL 기반 흐름의 내부 메모리 할당 경로를 후킹합니다. 민감한 전송 버퍼는 BurnerNet 관리 수명을 벗어날 때 지워집니다. 이 위생은 문서에 설명된 감사된 구성 내에서 Windows와 Linux 모두에서 검증됩니다.WithResponseVerifier(...)를 통해 코드에 유지되며, 공유 라이브러리에 하드코딩되지 않습니다.BURNERNET_DIAGNOSTIC_STRINGS=0을 설정하여 ErrorCodeToString(...)이 기호 오류 이름을 포함하지 않고 안정적인 E<number> 값을 반환하도록 할 수 있습니다.BURNERNET_HARDEN_IMPORTS=1은 BurnerNet의 Windows KernelResolver 경로를 사용하여 직접 임포트 테이블에 광고하는 대신 런타임 종속성을 동적으로 해결할 수 있습니다..WithStackIsolation(true)를 통해 활성화하면 라이브러리는 분리된 작업자 스레드에서 전송 수명 주기를 실행합니다. 이는 호출자의 호출 스택을 물리적으로 차단하고 애플리케이션 로직의 직접적인 상향식 추적을 줄일 수 있습니다.BurnerNet은 단순히 가벼운 임포트 강화 모드를 주장하는 것이 아닙니다. 특정 테스트 구성에 대한 감사 노트도 함께 제공됩니다. BURNERNET_HARDEN_IMPORTS=ON을 사용한 Windows x64 릴리스 감사에서:
libcurl.dll, ws2_32.dll, bcrypt.dll 또는 crypt32.dll에 대한 항목이 관찰되지 않았습니다.감사 세부 사항 및 방법론:
가장 빠른 경로:
<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()는 표준 호환 별칭으로 계속 사용 가능합니다.
보안이 중요한 트래픽의 경우 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) // explicit fallback, after DoH
.WithResponseVerifier(VerifySignedResponse)
.Build();
Hardened는 피어 및 호스트 이름 검증, 스택 격리, DoH 우선 라우팅, 앱 응답 검증기 및 앱 소유 신뢰 마운트를 요구합니다. 영구적인 WithMtls(...) 자격 증명은 거부됩니다. WithMtlsProvider(...)를 사용하세요.
하위 프로젝트가 이미 CMake를 사용하고 있고 가장 깔끔한 종속성 관리 경로를 원할 때 사용하세요.
문서:
환경이 MSBuild 우선이거나 BurnerNet을 .vcxproj 내부에서 직접 컴파일하려는 경우 사용하세요.
문서:
명백한 런타임 종속성 노출을 줄이고 부트스트랩 로딩을 명시적으로 관리할 준비가 되었을 때 사용하세요.
활성화:
BURNERNET_HARDEN_IMPORTS=1KernelResolver 경로를 사용하여 더 가벼운 임포트 런타임 풋프린트를 지원합니다.참조:
Linux 지원: BurnerNet은 Linux에서 완전한 포렌식 패리티(메모리 지우기 및 스택 격리)를 제공합니다. 빌드 지침은 docs/LINUX_USAGE.md를 참조하세요.
권장 기본값:
예제:
문서:
libcurl 7.87.0+ 및 OpenSSL 헤더BurnerNet은 공격 비용을 전문가 수준으로 높이기 위해 설계된 강화 계층입니다. 우리는 스텔스는 표면적이 아니라 구조적이어야 한다는 원칙에 따라 운영됩니다.
공격자가 소스 코드를 가지고 있으면 BurnerNet을 우회할 수 있나요?
BurnerNet의 소스 코드에 대한 지식만으로는 모든 하위 애플리케이션의 마스터 키가 아닙니다. BurnerNet은 Kerckhoffs의 원칙을 따릅니다: 라이브러리는 앱별 신뢰 앵커(HMAC 비밀, 고정 키, UI 로직, 정책 후크)가 애플리케이션 소유로 남도록 설계되었습니다. 전송 계층을 안다고 해서 특정 보안 흐름을 자동으로 우회할 수 있는 것은 아닙니다.
| 관심사 | 일반적인 HTTP 스택 | BurnerNet |
|---|
| 클라이언트 수명 | 종종 공유되며 오래 지속됨 | 일회용 클라이언트 및 버스트 범위 사용을 위해 설계됨 |
| 중요 값 | 비밀이 필요 이상으로 오래 설정이나 메모리에 남아 있음 | 제공자 콜백이 사용 시점에 가져옴 |
| DNS 및 신뢰 | 보통 로컬 리졸버 및 호스트 기본값을 상속 | DoH 폴백 및 고정 키를 포함한 더 엄격한 신뢰 제어 지원 |
| 검증 | 앱별 무결성 검사는 나중에 추가되는 경우가 많음 | 사전 점검, 전송 및 응답 검증 후크와 함께 작동하도록 구축됨 |