
اكتشف، قيّم، واستجب لهجمات سلسلة التوريد عبر npm/yarn وPython (pip/poetry/uv). مهارة Claude Code + نصوص برمجية مستقلة. طُوّرت أثناء axios RAT (2026-03-31) وStarlette BadHost CVE-2026-48710 (2026-05-22).
مجموعة أدوات للاستجابة للحوادث لهجمات سلسلة التوريد على npm/yarn وPython (pip/poetry/uv) — مجانية، محلية، بدون تبعيات.
SCG ليس محرك فحص ينافس الأدوات التجارية في التغطية. إنه مهارة Claude Code ومجموعة أدوات شل مستقلة تنجز ثلاثة أشياء بشكل جيد: (1) يمنحك استجابة أولى سريعة وقابلة للتكرار عند وقوع حادثة محددة ("هل جهازي متأثر الآن؟")، (2) ينظّم الماسحات مفتوحة المصدر الحالية (npm audit, osv-scanner, pip-audit) في مسار واحد منظم، و**(3)** يوثّق دروس النظافة التصميمية — خاصة لبيئات تطوير الذكاء الاصطناعي — التي لا تغطيها الماسحات العامة.
تم بناؤه وتقويته أثناء حوادث حقيقية، بما في ذلك:
scripts/project-scan-py.sh مع pip-audit / osv-scanner / كشف الإصدارات المflaggedة بـ CVEفي 31 مارس 2026، تم اختراق حزمة npm واسعة الاستخدام axios (الإصدارات v1.14.1 وv0.30.4) عبر استيلاء على حساب صيانة يُنسب إلى UNC1069/DPRK-APT (وفقًا لمجموعة استخبارات التهديدات من Google). حقن الهجوم تبعية وهمية ([email protected]) تقوم بنشر حصان طروادة للتحكم عن بُعد عبر سكربتات postinstall، متنكرة في هيئة عمليات نظام مشروعة.
Supply Chain Guard (SCG) تم بناؤه أثناء الحادثة لتوفير:
SCG ليس بديلاً عن أدوات الأمان الحالية. فهو يجمع طبقات كشف متعددة مع إطار تحقق منظم ومعالجة موجّهة — مصمم للاستخدام أثناء الحوادث النشطة أو كتدقيق دوري إلى جانب أدواتك الحالية.
متى تستخدم SCG:
متى تستخدم شيئًا آخر:
نفضل أن نكون صريحين بشأن الحدود بدلاً من المبالغة. SCG ثلاثة أشياء:
دليل استجابة للحوادث، كرمز. عند وقوع حادثة مسماة (axios RAT، Shai-Hulud، CVE جديد)، يحوّل SCG عبارة "هل أنا متأثر، وإذا كان الأمر كذلك ماذا أفعل؟" إلى قائمة تحقق قابلة للتنفيذ — 8 بوابات تحقق، ومصفوفة خطورة، وسكربت معالجة حيث يتطلب كل إجراء تدميري تأكيدًا صريحًا [y/N]. هذه هي قيمته الأساسية: الاستجابة الأولى السريعة والمنظمة التي لا تُصمم لها أدوات المراقبة التجارية.
منسّق للماسحات مفتوحة المصدر الحالية. تغلّف طبقتا L1/L2 أدوات npm audit / pip-audit / osv-scanner. معظم قوة الكشف الخام مستعارة؛ مساهمة SCG هي دمجها في مسار واحد، وإضافة فحوصات نظام ملفات/IOC لا تقوم بها أدوات السجل، وجعل المخرجات قابلة للقراءة والتنفيذ.
توثيق لدروس النظافة التصميمية الحقيقية (SKILL.md §D.7) — أشياء واجهناها أو حققنا فيها فعلًا: اختيار نقل MCP، وتقوية حساب الخدمة الافتراضي في GCP، ونواقل التنفيذ وقت التثبيت، والتهديدات التي تستهدف أدوات تطوير الذكاء الاصطناعي (Shai-Hulud يقرأ .claude/settings.json، وSANDWORM_MODE يسمّم إعدادات MCP). هذا المجال — نظافة سلسلة التوريد للتطوير بمساعدة الذكاء الاصطناعي — هو حيث يتميز SCG حقًا.
SKILL.md D.2، قوائم L3 الثابتة) تُصان يدويًا — تحوي الحوادث التي قرأنا عنها، وليس عشرات الآلاف من الحزم الضارة التي تتعقبها خلاصة تجارية حية. قائمة منسقة يدويًا لا يمكنها مواكبة المعدل الحقيقي للتهديدات الجديدة، ولا ندّعي ذلك.بما أن قاعدة بيانات منسقة يدويًا لا يمكنها الفوز بالتغطية، فإننا نستثمر عمدًا حيث يصعب استبدال SCG بدلاً من حيث سيخسر دائمًا:
ستستمر قاعدة بيانات التهديدات الثابتة (#2) في التحديث عند وقوع حوادث بارزة، لكنها صراحةً ليست الاتجاه الذي نحاول المنافسة فيه.
يتبع SCG بنية التصميم المدفوع بالمجال (DDD) بثلاث طبقات:``` +-----------------------------------------------------+ | Domain Layer | | Threat models, known threats DB, severity matrix, | | Devil Gate definitions | +-----------------------------------------------------+ | Application Layer | | Use cases, scan pipeline, response protocols, | | Devil execution loop | +-----------------------------------------------------+ | Infrastructure Layer | | Scanner scripts (npm audit, OSV, static list, | | IOC filesystem, network, lockfile integrity) | +-----------------------------------------------------+
### خط أنابيب الفحص
ينطبق خط الأنابيب نفسه المكوّن من 5 طبقات على كلا النظامين البيئيين، مع ماسحات ضوئية خاصة بكل نظام بيئي في كل طبقة:```
L1 ──→ L2 ──→ L3 ──→ IOC ──→ LF ──→ assess(SeverityMatrix) ──→ VERDICT
يغذّي كلا المسارين نفس SeverityMatrix وDevil Gate Framework.
انسخ SKILL.md إلى دليل مهارات Claude Code لديك:```bash
cp SKILL.md ~/.claude/skills/supply-chain-guard.md
mkdir -p .claude/skills cp SKILL.md .claude/skills/supply-chain-guard.md
ثم استدعِ في Claude Code:```
> /supply-chain-guard
> "Check this project for supply chain issues"
> "Is my machine affected by the axios compromise?"
./scripts/env-scan.sh
./scripts/project-scan.sh
./scripts/project-scan-py.sh
./scripts/ioc-scan.sh
./scripts/respond.sh --critical # Full RAT cleanup (npm + Python) ./scripts/respond.sh --high axios 1.14.0 # Pin npm package to safe version ./scripts/respond.sh --high urllib3 2.7.0 # Pin Python package (auto-detects pip/poetry/uv)
> **المعالجة في Python متحفظة بحكم التصميم.** بالنسبة إلى npm، يطبّق `--high` التجاوز
> تلقائيًا. أما بالنسبة إلى Python، فهو *يوجّه*: يكتشف مدير الحزم
> (pip/poetry/uv)، ويطبع الأمر الدقيق لتثبيت الإصدار، ولا يطبّق إلا الخطوة الآمنة —
> تُعرض لك أوامر تعديل ملف القفل وإعادة بناء البيئة الافتراضية لتنفيذها. وهذا
> يتجنّب أن يتسبب الإنذار الإيجابي الكاذب في إعادة تثبيت قسرية شاملة عبر
> النظام البيئي المجزّأ لتغليف Python.
بالنسبة إلى مستودع متعدد اللغات (npm + Python)، شغّل ماسحي المشروع معًا بالتتابع من المجلدات الفرعية ذات الصلة.
> **تصميم السلامة:** جميع سكربتات الفحص للقراءة فقط بشكل صارم — فهي لا تعدّل أو تحذف أو تثبّت أي شيء أبدًا. سكربت المعالجة (`respond.sh`) هو السكربت الوحيد الذي ينفّذ عمليات تدميرية، و**كل إجراء على حدة يتطلب تأكيدًا صريحًا `[y/N]`** مع أن الافتراضي هو NO.
---
## أوضاع الفحص
### فحص البيئة (`env_scan`)
يفحص جهاز التطوير بالكامل بحثًا عن مؤشرات الاختراق.
| Check | Description |
|-------|-------------|
| **IOC: نظام الملفات** | ملفات RAT الثنائية، آليات الثبات، ملفات التجهيز |
| **IOC: الشبكة** | اتصالات C2 نشطة (IP + نطاق) |
| **IOC: العمليات** | عمليات ضارة قيد التشغيل |
| **عبر المشاريع** | فحص جميع ملفات `package-lock.json` بحثًا عن إصدارات مخترقة |
| **الحزم الضارة** | أسماء الحزم الضارة المعروفة في أي ملف قفل |
**المحفزات:** "هذا الكمبيوتر"، "فحص البيئة"، "على مستوى الجهاز"
### فحص المشروع — npm/yarn (`project_scan`)
فحص عميق لمشروع npm/yarn واحد. شغّله من مجلد يحتوي على `package.json`.
| Layer | Scanner | Description |
|-------|---------|-------------|
| **L1** | `npm audit` | ثغرات معروفة عبر سجل npm |
| **L2** | `osv-scanner` / OSV.dev API | قاعدة بيانات Google للثغرات في البرمجيات مفتوحة المصدر |
| **L3** | قائمة ثابتة | فحص الحزم الضارة المعروفة المضمّنة في الكود |
| **IOC** | Filesystem + Network | اكتشاف آثار RAT |
| **LF** | Lockfile integrity | `npm ci --dry-run` + عدد تجزئات التكامل |
**المحفزات:** "هذا المشروع"، "npm audit"، أو وجود `package.json` في مجلد العمل الحالي
### فحص المشروع — Python (`project_scan_py`، أُضيف في الإصدار v4)
فحص عميق لمشروع Python واحد. شغّله من مجلد يحتوي على `pyproject.toml` أو `requirements*.txt` أو `poetry.lock` أو `uv.lock`.
| Layer | Scanner | Description |
|-------|---------|-------------|
| **L1** | `pip-audit` | ثغرات معروفة عبر قاعدة بيانات PyPI الاستشارية (اختياري — تخطَّ إذا لم يكن مثبتًا؛ يُنصح بتنفيذ `pip install pip-audit`) |
| **L2** | `osv-scanner` | قاعدة بيانات Google للثغرات في البرمجيات مفتوحة المصدر مقابل `uv.lock` / `poetry.lock` / `requirements*.txt` (اختياري — تخطَّ إذا لم يكن مثبتًا) |
| **L3-MAL** | Static malicious list (`_L3_LIST`) | أسماء الحزم المعروفة التي تم اختطافها / أو التي تحاكي أسماء حزم شرعية (typosquatting). يطابق قائمة PEP 621، وإعلانات Poetry المضمّنة، والإعلانات بأسلوب requirements (انظر [PR #4](https://github.com/eris-ths/supply-chain-guard/pull/4)). يفشل عند حدوث تطابق |
| **L3-CVE** | Static CVE-flagged version list (`_L3_CVE_LIST`) | الإصدارات المعروفة والضعيفة من الحزم الشرعية (مثل `starlette<1.0.1` الخاصة بـ [BadHost CVE-2026-48710](https://cryptobriefing.com/starlette-badhost-vulnerability-ai-agents/)). تقييم صارم وفق مواصفة semver عبر مكتبة `packaging` في Python. يفشل عند تأكيد التطابق. يحذّر إذا كانت الحزمة مُصرَّحة لكن لا يوجد ملف قفل (لا يمكن تقييم الإصدار) |
| **IOC** | Filesystem + Process | فحص آثار بنكهة Python (سكربتات مارقة، عمليات مشبوهة) |
| **LF** | Lockfile integrity | يتحقق من أن `uv.lock` / `poetry.lock` / `requirements*.txt` تُحلَّل بشكل سليم وتحتوي على إصدارات مثبّتة (pinned) |
**المحفزات:** "هذا المشروع" مع وجود ملفات Python، أو أي من `pyproject.toml` / `requirements*.txt` / `poetry.lock` / `uv.lock` في مجلد العمل الحالي
> **ملاحظة حول التبعيات:** يتخطّى كل من L1 (`pip-audit`) وL2 (`osv-scanner`) بأدب مع تلميح عند غياب واجهة الأوامر (CLI) الخاصة بكل منهما. إلّا أن L3 هي الطبقة النشطة دائمًا ولا تتطلب أي أداة خارجية، لكن التقييم الدقيق لـL3-CVE يتطلب `pip install packaging`.
---
## استخبارات التهديدات
### قاعدة بيانات التهديدات المعروفة
| ID | التاريخ | الحزمة | الفاعل المهدِّد | الناقل |
|----|------|---------|-------------|--------|
| **T001** | 2026-03-31 | `[email protected]`, `[email protected]` | UNC1069/DPRK-APT | اختراق المشرف → اعتماديات شبحية → RAT |
| **T002** | 2018-11 | `[email protected]` | غير معروف | حقن التبعية → سرقة العملات الرقمية |
| **T003** | مستمر | `crossenv`, `loadsh`, `crypto-js-esm` | متنوعون | انتحال الأسماء → تسريب البيانات بعد التثبيت (postinstall) |
### سلسلة القتل T001 (axios RAT)```
Credential theft → npm publish (bypass CI) → Inject phantom dep (plain-crypto-js)
→ postinstall exec → RAT drop → C2 beacon (sfrclak.com:8000) → Persist
| الحزمة | آمن | مخترق |
|---|---|---|
| axios (الأحدث) | 1.14.0 (محدد) أو >=1.14.2 | 1.14.1 |
| axios (قديم) | 0.30.3 (محدد) | 0.30.4 |
يستخدم SCG إطار تحقق من 8 بوابات منظمًا في 4 فئات، ويُنفَّذ كسلسلة متسلسلة مع حلقة تقارب.
S1: Dependency (G1+G2) → S2: Runtime (G3+G4) → S3: Integrity (G5+G6) → S4: Environment (G7+G8) → Any fail? → Fix → Re-run entire chain → All pass? → "No concerns" → Done → 3 rounds without convergence? → Escalate to user
### مصفوفة الخطورة
| المستوى | الشرط | الإجراء |
|-------|-----------|--------|
| **CRITICAL** | تم العثور على أثر برمجية RAT أو تثبيت حزمة خبيثة | عزل الشبكة ← قتل العملية ← إزالة الثبات ← إعادة التثبيت |
| **HIGH** | إصدار مُخترق قيد الاستخدام | تثبيت إصدار آمن ← تجاوز ← `npm ci` ← تحقق |
| **MEDIUM** | نص برمجي مشبوه بعد التثبيت | مراجعة يدوية ← إدراج في القائمة البيضاء أو إزالة |
| **LOW** | انحراف ملف القفل | إعادة مزامنة `npm ci` |
| **CLEAR** | جميع الفحوصات ناجحة | لا حاجة لإجراء |
> **السلامة:** تتضمن استجابات CRITICAL/HIGH عمليات تدميرية. تعرض SCG دائمًا النتائج وتطلب تأكيدًا صريحًا من المستخدم قبل تنفيذ المعالجة.
---
## البرامج النصية المستقلة
### `scripts/env-scan.sh`
فحص كامل للبيئة. يفحص آثار مؤشرات الاختراق (IOC)، ويفحص جميع ملفات القفل ضمن `$HOME` (قابلة للتكوين)، ويُبلغ عن الحزم المخترقة.```bash
./scripts/env-scan.sh [scan_root_dir]
# Default: $HOME
scripts/project-scan.shفحص على مستوى المشروع. شغّله من مجلد يحتوي على package.json.```bash
cd my-project
/path/to/scripts/project-scan.sh
### `scripts/ioc-scan.sh`
فحص IOC فقط. يفحص آثار نظام الملفات، والعمليات الجارية، واتصالات الشبكة مقابل مؤشرات C2 المعروفة. متعدد المنصات (macOS/Linux/Windows عبر PowerShell).```bash
./scripts/ioc-scan.sh
scripts/respond.shالمعالجة التفاعلية. يتطلب كل إجراء مدمر تأكيد [y/N] (الافتراضي: NO).```bash
./scripts/respond.sh --critical
./scripts/respond.sh --high axios 1.14.0 # npm ./scripts/respond.sh --high event-stream 3.3.5 # npm ./scripts/respond.sh --high urllib3 2.7.0 # python (pip/poetry/uv auto-detected)
الخطوات في وضع `--critical`:
1. عزل الشبكة (حظر نطاق C2 عبر `/etc/hosts`)
2. إنهاء عمليات RAT
3. إزالة الاستمرارية (LaunchAgents / crontab / المهام المجدولة)
4. حذف `node_modules` وملف القفل، ومسح ذاكرة npm المؤقتة
- **4b (Python):** مسح ذاكرة pip المؤقتة (آمن، تلقائي)؛ إعادة بناء venv تظهر كخطوات يدوية
5. إعادة تثبيت التبعيات
6. المطالبة بفحص التحقق (`project-scan.sh` و/أو `project-scan-py.sh`)
تتحقق كل خطوة مما إذا كان الإجراء مطلوبًا بالفعل (مثلًا، تتخطى "kill" إذا لم تكن هناك عملية RAT قيد التشغيل) وتعرض بالضبط ما سيتم تنفيذه قبل طلب التأكيد.
بالنسبة لوضع **HIGH**، يطبّق npm التجاوز تلقائيًا؛ بينما تكون Python موجّهة (اكتشاف المدير ← طباعة أمر التثبيت ← تطبيق الخطوة الآمنة فقط). راجع ملاحظة معالجة Python في [Quick Start](#quick-start).
---
## التكامل مع CI/CD
### GitHub Actions```yaml
name: Supply Chain Guard
on:
pull_request:
paths:
- 'package.json'
- 'package-lock.json'
- 'yarn.lock'
jobs:
scg-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies (hardened)
run: npm ci --ignore-scripts
- name: Run SCG project scan
run: |
chmod +x ./scripts/project-scan.sh
./scripts/project-scan.sh
- name: Run IOC scan
run: |
chmod +x ./scripts/ioc-scan.sh
./scripts/ioc-scan.sh
npm ci --ignore-scripts # Block postinstall execution
yarn install --frozen-lockfile --ignore-scripts
> **ثبّت الإجراءات (Actions) بواسطة SHA، وليس بالوسم (tag).** المثال أعلاه يستخدم `actions/checkout@v4` لسهولة القراءة، لكن الوسوم يمكن تغييرها. في الإنتاج، ثبّت على SHA كامل للالتزام لمنع هجمات سلسلة توريد الإجراءات:
> ```yaml
> - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
> - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
> ```
---
## دليل الاستجابة
### إذا كانت الحالة حرجة (تم اكتشاف RAT)
> **لا داعي للذعر.** اتبع هذه الخطوات بالترتيب. كل خطوة تتطلب تأكيدك الصريح.
1. **عزل الشبكة** — احظر نطاق C2 عبر `/etc/hosts`
2. **إنهاء العمليات** — قم بإنهاء عمليات RAT (`com.apple.act.mond`, `ld.py`, `wt.exe`)
3. **إزالة الاستمرارية** — احذف LaunchAgents وcrontabs والمهام المجدولة
4. **تنظيف npm** — أزل `node_modules` و`package-lock.json` وامسح ذاكرة التخزين المؤقت لـ npm
5. **إعادة التثبيت** — نفّذ `npm install && npm ci` بشكل نظيف
6. **إعادة الفحص** — أعد تشغيل خط الأنابيب بالكامل، وتوقع النتيجة CLEAR
### إذا كانت الحالة مرتفعة (تم تثبيت إصدار مخترق)
1. **ثبّت الإصدار الآمن** باستخدام respond.sh: ```bash
./scripts/respond.sh --high axios 1.14.0
يضيف هذا overrides (npm) أو resolutions (yarn) إلى package.json، ويعيد التثبيت، ويطلب التحقق.
package.json: ```json
{ "overrides": { "axios": "1.14.0" } }
Yarn: { "resolutions": { "axios": "1.14.0" } }
npm ci| النوع | القيمة |
|---|---|
| نطاق C2 | sfrclak.com |
| عنوان IP الخاص بـ C2 | 142.11.206.73 |
| منفذ C2 | 8000 |
| المنصة | متنكرًا في هيئة |
|---|---|
| macOS | عملية نظام Apple (com.apple.act.mond) |
| Windows | Windows Terminal (wt.exe في ProgramData) |
SCG ────────────────────────────────── [L1:audit] CLEAR|!!sev [L2:osv] CLEAR|!!vuln-ids [L3:static] CLEAR|!!pkg [IOC:fs] CLEAR|!!C:artifact [IOC:net] CLEAR|!!C:c2 [LF:integ] CLEAR|!!drift ─── Devil Gate(8) ──────────────────── G1:direct_dep G2:transitive G3:rat_fs G4:postinstall G5:lockfile G6:provenance G7:network G8:cicd ─── Devil Chain(R.N) ───────────────── S1:dependency → S2:runtime → S3:integrity → S4:environment ─── Loop ───────────────────────────── R.N → converge|continue [VERDICT] CLEAR|HIGH|CRITICAL ───────────────────────────────────────
---
## المراجع
| المصدر | الوصف |
|--------|-------------|
| [Zenn (JP)](https://zenn.dev/gunta/articles/0152eadf05d173) | تقرير ياباني مبكر |
| [Elastic Security Labs](https://elastic.co/security-labs/axios-one-rat-to-rule-them-all) | تحليل تقني (تفكيك RAT، بروتوكول C2، الجدول الزمني) |
| [SANS](https://sans.org/blog/axios-npm-supply-chain-compromise-malicious-packages-remote-access-trojan) | إجراءات الاستجابة للحوادث للمؤسسات |
| [Huntress](https://huntress.com/blog/supply-chain-compromise-axios-npm-package) | توقيعات YARA |
| [Elastic Detections](https://elastic.co/security-labs/axios-supply-chain-compromise-detections) | قواعد كشف SIEM (YARA/osquery/KQL) |
| [Semgrep](https://semgrep.dev/blog/2026/axios-supply-chain-incident-indicators-of-compromise-and-how-to-contain-the-threat/) | قواعد التحليل الثابت، دليل الاحتواء |
| [SOCRadar](https://socradar.io/blog/axios-npm-supply-chain-attack-2026-ciso-guide/) | دليل CISO مع جدول زمني لمؤشرات الاختراق (IOC) |
| [Wiz](https://wiz.io/blog/axios-npm-compromised-in-supply-chain-attack) | تحليل تأثير السحابة، فحص الحاويات |
| [NVD CVE-2026-48710](https://nvd.nist.gov/vuln/detail/CVE-2026-48710) | **أساسي** — الإدخال المعياري لـNVD (نُشر في 2026-05-26، درجة أساسية CVSS 3.1 6.5 متوسطة، AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N) |
| [GHSA-86qp-5c8j-p5mr](https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr) | **أساسي** — استشارة GitHub الأمنية على `Kludex/starlette` (نُشرت في 2026-05-21): "التحقق المفقود من ترويسة Host يسمم request.url.path، متجاوزًا فحوصات الأمان المستندة إلى المسار" |
| [ملاحظات إصدار Starlette v1.0.1](https://github.com/Kludex/starlette/releases/tag/1.0.1) | **أساسي** — إصدار الإصلاح (نُشر في 2026-05-21). ثبّت `starlette>=1.0.1` (و`fastapi>=0.119` للحل الترابطي) |
| [تغطية Starlette BadHost (KuCoin)](https://kucoin.com/news/flash/starlette-vulnerability-exposes-millions-of-ai-agents-to-hackers) | ثانوي — تأثير على نظام Python البيئي، تأطير وكلاء الذكاء الاصطناعي |
| [تحليل BadHost لوكلاء الذكاء الاصطناعي (CryptoBriefing)](https://cryptobriefing.com/starlette-badhost-vulnerability-ai-agents/) | ثانوي — تأطير التأثير النهائي على FastAPI / vLLM / LiteLLM |
---
## تكامل Guild-CLI مع Devil
إذا كنت تستخدم [guild-cli](https://github.com/eris-ths/guild-cli) (أو أي مشروع يعرض سير عمل لعدسة Devil)، يمكن استدعاء SCG كإحدى العدسات الأمنية أثناء جولة المراجعة.
### نمط الاستدعاء الموصى به```bash
# Inside a guild-cli review session, in the project root:
~/path/to/supply-chain-guard/scripts/project-scan.sh # for npm/yarn projects
~/path/to/supply-chain-guard/scripts/project-scan-py.sh # for Python projects
# Capture the scan output as evidence for a judgment:
SCG_OUTPUT=$(~/path/to/supply-chain-guard/scripts/project-scan.sh 2>&1 || true)
# (a) Record it as a new judgment (fast-track — no prior review needed):
gate fast-track --from "$USER" \
--action "SCG supply-chain scan (Devil lense)" \
--reason "$SCG_OUTPUT"
# (b) Or attach it as the Devil lense on an existing review request <id>:
gate review <id> --lense devil --verdict concern --note "$SCG_OUTPUT"
ملاحظات حول الأعلام (تم التحقق منها مقابل guild-cli):
gate reviewيتطلب وجود<id>موجود مسبقًا، و--lense(تهجئة guild-cli هي "lense")، و--verdict(ok/concern/reject). لا يحتوي على علم--area. لتسجيل نتيجة جديدة بدون كائن مراجعة سابق، استخدمgate fast-trackكما في (a).
يتشارك Devil's Advocate ("壊しにいく") وSCG في نفس النهج: افترض الأسوأ، افحص بشكل منهجي، ثم تقارب. يوفر SCG بُعد سلسلة التوريد لتمريرة Devil — ما قد تفعله تبعيات المشروع خلف ظهرك — إلى جانب عدسات أخرى (الأمان / الصحة / البنية المعمارية / المستخدم / العمليات).
respond.sh بشكل منفصل عند الحاجة إلى المعالجة (مع تأكيد صريح من المستخدم)tail -50 إذا لزم الأمرproject-scan.sh وproject-scan-py.sh وادمج النتائجSCG أداة كشف، وليست ضمانًا أمنيًا. إن الصراحة بشأن ما يمكنه وما لا يمكنه فعله جزء من التصميم.
يتم توفير هذا البرنامج "كما هو" دون أي ضمان من أي نوع. باستخدامك لـ Supply Chain Guard، فإنك تقر وتوافق على ما يلي:
CLEAR عدم العثور على أي تطابقات مع أنماط التهديدات المعروفة للأداة. وهذا لا يعني أن نظامك أو مشروعك خالٍ من الاختراق. قد لا يتم اكتشاف هجمات جديدة أو غير معروفة أو معدّلة.respond.sh) المؤشرات المعروفة لتهديدات محددة. قد لا تزيل بشكل كامل جميع آثار اختراق متطور. إذا كنت تشتبه في اختراق نشط، فاستشر فريقًا محترفًا للاستجابة للحوادث.إن فهم ما لا يمكن لـ SCG فعله لا يقل أهمية عن معرفة ما يمكنه فعله.
قاعدة بيانات التهديدات المعروفة (D.2 في SKILL.md) تُدار يدويًا. إنها غير متصلة بأي خلاصة تهديدات حية. هناك تأخير متأصل بين اكتشاف حادثة جديدة في سلسلة التوريد وتحديث هذه القاعدة.
_L3_CVE_LIST مع تقييم صارم لمواصفات semver، وتعتمد على تثبيت packaging لمطابقة الإصدارات بدقةتحقق دائمًا بالتقاطع مع المصادر الحية مثل إشعارات npm وOSV.dev ومدونات الأمان الخاصة بالموردين المذكورة في قسم المراجع.
قد تتعارض مسارات IOC التالية، في حالات نادرة، مع البرامج الشرعية:
| مسار IOC | إيجابية كاذبة محتملة |
|---|---|
/tmp/.npm-cache/ | تخزين npm مؤقت شرعي في تكوينات غير قياسية |
/tmp/ld.py | نصوص Python غير ذات صلة بنفس اسم الملف |
اسم العملية wt.exe | Windows Terminal شرعي إذا كان موجودًا في ProgramData |
تحقق دائمًا من نتائج IOC قبل تشغيل المعالجة. يبلّغ سكربت ioc-scan.sh عن النتائج للمراجعة البشرية — وهو لا يتخذ أي إجراء. يتطلب سكربت respond.sh تأكيدًا صريحًا لكل إجراء تدميري (الافتراضي: NO) تحديدًا بسبب هذا الخطر.
lsof تكتشف فقط الاتصالات النشطة حاليًا. قد لا يكون بيكن C2 الذي يتصل بشكل متقطع نشطًا وقت الفحص.تحقق من عدم العبث بنسختك من SCG. قارن هذه المجاميع الاختبارية SHA-256 مع ملفاتك المحلية:
```67ac6216cbe18fdf7050fd267bce4157c016e5c60cd4f84f63b8cf71e80ae3b9 scripts/env-scan.sh da01f8362563b55b1553f923a748f07d24f24522366e0545e6ba0c09801f8e54 scripts/project-scan.sh 77e7ebba6d44ea020e511a49bc2cbc974d01495de40d35e8dfb7fcc93008954b scripts/project-scan-py.sh 82aaa4ed898ce354addc064ccf84cca9a498ef4e90fe58613e1110146577609f scripts/ioc-scan.sh 72ed333838b5584c3b1faf889edc81b0e3195c27396c3b36c62aaebf5f952117 scripts/ioc-scan.ps1 0e6b30e57c959180e22e0ba16f860e9fdc7304045947995084703fb14381d12e scripts/respond.sh a44be79d909058c9d216e7cbc5cca736cf8816a492c8d35a6b90c74c042abf5b SKILL.md
<!-- CHECKSUMS-END -->
للتحقق:```bash
shasum -a 256 scripts/*.sh scripts/*.ps1 SKILL.md
ملاحظة: تتوافق هذه المجاميع الاختبارية (checksums) مع أحدث إصدار. إذا قمت بتعديل أي ملفات محليًا، فستختلف المجاميع الاختبارية. عند تحديث SCG، يتم تحديث هذا القسم جنبًا إلى جنب مع تغييرات الكود.
تم البناء بواسطة Eris — لأن اعتمادياتك (dependencies) لا ينبغي أن تكون سطح هجومٍ لشخصٍ آخر.
| الأداة | ما تفعله | علاقة SCG بها |
|---|
npm audit | يفحص السجل بحثًا عن الثغرات المعروفة | يتضمن SCG npm audit كطبقة L1، ثم يضيف فحص IOC لنظام الملفات/الشبكة، وكشف الحزم الضارة، وسير عمل استجابة منظم فوق ذلك |
osv-scanner | يفحص ملفات القفل مقابل قاعدة بيانات OSV من Google | يتضمن SCG OSV كطبقة L2. osv-scanner لا يتحقق من آثار حصان طروادة على نظام الملفات أو اتصالات C2 النشطة |
| Snyk / Socket.dev | SaaS تجاري مع مراقبة لحظية، وفحوصات PR، وفحص تراخيص | SCG مجاني، محلي أولاً، بدون حساب، ولا يرسل بيانات لأطراف ثالثة. مصمم للاستجابة الفورية للحوادث بدلاً من المراقبة المستمرة |
| الاستجابة اليدوية | تحقيق مخصّص بالبرامج النصية | يوفر SCG إطارًا قابلًا للتكرار (8 بوابات تحقق، حلقة تقارب، مصفوفة خطورة) بدلاً من قوائم فحص لمرة واحدة تختلف لكل حادثة |
| Layer | npm/yarn (project-scan.sh) | Python (project-scan-py.sh) |
|---|
| L1 | npm audit | pip-audit |
| L2 | osv-scanner / OSV.dev API | osv-scanner |
| L3 | قائمة ثابتة (خبيثة + انتحال إملائي) | قائمة ثابتة (خبيثة / انتحال إملائي + إصدارات مُعلَّمة بـ CVE) |
| IOC | آثار نظام الملفات + الشبكة | آثار نظام الملفات + العمليات (مخصّصة لـ Python) |
| LF | npm ci --dry-run + عدد فحوصات التكامل | تكامل ملف القفل (uv.lock / poetry.lock / requirements*.txt) |
| # | البوابة | الفئة | السؤال |
|---|
| G1 | الاعتماد المباشر | تسميم التبعيات | هل توجد أي تبعيات مباشرة بإصدار مخترق؟ |
| G2 | الاعتماد غير المباشر | تسميم التبعيات | هل توجد أي تبعيات غير مباشرة مخترقة؟ |
| G3 | آثار RAT | اختراق وقت التشغيل | هل توجد آثار RAT على نظام الملفات؟ |
| G4 | سكربتات ما بعد التثبيت | اختراق وقت التشغيل | هل توجد سكربتات postinstall مشبوهة؟ |
| G5 | سلامة ملف القفل | السلامة | هل تم العبث بملف القفل؟ |
| G6 | المصدر | السلامة | هل الحزمة من مصدر/مطوّر موثوق؟ |
| G7 | الشبكة | البيئة | هل توجد اتصالات صادرة مشبوهة؟ |
| G8 | تحصين CI/CD | البيئة | هل يتجاوز CI/CD خطوة postinstall / يفرض ملف قفل مجمّدًا؟ |
| المنصة | المسار | النوع |
|---|
| macOS | /Library/Caches/com.apple.act.mond | ملف RAT الثنائي |
| macOS | ~/Library/LaunchAgents/com.apple.act.mond.plist | الاستمرارية |
| Windows | %PROGRAMDATA%\wt.exe | ملف RAT الثنائي (متنكرًا في هيئة Windows Terminal) |
| Windows | %TEMP%\6202033.vbs | الحاقن |
| Windows | %TEMP%\6202033.ps1 | الحاقن |
| Linux | /tmp/ld.py | سكربت RAT |
| Linux | /tmp/.npm-cache/ | دليل التجهيز |
| المنصة |
|---|
| الآلية |
|---|
| المعرف |
|---|
| macOS | LaunchAgent | com.apple.act.mond |
| Windows | مهمة مجدولة | WindowsTerminalUpdate |
| Linux | إدخال crontab | يشير إلى ld.py أو .npm-cache |
| ما يفحصه SCG | ما لا يفحصه SCG |
|---|
| إصدارات الحزم المخترقة المعروفة (قاعدة بيانات ثابتة) | هجمات سلسلة التوريد من نوع zero-day دون استشارة عامة |
| أسماء الحزم الخبيثة المعروفة | انتحال الأسماء (typosquats) غير المدرج بعد في القائمة الثابتة |
| مسارات ملفات IOC محددة للتهديدات المعروفة | برمجيات خبيثة عشوائية تُسقَط في مسارات غير قياسية |
| عناوين IP ومجالات C2 محددة | بنية C2 التحتية التي تم تدويرها أو تغييرها |
نصوص postinstall في التبعيات المباشرة | كود خبيث مبهم داخل نصوص تبدو شرعية |