اختبار أمان التطبيقات الثابت (SAST)

أفضل ممارسات SAST وإدارة الإيجابيات الخاطئة

3 دقيقة للقراءة

التحدي الأكبر مع SAST ليس العثور على الثغرات—بل إدارة الضوضاء. إليك كيفية جعل SAST قابلاً للتنفيذ.

مشكلة الإيجابيات الخاطئة

أدوات SAST غالباً ما تبلغ عن مشاكل ليست ثغرات حقيقية:

نوع النتيجةالوصفالإجراء
إيجابي حقيقيثغرة حقيقيةأصلحها
إيجابي خاطئليس قابلاً للاستغلال فعلياًاكتمها
سلبي حقيقيلا توجد مشكلة، تم تجاهلها بشكل صحيحلا شيء
سلبي خاطئثغرة مفقودةخطير!

أداة SAST صاخبة تؤدي إلى:

  • إرهاق التنبيهات: المطورون يتجاهلون كل النتائج
  • وقت ضائع: التحقيق في غير المشاكل
  • خطوط أنابيب بطيئة: مراجعة مئات النتائج

ضبط قواعد SAST

1. ابدأ بالقواعد عالية الثقة

# Semgrep: ابدأ صارماً، توسع لاحقاً
semgrep --config p/security-audit \
        --severity ERROR \
        --exclude-rule "generic.secrets.gitleaks.*"

2. إنشاء ملفات خط الأساس

تتبع النتائج المعروفة لتجنب إعادة المراجعة:

# إنشاء خط الأساس (التشغيل الأول)
semgrep --config auto --json > .semgrep-baseline.json

# التشغيل مع خط الأساس (التشغيلات اللاحقة)
semgrep --config auto --baseline-commit HEAD~1

3. تخصيص خطورة القواعد

# .semgrep/settings.yml
rules:
  - id: hardcoded-password
    severity: ERROR  # أوقف خط الأنابيب

  - id: missing-csrf-token
    severity: WARNING  # تحذير لكن لا توقف

كتم الإيجابيات الخاطئة

الكتم المضمن (عند الضرورة)

# nosemgrep: hardcoded-password
TEST_PASSWORD = "test123"  # هذا مقصود للاختبار

# أو مع السبب
password = get_from_vault()  # nosemgrep: hardcoded-password (مأخوذ من Vault)

استثناءات مستوى الملف

# .semgrep.yml
exclude:
  - "tests/**"
  - "*.test.js"
  - "migrations/**"
  - "vendor/**"

الكتم القائم على الأنماط

# كتم أنماط محددة
rules:
  - id: sql-injection
    patterns:
      - pattern: cursor.execute($QUERY)
      - pattern-not: cursor.execute($QUERY, $PARAMS)  # محدد المعلمات = آمن

سير عمل الفرز

إنشاء عملية متسقة:

┌─────────────┐
│ نتيجة جديدة │
└──────┬──────┘
┌─────────────────┐     نعم    ┌──────────────┐
│ هل هي ثغرة      │ ─────────▶ │ إنشاء مشكلة  │
│ حقيقية؟         │            │ وإصلاحها     │
└────────┬────────┘            └──────────────┘
         │ لا
┌─────────────────┐     نعم    ┌──────────────┐
│ هل ستتكرر       │ ─────────▶ │ تحديث القاعدة│
│ بشكل متكرر؟     │            │ أو خط الأساس │
└────────┬────────┘            └──────────────┘
         │ لا
┌─────────────────┐
│ إضافة كتم       │
│ مضمن            │
└─────────────────┘

المقاييس للتتبع

المقياسالهدفلماذا
معدل الإيجابيات الخاطئة< 20%الثقة في الأداة
متوسط وقت الفرز< 1 ساعةسرعة المطور
متوسط وقت المعالجة< 1 أسبوعالوضع الأمني
النتائج لكل 1000 سطراتجاه نزوليالتحسن
معدل الكتم< 30%جودة القواعد

قائمة التحقق من أفضل الممارسات

تكوين الأداة

  • ابدأ بمجموعات قواعد منسقة (مثل p/security-audit)
  • استثنِ ملفات الاختبار والكود المولد
  • حدد عتبات الخطورة المناسبة
  • فعّل الفحص التزايدي لـ PRs

العملية

  • عيّن أبطال أمان للفرز
  • وثّق قرارات الكتم
  • راجع الكتم كل ربع سنة
  • تتبع الاتجاهات بمرور الوقت

تجربة المطور

  • قدم إرشادات معالجة واضحة
  • اربط بتدريب الأمان
  • فعّل تكامل IDE للتغذية الراجعة الفورية
  • احتفِ بإصلاحات الأمان

أنماط SAST المضادة الشائعة

النمط المضادالمشكلةالحل
فحص كل شيءالضوضاء تطغى على الإشارةابدأ بالمسارات الحرجة
الحظر على كل النتائجالمطورون يعطلون الأداةاحظر فقط على الحرج/العالي
لا خط أساسإعادة مراجعة النتائج القديمةأنشئ وحافظ على خط الأساس
لا ملكيةالنتائج تتعفنعيّن لمالكي الكود
اضبط وانسَالقواعد تصبح قديمةراجع القواعد كل ربع سنة

في الوحدة التالية، سنتناول أمان التبعيات والحاويات مع أدوات SCA. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 2: اختبار أمان التطبيقات الثابت (SAST)

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.