الأمن السيبراني الأدلة التقنية

التحديثات الأمنية Patch Management: ماذا تحدث ومتى؟

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

التحديثات الأمنية Patch Management: ماذا تحدث ومتى؟

إذا راجعت تقارير الاختراقات الكبيرة، ستلاحظ نمطاً يتكرر حتى يثير الدهشة: المهاجم لم يكتشف ثغرة جديدة مجهولة، وإنما استغل ثغرة معروفة لها إصلاح منشور منذ أسابيع أو أشهر، لكن الضحية لم تطبق الإصلاح. فشركة Equifax التي تسربت بيانات نحو 148 مليون شخص دخل مهاجموها من ثغرة في برنامج نشر إصلاحها قبل الاختراق بشهرين، لكن أحداً لم يحدث النظام القديم الذي يستخدمه، رغم أن وزارة الأمن الداخلي نبهتها إلى الثغرة في اليوم التالي لنشرها. وحادثة الفدية التي أصابت شركة التوزيع في Boeing التي ذكرناها سابقاً دخلت من ثغرة Citrix معروفة لها إصلاح. والنمط نفسه في حادثة بعد حادثة: الباب الذي دخل منه المهاجم كان مفتوحاً رغم وجود قفل جاهز لم يركب. فالمهاجم لا يحتاج أن يكون عبقرياً، وإنما يحتاج أن يجد نظاماً لم يحدث، وهذه مجرد مسألة وقت.

ولتفهم لماذا هذا النمط شائع إلى هذا الحد، تخيل اقتصاد المهاجم: اكتشاف ثغرة جديدة مجهولة صعب ومكلف ونادر، أما استغلال ثغرة معروفة لها إصلاح منشور فسهل ورخيص. فالأدوات الآلية تمسح الإنترنت كله بحثاً عن أنظمة تحمل ثغرات معروفة لم تحدث، وتستغلها تلقائياً. فأنت لا تواجه مهاجماً يستهدفك بالاسم، بل سكربتاً يمر على ملايين العناوين يجرب على كل منها ثغرات معروفة، فإن وجد نظامك غير محدث استغله دون أن يعرف من أنت. ولهذا فالتحديث ليس حماية من عدو خاص، بل خروج من دائرة الفريسة السهلة التي يصطادها هذا المسح الآلي.

ولهذا تعد إدارة التحديثات الأمنية Patch Management من أعلى ضوابط الأمن مردوداً: فهي تغلق الباب الذي يدخل منه أكثر المهاجمين، بأقل تكلفة. لكنها في الوقت نفسه من أكثر ما يؤجل، والسبب خوف مشروع: ماذا لو عطل التحديث خدمة تعمل؟ وهذا المقال يعالج الأمرين: كيف تعرف تحديثاتك المعلقة وترتبها بالأولوية، وكيف تطبقها بأمان دون أن تعطل الخدمة. وهو مقال في مرحلة حماية الأنظمة، وطبقة من طبقات الدفاع التي شرحناها في مقال الدفاع متعدد الطبقات (طبقة الأجهزة والأنظمة). ونبني مختبراً على حاوية Debian نرى فيه سكربت فحص يكشف التحديثات المعلقة ويميز الأمني منها، ثم نطبقها ونرى الحالة تتحول من خمس ثغرات إلى صفر. وسوف نناقش ما يلي:

  • لماذا التحديث من أعلى الضوابط مردوداً، ولماذا يخدعك رقم الإصدار.
  • دورة إدارة التحديثات: من معرفة التحديث إلى تطبيقه والتحقق منه.
  • كيف ترتب بالأولوية: التحديث الأمني والمكشوف والمستغل فعلاً أولاً.
  • تجربة عملية: سكربت فحص حالة التحديثات على حاوية Debian، قبل الترقية وبعدها.
  • كيف تطبق دون تعطيل: الاختبار، والنسخة الاحتياطية، ونافذة التحديث، والرجوع.
  • التحديث التلقائي: متى تفعله ومتى تحذر، وأخطاء شائعة، والجانب السعودي.

لماذا التحديث بهذه الأهمية؟

كل برنامج فيه أخطاء، وبعض هذه الأخطاء ثغرات أمنية. وحين يكتشف باحث ثغرة، يبلغ المورد، فيصدر المورد إصلاحاً (تحديثاً)، وينشر نشرة أمنية تصف الثغرة برقم CVE. وهنا تبدأ المشكلة: لحظة نشر الإصلاح، يصبح الوصف علنياً، فيعرف المهاجمون بالضبط ما الثغرة وأين، ويبنون أدوات لاستغلالها. فالنشرة التي تحميك إن طبقت الإصلاح تضرك إن لم تطبقه، لأنها خريطة للمهاجم. ولهذا يبدأ سباق لحظة نشر الإصلاح: من يحدث قبل أن يبني المهاجمون أدواتهم ينجو، ومن يتأخر يصبح هدفاً سهلاً معروف الثغرة. والصورة التالية تبين هذا السباق على خط زمني:

خط زمني: اكتشاف الثغرة، ثم نشر الإصلاح والنشرة الأمنية علناً، ثم ظهور أدوات الاستغلال، ثم موجة الهجمات الآلية، مع نافذة التعرض بين نشر الإصلاح وتطبيقك له
سباق التحديث: كلما طالت نافذة تعرضك بين نشر الإصلاح وتطبيقك له، زاد خطرك

ولاحظ في الصورة مفهوم «نافذة التعرض»: الفترة بين لحظة توفر الإصلاح ولحظة تطبيقك له. فطوال هذه النافذة، ثغرتك معروفة للعالم ولا إصلاح عندك، وكلما طالت زاد احتمال أن يصلك مهاجم. والمفارقة أن المهاجم يستفيد من نشر الإصلاح نفسه: فهو يدرس الفرق بين النسخة القديمة والمصلحة ليعرف بالضبط ما تغير، فيستنتج الثغرة ويبني أداة استغلالها، أحياناً خلال ساعات. ولهذا لا يكفي أن تحدث «يوماً ما»، بل أن تقصر هذه النافذة قدر ما تستطيع، خصوصاً للخوادم المكشوفة.

