تفكير المهاجم: الثقة والمدخلات

جارٍ التحميل…

01 / ملخص الدرس

تفكير المهاجم: الثقة والمدخلات

إزاي المهاجم بيبص للنظام بشكل مختلف: بيسأل بيثق في إيه، وإيه اللي هيحصل لو المدخل ما كانش متوقع.

02 / شرح الدرس مكتوبًا

نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.

أهلاً بيك. لحد دلوقتي كنا بنتعلم إزاي الحاجات بتشتغل. من النهاردة هنتعلم حاجة أهم: إزاي الحاجات دي ممكن تتكسر. وده أول درس في تفكير المهاجم.

المطوّر لما بيكتب برنامج، بيفكر: المستخدم هيعمل إيه؟ بس المهاجم بيفكر بشكل تاني خالص: البرنامج ده بيِسِق في إيه؟ مين يقدر يدخّل بيانات؟ وإيه اللي هيحصل لو دخّلت حاجة محدش اتوقعها؟ المطوّر بيختبر الـ Happy Path، يعني الطريق الطبيعي. المهاجم بيختبر الأطراف: رقم سالب، رقم كبير قوي، خانة فاضية، حروف غريبة، أو حاجة مكتوبة في المكان الغلط. نشوف مِسال. متجر عنده function بتعمل خصم على السعر. المطوّر اختبرها بخصم عشرة في المِيّة، واشتغلت. نشغّل… تسعمية. تمام.

main.py
def apply_discount(price, percent):
    return price - price * percent / 100

print(apply_discount(1000, 10))

المخرجات

900.0

دلوقتي نفكر زي المهاجم. الخصم ده جاي من المستخدم… يعني أنا أقدر أغيّره. أجرّب مِيّة في المِيّة، ومِيّة وخمسين، وسالب خمسين. نشغّل… بقى ببلاش، وبعدين الموقع بقى بيدفع لي أنا! والخصم السالب زوّد السعر.

main.py
def apply_discount(price, percent):
    return price - price * percent / 100

print(apply_discount(1000, 10))
print(apply_discount(1000, 100))
print(apply_discount(1000, 150))
print(apply_discount(1000, -50))

المخرجات

900.0
0.0
-500.0
1500.0

الغلطة هنا مش في الحسبة. الغلطة إن التطبيق وِسِق في رقم جاي من المستخدم. وده اسمه Business Logic Flaw، ومن أخطر أنواع الثَّغَرات، لأن مفيش أداة أوتوماتيك بتلاقيها… محتاجة دماغ.

والقاعدة الدَّهَبية اللي هتمشي معاك في كل الكورسات: أي حاجة جاية من المستخدم ممكن تبقى خطيرة. والتطبيق لازم يتأكد منها في الـ server. ولو المدخل ما اتنَضَّفش… يبقى ده غالباً باب للهجوم. والحماية: التطبيق بيِضْمَن إن الخصم بين صفر وتلاتين بس، وأي حاجة غير كده ترفض. نشغّل…

main.py
def apply_discount(price, percent):
    if not 0 <= percent <= 30:
        return "rejected"
    return price - price * percent / 100

print(apply_discount(1000, 10))
print(apply_discount(1000, 150))
print(apply_discount(1000, -50))

المخرجات

900.0
rejected
rejected

دورك: فيه function للتحويل بين الحسابات، والمبلغ جاي من المستخدم. فكّر: إيه اللي ممكن يحصل لو حد حوّل مبلغ سالب؟ وصلّحها.

تمرين

اكتب transfer(balance, amount) ترفض أي amount أصغر من أو بيساوي صفر، أو أكبر من الـ balance.

الحل: نرفض الصفر والسالب، ونرفض أي مبلغ أكبر من الرصيد. نشغّل…

main.py
def transfer(balance, amount):
    if amount <= 0 or amount > balance:
        return "rejected"
    return balance - amount

print(transfer(500, 100))
print(transfer(500, -100))
print(transfer(500, 9000))

المخرجات

400
rejected
rejected

الدرس الجاي: المهاجم بيدوّر على الأبواب دي فين بالزبط؟ الـ Attack Surface. يلا بينا.

03 / دروس المسار (23)
  1. 01أهلاً بيك — يعني إيه أمن سيبراني؟
  2. 02الكمبيوتر بيشتغل إزاي من جُوّه؟
  3. 03نظام التشغيل: المدير اللي بيدير كل حاجة
  4. 04الملفات والـ Users والصلاحيات
  5. 05صفر وواحد: Binary و Hex و Encoding
  6. 06الشبكات والـ IP Address
  7. 07الـ Ports والـ Protocols
  8. 08الـ DNS والـ HTTP: إزاي الموقع بيفتح؟
  9. 09تطبيق الويب: Client و Server و Database
  10. 10مفاهيم الحماية: CIA Triad
  11. 11Vulnerability و Threat و Risk
  12. 12Authentication و Authorization
  13. 13Least Privilege و Defense in Depth
  14. 14الـ Hashing: إزاي نحفَظ الباسورد صح
  15. 15الـ Encryption: Symmetric و Asymmetric و HTTPS
  16. 16تفكير المهاجم: الثقة والمدخلاتانت هنا
  17. 17الـ Attack Surface والـ Attack Vectors
  18. 18الـ Social Engineering والـ Phishing
  19. 19أنواع المهاجمين، والأخلاق، والقانون
  20. 20أنواع الاختبار والـ Scope والـ Rules of Engagement
  21. 21مراحل اختبار الاختراق
  22. 22جهّز الـ Lab بتاعك
  23. 23مراجعة نهائية: سيناريو كامل، وإنت رايح فين