
كشف التهديدات في سلسلة التوريد لـ npm/PyPI في الوقت الفعلي. تحليل السلاسل السلوكية، مسح AST، تغذية مؤشرات الاختراق (IOC)، ومحرك تسجيل مركب.
التثبيت | الاستخدام | الميزات | VS Code | CI/CD
هجمات سلسلة التوريد على npm و PyPI في انفجار مستمر. اخترق Shai-Hulud أكثر من 25 ألف مستودع في 2025. الأدوات الحالية تكتشف التهديدات لكنها لا تساعدك على الاستجابة.
يجمع MUAD'DIB بين 22 ماسحًا متوازيًا (278 قاعدة كشف)، ومحرك إزالة التعتيم، وتحليل تدفق البيانات بين الوحدات، وتسجيل مركّب (21 قاعدة مركّبة)، وبيئة رملية gVisor/Docker لكشف التهديدات المعروفة والأنماط السلوكية المشبوهة في حزم npm و PyPI. يوجد مصنّف XGBoost في قاعدة الكود لكنه غير مفعّل حاليًا (انظر التقييم).
MUAD'DIB هو ماسح مجاني ومفتوح وقابل للتدقيق بالكامل لسلسلة التوريد لـ npm و PyPI. يكتشف التهديدات المعروفة (أكثر من 225,000 مؤشر IOC)، و RCE وقت التثبيت، وتدفقات سرقة الاعتمادات ثم تسريبها، والحمولات المعتّمة، وأنماط سلوكية مشبوهة أخرى — محليًا، دون أي قياس عن بُعد.
مرخّص بموجب AGPL-3.0؛ يتوفر ترخيص تجاري للمنظمات التي تحتاج إلى دمجه في منتج مملوك أو تشغيله كخدمة مستضافة مغلقة (انظر الترخيص).
لا يحاول عمدًا فعل كل شيء — انظر النطاق لمعرفة بالضبط ما يلتقطه وما لا يلتقطه.
يكتشف (npm و PyPI): الحزم الخبيثة المعروفة (تطابق الاسم + SHA256 مع IOC)، و typosquats، و RCE وقت التثبيت (سكربتات دورة الحياة preinstall/postinstall، و curl | sh، ووقت استيراد Python، و binding.gyp)، وقراءة الاعتمادات ثم التسريب الشبكي (داخل الملف وعبر الملفات)، والحمولات المعتّمة / عالية الإنتروبيا / محمّلات الواجهة، ومسقِطات الملفات الثنائية (chmod +x + exec/spawn)، وعلامات التهرب من التحليل.
خارج النطاق: الهجمات التي تقتصر على المتصفح (DOM/window، بدون واجهة Node.js)، ومحتويات الملفات الثنائية الأصلية / WASM (بدون تحليل ثنائي)، والحزم غير المعروفة صفرية اليوم (تغذية IOC تفاعلية)، وأنظمة بيئية غير npm/PyPI (RubyGems و Maven و Go). يُعرف التحديد المتعمد لبصمات مكافحة البيئة الرملية والحمولات البعيدة متعددة المراحل كمخاطر نتائج سلبية كاذبة معروفة. التفاصيل الكاملة: نموذج التهديد.
بدون قياس عن بُعد. لا يغادر كودك ونتائج الفحص جهازك أبدًا — MUAD'DIB فقط ينزّل خلاصات استخبارات التهديدات (muaddib update) ولأغراض التسجيل يقرأ بيانات وصفية عامة من سجل npm. تنبيهات Webhook اختيارية.
npm install -g muaddib-scanner
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm link
muaddib scan .
muaddib scan /path/to/project
يفحص تبعيات npm (package.json، node_modules) و Python (requirements.txt، setup.py، pyproject.toml).
muaddib
muaddib install <package>
muaddib install lodash axios --save-dev
muaddib install suspicious-pkg --force # فرض التثبيت رغم التهديدات
يفحص الحزم بحثًا عن التهديدات قبل التثبيت. يمنع الحزم الخبيثة المعروفة.
يعرض كل فحص درجة مخاطر من 0-100:
[SCORE] 58/100 [***********---------] HIGH
muaddib scan . --explain
يعرض معرف القاعدة، وتقنية MITRE ATT&CK، والمراجع، ودليل الاستجابة لكل كشف.
muaddib scan . --json > results.json # JSON
muaddib scan . --html report.html # HTML
muaddib scan . --sarif results.sarif # SARIF (أمان GitHub)
muaddib scan . --fail-on critical # الفشل فقط على CRITICAL
muaddib scan . --fail-on high # الفشل على HIGH و CRITICAL (الافتراضي)
muaddib scan . --paranoid
كشف فائق الصرامة بتسامح أقل. يكتشف أي وصول شبكي، وتنفيذ عمليات فرعية، وتقييم كود ديناميكي، والوصول إلى ملفات حساسة.
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
تصفية صارمة (v2.1.2): تنبيهات فقط لتطابقات IOC، أو تهديدات مؤكدة بالبيئة الرملية، أو تسريب رموز canary. فرز بالأولوية (v2.10.21): P1 (أحمر، IOC/بيئة رملية/canary)، P2 (برتقالي، درجات عالية/مركّبات)، P3 (أصفر، الباقي).
muaddib scan . --temporal-full # جميع الميزات الزمنية الأربع
muaddib scan . --temporal # كشف سكربتات دورة الحياة المفاجئة
muaddib scan . --temporal-ast # فرق AST بين الإصدارات
muaddib scan . --temporal-publish # شذوذ تواتر النشر
muaddib scan . --temporal-maintainer # كشف تغيير المشرف
يكتشف هجمات سلسلة التوريد قبل ظهورها في قواعد بيانات IOC من خلال تحليل التغييرات بين إصدارات الحزم. انظر منهجية التقييم للتفاصيل.
muaddib sandbox <package-name>
muaddib sandbox <package-name> --strict
تحليل ديناميكي في حاوية Docker معزولة: strace، tcpdump، فرق نظام الملفات، رموز canary، بيئة مدركة لـ CI، وتحميل مسبق بتصحيح القرد لكشف القنابل الزمنية (تشغيل متعدد عند إزاحات [0h، 72h، 7d]).
muaddib watch . # مراقبة في الوقت الفعلي
muaddib daemon # وضع الخفي (فحص تلقائي عند npm install)
muaddib update # تحديث IOCs (سريع، ~5 ثوانٍ)
muaddib scrape # تحديث IOC كامل (~5 دقائق)
muaddib diff HEAD~1 # مقارنة التهديدات مع الالتزام السابق
muaddib init-hooks # خطافات ما قبل الالتزام (husky/pre-commit/git)
muaddib scan . --breakdown # تحليل درجة قابل للشرح
muaddib replay # تحقق من الحقيقة الأرضية (90/94 TPR@3، v2.11.48)
جميع القواعد (273 قاعدة + 5 قاعدة PARANOID) مرتبطة بتقنيات MITRE ATT&CK. انظر SECURITY.md للمرجع الكامل للقواعد.
إضافة VS Code تفحص مشاريع npm تلقائيًا.
code --install-extension dnszlsk.muaddib-vscode
MUAD'DIB: Scan Project - فحص المشروع بأكملهMUAD'DIB: Scan Current File - فحص الملف الحاليmuaddib.autoScan، muaddib.webhookUrl، muaddib.failLevelانظر vscode-extension/README.md للتوثيق الكامل.
الحد الأدنى (فشل البناء على تهديدات HIGH+، فحص واحد):
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DNSZLSK/[email protected] # pin to a released tag
with:
fail-on: 'high'
مع رفع SARIF إلى علامة التبويب الأمان (يتطلب security-events: write؛ يشغّل تمريرة ثانية لإصدار SARIF):
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: DNSZLSK/[email protected]
with:
path: '.'
fail-on: 'high'
sarif: 'results.sarif'
المدخلات
المخرجات (استهلكها في خطوات لاحقة عبر steps.<id>.outputs.*)
muaddib init-hooks # كشف تلقائي (husky/pre-commit/git)
muaddib init-hooks --type husky # فرض husky
muaddib init-hooks --mode diff # حظر التهديدات الجديدة فقط
مع إطار pre-commit:
repos:
- repo: https://github.com/DNSZLSK/muad-dib
rev: v2.11.139
hooks:
- id: muaddib-scan
آخر قياس v2.11.48 (2026-05-26)، قواعد فقط (مصنّف التعلم الآلي غير مفعّل — انظر أدناه). الحقيقة الأرضية: 94 هجومًا حقيقيًا داخل النطاق + 200 npm عشوائي + 124 PyPI + 107 عدائي/احتياطي.
مصنّف التعلم الآلي: غير مفعّل. يوجد نموذج XGBoost في src/ml/ لكنه غير موصول أبدًا بـ muaddib scan، ويعمل في وضع LOG-ONLY في المراقب منذ 2026-04-08 (النموذج المدرب انهار، بانتظار إعادة التدريب). جميع الأرقام أعلاه قواعد فقط.
البروتوكول الكامل، وتاريخ كل مسار، وملاحظة سقف PyPI البالغ 35، والتغطية التشغيلية (المعتمدة على GHSA)، ومنهجية إعادة تدريب التعلم الآلي: منهجية التقييم.
حرّر ملفات YAML في iocs/:
- id: NEW-MALWARE-001
name: "malicious-package"
version: "*"
severity: critical
confidence: high
source: community
description: "Threat description"
references:
- https://example.com/article
mitre: T1195.002
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm test
MUAD'DIB مرخّص بموجب GNU Affero General Public License v3.0 فقط (AGPL-3.0-only) — انظر LICENSE و NOTICE.
أنت حر في استخدامه ودراسته وتعديله وإعادة توزيعه — بما في ذلك عبر الشبكة — بشرط إصدار الأعمال المشتقة والتعديلات المنشورة عبر الشبكة بموجب نفس الترخيص.
الترخيص التجاري: لدمج MUAD'DIB في منتج مملوك / مغلق المصدر، أو لتقديمه كخدمة مستضافة دون التزامات الكشف عن المصدر في AGPL، يتوفر ترخيص تجاري منفصل. افتح مشكلة أو تواصل مع المؤلف (DNSZLSK).
حقوق النشر (C) 2026 DNSZLSK.
يجب أن تتدفق التوابل. يجب أن تموت الديدان.
| الماسح | الكشف |
|---|
| تحليل AST (acorn) | eval، Function، سرقة الاعتمادات، مسقِطات ثنائية، خطافات النموذج الأولي |
| مطابقة الأنماط | أوامر Shell، قذائف عكسية، مفتاح الموت |
| تحليل تدفق البيانات | قراءة الاعتمادات + إرسال شبكي (داخل الملف وعبر الملفات) |
| كشف التعتيم | أنماط تعتيم JS (تخطي .min.js) |
| معالجة مسبقة لإزالة التعتيم | تسلسل السلاسل، charcode، base64، مصفوفة hex، نشر الثوابت |
| تدفق البيانات بين الوحدات | انتشار التلوث عبر الملفات (سلاسل من 3 قفزات، طرق الفئات) |
| تماسك النية | اقتران المصدر-المصرف داخل الملف (اعتماد + eval/شبكة) |
| Typosquatting | npm + PyPI (مسافة Levenshtein) |
| ماسح Python | requirements.txt، setup.py، pyproject.toml، أكثر من 14 ألف IOC لـ PyPI |
| إنتروبيا شانون | سلاسل عالية الإنتروبيا (5.5 بت + 50 حرفًا كحد أدنى) |
| ماسح إعدادات الذكاء الاصطناعي | حقن .cursorrules، CLAUDE.md، copilot-instructions.md |
| الحزم/التبعيات | سكربتات دورة الحياة، مطابقة IOC (أكثر من 225 ألف حزمة) |
| GitHub Actions | كشف باب خلفي Shai-Hulud |
| ماسح التجزئات | تجزئات ملفات خبيثة معروفة |
| سلاسل IOC (intel-triage P1.1) | مطابقة سلاسل بنمط YARA (Axios 2026، TeamPCP، GlassWorm، CanisterSprawl) |
| AST مضاد للطب الشرعي (intel-triage P1.2) | حلقة XOR + حذف ذاتي + كتابة خداعية مركّبة (csec autodelete) |
| حزمة واجهة (intel-triage P1.3) | ملف رئيسي صغير + عنوان URL تبعية خارجية + خطاف دورة الحياة (سلسلة ltidi) |
| ماسح Monorepo | كشف Lerna/pnpm-workspace/turbo (إصلاح تدقيق Sprint 1 MR-C2) |
| فرق التبعية الموثوقة (اختياري) | فرق مقابل أرشيفات تبعيات موثوقة من السجل (v2.10.x) |
| مصدر Python (PYSRC) | أنماط RCE وقت الاستيراد / التثبيت في __init__.py / setup.py (v2.11.41 — يسد فجوة TrapDoor PyPI) |
| AST Python (PYAST) | AST Tree-sitter-Python مع كاشفات مدركة للتلوث (v2.11.42+) |
| حقن مضاد الماسح (ASI) | نص حقن موجه في التعليقات/السلاسل يجبر مراجع كود LLM على إصدار حكم نظيف أو تخطي حمولة معتّمة (ASI-001..004، حملة Hades 2026-06) |
| الحملة | الحالة |
|---|
| GlassWorm (2026، أكثر من 433 حزمة) | مكتشفة |
| Shai-Hulud v1/v2/v3 (2025) | مكتشفة |
| event-stream (2018) | مكتشفة |
| eslint-scope (2018) | مكتشفة |
| برمجيات الاحتجاج (node-ipc، colors، faker) | مكتشفة |
| Typosquats (crossenv، mongose، babelcli) | مكتشفة |
| المدخل | الوصف | الافتراضي |
|---|
path | المسار للفحص | . |
fail-on | الحد الأدنى للخطورة للفشل (critical/high/medium/low/none) | high |
sarif | مسار ملف إخراج SARIF — اضبطه أيضًا للرفع إلى علامة التبويب الأمان | |
paranoid | كشف فائق الصرامة (معدل إيجابيات كاذبة أعلى) | false |
version | إصدار npm لحزمة muaddib-scanner للتثبيت | latest |
| المخرج | الوصف |
|---|
risk-score | درجة المخاطر 0–100 |
risk-level | SAFE / LOW / MEDIUM / HIGH / CRITICAL |
threats-count | إجمالي التهديدات المكتشفة |
critical-count / high-count | التهديدات حسب الخطورة |
exit-code | 0 = اجتاز بوابة fail-on، غير صفري بخلاف ذلك |
sarif-file | المسار إلى ملف SARIF (فارغ إذا لم يُضبط sarif) |
| المقياس | النتيجة |
|---|
| معدل الكشف (TPR@3) | 95.74% (90/94) |
| معدل التنبيه (TPR@20) | 88.30% (83/94) |
| FPR — npm منسّق (548) | 1.10% (6/545) |
| FPR — npm عشوائي (200) | 2.50% (5/200) |
| FPR — PyPI (132) | 9.68% (12/124) |
| ADR — عدائي + احتياطي | 96.26% (103/107) |
| TPR بري (Datadog 17K) | 92.8% (13,538/14,587) |