وقد شرحنا في مقال إدارة الثغرات كيف تعرف أن ثغرة جديدة تمس خوادمك، وهذا المقال يكمله: ماذا تفعل بعد أن تعرف، أي كيف تطبق الإصلاح. والفرق بينهما: إدارة الثغرات تجيب «هل أنا متأثر؟»، وإدارة التحديثات تجيب «كيف أصلح؟». وهما وجهان لعملة واحدة، لكن التطبيق هو الذي يحميك فعلاً، فمعرفة الثغرة دون إصلاحها لا تمنع اختراقاً.

ولماذا يعد التحديث من أعلى الضوابط مردوداً تحديداً؟ لأن علاقة التكلفة بالفائدة فيه تكاد لا تضاهى. فالإصلاح مكتوب ومختبر ومنشور من المورد مجاناً، ومسافتك عنه أمر واحد، والثغرة التي يسدها قد تكون باب اختراق كامل. قارن هذا بضوابط أخرى تحتاج شراء أداة، وإعدادها، ومن يراقبها. فلا شيء يعطيك حماية بهذا القدر مقابل هذا الجهد اليسير. ولهذا تضعه أطر الأمن مثل ضوابط CIS في مجموعتها الأولى (الحد الأدنى للجميع)، لأنه أساس لا غنى عنه قبل أي ضابط متقدم. ومن يصرف على أدوات متقدمة وخوادمه غير محدثة يبني طابقاً على أساس متصدع. والمقارنة الصريحة مفيدة: جدار حماية من الجيل التالي قد يكلف عشرات الآلاف سنوياً ويحتاج خبيراً يضبطه، بينما تطبيق إصلاح أمني منشور لا يكلف إلا دقائق من وقت مسؤول النظام، ومع ذلك يغلق بابا يدخل منه مهاجمون أكثر مما يمنعه كثير من الأدوات باهظة الثمن. فليست القيمة في ثمن الأداة، بل في إغلاق الطريق الأكثر استعمالاً للاختراق، وهذا ما يفعله التحديث بأرخص تكلفة ممكنة.

⚠️
خطأ شائع: الحكم على الأمان برقم الإصدار الظاهر. فتوزيعات Linux مثل Debian وUbuntu تطبق إصلاحات الأمان دون تغيير رقم الإصدار الرئيسي، وإنما تضيف لاحقة مثل +deb13u7. فقد ترى أن لديك curl 8.14.1 وتظنه محدثاً، بينما إصدارك 8.14.1-2+deb13u5 ينقصه إصلاح أمني موجود في +deb13u7. ولهذا لا تحكم على التحديث برقم الإصدار الرئيسي، بل بما تقوله أداة الحزم عن التحديثات المعلقة، كما سنرى في المختبر.

وقد يسأل القارئ: كم من الوقت أملك بين نشر الإصلاح ووصول المهاجم؟ لا رقم ثابتاً، لكن الاتجاه واضح: المدة تقصر عاماً بعد عام. فما كان يستغرق أسابيع ليظهر له استغلال صار أحياناً أياماً أو ساعات، لأن أدوات تحليل الفرق بين النسختين تتطور، ولأن استغلال الثغرات صار صناعة. والدليل العملي على ضيق الوقت أن وكالة CISA حين تضيف ثغرة إلى قائمة الثغرات المستغلة فعلاً KEV تعطي الجهات الفيدرالية مهلة قصيرة محددة لتطبيق الإصلاح، لا مفتوحة، لأنها تعامل الثغرة المستغلة على أنها حريق يطفأ الآن. فاجعل هذا منهجك: التحديث الأمني على خدمة مكشوفة ليس مهمة في قائمة أعمال الأسبوع، بل عمل يومك إن كانت الثغرة مستغلة.

ويحسن أن تتخلص من صورة ذهنية خاطئة شائعة: أن التحديث «يكسر» الأشياء دائماً فالأسلم تركه. الحقيقة أن إصلاحات الأمان في التوزيعات الناضجة مصممة خصيصاً لتغير أقل ما يمكن: تسد الثغرة دون تغيير السلوك أو الواجهات، ولهذا نادراً ما تعطل شيئاً، بخلاف ترقيات الإصدار الكبيرة التي تغير كثيراً. فالخوف الذي يؤجل التحديث الأمني مبني غالباً على تجربة مع ترقية كبيرة، لا مع إصلاح أمني صغير. وحين تفرق بين النوعين يهدأ القلق: طبق الإصلاح الأمني الصغير بثقة وبحذر معقول، وادخر الحيطة الكبرى للترقيات الكبيرة.

دورة إدارة التحديثات

إدارة التحديثات ليست خطوة تفعلها مرة، بل دورة مستمرة، لأن التحديثات تصدر باستمرار. والصورة التالية تبين خطواتها:

دورة من ست خطوات: اعرف ما صدر، رتب بالأولوية، اختبر في بيئة غير إنتاجية، طبق في نافذة مع نسخة احتياطية، تحقق أن الخدمة تعمل والثغرة أغلقت، راقب وعد للخطوة الأولى
دورة إدارة التحديثات: معرفة، فترتيب، فاختبار، فتطبيق، فتحقق، فمراقبة مستمرة
  • اعرف Know: ما صدر من تحديثات لما تشغله، وأيها أمني. يبدأ هذا من جرد دقيق لما تملكه (كما في مقال أول عشر خطوات)، ومن الاشتراك في نشرات الموردين والتوزيعات (مثل نشرات أمان Debian ومتتبع الثغرات فيها)، ومن أداة تفحص المعلق تلقائياً. فلا تستطيع أن تحدث ما لا تعرف أنه يحتاج تحديثاً، ولا أن تتابع ما لا تعرف أنك تشغله، فالجرد أساس هذه الخطوة.
  • رتب Prioritize: لا تطبق كل شيء بالترتيب نفسه، بل ابدأ بالأعلى خطراً: التحديث الأمني على خدمة مكشوفة للإنترنت ومستغلة فعلاً أولاً، كما سنفصل. فالترتيب ليس ترفاً: من يحاول تطبيق كل تحديث فوراً بالاختبار الكامل يرهق نفسه ويتأخر عن العاجل، ومن يطبق الكل دون ترتيب قد يصرف جهده على تحديث داخلي غير أمني بينما ثغرة مكشوفة مفتوحة.
  • اختبر Test: طبق التحديث أولاً في بيئة غير إنتاجية تشبه الإنتاج، لترى هل يعطل شيئاً قبل أن يصل إلى الخدمة الحية.
  • طبق Deploy: في نافذة زمنية محددة، بعد نسخة احتياطية سريعة، حتى إن ظهر عطل عدت إلى الوراء.
  • تحقق Verify: أن الخدمة تعمل بعد التحديث، وأن الثغرة أغلقت فعلاً (لا تحديثات معلقة لها).
  • راقب Monitor: عد إلى الخطوة الأولى، فالتحديث عمل لا ينتهي، كل أسبوع ثغرات وإصلاحات جديدة.

