تفكير المهاجم: الثقة والمدخلات
إزاي المهاجم بيبص للنظام بشكل مختلف: بيسأل بيثق في إيه، وإيه اللي هيحصل لو المدخل ما كانش متوقع.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
أهلاً بيك. لحد دلوقتي كنا بنتعلم إزاي الحاجات بتشتغل. من النهاردة هنتعلم حاجة أهم: إزاي الحاجات دي ممكن تتكسر. وده أول درس في تفكير المهاجم.
المطوّر لما بيكتب برنامج، بيفكر: المستخدم هيعمل إيه؟ بس المهاجم بيفكر بشكل تاني خالص: البرنامج ده بيِسِق في إيه؟ مين يقدر يدخّل بيانات؟ وإيه اللي هيحصل لو دخّلت حاجة محدش اتوقعها؟ المطوّر بيختبر الـ Happy Path، يعني الطريق الطبيعي. المهاجم بيختبر الأطراف: رقم سالب، رقم كبير قوي، خانة فاضية، حروف غريبة، أو حاجة مكتوبة في المكان الغلط. نشوف مِسال. متجر عنده function بتعمل خصم على السعر. المطوّر اختبرها بخصم عشرة في المِيّة، واشتغلت. نشغّل… تسعمية. تمام.
def apply_discount(price, percent):
return price - price * percent / 100
print(apply_discount(1000, 10))المخرجات
900.0
دلوقتي نفكر زي المهاجم. الخصم ده جاي من المستخدم… يعني أنا أقدر أغيّره. أجرّب مِيّة في المِيّة، ومِيّة وخمسين، وسالب خمسين. نشغّل… بقى ببلاش، وبعدين الموقع بقى بيدفع لي أنا! والخصم السالب زوّد السعر.
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. ولو المدخل ما اتنَضَّفش… يبقى ده غالباً باب للهجوم. والحماية: التطبيق بيِضْمَن إن الخصم بين صفر وتلاتين بس، وأي حاجة غير كده ترفض. نشغّل…
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.
الحل: نرفض الصفر والسالب، ونرفض أي مبلغ أكبر من الرصيد. نشغّل…
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)
- 01أهلاً بيك — يعني إيه أمن سيبراني؟
- 02الكمبيوتر بيشتغل إزاي من جُوّه؟
- 03نظام التشغيل: المدير اللي بيدير كل حاجة
- 04الملفات والـ Users والصلاحيات
- 05صفر وواحد: Binary و Hex و Encoding
- 06الشبكات والـ IP Address
- 07الـ Ports والـ Protocols
- 08الـ DNS والـ HTTP: إزاي الموقع بيفتح؟
- 09تطبيق الويب: Client و Server و Database
- 10مفاهيم الحماية: CIA Triad
- 11Vulnerability و Threat و Risk
- 12Authentication و Authorization
- 13Least Privilege و Defense in Depth
- 14الـ Hashing: إزاي نحفَظ الباسورد صح
- 15الـ Encryption: Symmetric و Asymmetric و HTTPS
- 16تفكير المهاجم: الثقة والمدخلاتانت هنا
- 17الـ Attack Surface والـ Attack Vectors
- 18الـ Social Engineering والـ Phishing
- 19أنواع المهاجمين، والأخلاق، والقانون
- 20أنواع الاختبار والـ Scope والـ Rules of Engagement
- 21مراحل اختبار الاختراق
- 22جهّز الـ Lab بتاعك
- 23مراجعة نهائية: سيناريو كامل، وإنت رايح فين