
burner-net v1.3.0
ãŒããã©ã¹ãã®ã¢ã³ããã©ã¬ã³ãžãã¯HTTPã¯ã©ã€ã¢ã³ããæ©å¯æ å ±ãæ¶å»ãçè·¡ãæã€ãã¹ãã«ã¹ã¿ã³ã¯ã®äžã®CPRãð»
BurnerNet
ãŒããã©ã¹ããã¢ã³ããã©ã¬ã³ãžãã¯HTTPã¯ã©ã€ã¢ã³ããç§å¯ãæ¶å»ããçè·¡ãæã€ãã¹ãã«ã¹ã¿ã³ã¯ã®CPRãð»
BurnerNetã¯C++20ã®ã¢ã³ããã©ã¬ã³ãžãã¯HTTPã¯ã©ã€ã¢ã³ãã§ããããŒã«ã«ãã·ã³ãå®å šã«ã¯ä¿¡é Œã§ããªãã¢ããªã±ãŒã·ã§ã³åãã«ãæµæ¢ãªCPRã©ã€ã¯ãªAPIãæäŸããŸããRAMããç§å¯ãç©ççã«æ¶å»ããå®è¡çè·¡ãæã¡åãããšã§ãã¹ãã£ãããããã¬ããããžãã¯ãé ããŸãã
éåžžã®HTTPåãã«ã¯æ £ãããã¹ãäºæã®ããã©ã«ãããæµå¯Ÿçãªç°å¢åãã«ã¯æç€ºçãªHardenedãããã¡ã€ã«ãæäŸããŸããã©ã¡ãã®ãã¹ãçåœãªã¯ã©ã€ã¢ã³ããæšå¥šããé«åºŠãªä¿¡é Œã¯ã¢ããªã±ãŒã·ã§ã³ãææããŸãã
BurnerNetã§ããŠã³ããŒããããã€ããŒããä¿è·ãããå Žåã¯ãRipStop Codec ããã§ãã¯ããŠãã ãããã€ã³ã¡ã¢ãªã¢ã»ããã®ã¹ã¯ã©ã³ãã«è§£é€ã«åœ¹ç«ã¡ãŸãã
Principles ⢠Getting Started ⢠Integration Paths ⢠Security Reality
æŠèŠ
| é å | BurnerNet |
|---|---|
| èšèª | C++20 |
| ãã©ãããã©ãŒã | Windows x64/x86ïŒç¬¬äžçŽïŒãLinuxïŒç¢ºèªæžã¿ïŒ |
| ãã©ã³ã¹ããŒã | libcurlããŒã¹ã®HTTP(S) |
| ã¡ã¢ãªè¡ç | å®å šãªæ¶å»ãŠãŒãã£ãªãã£ãšæ¶å»ã¢ãã±ãŒã¿ |
| ãã©ã¬ã³ãžãã¯è¡ç | BurnerNet管çã®ãã©ã³ã¹ããŒãç¶æ å šäœã§ã®èªåããŒã/ã¹ã¿ãã¯ã¹ã¯ã©ãã³ã° |
| åçè§£æ | ã³ãŒã«ã¹ã¿ãã¯åé¢ã«ãããã³ã³ã·ã¥ãŒããšãã©ã³ã¹ããŒãã®éã®ãªã³ã¯ãæã€ããšãã§ããŸã |
| ãã«ã匷å | 蚺ææåååé€ïŒãªãã·ã§ã³ïŒãé£èªåãªãã©ã«ã匷åãã«ãã§ã®C++ã©ã³ã¿ã€ã ã¡ã¿ããŒã¿åæž |
| ã©ã³ã¿ã€ã 匷å | DoHãµããŒãããããã€ãããŒã¹ã®ã·ãŒã¯ã¬ããããã峿 Œãªä¿¡é Œå¶åŸ¡ |
| çµ±å | CMakeãŸãã¯Visual StudioãœãŒã¹ãããã |
ãªã䜿ãã®ã
éåžžã®HTTPã¯ã©ã€ã¢ã³ããç°å¢ã«å¯ŸããŠä¿¡é ŒããããŠããå Žåã«BurnerNetã䜿çšããŸãã
次ã®å Žåã«åœ¹ç«ã¡ãŸãïŒ
- ãªã¯ãšã¹ãã¯ã©ã€ã¢ã³ããå ±æã®ã°ããŒãã«ãã©ã³ã¹ããŒãã§ã¯ãªãçåœã«ããã
- ããŒã«ã«DNSããã®ä»ã®ãã¹ãããã©ã«ããžã®äŸåãæžãããã
- ããŒã¯ã³ãèšŒææžãæ€èšŒã·ãŒã¯ã¬ãããå¿ èŠãªãšãã ãååŸããã
- ã¬ã¹ãã³ã¹æ€èšŒããžãã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãå ã«ä¿æããã
- 匷åãã«ãã§å¹³æã®æååãã¡ã¿ããŒã¿ãæžãããã
誰ã®ããã®ãã®ã
BurnerNetã¯æ¬¡ã®ãããªãããžã§ã¯ãã«é©ããŠããŸãïŒ
- é«äŸ¡å€ã®èªèšŒãã©ã€ã»ã³ã¹ããŸãã¯ã¢ããããŒããªã¯ãšã¹ããè¡ãWindowsãã¹ã¯ãããã¢ããª
- å®å šã«ã¯ä¿¡é Œã§ããªããã¹ãã§åäœããçµã¿èŸŒã¿ã³ãŒããŸãã¯ã€ã³ãžã§ã¯ã·ã§ã³ã³ãŒã
- æµæ¢ãªC++ APIã諊ããã«ããã峿 Œãªãã©ã³ã¹ããŒããã§ãã¯ãå¿ èŠãšããããŒã«
æšæºã¹ã¿ã㯠vs BurnerNet
| é ç® | å žåçãªHTTPã¹ã¿ã㯠| BurnerNet |
|---|---|---|
| ã¯ã©ã€ã¢ã³ãã®å¯¿åœ | å ±æãããé·å¯¿åœã§ããããšãå€ã | äœ¿ãæšãŠã¯ã©ã€ã¢ã³ããšããŒã¹ãã¹ã³ãŒãã§ã®äœ¿çšåãã«èšèš |
| æ©å¯å€ | ç§å¯ãèšå®ãã¡ã¢ãªã«å¿ èŠä»¥äžã«çãŸãããšãå€ã | ãããã€ãã³ãŒã«ããã¯ã䜿çšçŽåã«ç§å¯ãååŸ |
| DNSãšä¿¡é Œ | éåžžãããŒã«ã«ãªãŸã«ããšãã¹ãããã©ã«ããç¶æ¿ | DoHãã©ãŒã«ããã¯ããã³çãããŒãå«ãããã峿 Œãªä¿¡é Œå¶åŸ¡ããµããŒã |
| æ€èšŒ | ã¢ããªåºæã®æŽåæ§ãã§ãã¯ã¯åŸä»ããããããšãå€ã | ããªãã©ã€ãããã©ã³ã¹ããŒããã¬ã¹ãã³ã¹æ€èšŒããã¯ãšé£æºããããèšèš |
é²åŸ¡çææ
- Zero-Ghost Memory ArchitectureïŒãŒããŽãŒã¹ãã¡ã¢ãªã¢ãŒããã¯ãã£ïŒ: BurnerNetã¯ã«ã¹ã¿ã ã®Prefix-Size Scrubberã䜿çšããŠã
libcurlããã³OpenSSLããã¯ãšã³ãã®ãããŒã®å éšã¡ã¢ãªå²ãåœãŠãã¹ãããã¯ããŸããæ©å¯æ§ã®é«ããã©ã³ã¹ããŒããããã¡ã¯ãBurnerNet管çã®ã©ã€ãã¿ã€ã ãé¢ããéã«æ¶å»ãããŸãããã®è¡çç¶æ ã¯ãããã¥ã¡ã³ãã«èšèŒãããç£æ»æžã¿æ§æã«ãããŠãWindowsãšLinuxã®äž¡æ¹ã§æ€èšŒãããŠããŸãã - Stack-Frame SwipingïŒã¹ã¿ãã¯ãã¬ãŒã ã¹ã¯ã€ãã³ã°ïŒ: ãªã¯ãšã¹ãããšã«ãã©ã€ãã©ãªã¯èªèº«ã®ã¹ã¬ããã¹ã¿ãã¯ãç©æ¥µçã«ã¹ã¯ã©ãããŸãïŒãã€ãŠã©ãŒã¿ãŒããŒã¯ã¹ã¯ã©ãã³ã°ïŒãããã«ãããã¢ããªã±ãŒã·ã§ã³ã«å¶åŸ¡ãæ»ãåã«ãäžæçãªãã©ã³ã¹ããŒãæçãç Žå£ãããããšãæå³ããŠããŸãã
- Moving-Target HeapïŒç§»åæšçããŒãïŒ: äœ¿ãæšãŠãã©ã³ã¹ããŒããšã¢ã©ã€ã³ã¡ã³ããããã¡ã¿ããŒã¿ãããã®çµã¿åããã«ãããé«ãã¢ãã¬ã¹ç©ºé忣ãçãŸããããã»ã¹ã¡ã¢ãªãäºæž¬äžå¯èœã«ãªããå®å®ãããã€ã³ã¿ãããã³ã°ã«å¯ŸããŠèæ§ãçãŸããŸãã
- çåœãªãªã¯ãšã¹ãç¶æ : BurnerNetã¯ããã»ã¹å šäœã®ã·ã³ã°ã«ãã³ãã©ã³ã¹ããŒãã§ã¯ãªããäœ¿ãæšãŠã¯ã©ã€ã¢ã³ããäžå¿ã«èšèšãããŠããŸãã
- ãã¹ããžã®ä¿¡é Œãæžãã: DoHãµããŒãããã³çãããŒãµããŒãããã©ã³ã¹ããŒãç£æ»ã«ããã䟵害ãããããŒã«ã«ããã©ã«ããžã®äŸåãæžãããŸãã
- å¹³æé²åºã®è»œæž: ãããã€ãã³ãŒã«ããã¯ãšå®å šãªæ¶å»ãŠãŒãã£ãªãã£ã«ãããèšŒææžãããŒãããŒã¯ã³ããã®ä»ã®æ©å¯ãããã¡ã®å¯¿åœãççž®ããŸãã
- ã¢ããªææã®æ€èšŒ: ã¬ã¹ãã³ã¹æ€èšŒã¯ãå
±æã©ã€ãã©ãªã«ããŒãã³ãŒãããã代ããã«ã
WithResponseVerifier(...)ãä»ããŠã³ãŒãå ã«æ®ããŸãã - éçãã£ã³ã¬ãŒããªã³ãã®å°é£å: 匷åãã«ãã§ã¯
BURNERNET_DIAGNOSTIC_STRINGS=0ãèšå®ã§ãããããErrorCodeToString(...)ã¯ã·ã³ããªãã¯ãªãšã©ãŒåãåã蟌ãŸãã«å®å®ããE<çªå·>å€ãè¿ããŸãã - ã€ã³ããŒã軜éãªãããã€ãªãã·ã§ã³:
BURNERNET_HARDEN_IMPORTS=1ã«ãããWindowsäžã®BurnerNetã®KernelResolverãã¹ã䜿çšããŠãã€ã³ããŒãããŒãã«ã«çŽæ¥å ¬éãã代ããã«ãã©ã³ã¿ã€ã äŸåé¢ä¿ãåçã«è§£æ±ºã§ããŸãã - Call Stack IsolationïŒã³ãŒã«ã¹ã¿ãã¯åé¢ïŒïŒAsync HandoffïŒ:
.WithStackIsolation(true)ã§æå¹ã«ãããšãã©ã€ãã©ãªã¯ãã©ã³ã¹ããŒãã©ã€ããµã€ã¯ã«ããã¿ãããããã¯ãŒã«ãŒã¹ã¬ããã§å®è¡ããŸããããã«ãããåŒã³åºãå ã®ã³ãŒã«ã¹ã¿ãã¯ãç©ççã«åæããã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®çŽæ¥çãªãããããŠã³ãã¬ãŒã¹ãæžããããšãã§ããŸãã
æ€èšŒæžã¿ã¹ãã«ã¹
BurnerNetã¯ãã€ã³ããŒã軜éãªåŒ·åã¢ãŒãã䞻匵ããã ãã§ãªããç¹å®ã®ãã¹ãæ§æã«é¢ããç£æ»ããŒãã忢±ããŠããŸããWindows x64 Releaseã§ BURNERNET_HARDEN_IMPORTS=ON ã®ç£æ»ã«ãããŠïŒ
- IAT BlackoutïŒIATãã©ãã¯ã¢ãŠãïŒ: ç£æ»å¯Ÿè±¡ãã€ããªã§ã¯ã
libcurl.dllãws2_32.dllãbcrypt.dllãcrypt32.dllã®ãšã³ããªã¯èŠ³æž¬ãããŸããã§ããã - Memory Dark-outïŒã¡ã¢ãªããŒã¯ã¢ãŠãïŒ: ãã©ã¬ã³ãžãã¯ã¹ãã£ã³ïŒCheat Engineã®ããã¹ãŠã®æååãïŒã§ã¯ãæ©å¯æ§ã®é«ãã«ããªã¢URLãããããããã»ã¹ããŒããã¹ã¿ãã¯ã§çºèŠãããŸããã§ããã
- Debugger BlindnessïŒãããã¬ãã©ã€ã³ããã¹ïŒ: çµ±åãã¹ãã§ã¯ãã©ã€ãã©ãªããã¢ã€ãã³ãã£ãã£ã·ããããããªã¬ãŒããããšã確èªããŠããŸããæææ±ºå®è ïŒã¢ããªïŒãšãã©ã³ã¹ããŒã¿ãŒïŒBurnerNetïŒã¯ç°ãªãã¹ã¬ããIDã§åäœããã©ã€ããããã°ã»ãã·ã§ã³äžã®ãããããŠã³ãã¬ãŒã¹ãäœæžããŸãã
- Noise-to-SignalïŒãã€ãºå¯Ÿã·ã°ãã«ïŒ: ã©ã€ãã©ãªã¯ããã®æ¶å»æš©éå ã§ã®ãã©ã¬ã³ãžãã¯è¡çãç®æããŠããŸãããOSãã©ã³ã¿ã€ã ç°å¢ã«æ®ãã·ã¹ãã ã¬ãã«ã®ã圱ããèªããŠããŸãã
ç£æ»ã®è©³çŽ°ãšæ¹æ³è«ïŒ
ã¯ããã«
æéã®ãã¹ïŒ
- 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 ã¯Standardããã©ã«ãã䜿çšããŸãïŒã·ã¹ãã 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) // explicit fallback, after DoH
.WithResponseVerifier(VerifySignedResponse)
.Build();
Hardenedã§ã¯ããã¢ããã³ãã¹ãåæ€èšŒãã¹ã¿ãã¯åé¢ã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ããžãã¯ãããªã·ãŒããã¯ïŒãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠææããããŸãŸã«ãªãããã«èšèšãããŠããŸãããã©ã³ã¹ããŒãå±€ãç¥ã£ãŠããŠããç¹å®ã®ã»ãã¥ãªãã£ãããŒãèªåçã«æ®éçã«è¿åã§ããããã§ã¯ãããŸããã
- ã¹ãã«ã¹ã¯é å»¶ãšããŠïŒ 匷åã«ãããæ»æè ã¯æšæºçãªäŸ¿å©ãªããŒã«ããé¢ããé¢åãªåœä»€ã¬ãã«ã®åæãžãšè¿œãããããŸãã
- ããŒã¿ãã«ãŒããšããŠïŒ Functional DependencyïŒé¢æ°äŸåæ§ïŒïŒåå6ïŒã䜿çšããŠããµãŒããŒæäŸã®ããŒã¿ãªãã§ã¯ã¢ããªãæåéãå£ããããã«ããŸãã
- ãŽãŒã¹ãã®å©ç¹ïŒ æ»æè ããªã¯ãšã¹ãããžãã¯ãèŠã€ããé ã«ã¯ãã¹ã¿ãã¯åé¢ãšã¡ã¢ãªæ¶å»ãã圌ããå¿ èŠãšãããã©ã¬ã³ãžãã¯èšŒæ ããã§ã«ç Žå£ããŠããŸãã