
التهرب المتقدم من أنظمة EDR عبر انتحال قياسات الذكاء الاصطناعي عن بُعد وعزل WASM. مشروع Onyx هو خط أنابيب إثبات مفهوم (PoC) لفريق أحمر (Red Team)، مصمم لتوضيح تقنيات تهرب متقدمة ضد أنظمة EDR الحديثة. يبتعد عن التعتيم التقليدي القائم على التوقيعات نحو التمويه السلوكي والربط البيئي الصارم.

مراوغة متقدمة لأنظمة EDR عبر انتحال قياسات الذكاء الاصطناعي (AI Telemetry Spoofing) وعزل WASM. Project Onyx هو خط أنابيب Red Team (PoC) مصمم لعرض تقنيات مراوغة متقدمة ضد أنظمة EDR الحديثة. يبتعد عن أساليب الإخفاء التقليدية القائمة على التوقيعات نحو التمويه السلوكي والربط البيئي الصارم.
هذا المشروع هو بحث Red Team (إثبات مفهوم) يدرس خط أنابيب تنفيذ غير تقليدي متعدد الطبقات. تسلسل البنية المعمارية خمس تقنيات متميزة: تمويه قياسات الذكاء الاصطناعي، الربط البيئي المرتبط بالعتاد، إخفاء أوزان ONNX (steganography)، عزل WebAssembly في الذاكرة، وقناة Dead-Drop C2 عبر تحديثات النموذج التنزيلية --> في سلسلة توصيل وظيفية واحدة.
لا يدّعي Project Onyx تجاوزًا عمليًا لأنظمة EDR الإنتاجية. إنه مخطط معماري: كل مكوّن منفَّذ وعامل كجزء من السلسلة، لكن كل طبقة تتطلب بحثًا مخصصًا لتصبح ذات معنى ضد الدفاعات الواقعية.Project Onyx من الأفضل فهمه كنقطة انطلاق منظمة لهذا النوع من الاستكشاف. الحمولة وقت التشغيل محدودة عمدًا بمنارة نبض (heartbeat beacon)، مما يسمح بفحص خط الأنابيب بالكامل دون تضمين سلوك تخريبي أو سلوك ما بعد الاستغلال.
onnxruntime من Microsoft. وهذا يجعل قطعة ONNX جزءًا نشطًا من خط الأنابيب بدلاً من ملف زخرفي مثل شبكة MLP الصغيرة السابقة.MachineGuid وVolume Serial Number للهدف وcurrent user's SID.wasm3. يعمل تطبيق C++ المضيف كمجرد مُحمِّل وجسر API، ويكشف دوال مضيفة آمنة لعزل WASM.float32. يستخرج المضيف هذه الخزنة من بايتات النموذج المضمّنة، ويتحقق من مصادقتها، وعندها فقط يستعيد مادة المفتاح التجريبي.heartbeat_ack وset_status فقط، مما يثبت قابلية القناة للعمل دون تمكين تنفيذ أوامر عشوائية.
راجع docs/architecture.md للمخطط التقني الكامل من البداية إلى النهاية. (أنصح بالاطلاع عليه لفهم أفضل).
وكذلك العملية الكاملة: أخطائي، والمفاهيم والأفكار التي درستها على طول الطريق، والمقايضات المعمارية التي واجهتها أثناء بناء Project Onyx --> Medium
أُنشئ هذا المشروع لأغراض تعليمية وبحث أمني وعمليات Red Team مرخّصة فقط.
التقنيات المعروضة في هذا المستودع (Project Onyx) تهدف إلى مساعدة المتخصصين الأمنيين على فهم طرق المراوغة المتقدمة وتحسين دفاعات نقطة النهاية (EDR/XDR).
لا تستخدم هذا البرنامج على أي نظام أو شبكة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.
لا يتحمل مؤلف هذا المشروع (X-3306) أي مسؤولية ولا يُسأل عن أي إساءة استخدام أو ضرر أو أنشطة غير قانونية ناتجة عن استخدام هذا البرنامج. بتحميلك هذا الكود أو تجميعه أو استخدامه، فأنت توافق على تحمل المسؤولية الكاملة عن أفعالك.
DiagnosticsTool.cpp - مضيف C++ لنظام Windows وتكامل Wasm3/ONNX.DiagnosticsTool.rc / resource.h - ارتباطات الموارد (resource bindings) للأصول المُنشأة.build.py - أداة مساعدة لأخذ البصمات، توليد طُعم ONNX، تضمين خزنة الأوزان، توافق خزنة البيانات الوصفية، قناة Dead-Drop C2 عبر تحديثات النموذج، وتشفير WASM.wasm_license_module/ - كود Rust المصدري لوحدة نبض WebAssembly.wasm3/source/ - نسخة مصغّرة مُضمّنة من كود Wasm3 المصدري المطلوب لبناء CMake.assets/README2.md - صيغ الأصول المُنشأة.docs/architecture.md - سلسلة وقت التشغيل الكاملة وملاحظات البنية المعمارية.ثبّت هذه المتطلبات على Windows قبل البناء:
تبعيات Python:
py -m pip install onnx numpy cryptography
هدف Rust:
rustup target add wasm32-unknown-unknown
يتوقع ملف CMake شجرة مصدر/بناء ONNX Runtime في ./onnxruntime ويربط مكتبات المكونات الثابتة من:
onnxruntime/build/Windows/Release/Releaseonnxruntime/build/Windows/Release/vcpkg_installed/x64-windows-static-md/libمن Developer PowerShell الخاص بـ VS 2022، ابنِ ONNX Runtime على النحو التالي:
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
لا يتم توزيع onnxruntime.dll المُنشأ مع Project Onyx. يربط Project Onyx ملفات المكونات الثابتة .lib ويجب ألا يُدرج الملف التنفيذي النهائي onnxruntime.dll في dumpbin /DEPENDENTS.
احصل على بصمة التجزئة (fingerprint hash) لجهاز Windows الحالي:
python build.py fingerprint --show-components
استخدم السطر الثاني المطبوع كقيمة --trigger.
ابنِ وحدة Rust WebAssembly:
cargo build --manifest-path wasm_license_module/Cargo.toml --target wasm32-unknown-unknown --release
ولّد assets/model.onnx و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
تحقق من خزائن ONNX:
python build.py verify --trigger "<64-char lowercase fingerprint hash>" --model assets/model.onnx
يتحقق أمر التحقق من كلٍّ من خزنة البيانات الوصفية القديمة وخزنة أوزان ONNX المخفية. يجب أن يفتح كلاهما نفس مادة المفتاح التجريبي المكوّنة من 32 حرفًا.
الناقل الافتراضي هو 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]اجلب النموذج الأساسي المُرفق أو تحقق منه:
python build.py fetch-model
تنسخ build.py build هذا النموذج الحقيقي، وتضيف بيانات تعريف Project Onyx الوصفية، وتضمّن خزنة أوزان ONNX الموثَّقة في وحدات البت الأقل دلالة (LSBs) لمهيّئات float32، وتكتب النموذج المرجعي النهائي إلى assets/model.onnx.
الوصلة التنزيلية الإضافية هي امتداد بحثي لاختبار ما إذا كان تحديث نموذج ONNX عادي يمكنه حمل إشارة تحكم صغيرة موثقة كـ PoC بسيط. وهي محدودة عمدًا بتوجيهين آمنين:
heartbeat_ack - يغيّر حالة نبض وقت التشغيل إلى heartbeat_ack.set_status - يغيّر حالة نبض وقت التشغيل إلى سلسلة آمنة يختارها المشغّل مثل lab_downlink_ack.أنشئ نموذج تحديث مخبري:
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
تحقق منه قبل الاستخدام:
python build.py downlink-verify `
--trigger "<64-char lowercase fingerprint hash>" `
--reference-model assets/model.onnx `
--model assets/downlink_update.onnx
وجّهه إلى قطعة نموذج HTTPS خام، على سبيل المثال أصل إصدار عام:
$env:PROJECT_ONYX_DOWNLINK_MODEL_URL = "https://huggingface.co/<profile>/<repo>/resolve/main/downlink_update.onnx"
.\build\Release\ProjectOnyx.exe
أو استخدم webhook Slack/Teams:
لا يضمّن Project Onyx عنوان URL حقيقيًا لـ webhook. للتشغيل المختبري المصرّح به، عيّن:
يجب أن يكون المتغير مرئيًا للعملية التي تشغّل ProjectOnyx.exe. إذا نقرت نقرًا مزدوجًا على الملف التنفيذي، فعيّنه كمتغير بيئة للمستخدم أو للنظام أولاً، ثم افتح طرفية جديدة أو أعد تشغيل Explorer، وشغّل المضيف الأصلي مع نموذج تحديث محلي:
$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
(يمكنك أيضًا استخدام Teams)
يقوم وقت التشغيل بجلب/قراءة واحدة عند الإقلاع. لا يستقصي أو يستمر أو ينفّذ كودًا مُنزَّلاً أو يعالج أوامر عشوائية. يتم تجاهل تحديثات النماذج غير الصالحة أو المنتهية أو غير المرتبطة أو غير الموثَّقة.
مقابض التحقق في وقت التشغيل:
$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 في عدد استدلالات ONNX Runtime الحقيقية التي تعمل قبل متابعة مسار فتح الخزنة. يحوّل PROJECT_ONYX_REQUIRE_ONNX_TELEMETRY=1 إخفاقات القياسات إلى إخفاقات صارمة، وهو مفيد عند التحقق من عدم تخطي مرحلة ONNX. يكتب PROJECT_ONYX_LAB_OUTPUT_PATH نبضة JSON النهائية إلى ملف محلي للتحقق المختبري دون الحاجة إلى webhook.
يشحن هذا المستودع نموذج SqueezeNet مرجعيًا حقيقيًا لأنه صغير بما يكفي لـ GitHub مع كونه شبكة عصبية مدربة مشروعة. للحصول على قطعة بحثية أقوى، أنشئ نموذجًا محدثًا عبر ضبط دقيق حقيقي أو عملية صيانة نماذج عادية أخرى. يمكن للمضمّن التنزيلي بعد ذلك حصر تغييرات البتات في الأوزان التي تغيّرت بالفعل مقارنة بالنموذج المرجعي. هذا هو الإصدار العملي لفكرة "إخفاء داخل ضجيج الضبط الدقيق"، رابط المشروع الجانبي الكامل: https://github.com/X-3306/ONNXStego
للتحقق المختبري السريع، يمكن لـ downlink-build توليف تحديث غلاف عشوائي مُبذَّر (seeded) يشبه الضبط الدقيق من النموذج المرجعي. يثبت ذلك الآليات من البداية إلى النهاية ويعطي أوزانًا طبيعية مرشحة لسجل LSB، لكنه ليس بديلاً عن التقييم التجريبي على مهمة ومجموعة بيانات وإجراء ضبط دقيق حقيقيين.
هيّئ وابنِ الملف التنفيذي للإصدار:
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
الملف التنفيذي النهائي هو:
build\Release\ProjectOnyx.exe
فحص تبعيات اختياري:
& "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\dumpbin.exe" /DEPENDENTS build\Release\ProjectOnyx.exe
المتوقع: لا يوجد اعتماد على onnxruntime.dll.
لا يتضمن العرض التوضيحي الثبات (persistence) أو تصعيد الامتيازات أو الوصول إلى بيانات الاعتماد أو الحركة الجانبية أو تنفيذ أوامر عشوائية أو سلوكًا تخريبيًا أو رموز webhook خاصة مرفقة. وحدة WebAssembly مقيدة بتنسيق وإرجاع نبضة JSON كـ PoC بسيط. يمكن للوصلة التنزيلية الإضافية لتحديث النموذج فقط تغيير حالة النبض عبر القائمة البيضاء heartbeat_ack / set_status. إذا كانت لديك أفكار مثيرة للاهتمام لهذا المشروع، فلا تتردد في التواصل: [email protected]