ولاحظ أن هذه الخطوات ليست خطاً مستقيماً يمشى مرة، بل حلقة تدور بلا توقف، ولهذا رسمناها دائرة. فكل أسبوع تصدر إصلاحات جديدة، فتعود إلى «اعرف» من جديد، ومعنى هذا أن قيمة إدارة التحديثات ليست في حملة واحدة مكثفة، بل في انتظام الدورة. والخطوة التي يهملها أكثر الناس هي الأخيرة، التحقق: يطبقون التحديث ويظنون العمل انتهى، دون أن يتأكدوا أن الخدمة ما زالت تعمل وأن الثغرة أغلقت فعلاً. وهذا خطر مزدوج: قد يكون التحديث عطل شيئاً ولا تدري حتى يشتكي عميل، أو قد يكون لم يطبق فعلاً (لأن الحزمة حدثت لكن الخدمة ما زالت تعمل بالنسخة القديمة في الذاكرة) فتظن نفسك محمياً وأنت لست كذلك. فاجعل التحقق جزءاً لا ينفصل عن التطبيق، لا خطوة اختيارية بعده.

كيف ترتب بالأولوية؟

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

  • هل هو تحديث أمني؟ التحديثات الأمنية (التي تسد ثغرة) قبل التحديثات الوظيفية (التي تضيف ميزة). والمختبر سيريك كيف تميز الأمني من العادي.
  • هل الخدمة مكشوفة للإنترنت؟ ثغرة في خدمة يصل إليها أي أحد من الإنترنت أخطر من ثغرة في خدمة داخلية خلف جدار، فابدأ بالمكشوف.
  • هل الثغرة مستغلة فعلاً؟ إذا كانت الثغرة في قائمة الثغرات المستغلة فعلاً KEV التي تنشرها وكالة CISA، فهي خطر عاجل، لأن مهاجمين يستغلونها الآن، فقدمها على غيرها مهما كانت درجتها.

والصورة التالية تجمع هذه الأسئلة الثلاثة وترتب التحديثات بناء عليها:

معادلة: أمني Security × مكشوف Exposure × مستغل Exploited تساوي أولويتك، وتحتها ثلاثة مستويات: عاجل الآن لتحديث أمني مكشوف مستغل، وهذا الأسبوع لتحديث أمني مكشوف غير مستغل، والدورة المنتظمة للتحديث الداخلي أو غير الأمني
ترتيب التحديثات: الخطر = شدة × تعرض × استغلال، فتبدأ بالعاجل

وقد يحتار المبتدئ في معنى «مكشوف للإنترنت» عملياً، فلنوضحه: الخدمة المكشوفة هي التي يستطيع جهاز على الإنترنت أن يصل إليها مباشرة، مثل خادم ويب على المنفذ 443، أو قاعدة بيانات تركت منفذها مفتوحاً للعالم بالخطأ. أما الخدمة الداخلية فلا يصل إليها إلا من هو داخل شبكتك. والفرق في الأولوية جوهري: ثغرة في خدمة مكشوفة يصل إليها المسح الآلي خلال ساعات من فتحها، فنافذة تعرضها تبدأ فوراً، بينما ثغرة في خدمة داخلية تحتاج المهاجم أن يكون قد اخترق شبكتك أولاً ليصل إليها. ولهذا ابدأ دائماً بجرد ما هو مكشوف فعلاً (بأداة مسح منافذ من الخارج مثلاً)، فهذا هو خط المواجهة الأول الذي يجب أن يكون محدثاً قبل كل شيء.

ولاحظ أن هذا هو المنطق نفسه الذي رتبنا به الثغرات في مقال إدارة الثغرات: الرقم العالي وحده لا يكفي، بل اجمعه مع التعرض والاستغلال. فتحديث أمني لثغرة بدرجة عالية في خدمة لا تشغلها أو غير مكشوفة أقل إلحاحاً من تحديث لثغرة أقل في خدمة مكشوفة ومستغلة. ويلخص دليل NIST لإدارة التحديثات SP 800-40 هذا المنهج: لا تعامل كل التحديثات سواء، بل رتبها بالمخاطر، وطبق العاجل منها بسرعة والبقية في دورة منتظمة. فالخادم المكشوف للإنترنت الذي فيه ثغرة مستغلة لا يحتمل نافذة أسبوعية، بل يحدث فوراً، ولو بمخاطرة تعطيل محتملة، لأن خطر بقائه مكشوفاً أكبر.

وقد يتساءل البعض: وماذا عن ثغرات اليوم صفر Zero-Day، التي تستغل قبل أن يصدر لها إصلاح؟ هذه حالة خاصة: لا تملك فيها تحديثاً تطبقه، لأن المورد نفسه لم يصلحها بعد. وهنا تظهر قيمة الدفاع متعدد الطبقات: فحتى لو كانت لديك ثغرة لا إصلاح لها، قد تحبسها طبقة أخرى (تقسيم الشبكة، كشف السلوك الغريب)، أو تخففها بإجراء مؤقت يوصي به المورد (إغلاق ميزة، تقييد وصول). لكن لحسن الحظ، ثغرات اليوم صفر نادرة نسبياً مقارنة بالثغرات المعروفة التي لها إصلاح، وأغلب ما يصيب الجهات ليس يوم صفر غامضاً، بل ثغرة قديمة لها إصلاح لم يطبق. فلا تنشغل بالنادر الصعب وتهمل الشائع السهل: أغلق أولاً ما لك عليه إصلاح، فهو أكثر خطرك الحقيقي.

