
مجموعة أدوات للكشف والمعالجة لدودة Miasma / Shai-Hulud وCVE-2026-35603 (حقن إعدادات وكيل الذكاء الاصطناعي/بيئة التطوير المتكاملة)
أدوات تحليل حوادث + كشف/معالجة لدودة Miasma (نسخة Mini Shai-Hulud) التي تحقن حمولات التشغيل التلقائي في إعدادات وكلاء الذكاء الاصطناعي / بيئات التطوير المتكاملة (IDE) ومستودعات npm/GitHub.
⚠️ إخلاء مسؤولية — لا يوجد ضمان. هذه حزمة أدوات دفاعية مجتمعية مقدمة "كما هي"، دون أي ضمان من أي نوع (انظر
LICENSE). الماسح الضوئي وقواعد YARA هي للقراءة فقط، لكنpurge-history.shيعيد كتابة تاريخ git وخطافات.claude/تنقل الملفات إلى الحجر الصحي — وكلاهما يمكن أن يغيّر مستودعًا. اعمل نسخة احتياطية أولاً، وراجع ما تقوم به كل أداة، وقم بتشغيلها على مسؤوليتك الخاصة. الفحص النظيف ليس ضمانًا للسلامة: المؤشرات تتطور وتظهر نسخ متحورة جديدة. استخدمها على الأنظمة والحسابات المصرح لك بفحصها. وجدت ثغرة أو خطأ؟ انظرSECURITY.mdوCONTRIBUTING.md.
تثبيت YARA (Windows): winget install VirusTotal.YARA — أو choco install yara / scoop install yara.
على Linux/macOS: apt install yara / brew install yara. تحقق باستخدام yara --version.
ملاحظة:
-Mode Localيفحص$env:USERPROFILEفقط افتراضيًا. مرّر-CodeRootsلتغطية مستودعات أخرى، مثل-CodeRoots E:\Sources,D:\work.
# فحص الجهاز المحلي + المستودعات المحلية (+ CVE-2026-35603 ProgramData)
pwsh -File Scan-Miasma.ps1 -Mode Local
pwsh -File Scan-Miasma.ps1 -Mode Local -CodeRoots E:\Sources,D:\work
# فحص مستودعات GitHub البعيدة (سجّل الدخول على الحساب الهدف أولاً للمستودعات/الأسرار الخاصة)
gh auth login
pwsh -File Scan-Miasma.ps1 -Mode Remote -Owners your-org,your-user -OutReport report.md
# كل شيء + JSON + تقرير Markdown
pwsh -File Scan-Miasma.ps1 -OutJson findings.json -OutReport report.md
رمز الخروج 1 إذا وُجدت أي نتيجة مصابة (مناسب لـ CI).
# تطهير تاريخ مستودع مصاب (راجع PATHS في البرنامج النصي أولاً)
./purge-history.sh /path/to/repo
# ثم، بعد مراجعة التحقق:
git push origin --force --all && git push origin --force --tags
# فحص YARA
yara -r setup-js.yar /path/to/scan
# Linux/macOS: الفحص المحلي (نسخة bash — الافتراضي هو $HOME؛ مرّر الجذور لتوسيع النطاق)
./scan-miasma.sh
./scan-miasma.sh ~/src /opt/work
# إزالة تشفير ثابتة لبرنامج حاقن ملتقط (للقراءة فقط — لا يشغّله أبدًا)
pwsh -File Expand-MiasmaPayload.ps1 -Path .github/setup.js # يكتب الطبقات + iocs.txt إلى <Path>.deob/
pwsh -File Expand-MiasmaPayload.ps1 -SelfTest # التحقق من محرك فك الترميز/فك التشفير
أداة إزالة التشفير تفك طبقة تغليف p,a,c,k,e,d، وتفك ترميز طبقة رموز الأحرف، وتكتشف تلقائيًا
وتعكس إزاحة Caesar (يمكن تجاوزها بـ -Shift)، ثم تفك تشفير كل كتلة AES-128-GCM مدمجة
(_b أداة الإقلاع، _p أداة السرقة) وتفحص الشيفرة المستردة بحثًا عن عناوين URL وعناوين IP وحسابات الإسقاط الميت.
# بعد الاستئصال: إنشاء قائمة تدوير أسرار ذات أولوية (لا تلغي شيئًا)
pwsh -File Invoke-MiasmaRotation.ps1 # يكتشف بيانات الاعتماد القابلة للوصول هنا
pwsh -File Invoke-MiasmaRotation.ps1 -OutReport rotation.md
استخدم الإجراء المركب المرفق كـخطوة أولى في أي سير عمل:
# في مستودع آخر (ثبّت على علامة/SHA لسلامة سلسلة التوريد):
- uses: actions/checkout@v4
- uses: jchable/miasma-toolkit/.github/actions/miasma-guard@main
# with:
# full-scan: 'true' # تشغيل Scan-Miasma.ps1 -Mode Local أيضًا (يتطلب pwsh)
تشغّل هذه الحزمة الحارس نفسه على نفسها عبر .github/workflows/miasma-ci.yml
(بالإشارة إلى الإجراء بمسار نسبي). الحارس مستقل عن الموجة ومقيّد بملفات إعدادات المُشغِّل الخاصة بالدودة،
لذا لا يُنتج نتائج إيجابية خاطئة أبدًا على المستندات التي تذكر سلسلة المؤشرات فقط.
.claude/)حماية فورية للأجهزة التي تشغّل Claude Code في هذا المستودع. تعيد الخطافات استخدام
iocs.psd1 (بدون مؤشرات مكررة) وهي مربوطة في .claude/settings.json:
.miasma-quarantine/<timestamp>/…
(متجاهلة بواسطة git) وتُسجَّل في .miasma-quarantine/quarantine.log — يمكن الاستعادة باستخدام Move-Item.
لا يتم حذف أي شيء نهائيًا.Test-MiasmaExcluded في Miasma.Common.ps1): ملفات الحزمة نفسها
تحتوي بشكل مشروع على سلاسل مؤشرات (iocs.psd1, Scan-Miasma.ps1, scan-miasma.sh,
Expand-MiasmaPayload.ps1, Invoke-MiasmaRotation.ps1, purge-history.sh, setup-js.yar,
content/, , , )
ولا يتم حظرها أو عزلها أبدًا.DROPPER, INJECT, FORGED, BADDEP, WORKFLOW, RUNNER, PAYLOAD, BUN-DROP, PROGRAMDATANPM-AUDIT, SECRETS (جرد التدوير), SIGNATURE, PERSIST, PROGRAMDATA-CFGgh api <404> --jq يُخرج نص الخطأ إلى stdout ← لا تثق أبدًا في صحة المخرجات؛
تحقق من $LASTEXITCODE + تحقق من الصيغة (حجم رقمي، اسم فرع دقيق).master←main بعد إعادة التسمية ← branches/master يعيد 200؛
اقبل الفرع فقط إذا كان الاسم المُعاد == الاسم المطلوب.--package-lock-only (بدون npm install, بدون تنفيذ سكربتات).قائمة الأعمال الأصلية (نسخة bash، شارات الخطورة، إزالة تشفير طبقة التغليف، مساعد التدوير) منجزة. أفكار مستقبلية:
scan-miasma.sh: إضافة وضع GitHub البعيد (حاليًا للفحص المحلي فقط).--revoke اختياري (مقيّد، مع تأكيد) لـ gh/npm/aws.| الملف | ما هو |
|---|
content/incident-report.fr.md / content/incident-report.en.md | تقرير كامل: كيف يعمل، إزالة تشفير الحمولة، مؤشرات الاختراق (IOCs)، الاستئصال |
Scan-Miasma.ps1 | ماسح موحّد (محلي + بعيد)، تقرير JSON منظم + تقرير Markdown لكل مستودع — استخدم هذا |
iocs.psd1 | مؤشرات مشتركة (تجزئات، توقيعات، حزم ضارة، إعدادات) يتم تحميلها بواسطة الماسح — حرّر المؤشرات هنا |
Expand-MiasmaPayload.ps1 | أداة إزالة التشفير الثابتة لملف setup.js — تزيل طبقة التغليف/رموز الأحرف ← Caesar ← AES-128-GCM وتستخرج خادم القيادة والتحكم (C2)/المؤشرات (لا تنفذ الحمولة أبدًا) |
Invoke-MiasmaRotation.ps1 | قائمة تدوير الأسرار — تكتشف بيانات الاعتماد القابلة للوصول من هنا وتطبع أوامر الإلغاء (للقراءة فقط؛ لا تلغي شيئًا) |
scan-miasma.sh | نسخة Bash من الفحص المحلي لأنظمة Linux/macOS (مجموعة فرعية عبر المنصات) |
purge-history.sh | تطهير الملفات الضارة من كل تاريخ git (filter-repo ← filter-branch) + نسخة احتياطية |
setup-js.yar | قواعد YARA للبرنامج الحاقن (dropper) وإعدادات المُشغِّل (launcher) |
.github/actions/miasma-guard/ | إجراء GitHub Actions مركب قابل لإعادة الاستخدام — يرفض البناء إذا وُجد البرنامج الحاقن/المُشغِّل |
.claude/ | خطافات Claude Code — حماية/حجر صحي فوري + أمر /miasma-scan (انظر أدناه) |
| الأداة | تُستخدم لـ | مطلوبة؟ |
|---|
PowerShell 7+ (pwsh) | Scan-Miasma.ps1, Expand-MiasmaPayload.ps1, Invoke-MiasmaRotation.ps1 | مطلوبة (تلك الأدوات) |
bash + coreutils (sha256sum/shasum, awk, find) | scan-miasma.sh (Linux/macOS) | نسخة bash فقط |
| git | فحوصات تاريخ المستودع المحلي، purge-history.sh | مطلوبة |
GitHub CLI (gh, مصادق عليه) | Scan-Miasma.ps1 -Mode Remote | الفحص البعيد فقط |
| npm | npm audit عن بُعد (ملف القفل فقط) | اختياري (يُتخطى تلقائيًا إذا لم يكن موجودًا) |
| git-filter-repo | إعادة كتابة التاريخ المفضلة (يتراجع إلى git filter-branch المدمج) | اختياري |
YARA (yara) | فحص setup-js.yar | اختياري |
| الخطاف | الحدث | الإجراء |
|---|
Guard-Write.ps1 | PreToolUse (Write/Edit/MultiEdit) | يحظر كتابة من شأنها حقن مؤشر دودة (يلغي استدعاء الأداة) |
Guard-Bash.ps1 | PreToolUse (Bash) | يحظر تنفيذ الدودة — node .github/setup.js, bun/bunx, مثبّت bun.sh عبر أنبوب |
Scan-Write.ps1 | PostToolUse (Write/Edit/MultiEdit) | ينبّه + يعزل ملفًا مصابًا بعد وصوله |
Session-Sweep.ps1 | SessionStart | مسح سريع للمستودع؛ يبلّغ عن أي إصابة موجودة مسبقًا في السياق |
/miasma-scan | أمر | غلاف عند الطلب حول Scan-Miasma.ps1 |
.claude/hooks|commands.github/actions/miasma-guard/.github/workflows/Guard-Bash يستهدف التنفيذ، لا الذكر: أنماطه (iocs.psd1 ← CmdSigs) مثبتة
على موضع الأوامر، لذا فإن أوامر الفرز التي تذكر مؤشرًا فقط
(grep "node .github/setup.js", yara -r setup-js.yar, cat setup.js) لا يتم حظرها —
بل فقط تشغيل node …/setup.js / bun / أنبوب تثبيت bun.sh فعليًا. ملاحظة: استدعاء bun/bunx
يُحظر تمامًا (بيئة تشغيل الدودة)؛ أضف إلى القائمة البيضاء عبر CmdSigs إذا كنت تحتاج Bun حقًا.Scan-Miasma.ps1 (للقراءة فقط)، هذه الخطافات تعدّل الشجرة (الحجر الصحي). وهي
اختيارية: يطلب Claude Code الموافقة على الخطافات في أول مرة يحمّل فيها .claude/settings.json.