MAISON CODE .
/ Security · Pentesting · Hacking · Backend · Audit

اختبار الاختراق: الهندسة ضد قانون مورفي

تفتقد الماسحات الضوئية الآلية أكبر الأخطاء. دليل عميق لهجمات منطق الأعمال، وظروف السباق، وتأمين سلسلة التوريد.

AB
Alex B.
اختبار الاختراق: الهندسة ضد قانون مورفي

لديك جدار الحماية. أنت تستخدم HTTPS. قمت بتشغيل “تدقيق npm”. ولكن إذا كان بإمكاني تغيير حمولة JSON لطلب “شراء” لإرسال “السعر: 0.01” ويقبلها خادمك، فإن جدار الحماية الخاص بك سيكون عديم الفائدة.

اختبار الاختراق (Pentesting) هو مجال الهندسة التنافسية. لا يتعلق الأمر بـ “تحديد خانات الاختيار” للامتثال. يتعلق الأمر بالمحاولة النشطة لتدمير التطبيق الخاص بك قبل أن يفعل شخص آخر ذلك.

في Maison Code Paris، نرى الأمن باعتباره الشكل النهائي لضمان الجودة. الخطأ الذي يعطل التطبيق أمر مزعج. يعد الخلل الذي يتسبب في تسرب 10000 بطاقة ائتمان للعملاء أمرًا وجوديًا.

لماذا تتحدث Maison Code عن هذا

في Maison Code Paris، نعمل كضمير معمari لعملائنا. غالبًا ما نرث حزمًا “حديثة” تم بناؤها دون فهم أساسي للحجم.

نناقش هذا الموضوع لأنه يمثل نقطة تحول حاسمة في النضج الهندسي. التنفيذ الصحيح يميز MVP الهش عن منصة مؤسسية مرنة يمكنها التعامل مع حركة مرور الجمعة السوداء.

حدود الأتمتة