ما الذي تحدثه؟ أنواع لا نوع واحد

قبل المختبر، لنوسع الصورة: «التحديث» ليس نظام التشغيل فقط، بل كل ما يشغل نظامك، وكثير منه ينساه الناس:

  • نظام التشغيل والحزم: ما تديره أداة الحزم (apt على Debian)، وهو الأسهل متابعة لأن أداة واحدة تراه كله، وهو ما سنختبره.
  • التطبيقات والمكتبات: تطبيق الويب ومكتباته (مثل حزم npm وpip)، وقواعد البيانات. وثغرة في مكتبة يستخدمها تطبيقك خطر مثل ثغرة في النظام، وأحياناً أخطر، لأن المكتبات كثيرة ويصعب تتبعها.
  • البرامج المثبتة يدوياً: ما ثبته خارج أداة الحزم (برنامج نزلته وبنيته)، لا تراه apt، فمسؤوليتك متابعة تحديثاته بنفسك. وهذا فخ شائع: يظن المرء أن apt upgrade حدث كل شيء بينما تركت برامجه اليدوية قديمة.
  • برامج الأجهزة Firmware: الراوتر، والطابعة، وأجهزة إنترنت الأشياء، والخوادم نفسها. وهذه من أكثر ما يهمل، وثغراتها خطيرة لأنها عميقة في الجهاز، وتحديثها يدوي غالباً.
  • الحاويات والصور Images: إن كنت تشغل حاويات، فصورتها الأساسية تحمل حزماً تحتاج تحديثاً، وإعادة بناء الصورة من أساس محدث جزء من إدارة التحديثات في بيئات الحاويات.

والدرس: جرد كل ما تشغله، وحدد لكل نوع كيف تتابع تحديثاته، فأداة الحزم لا تغطي إلا جزءاً. والثغرة قد تأتي من أي طبقة أهملتها، لا من النظام الذي تحرص على تحديثه فقط.

وأخطر هذه الأنواع في الخدمات الحديثة هو مكتبات التطبيق، لأن تطبيقاً بسيطاً قد يعتمد على مئات المكتبات غير المباشرة (مكتبة تعتمد على مكتبة تعتمد على أخرى)، وثغرة في أي واحدة منها ثغرة فيك. ولهذا ظهرت فكرة «قائمة مكونات البرمجيات» SBOM: جرد يحصر كل مكتبة يحملها تطبيقك مع إصداراتها، فإذا أعلن عن ثغرة في مكتبة بحثت في قائمتك: هل أستخدمها؟ وبأي إصدار؟ فتعرف في دقائق إن كنت متأثراً بدل أن تخمن. وهذا هو الجسر إلى مقال إدارة الثغرات: المكتبات تتغير أسرع من أن تتابعها بعينك، فتحتاج أداة تربط ما تشغله بما يعلن من ثغرات. والمبدأ الذي يربط كل الأنواع واحد: لا تحدث ما لا تعرف أنك تملكه، فالجرد الدقيق شرط التحديث الكامل، والفجوة في جردك فجوة في حمايتك.

تجربة عملية: افحص حالة التحديثات وأصلحها

لنرى هذا على نظام حقيقي، سوف نبني سكربت فحص يكشف التحديثات المعلقة ويميز الأمني منها، ونشغله على حاوية Debian في مختبرنا، قبل تطبيق التحديثات وبعدها. كل شيء على حاوية مؤقتة لا تمس شيئاً خارجها. ونستخدم Debian لأنه من أشهر توزيعات الخوادم، وأداة حزمه apt واضحة في التمييز بين التحديث العادي والأمني، لكن المبدأ نفسه ينطبق على أي توزيعة (yum أو dnf على أنظمة Red Hat، وغيرها): اعرف المعلق، ميز الأمني، طبق، تحقق.

تجهيز سيناريو فيه تحديثات معلقة

حاوية Debian جديدة تكون محدثة تماماً (صفر تحديثات معلقة)، فلنصنع سيناريو واقعياً: نثبت نسخة من حزمة curl من المستودع الأساسي (التي تنقصها إصلاحات أمنية)، فتظهر الإصلاحات الأمنية من مستودع الأمان كتحديثات معلقة. نشغل الحاوية أولاً:

docker run -d --name patch-lab debian:13-slim sleep 1200

ثم نعطل مستودع الأمان مؤقتاً، ونثبت نسخة curl الأساسية (الأقدم)، ثم نعيد تفعيل مستودع الأمان، فتظهر الإصلاحات الأمنية معلقة:

docker exec patch-lab sh -c '
  cp /etc/apt/sources.list.d/debian.sources /tmp/orig.sources
  # عطل مستودع الأمان مؤقتاً لرؤية النسخة الأساسية الأقدم
  awk "/debian-security/{sec=1} sec&&/Suites:/{print \"Suites: _off_\"; next} {print}" \
    /tmp/orig.sources > /etc/apt/sources.list.d/debian.sources
  apt-get update -qq; apt-get install -y -qq curl       # يثبت النسخة الأساسية deb13u5
  cp /tmp/orig.sources /etc/apt/sources.list.d/debian.sources  # أعد تفعيل الأمان
  apt-get update -qq'

الآن النظام فيه نسخة curl أقدم من المتوفر في مستودع الأمان، فنكتب سكربت الفحص.

سكربت فحص الحالة

احفظ الملف التالي باسم patch_status.sh:

