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

فهم SAST: الأمان على مستوى الكود

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

اختبار أمان التطبيقات الثابت (SAST) يحلل الكود المصدري للعثور على الثغرات الأمنية دون تنفيذ التطبيق. فكر فيه كمدقق إملائي للأمان—يقرأ كودك ويشير إلى المشاكل المحتملة.

كيف يعمل SAST

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│ الكود المصدر│ ──▶ │ محرك SAST   │ ──▶ │   التقرير   │
│ (.py, .js)  │     │ (محلل +     │     │ (الثغرات + │
│             │     │  قواعد)     │     │  المواقع)  │
└─────────────┘     └──────────────┘     └─────────────┘

أدوات SAST:

  1. تحلل كودك إلى شجرة تركيب مجردة (AST)
  2. تطبق قواعد لاكتشاف الأنماط الضعيفة
  3. تقدم تقريراً بالنتائج مع مواقع الملفات ونصائح المعالجة

ما يجده SAST

نوع الثغرة مثال كشف SAST
SQL Injection query = "SELECT * FROM users WHERE id=" + user_input مطابقة الأنماط على ربط السلاسل في الاستعلامات
XSS innerHTML = userInput تتبع البيانات غير الموثوقة إلى نقاط DOM
الأسرار المشفرة api_key = "sk-1234abcd" أنماط regex لصيغ مفاتيح API
اجتياز المسار open(user_path) تتبع مدخلات المستخدم لعمليات الملفات
إلغاء التسلسل غير الآمن pickle.loads(data) استدعاءات دوال خطرة معروفة

SAST مقابل DAST: نهجان متكاملان

الجانب SAST DAST
متى قبل وقت التشغيل (مرحلة البناء) أثناء وقت التشغيل (مرحلة الاختبار)
ما يراه الكود المصدري التطبيق قيد التشغيل
التغطية جميع مسارات الكود فقط المسارات المنفذة
الإيجابيات الخاطئة أعلى (بدون سياق وقت التشغيل) أقل (يتحقق من الاستغلال)
السرعة سريع (دقائق) أبطأ (ساعات)
اللغات خاص بلغة معينة لا يعتمد على اللغة

أنواع تحليل SAST

1. مطابقة الأنماط

كشف بسيط قائم على regex:

# مكتشف بنمط: password\s*=\s*["'][^"']+["']
password = "hardcoded123"  # SAST يشير إلى هذا

2. تحليل تدفق البيانات

يتتبع البيانات من المصادر إلى المصارف:

# المصدر: مدخلات المستخدم
user_input = request.args.get('query')

# ... الكود ...

# المصرف: استعلام قاعدة البيانات (SAST يتتبع التدفق)
cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'")

3. تحليل تدفق التحكم

يفهم مسارات التنفيذ:

def process(data):
    if validate(data):  # مسار آمن
        safe_process(data)
    else:
        # SAST يعرف أن هذا المسار موجود
        unsafe_process(data)  # قد يشير إلى هذا

قيود SAST

كن على دراية بما لا يستطيع SAST فعله:

  • سلوك وقت التشغيل: لا يكتشف المشاكل التي تظهر فقط أثناء التشغيل
  • عيوب منطق الأعمال: لا يفهم قصد تطبيقك
  • مشاكل التكوين: عادةً يركز على الكود، ليس ملفات التكوين
  • الكود مغلق المصدر من الطرف الثالث: يمكنه فقط تحليل المصدر الذي تقدمه

اختيار نتائج SAST للعمل عليها

ليست كل النتائج متساوية. رتب الأولويات حسب:

  1. الخطورة: حرج > عالي > متوسط > منخفض
  2. الثقة: النتائج عالية الثقة أكثر احتمالاً أن تكون إيجابيات حقيقية
  3. قابلية الاستغلال: هل يمكن للمهاجم الوصول لهذه الثغرة؟
  4. حساسية البيانات: هل هذا يؤثر على PII أو بيانات الاعتماد أو البيانات المالية؟

بعد ذلك، سنستكشف أفضل أدوات SAST ومتى تستخدم كل منها. :::

اختبار

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

خذ الاختبار