تقوم معظم الفرق بتشغيل ماسح ضوئي آلي (مثل OWASP ZAP أو Nessus) وتعتقد أنها آمنة. تعد الماسحات الضوئية رائعة في العثور على أخطاء نحوية:

  • حقن SQL (” أو 1 = 1`).
  • XSS (<script>تنبيه(1)</script>).
  • المكتبات القديمة (CVE-2023-XXXX).

الماسحات الضوئية سيئة للغاية في العثور على الأخطاء المنطقية:

  • “هل يمكنني تطبيق نفس رمز الخصم 50 مرة في وقت واحد؟”
  • “هل يمكنني عرض سجل طلبات معرف المستخدم 5 إذا قمت بتسجيل الدخول باسم معرف المستخدم 4؟”
  • “هل يمكنني تحديد سعر السلعة بالسالب؟”

هذه هي نقاط الضعف في منطق الأعمال، وهي تمثل غالبية الخسائر المالية في التجارة الإلكترونية الحديثة.

الثغرة الأمنية 1: IDOR (مرجع الكائن المباشر غير الآمن)

هذا هو الخلل الأكثر شيوعًا في واجهات برمجة التطبيقات الحديثة (GraphQL/REST). يحدث ذلك عندما تثق في العميل ليخبرك بالمورد الذي يمكنك الوصول إليه، دون التحقق من الملكية.

الهجوم: يقوم المستخدم “أ” بتسجيل الدخول. وينظر إلى عنوان URL أو علامة تبويب الشبكة: الحصول على /api/orders/5001 يغيرونها إلى: الحصول على /api/orders/5002

إذا قام الخادم بإرجاع طلب المستخدم ب، فهذا يعني أن لديك معرفًا.

** الكود الضعيف **:

// BAD: الثقة في المعرف الذي قدمه المستخدم
app.get('/api/orders/:id', async (req, res) => {
  أمر ثابت = انتظار db.order.findUnique({
    حيث: {المعرف: req.params.id}
  });
  res.json(order);
});

الرمز الآمن:

// جيد: تحديد نطاق الاستعلام للمستخدم المصادق عليه
app.get('/api/orders/:id', async (req, res) => {
  جلسة ثابتة = انتظار getSession(req);
  أمر ثابت = انتظار db.order.findFirst({
    حيث: { 
      المعرف: req.params.id،
      معرف المستخدم: session.userId // الفحص النقدي
    }
  });
  
  إذا تم إرجاع (!order) res.status(404).send("لم يتم العثور عليه"); // لا تقل "ممنوع"، فقط قل "لم يتم العثور عليه" لتجنب التسرب
  res.json(order);
});

الثغرة الأمنية 2: ظروف السباق (اختراق القسيمة)

خوادم الويب متزامنة. يتعاملون مع آلاف الطلبات في الثانية. إذا لم يكن منطق قاعدة البيانات الخاصة بك “آمنًا لمؤشر الترابط” (أو آمنًا للمعاملات)، فأنت عرضة للخطر.

الهجوم:

  1. يرسل الموقع الرمز الترويجي: “SAVE50” (بحد أقصى استخدام واحد لكل عميل).
  2. يكتب المهاجم برنامجًا نصيًا لإرسال 50 طلب HTTP POST إلى /apply-coupon في وقت واحد (في غضون 5 مللي ثانية).
  3. يقوم الخادم بمعالجة الطلب 1: “هل استخدم المستخدم القسيمة؟ لا. قم بتطبيق الخصم.”
  4. يقوم الخادم بمعالجة الطلب 2 (قبل أن يلتزم الطلب 1 بقاعدة البيانات): “هل استخدم المستخدم قسيمة؟ لا. قم بتطبيق الخصم.”
  5. النتيجة: يحصل المستخدم على خصم 50 مرة. الطلب مجاني.

الإصلاح: قفل قاعدة البيانات: يجب عليك استخدام المعاملات مع مستوى العزل الصحيح أو قفل الصف الصريح.

- بوستجري إس كيو إل / ماي إس كيو إل
ابدأ؛
اختر * من المستخدمين حيث المعرف = 1 للتحديث؛ - تأمين الصف
- التحقق من استخدام القسيمة
- تطبيق القسيمة
تحديث المستخدمين SET Coupon_used = true WHERE id = 1;
يقترف؛

في مصطلحات Prisma/ORM، استخدم معاملة $ مع العزل التفاعلي إن أمكن، أو استخدم Mutex في Redis إذا كنت تتعامل مع العدادات الموزعة.

الضعف 3: هجمات سلسلة التوريد

في عام 2025، ستكتب 10% من الكود الخاص بك. أما نسبة الـ 90% الأخرى فتأتي من “node_modules”. لقد توقف المتسللون عن مهاجمة خادمك؛ يهاجمون تبعياتك. يقومون بنشر حزمة مثل “lodash-utils” (typosquatting) أو اختراق حساب مشرف الحزمة الشهير.

** الدفاع في العمق **:

  1. Lockfiles: التزم دائمًا بـpackage-lock.json. ويضمن الإصدارات الدقيقة.
  2. عمليات تدقيق CI: قم بتشغيل npm Audit --audit-level=high في مسار الإنشاء الخاص بك. فشل الإنشاء إذا تم العثور على العناصر الحرجة.
  3. الأدوات الحديثة: استخدم Socket.dev أو Snyk. يقومون بتحليل سلوك الحزمة (“لماذا تحتاج مكتبة CSS هذه إلى الوصول إلى الشبكة؟”).

الثغرة الأمنية 4: حقن NoSQL

يعلم الجميع عن حقن SQL. ولكن إذا كنت تستخدم MongoDB، فلن تكون محصنًا. يسمح MongoDB بكائنات الاستعلام. إذا قبلت JSON الخام من العميل: db.users.find({ username: req.body.username }).

الهجوم: يرسل المستخدم JSON: { "username": { "$gt": "" } }. يُترجم هذا إلى: “البحث عن المستخدمين حيث يكون اسم المستخدم أكبر من سلسلة فارغة.” هذا يطابق الجميع. يقوم المهاجم بتسجيل الدخول باعتباره المستخدم المسؤول الأول.

الإصلاح: تعقيم المدخلات لا تقم أبدًا بتمرير req.body مباشرة إلى استعلام قاعدة البيانات. استخدم مكتبات مثل zod للتحقق من صحة البنية (تأكد من أن username عبارة عن سلسلة، وليس كائنًا).

استيراد {z} من 'zod'؛

مخطط تسجيل الدخول ثابت = z.object({
  اسم المستخدم: z.string(), // يرفض كائنات مثل { $gt: "" }
  كلمة المرور: z.string()
});

const body = LoginSchema.parse(req.body); // يرمي إذا كان غير صالح

تمرين الفريق الأحمر

في Maison Code، نوصي بإجراء تمرين الفريق الأحمر ربع السنوي. قمنا بتعيين مهندسين مسموح لهما بمهاجمة بيئة التدريج.

  • يحاولون تجاوز الدفع.
  • يحاولون تصعيد الامتيازات.
  • يحاولون الوصول إلى بيانات المستخدمين الآخرين.

يؤدي هذا “اللعب” للأمان إلى خلق ثقافة يفخر فيها المطورون بإيجاد الثغرات، بدلاً من الشعور بالخجل.

10. برامج مكافأة اكتشاف الأخطاء (المتسللون كموظفين)

لا يمكنك توظيف ما يكفي من مهندسي الأمن. ولكن يمكنك استئجار قراصنة العالم. نحن نساعد العملاء على الإطلاق على HackerOne أو Bugcrowd.

  • السياسة: “إذا وجدت P1 (حرج)، فإننا ندفع 5000 دولار.”
  • النتيجة: في غضون 24 ساعة، سيقوم 500 باحث بفحص موقعك. سوف يجدون الأشياء التي فاتها الماسح الضوئي الذي تبلغ قيمته 100 ألف دولار. “لقد وجدت طريقة لتجاوز المصادقة الثنائية عن طريق إزالة معلمة “الرمز المميز”.” إن دفع 5000 دولار مقابل هذه النتيجة أرخص من غرامة قدرها 5 ملايين دولار بموجب اللائحة العامة لحماية البيانات.

11. الهندسة الاجتماعية (جدار الحماية البشري)

جدار الحماية الخاص بك قوي. موظف الاستقبال الخاص بك لطيف. المتسللين يعرفون هذا. محاكاة التصيد الاحتيالي: نرسل رسائل بريد إلكتروني مزيفة إلى موظفيك. “عاجل: يحتاج الرئيس التنفيذي إلى تحويل إلكتروني.” إذا قاموا بالنقر، فسيتم تسجيلهم في التدريب. الأمن الجسدي: هل يمكنني الدخول إلى مكتبك بفعالية؟ الأمن ليس مجرد رمز؛ إنه الناس.

12. إدارة الوضع الأمني السحابي (CSPM)

لقد قمت بتأمين الرمز. لكن هل تركت دلو S3 مفتوحًا؟ تقوم أدوات CSPM (Wiz وOrca) بفحص بيئة AWS الخاصة بك. “تنبيه: منفذ قاعدة بيانات RDS رقم 5432 مفتوح لـ 0.0.0.0/0”. هذا ليس خطأ رمز. إنه خطأ في التكوين. نحن نتعامل مع البنية التحتية كرمز (Terraform) كحدود أمنية. يتم تشغيل “checkov” في مسار CI الخاص بنا لمنع أي التزام يفتح مجموعة أمان للعالم.

13. الفحص السري (مشكلة سجل Git)

لقد ارتكبت خطأً AWS_SECRET_KEY في عام 2021. لقد قمت بحذفه في الالتزام التالي. لا يزال موجودًا في سجل .git. يقوم المتسللون باستنساخ الريبو الخاص بك وإلقاء نظرة على السجل. نستخدم TruffleHog أو GitGuardian لفحص سجل الالتزام بالكامل. إذا تم العثور على سر، نقوم بتدويره على الفور. إبطال المفتاح هو الإصلاح الوحيد.

14. الاستنتاج

الأمان ليس منتجًا تشتريه. إنها عقلية. إذا كنت تعتقد “أنا أصغر من أن يتم اختراقي”، فأنت مخطئ. تقوم الروبوتات بفحص كل عنوان IP على الإنترنت باستمرار. إنهم لا يهتمون إذا كنت ضمن قائمة Fortune 500 أو مدونة؛ إذا كانت لديك ثغرة أمنية، فسوف يستغلونها لاستخراج العملات المشفرة أو إرسال رسائل غير مرغوب فيها.

تعامل مع طلبك وكأنه حصن. تدقيق كل بوابة. لا تثق بأحد.


**[قم بتوظيف مهندسينا](/contact)**.