#!/bin/sh
apt-get update -qq 2>/dev/null
echo "== installed packages: $(dpkg -l 2>/dev/null | grep -c '^ii') =="
PEND=$(apt-get -s upgrade 2>/dev/null | grep -c '^Inst')
echo "== pending updates: $PEND =="
if [ "$PEND" -gt 0 ]; then
  echo "-- which packages, and is it a security update? --"
  apt-get -s upgrade 2>/dev/null | awk '/^Inst/{print}' | while read _ pkg old new rest; do
    sec=$(echo "$rest" | grep -qi security && echo "SECURITY" || echo "normal ")
    printf "   [%s] %-18s %s -> %s\n" "$sec" "$pkg" "$(echo $old|tr -d '[]')" "$(echo $new|tr -d '()')"
  done
fi
SEC=$(apt-get -s upgrade 2>/dev/null | grep -i '^Inst' | grep -ic security)
echo "== scorecard: $SEC security / $PEND total pending =="

في السكربت أعلاه لاحظ التالي: نستخدم apt-get -s upgrade (الخيار -s للمحاكاة Simulation) فلا يغير شيئاً، وإنما يطبع ما كان سيحدثه. ونميز التحديث الأمني بأن سطره يذكر مستودع الأمان (كلمة security)، فهذا ما يفصل الإصلاح الأمني عن التحديث الوظيفي. نشغله (وفي Git Bash على Windows أضف MSYS_NO_PATHCONV=1):

docker cp patch_status.sh patch-lab:/patch_status.sh
docker exec patch-lab sh /patch_status.sh

والمخرج سوف يكون كما يلي:

== installed packages: 108 ==
== pending updates: 5 ==
-- which packages, and is it a security update? --
   [SECURITY] openssl            3.5.7-1~deb13u2 -> 3.5.7-1~deb13u3
   [SECURITY] ca-certificates    20250419 -> 20250419+deb13u1
   [SECURITY] libbrotli1         1.1.0-2+b7 -> 1.1.0-2+deb13u1
   [SECURITY] curl               8.14.1-2+deb13u5 -> 8.14.1-2+deb13u7
   [SECURITY] libcurl4t64        8.14.1-2+deb13u5 -> 8.14.1-2+deb13u7
== scorecard: 5 security / 5 total pending ==

والصورة التالية تجمع المقارنة التي سنراها بعد التطبيق:

بطاقتان: قبل بخمس تحديثات أمنية معلقة بالأحمر (openssl وca-certificates وlibbrotli1 وcurl وlibcurl4t64)، وبعد apt upgrade بصفر تحديثات معلقة بالأخضر مع درع
حالة التحديثات قبل الترقية وبعدها: خمس ثغرات أمنية لها إصلاح منشور، إلى صفر

في المخرج أعلاه لاحظ التالي:

  • خمسة تحديثات معلقة كلها أمنية (SECURITY)، أي أن لكل واحد منها ثغرة لها إصلاح منشور في مستودع الأمان لم يطبق بعد. ولاحظ أن تثبيت curl الأقدم جر معه حزم مرتبطة (libcurl4t64)، وأن المكتبات الأساسية (openssl التي يعتمد عليها التشفير) ضمنها، وهي من أهم ما يحدث.
  • لاحظ أرقام الإصدار: curl من deb13u5 إلى deb13u7، والرقم الرئيسي 8.14.1 لم يتغير. فلو حكمت على الأمان بالرقم الرئيسي لظننت نظامك محدثاً، بينما ينقصه إصلاحان أمنيان. هذا هو بالضبط ما حذرنا منه: احكم بأداة الحزم لا بالرقم الظاهر.
  • السكربت لم يغير شيئاً، فهو قراءة فقط بفضل الخيار -s. وهذا مهم: يمكنك تشغيله دورياً على خوادمك ليعطيك بطاقة حالة دون أي خطر، فهو طبقة كشف لحالة التحديث.

التطبيق والتحقق

الآن نطبق التحديثات (خطوة الدفع)، ثم نعيد الفحص (خطوة التحقق):

docker exec patch-lab apt-get upgrade -y
docker exec patch-lab sh /patch_status.sh
== installed packages: 108 ==
== pending updates: 0 ==
== scorecard: 0 security / 0 total pending ==

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

ولاحظ كيف يطبق المختبر دورة إدارة التحديثات كاملة في صورة مصغرة: عرفنا (السكربت كشف المعلق)، ورتبنا (كلها أمنية فعاجلة)، وطبقنا (apt upgrade)، وتحققنا (أعدنا الفحص فوجدناه صفراً). وما ينقص في الإنتاج هو الاختبار في بيئة غير إنتاجية والنسخة الاحتياطية قبل التطبيق، وهو ما سنناقشه الآن، لأن حاويتنا لا تخدم أحداً فلم تحتجه. وبعد التجربة ننظف المختبر:

docker rm -f patch-lab

ولتنقل هذا إلى خوادمك الحقيقية، لا تحتاج أكثر من وضع patch_status.sh على كل خادم وتشغيله دورياً (مهمة مجدولة أسبوعية مثلاً تجمع نتائجه في مكان واحد). فتحصل على لوحة بسيطة ترى فيها كل خوادمك وكم تحديثاً أمنياً معلقاً على كل منها، وهي أول خطوة نحو إدارة تحديثات منظمة: لا تستطيع أن تدير ما لا تقيسه. والجميل أن السكربت قراءة فقط لا يغير شيئاً، فتشغيله على خادم إنتاج آمن تماماً، ويعطيك الصورة قبل أن تقرر متى وكيف تطبق. فابدأ بالقياس قبل أن تقلق من التطبيق: كثير من الخوادم التي يظنها أصحابها محدثة تكشف عند أول فحص عن تحديثات أمنية معلقة منذ أسابيع، والمعرفة وحدها نصف الحل.

كيف تطبق دون أن تعطل الخدمة؟

