ما هي إدارة الثغرات؟
إدارة الثغرات (Vulnerability Management) هي عملية مستمرة لاكتشاف وتقييم وإصلاح الثغرات الأمنية في التطبيق وتبعياته.
دورة حياة إدارة الثغرات:
اكتشاف --> تقييم --> معالجة --> التحقق --> توثيق
↑ |
└───────────────────────────────────────┘
فحص التبعيات (Dependency Scanning)
npm audit
# فحص التبعيات في مشروع Node.js
npm audit
# إصلاح التبعيات تلقائياً
npm audit fix
# إصلاح التغييرات الجوهرية فقط
npm audit fix --force
# عرض JSON مفصل للتقرير
npm audit --json > audit-report.json
Yarn
# فحص التبعيات في Yarn
yarn audit
# تصدير التقرير
yarn audit --json > yarn-audit.json
Dependabot
GitHub Dependabot يفحص التبعيات تلقائياً وينشئ Pull Requests للتحديثات:
# .github/dependabot.yml
version: 2
updates:
# npm dependencies
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Asia/Riyadh"
open-pull-requests-limit: 10
labels:
- "dependencies"
- "security"
reviewers:
- "team-security"
assignees:
- "security-lead"
# عدم تحديث devDependencies دفعة واحدة
allow:
- dependency-type: "production"
# تجاهل بعض الحزم
ignore:
- dependency-name: "express"
versions: [">=5.x"]
# Docker dependencies
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
مراجعة Dependabot PRs
// مثال: Auto-merge للـ patches فقط
// يمكن استخدام GitHub Actions لدمج التحديثات الآمنة تلقائياً
name: Auto-merge Dependabot
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
if: ${{ github.actor == 'dependabot[bot]' }}
runs-on: ubuntu-latest
steps:
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Snyk
أداة متقدمة لفحص الثغرات مع لوحة تحكم:
# تثبيت Snyk CLI
npm install -g snyk
# المصادقة
snyk auth
# فحص المشروع
snyk test
# فحص Docker image
snyk container test node:18-alpine
# فحص مستمر (Monitor)
snyk monitor
# فحص في CI/CD (يفشل البناء إذا كان هناك ثغرات حرجة)
snyk test --severity-threshold=high
دمج Snyk مع GitHub Actions
name: Snyk Security Scan
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
Software Composition Analysis (SCA)
SCA تحلل كل المكونات مفتوحة المصدر في تطبيقك:
// مثال: برنامج SCA بسيط
const fs = require('fs');
const https = require('https');
async function checkDependencies(packageJson) {
const deps = {
...packageJson.dependencies,
...packageJson.devDependencies,
};
for (const [name, version] of Object.entries(deps)) {
const cleanVersion = version.replace('^', '').replace('~', '');
const cves = await checkNVD(name, cleanVersion);
if (cves.length > 0) {
console.log(`⚠️ ${name}@${cleanVersion}: ${cves.length} CVEs`);
cves.forEach(cve => console.log(` - ${cve.id}: ${cve.severity}`));
}
}
}
// استعلام NVD (National Vulnerability Database)
async function checkNVD(packageName, version) {
const url = `https://services.nvd.nist.gov/rest/json/cves/2.0` +
`?keywordSearch=${packageName} ${version}&resultsPerPage=20`;
// تنفيذ الاستعلام...
}
إدارة التصحيحات (Patch Management)
استراتيجية التحديثات
# استراتيجية التحديثات
تبعيات المصادقة والحماية:
- تحديث فوري (خلال 24 ساعة)
- أولوية P0
- Auto-merge للتصحيحات الأمنية
تبعيات أساسية (Express, PostgreSQL driver):
- تحديث خلال 7 أيام
- أولوية P1
- مراجعة يدوية للـ Changelog
تبعيات ثانوية (Lodash, Date libraries):
- تحديث شهري
- أولوية P2
- دمج مع التحديثات الدورية
CI/CD Pipeline مع فحص أمني
# .github/workflows/security.yml
name: Security Checks
on:
push:
branches: [main, develop]
pull_request:
schedule:
- cron: '0 6 * * 1' # كل أسبوع
jobs:
dependency-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: npm audit
run: |
npm audit --audit-level=high
# exit 1 إذا كان هناك ثغرات عالية
- name: Snyk scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
continue-on-error: true # لا يمنع الدمج لكن ينبه
- name: SAST scan
uses: github/codeql-action/analyze@v2
- name: Dependency review
uses: actions/dependency-review-action@v3
مراقبة CVEs (Common Vulnerabilities and Exposures)
// خدمة مراقبة CVEs
const CVE_FEEDS = [
'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-recent.json',
'https://raw.githubusercontent.com/advisories/ghsa-advisories.json',
];
async function monitorCVEs() {
for (const feed of CVE_FEEDS) {
const cves = await fetch(feed).then(r => r.json());
for (const cve of cves.CVE_Items) {
if (cve.impact.baseMetricV3?.cvssV3?.baseScore >= 7.0) {
const affected = await checkIfAffected(cve);
if (affected) {
await notifyTeam({
severity: cve.impact.baseMetricV3.cvssV3.baseSeverity,
cve: cve.cve.CVE_data_meta.ID,
description: cve.cve.description.description_data[0].value,
affectedPackages: affected,
});
}
}
}
}
}
أفضل ممارسات إدارة الثغرات
- افحص التبعيات في كل commit (npm audit, Snyk)
- استخدم Dependabot أو Renovate للتحديثات التلقائية
- طبق SCA (Software Composition Analysis) في CI/CD
- راقب CVEs خاصة بـ NVD و GitHub Advisory Database
- استخدم Lock Files (package-lock.json, yarn.lock) لتثبيت الإصدارات
- طبق سياسة تحديثات واضحة (متى يتم التحديث فوراً ومتى ينتظر)
- اختبر التحديثات قبل النشر (Staging Environment)
- وثق تاريخ التحديثات لأغراض التدقيق
⚠️ 80% من الثغرات في التطبيقات تأتي من التبعيات الخارجية (التقارير: Snyk, 2023). تجاهل تحديث التبعيات هو أسوأ خطأ أمني يمكن ارتكابه.
🎯 التالي: رؤوس الأمان وتطبيق CSP