في المختبر كان التطبيق بسيطاً لأن الحاوية لا تخدم أحداً. لكن على خادم إنتاج يخدم عملاء، الخوف من التعطيل مشروع، ويعالج بأربعة أشياء:

  • الاختبار أولاً: طبق التحديث في بيئة غير إنتاجية تشبه الإنتاج قبل أن يصل إلى الخدمة الحية. فإن عطل شيئاً، اكتشفته هناك لا على عملائك. وهذا يحتاج بيئة اختبار، وهي استثمار يستحق لأي خدمة مهمة. ولا تحتاج بيئة اختبار كاملة الحجم: حاوية أو جهاز افتراضي يشغل النسخة نفسها من البرنامج يكفي لاكتشاف أغلب مشكلات التحديث. والمهم أن تشبه بيئة الاختبار الإنتاج في ما يهم (النسخ، الإعدادات)، فالاختبار على بيئة مختلفة قد يطمئنك خطأ ثم يفاجئك الإنتاج.
  • النسخة الاحتياطية أو اللقطة: خذ نسخة أو لقطة Snapshot للنظام قبل التحديث، فإن ظهر عطل بعده عدت إلى الحالة السابقة في دقائق. والنسخة قبل التحديث هي شبكة أمانك، فلا تطبق تحديثاً مهماً على خادم حي دون أن تملك طريق رجوع.
  • نافذة التحديث Maintenance Window: حدد وقتاً منخفض الحمل (ليلاً أو عطلة) تطبق فيه التحديثات، وأعلمه مسبقاً، فإن حدث توقف قصير كان في أقل وقت تأثيراً. والخوادم خلف موزع حمل يمكن تحديثها واحداً واحداً دون توقف كامل.
  • خطة الرجوع Rollback: اعرف قبل أن تبدأ كيف تتراجع إن فشل التحديث: الاستعادة من النسخة، أو تثبيت النسخة السابقة من الحزمة. فالخطة التي تعرفها قبل العطل تنقذك، والتي ترتجلها وقته قد تزيد الضرر.

وهذه الأربعة ليست عبئاً ثقيلاً كما قد تبدو، بل تتدرج بحسب أهمية الخدمة. فالجهاز الشخصي يكفيه التحديث التلقائي بلا بيئة اختبار ولا نافذة. والخدمة الصغيرة التي يتحملها توقف دقائق تكفيها لقطة قبل التحديث ونافذة ليلية. ولا تحتاج كل هذه الطبقات إلا الخدمة الحرجة التي لا تحتمل توقفاً ولا عطلاً. فلا تجعل كلفة «الطريقة المثلى» ذريعة لترك التحديث أصلاً: ابدأ بما يناسب خدمتك، فلقطة بسيطة قبل apt upgrade في وقت هادئ خير بمراحل من تأجيل لا ينتهي. والقاعدة أن مستوى الحيطة يتبع مستوى الخطر، لا أن ينتظر التحديث حتى تتوفر أرقى بيئة اختبار.

وللخوادم المتعددة خلف موزع حمل، هناك طريقة أنيقة للتحديث دون أي توقف، تسمى الترقية التدريجية Rolling Update، تبينها الصورة التالية:

موزع حمل يوجه الطلبات إلى ثلاثة خوادم: الأول محدث ويعمل، والثاني يحدث الآن وخارج الخدمة فلا يوجه إليه الموزع طلبات، والثالث ينتظر دوره، والخدمة تبقى تعمل طوال الوقت
الترقية التدريجية: تحدث الخوادم واحداً واحداً خلف موزع الحمل دون أن يشعر العميل بتوقف

والفكرة بسيطة: تخرج خادماً واحداً من موزع الحمل (فيتوقف الموزع عن إرسال طلبات إليه)، فتحدثه وتختبره دون أن يمس عميلاً، ثم تعيده إلى الخدمة، ثم تنتقل إلى الذي يليه. وطوال العملية تبقى الخدمة تعمل، لأن الموزع يوجه الطلبات إلى الخوادم العاملة فقط. وهذا يحتاج أن يكون تطبيقك بلا حالة Stateless وخلف موزع حمل، وهو تصميم شرحناه في مرحلة تصميم الأنظمة. أما الخادم الواحد الذي لا موزع أمامه، فلا بديل عن نافذة توقف قصيرة مع نسخة احتياطية، لكن حتى هذا خير من ترك الثغرة مفتوحة.

وثمة حالة خاصة تستحق الذكر: الحاويات والصور. فإن كانت خدمتك تعمل في حاوية، فأنت لا تحدث داخل الحاوية الجارية عادة (لأنها تعاد من الصورة عند كل تشغيل)، بل تحدث الصورة الأساسية ثم تبني صورتك من جديد وتعيد نشر الحاوية من الصورة المحدثة. فالترقية التدريجية في عالم الحاويات تعني استبدال الحاويات القديمة بأخرى من الصورة الجديدة واحدة واحدة، وهو ما تفعله منصات التنسيق تلقائياً. والدرس الأمني هنا: أعد بناء صورك دورياً حتى لو لم يتغير كودك، لأن الصورة الأساسية التي بنيت عليها قبل أشهر تحمل الآن حزماً لها إصلاحات أمنية، وصورة لا يعاد بناؤها تتقادم بصمت كما يتقادم خادم لا يحدث.

والموازنة التي يجب أن تفهمها: خطر أن يعطل التحديث الخدمة ساعة، مقابل خطر أن تبقى ثغرة مفتوحة أسابيع يستغلها مهاجم. والأول تتعافى منه بالاستعادة، والثاني قد يكلفك بياناتك كلها. فالكفة تميل بوضوح نحو التحديث، والخطأ الأكبر ليس أن يعطل تحديث خدمة، بل أن تؤجل التحديث حتى «وقت مناسب» لا يأتي أبداً بينما المهاجم لا ينتظر. ولذلك: أجل التحديث للاختبار، لا للخوف.

التحديث التلقائي: متى تفعله ومتى تحذر؟

كثير مما سبق يبدو عملاً يدوياً متكرراً، وهنا يأتي سؤال طبيعي: لماذا لا نترك النظام يحدث نفسه؟ وهذا ممكن ومفيد، لكنه قرار يوازن بين سرعة الإغلاق وخطر المفاجأة، فلنفصله. هل تفعل التحديث التلقائي؟ الإجابة تعتمد على ما تحدثه. فأجهزة الموظفين والبرامج التي لا تخشى عليها، فعل عليها التحديث التلقائي بلا تردد، فالفائدة (إغلاق الثغرات بسرعة) تفوق خطر عطل نادر على جهاز واحد. وأنظمة Debian وUbuntu تقدم حزمة unattended-upgrades التي تطبق تحديثات الأمان تلقائياً، وهي خيار ممتاز للأجهزة والخوادم البسيطة.

ولتفعيل التحديث التلقائي لإصلاحات الأمن فقط على Debian أو Ubuntu، تثبت الحزمة وتعدها لتطبق تحديثات مستودع الأمان دون غيرها، فتحصل على أمان سريع دون مفاجآت التحديثات الكبيرة. وتختار هل تعيد التشغيل تلقائياً بعد التحديثات التي تحتاج إعادة تشغيل (مثل تحديث النواة Kernel)، أم تؤجلها لنافذة. والقاعدة هنا الموازنة: إعادة التشغيل التلقائي تضمن أن الإصلاح فعال فوراً لكنها قد توقف الخدمة لحظة، وتأجيلها يبقي الخدمة لكنها تترك النظام يعمل بنواة قديمة حتى تعيد التشغيل. فاختر بحسب حساسية التوقف عندك.

ومن المفيد أن تعرف أن التحديث التلقائي لا يلغي الحاجة إلى المراقبة، بل ينقلها: فبدل أن تراقب «هل طبقت التحديثات؟» تراقب «هل التطبيق التلقائي يعمل فعلاً، وهل كسر شيئاً؟». فقد تتعطل آلية التحديث التلقائي بصمت (قرص ممتلئ، مستودع لا يصل إليه، إعداد خاطئ) فتظن نظامك يحدث نفسه وهو جامد منذ أشهر. ولهذا حتى مع التلقائي، شغل سكربت الفحص الذي بنيناه دورياً: إن وجدته يبلغ عن تحديثات أمنية معلقة لم تطبق، فالآلية التلقائية معطلة وتحتاج إصلاحاً. فالثقة في الأتمتة حسنة، لكن التحقق منها أحسن.

أما الخوادم الحساسة التي يعتمد عليها عملك، فالتلقائي الكامل قد يفاجئك بتحديث يعطل خدمة في أسوأ وقت. فيها الأفضل التحديث التلقائي لإصلاحات الأمن فقط (التي نادراً ما تعطل)، مع نافذة مراقبة، وترك التحديثات الكبيرة لدورة مختبرة. والقاعدة: كلما زادت أهمية الخدمة وحساسية التوقف، زاد الاختبار قبل التطبيق، لكن لا تجعل هذا ذريعة لترك الخادم بلا تحديث شهوراً. فحتى الخادم الأهم يحتاج دورة تحديث منتظمة، وإنما بحذر أكبر، لا بإهمال.

أخطاء شائعة Common Mistakes

  • الحكم برقم الإصدار الرئيسي: رأينا أن 8.14.1 قد ينقصه إصلاح أمني في اللاحقة +deb13u7. احكم بأداة الحزم لا بالرقم الظاهر.
  • تأجيل التحديث خوفاً من التعطيل: الخوف يعالج بالاختبار والنسخة الاحتياطية، لا بالتأجيل. الثغرة المفتوحة أخطر من عطل تتعافى منه.
  • التطبيق دون نسخة احتياطية: تحديث على خادم حي دون طريق رجوع مخاطرة. خذ لقطة أو نسخة أولاً.
  • نسيان ما لا تديره أداة الحزم: التطبيقات المثبتة يدوياً، والإضافات، وبرامج الأجهزة Firmware، والراوتر، كلها تحتاج تحديثاً ولا تظهر في apt. اجرد كل ما تشغله وتابع تحديثاته.
  • تحديث جزء ونسيان جزء: تحديث التطبيق ونسيان نظام التشغيل أو العكس، أو خادم ونسيان خادم. الجرد الكامل يمنع الفجوات.
  • إهمال الاشتراك في النشرات: من لا يتابع نشرات الموردين والتوزيعات يعرف بالثغرة متأخراً. اشترك في نشرات ما تشغله.
  • عدم التحقق بعد التحديث: تطبيق التحديث دون التأكد أن الخدمة تعمل وأن الثغرة أغلقت فعلاً. أعد الفحص بعد كل تطبيق.
  • نسيان إعادة التشغيل: بعض التحديثات (كتحديث النواة أو مكتبة مشتركة) لا تصبح فعالة إلا بعد إعادة تشغيل الخدمة أو النظام. فقد تحدث الحزمة لكن العملية القديمة ما زالت تعمل بالكود القديم المصاب حتى تعيد التشغيل. تحقق أن التحديث فعل فعلاً.
  • تجميع الديون: ترك التحديثات تتراكم شهوراً ثم محاولة تطبيقها كلها دفعة واحدة، فيصعب الاختبار ويكثر احتمال التعطيل. التحديث المنتظم المتدرج أسهل وأأمن من الدفعة الكبيرة المؤجلة.

الجانب السعودي

الضوابط الأساسية للأمن السيبراني ECC تطلب إدارة التحديثات صراحة في أكثر من مكون. ففي حماية الأنظمة (المكون 2-3) تذكر إدارة حزم التحديثات والإصلاحات للأنظمة والتطبيقات والأجهزة ضمن الحد الأدنى من المتطلبات. وفي إدارة الثغرات (المكون 2-10) تطلب معالجة الثغرات حسب تصنيفها والمخاطر المرتبطة بها، وإدارة التحديثات لمعالجتها، والتأكد من سلامة هذه التحديثات وفعاليتها باختبارها في بيئة غير إنتاجية قبل تطبيقها. ولاحظ أن الضوابط تذكر صراحة الاختبار في بيئة غير إنتاجية، وهو بالضبط ما شرحناه، فالمعيار نفسه يوازن بين سرعة الإصلاح وأمان التطبيق. وشرح قراءة الضوابط في مقال الضوابط الأساسية NCA ECC.

والمعنى العملي لهذا أن إدارة التحديثات ليست مجرد ممارسة جيدة اختيارية في السياق السعودي، بل متطلب موثق تسأل عنه الجهة في مراجعتها لالتزامها بالضوابط. ولهذا يفيدك أن تحول ما شرحناه إلى إجراء مكتوب: سياسة تحدد دورية الفحص، وتصنيف التحديثات بالأولوية، واشتراط الاختبار في بيئة غير إنتاجية قبل التطبيق على الأنظمة الحساسة، وسجلاً يثبت ما طبق ومتى. فبهذا تحقق المتطلب وتحمي أنظمتك في آن، لأن الضابط لم يوضع ليملأ ورقة، بل لأنه يغلق فعلاً الباب الذي يدخل منه أكثر المهاجمين. ولاحظ الانسجام: ما يطلبه المعيار هو نفسه ما يمليه المنطق الأمني، فالامتثال هنا ليس عبئاً زائداً على الأمن، بل صياغة له.

إلى أين بعد هذا المقال؟

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

دليلإدارة الثغرات Vulnerability Management: هل سيرفرك متأثر؟كيف تعرف خلال ساعات أن ثغرة جديدة تمس سيرفراتك، ولماذا يخدعك رقم الإصدار، وكيف ترتب الإصلاح وتتأكد أنه تم فعلاً.دليلتقوية السيرفر Hardening وقياسها مع Lynis ومعايير CISيواجه مسؤول نظم طلب المستشفى بدليل تقوية، فيقيس خادمه بـ Lynis وCIS ويقويه ويعيد القياس، ويكشف مفاجأة تخفض الدرجة.دليلالنسخ الاحتياطي بقاعدة 3-2-1 واختبار الاستعادةكيف تحدد كم بيانات تقبل أن تخسر، وتبني نسخاً لا يستطيع المخترق حذفها، وتتأكد أنك تستطيع استعادتها فعلاً.دليلCrowdSec: اكتشاف هجمات التخمين وحظرها جماعياًتتعرض سيرفرات مسؤول النظم لتخمين دائم، فيبني مختبراً يرى فيه CrowdSec يكتشف الهجوم ويصدر قرار حظر ينفذه الجدار الناري.

اجعلها عملية لا بطولة

أهم ما يميز إدارة التحديثات الناجحة أنها عملية منتظمة لا جهد بطولي متقطع. فالجهة التي تحدث بحماس شهراً ثم تنسى ستة أشهر ليست أفضل حالاً ممن لا يحدث أصلاً، لأن نافذة التعرض تتراكم في أشهر الإهمال. والصحيح أن تبني إيقاعاً: فحص أسبوعي لما هو معلق (بسكربت مثل الذي بنيناه)، وتطبيق فوري للعاجل المكشوف، ونافذة دورية ثابتة (كل أسبوعين مثلاً) للبقية بعد اختبار. فالإيقاع الثابت يحول التحديث من قرار تتخذه كل مرة (فتؤجله) إلى عادة تجري تلقائياً.

وفي المؤسسة، وثق هذا الإيقاع: من مسؤول عن متابعة النشرات، ومن يقرر الأولوية، ومن يطبق، ومن يتحقق، وما نافذة التحديث المعلنة. فالعملية الموثقة تعمل حتى لو غاب شخص، والعملية المرتجلة تنهار عند أول انشغال. واحتفظ بسجل لما حدثته ومتى، فهو دليل الامتثال الذي يطلبه المدقق، وهو أيضاً ما يساعدك على معرفة ما فاتك. ولا تنس أن تقيس: كم يوماً تمر بين نشر إصلاح أمني وتطبيقك له (نافذة تعرضك المتوسطة)؟ فهذا الرقم مؤشر صحة إدارة تحديثاتك، وتقليله هدف واضح تعمل عليه.

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

الخلاصة

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

  • التحديث من أعلى الضوابط مردوداً، لأنه يغلق الباب الذي يدخل منه أكثر المهاجمين بأقل تكلفة.
  • لا تحكم على الأمان برقم الإصدار الرئيسي: الإصلاحات الأمنية تأتي في لاحقة مثل +deb13u7.
  • رتب بالأولوية: التحديث الأمني على خدمة مكشوفة ومستغلة فعلاً أولاً.
  • رأينا بالتجربة سكربت فحص يكشف خمس ثغرات أمنية معلقة ويميزها، ثم أغلقناها بأمر واحد.
  • طبق دون تعطيل: اختبر أولاً، وخذ نسخة احتياطية، واعمل في نافذة، واعرف طريق الرجوع.
  • أجل التحديث للاختبار لا للخوف: الثغرة المفتوحة أخطر من عطل تتعافى منه.

تدريب عملي Practice

  • أعد بناء المختبر، ثم زد في السكربت عموداً يطبع مصدر كل تحديث (المستودع)، لتفرق بين تحديثات الأمان والتحديثات العادية بوضوح أكبر.
  • على خادم حقيقي تملكه، شغل أمر apt-get -s upgrade (قراءة فقط)، وعد تحديثاتك المعلقة الأمنية، واكتب خطة: أيها تطبق اليوم (مكشوف) وأيها في نافذة الأسبوع.
  • فعل unattended-upgrades على جهاز تجريبي، واقرأ إعداده، وحدد: هل يطبق كل التحديثات أم الأمنية فقط، وهل يعيد التشغيل تلقائياً؟

سجل التحديثات

  • أكتوبر 2026: كتابة المقال، وبناء مختبر فحص حالة التحديثات على debian:13-slim (من 5 تحديثات أمنية معلقة إلى صفر بعد الترقية)، ثم إزالته.
نشرة عرب رووت | ArabRoot

معرفة تستحق مكاناً في بريدك.

مقالات مختارة وأدوات مفيدة وأفكار لمشروعك القادم، في رسالة واحدة كل أسبوع.

يمكنك إلغاء الاشتراك متى شئت. الخصوصية

تم استلام طلبك. افتح بريدك واضغط رابط التأكيد لإتمام الاشتراك.