من وقت الفحص إلى وقت الاستخدام
في تطوير البرمجيات ، يعتبر وقت التحقق إلى وقت الاستخدام ( TOCTOU أو TOCTTOU أو TOC/TOU ) فئة من أخطاء البرمجيات الناتجة عن حالة سباق تتضمن التحقق من حالة جزء من النظام (مثل بيانات اعتماد الأمان) واستخدام نتائج هذا التحقق.
تُعدّ حالات التزامن TOCTOU شائعة في أنظمة يونكس بين العمليات على نظام الملفات ، [ 1 ] ولكنها قد تحدث في سياقات أخرى، بما في ذلك المقابس المحلية والاستخدام غير السليم لمعاملات قواعد البيانات . في أوائل التسعينيات، احتوت أداة البريد الإلكتروني في نظام BSD 4.3 يونكس على حالة تزامن قابلة للاستغلال للملفات المؤقتة لأنها كانت تستخدم الدالة mktemp()[ 2 ] . [ 3 ] احتوت الإصدارات الأولى من OpenSSH على حالة تزامن قابلة للاستغلال لمقابس نطاق يونكس . [ 4 ] ولا تزال هذه الحالات تُشكّل مشكلة في الأنظمة الحديثة؛ ففي عام 2019، سمحت حالة تزامن TOCTOU في Docker بالوصول إلى نظام ملفات النظام المضيف بصلاحيات المستخدم الجذر. [ 5 ] وفي مسابقة Pwn2Own لعام 2023 في فانكوفر، تمكّن فريق من المخترقين من اختراق البوابة في سيارة Tesla Model 3 مُحدّثة باستخدام هذه الثغرة. [ 6 ] في عام 2025، تسبب خلل في نظام إدارة أسماء النطاقات (DNS) الخاص بخدمات أمازون السحابية ( AWS ) لقاعدة بيانات DynamoDB في انقطاع كبير للخدمة في منطقة شرق الولايات المتحدة 1. وقد نجم هذا الخلل عن تطبيق خطط DNS قديمة بعد تحديث الخطط القديمة، مما أدى إلى حذف عناوين IP الخاصة بنقاط النهاية وتعطل الخدمة على نطاق واسع. [ 7 ]
وصف
يكون البرنامج عرضة لحالة سباق TOCTOU إذا كان:
- يتحقق من بعض الخصائص أو يتحقق من صحة بعض البيانات، ثم
- يتخذ إجراءً ما بناءً على هذه المعلومات؛
وفيما يلي تفاصيل الحالة:
- من الممكن أن تُنفَّذ برامج أخرى تعمل بالتزامن مع هذا البرنامج بين الخطوتين 1 و2 (العملية ليست ذرية )، و
- يمكن لبرامج أخرى تغيير الخاصية أو البيانات (وجود تحكم خارجي).
ثم، إذا قامت عملية أخرى بالفعل بتغيير الخاصية بين الخطوة 1 والخطوة 2، فسيتم تنفيذ الخطوة 2 بناءً على معلومات قديمة، مما قد يؤدي إلى عواقب غير مقصودة.
إذا كان البرنامج قيد التشغيل يتمتع بامتيازات، وكان بإمكان عملية غير مميزة التأثير على الخاصية، فإنه يمكنه تنفيذ مهام مميزة معينة بشكل فعال.
على وجه الخصوص، إذا كانت الخاصية تتحقق مما إذا كان مسموحًا ببعض الإجراءات، وبالتالي تنفذ حدودًا أمنية، مثل فحص الأذونات، فيمكن تجاوز فحص الأذونات هذا تمامًا، ويمكن تنفيذ مجموعة متنوعة من الإجراءات المميزة بهذه الطريقة ( تصعيد الامتيازات ).
أمثلة
في نظام يونكس ، يحتوي كود C التالي ، عند استخدامه في setuidبرنامج، على خطأ TOCTOU:
إذا كانت نتيجة الوصول إلى الملف ( W_OK ) لا تساوي صفرًا ،خروج ( 1 )؛}fd = open ( "file" , O_WRONLY );اكتب ( fd ، المخزن المؤقت ، حجم ( المخزن المؤقت ))؛هنا، يهدف الوصول إلى التحقق مما إذا كان المستخدم الحقيقي الذي قام بتشغيل setuidالبرنامج مسموحًا له عادةً بكتابة الملف (أي، accessيتحقق من معرف المستخدم الحقيقي بدلاً من معرف المستخدم الفعال ).
هذا التزامن عرضة للهجوم:
| ضحية | مهاجم |
|---|---|
إذا كانت نتيجة الوصول إلى الملف ( W_OK ) لا تساوي صفرًا ،خروج ( 1 )؛} | |
بعد التحقق من الوصول، وقبل الفتح، يقوم المهاجم باستبدال ملف كلمة مرور يونكس fileبرابط رمزي/etc/passwd :symlink ( "/etc/passwd" , "file" ); | |
fd = open ( "file" , O_WRONLY );اكتب ( fd ، المخزن المؤقت ، حجم ( المخزن المؤقت ))؛/etc/passwd |
في هذا المثال، يمكن للمهاجم استغلال حالة التزامن بين المعاملين accessلخداع openالضحية وحمله setuidعلى استبدال أحد المدخلات في قاعدة بيانات كلمات مرور النظام. يمكن استخدام حالات التزامن هذه لرفع مستوى الصلاحيات والحصول على صلاحيات إدارية على الجهاز.
على الرغم من أن هذا التسلسل من الأحداث يتطلب توقيتًا دقيقًا، إلا أنه من الممكن للمهاجم أن يرتب مثل هذه الظروف دون صعوبة كبيرة.
والنتيجة هي أن التطبيقات لا يمكنها أن تفترض أن الحالة التي يديرها نظام التشغيل (في هذه الحالة مساحة اسم نظام الملفات) لن تتغير بين استدعاءات النظام.
توقيت TOCTOU بشكل موثوق
يتطلب استغلال ثغرة TOCTOU توقيتًا دقيقًا لضمان تداخل عمليات المهاجم مع عمليات الضحية بشكل صحيح. في المثال أعلاه، يجب على المهاجم تنفيذ symlinkاستدعاء النظام بدقة بين عمليتي ` accessand` open. أما بالنسبة للهجوم الأكثر عمومية، فيجب جدولة تنفيذ المهاجم بعد كل عملية يقوم بها الضحية، وهو ما يُعرف أيضًا باسم "التنفيذ خطوة بخطوة" للضحية.
في حالة أداة البريد الإلكتروني لنظام BSD 4.3 mktemp()، [ 2 ] يستطيع المهاجم ببساطة تشغيل أداة البريد الإلكتروني باستمرار في عملية واحدة، والاستمرار في تخمين أسماء الملفات المؤقتة وإنشاء روابط رمزية في عملية أخرى. وعادةً ما ينجح الهجوم في أقل من دقيقة.
تشمل تقنيات تنفيذ برنامج الضحية خطوة بخطوة متاهات نظام الملفات [ 8 ] وهجمات التعقيد الخوارزمي [ 9 ] . في كلتا الحالتين، يتلاعب المهاجم بحالة نظام التشغيل للتحكم في جدولة برنامج الضحية.
تُجبر متاهات نظام الملفات الضحية على قراءة مدخل دليل غير موجود في ذاكرة التخزين المؤقت لنظام التشغيل، فيُدخل نظام التشغيل الضحية في وضع السكون أثناء قراءة الدليل من القرص. أما هجمات التعقيد الخوارزمي فتُجبر الضحية على استهلاك كامل وقت جدولة المهام داخل استدعاء نظام واحد لاجتياز جدول تجزئة أسماء الملفات المخزنة مؤقتًا في نواة النظام. يقوم المهاجم بإنشاء عدد كبير جدًا من الملفات بأسماء تُجزأ بنفس قيمة الملف الذي ستبحث عنه الضحية.
الوقاية من سرطان القولون والمستقيم
على الرغم من بساطة المفهوم، يصعب تجنب حالات التزامن في TOCTOU والقضاء عليها. إحدى التقنيات الشائعة هي استخدام معالجة الأخطاء بدلاً من التحقق المسبق، وفقًا لمبدأ "من الأسهل طلب المغفرة من طلب الإذن" ، بدلاً من مبدأ "النظر قبل الإقدام". في هذه الحالة، لا يوجد فحص، ويُشار إلى عدم صحة الافتراضات بإرجاع خطأ. [ 10 ]
في سياق حالات التزامن غير المتوقعة (TOCTOU) في نظام الملفات، يتمثل التحدي الأساسي في ضمان عدم إمكانية تغيير نظام الملفات بين استدعاءين للنظام. في عام 2004، نُشرت نتيجة تُثبت استحالة حدوث ذلك، مُبينةً عدم وجود تقنية قابلة للتطبيق ومُحددة لتجنب حالات التزامن غير المتوقعة (TOCTOU) عند استخدام استدعاءات نظام الملفات accessفي يونكس open. [ 11 ]
نظراً لهذه النتيجة غير الممكنة، فقد اقترح الباحثون مكتبات لتتبع واصفات الملفات وضمان صحتها. [ 12 ]
يقترح مجتمع البحث حلاً بديلاً يتمثل في تبني أنظمة يونكس للمعاملات في نظام الملفات أو نواة نظام التشغيل. توفر المعاملات تجريدًا للتحكم في التزامن لنظام التشغيل، ويمكن استخدامها لمنع حدوث تضارب TOCTOU. مع أن نواة يونكس المستخدمة في الإنتاج لم تعتمد المعاملات بعد، فقد طُوّرت نماذج أولية بحثية لإثبات المفهوم لنظام لينكس، بما في ذلك نظام ملفات Valor [ 13 ] ونواة TxOS [ 14 ] . أضافت مايكروسوفت ويندوز المعاملات إلى نظام ملفات NTFS الخاص بها [ 15 ] ، لكن مايكروسوفت لا تشجع على استخدامها، وأشارت إلى أنها قد تُزال في إصدار مستقبلي من ويندوز [ 16 ] .
يعد قفل الملفات أسلوبًا شائعًا لمنع حالات التزامن لملف واحد، ولكنه لا يمتد إلى مساحة اسم نظام الملفات والبيانات الوصفية الأخرى، كما أن القفل لا يعمل بشكل جيد مع أنظمة الملفات الشبكية، ولا يمكنه منع حالات التزامن TOCTOU.
بالنسبة setuidللملفات الثنائية، يتمثل أحد الحلول الممكنة في استخدام seteuid()استدعاء النظام لتغيير المستخدم الفعلي ثم تنفيذ الاستدعاء. قد تُسبب open()الاختلافات بين أنظمة التشغيل مشاكل. [ 17 ]setuid()
العواقب في العالم الحقيقي
تسببت ثغرات TOCTOU في انقطاعات كبيرة في الأنظمة واسعة النطاق. ففي أكتوبر 2025، شهدت AWS عطلاً كبيراً نتيجة لحالة تضارب في نظام إدارة DNS الخاص بـ DynamoDB. وتضمن الحادث تطبيق خطط DNS قديمة بعد تنظيف الخطط الأحدث، مما أدى إلى حذف عناوين IP الخاصة بنقاط النهاية وفشل الخدمة على نطاق واسع. [ 18 ]
انظر أيضاً
مراجع
- ↑ وي، جينبينغ؛ بو، كالتون (ديسمبر 2005). "ثغرات TOCTTOU في أنظمة الملفات بنمط يونكس: دراسة تشريحية" . USENIX . تم الاسترجاع في 14 يناير 2019 .
- 1 2 "mktemp(3)" . صفحة دليل لينكس . 2017-09-15.
- ^ شانجد تشو(周尚德) (10/1991). "ثغرة أمنية في يونكس" .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ أتشيسون، ستيف (1999-11-04). "الأسئلة الشائعة حول بروتوكول SSH (Secure Shell)" . مؤرشف من الأصل بتاريخ 2017-02-13.
- ↑ "ثغرة في Docker تسمح بالوصول الجذر إلى نظام ملفات المضيف" . Decipher . Duo Security. 28 مايو 2019. تاريخ الاسترجاع: 29 مايو 2019 .
- ↑ "اختراق أنظمة ويندوز 11، وتيسلا، وأوبونتو، وماك أو إس في مؤتمر Pwn2Own 2023" . موقع BleepingComputer . تاريخ الاطلاع: 24 مارس 2023 .
- ↑ "حدث خدمة AWS في منطقة شرق الولايات المتحدة 1" . خدمات أمازون السحابية . 27-10-2025 . تاريخ الاسترجاع: 30-10-2025 .
- ↑ بوريسوف، نيكيتا؛ جونسون، روب؛ ساستري، نافين؛ فاغنر، ديفيد (أغسطس 2005). "التلاعب بنتائج السباقات من أجل المتعة والربح: كيفية استغلال ثغرة atime". وقائع المؤتمر الرابع عشر لندوة أمن USENIX . 14. بالتيمور، ماريلاند: جمعية USENIX: 303-314 . CiteSeerX 10.1.1.117.7757 .
- ↑ شيانغ كاي؛ يووي غوي؛ جونسون، روب (مايو 2009). "استغلال ثغرات التزامن في نظام ملفات يونكس عبر هجمات التعقيد الخوارزمي" (ملف PDF) . المؤتمر الثلاثون لجمعية مهندسي الكهرباء والإلكترونيات (IEEE) حول الأمن والخصوصية لعام 2009. بيركلي، كاليفورنيا: جمعية الحاسبات التابعة لجمعية مهندسي الكهرباء والإلكترونيات (IEEE). الصفحات 27-41 . doi : 10.1109/SP.2009.10 . ISBN 978-0-7695-3633-0. S2CID 6393789 . مؤرشف من الأصل (PDF) بتاريخ 2021-05-18.
- ↑ مارتيلي، أليكس (2006). "الفصل 6: الاستثناءات". بايثون باختصار ( الطبعة الثانية). أورايلي ميديا . ص 134. ISBN 978-0-596-10046-9.
- ↑ دين، درو؛ هو، آلان ج. (أغسطس 2004). "إصلاح سباقات التزامن للمتعة والربح: كيفية استخدام access(2)". وقائع ندوة USENIX الأمنية الثالثة عشرة . سان دييغو، كاليفورنيا: 195-206 . CiteSeerX 10.1.1.83.8647 .
- ↑ تسافرير، دان؛ هيرتز، تومر؛ فاغنر، ديفيد؛ دا سيلفا، ديلما (يونيو 2008). "منع هجمات تضارب الملفات بشكل قابل للنقل باستخدام حل مسار وضع المستخدم" . تقرير فني RC24572، مركز أبحاث IBM TJ Watson . يوركتاون هايتس، نيويورك.
- ↑ سبيلان، ريتشارد ب.؛ جايكواد، ساشين؛ تشيني، مانجوناث؛ زادوك، إيريز (24-27 فبراير 2009). "تمكين الوصول إلى الملفات للمعاملات عبر ملحقات نواة خفيفة الوزن" (ملف PDF) . المؤتمر السابع لـ USENIX حول تقنيات الملفات والتخزين (FAST 2009) . سان فرانسيسكو، كاليفورنيا.
- ↑ بورتر، دونالد إي.؛ هوفمان، أوين إس.؛ روسباخ، كريستوفر جيه.؛ بن، ألكسندر؛ ويتشل، إيميت (11-14 أكتوبر 2009). "معاملات نظام التشغيل" (ملف PDF) . وقائع ندوة ACM الثانية والعشرين حول مبادئ أنظمة التشغيل (SOSP '09) . بيج سكاي، مونتانا.
- ↑ روسينوفيتش، مارك؛ سولومون، ديفيد أ. أساسيات نظام ويندوز . مطبعة مايكروسوفت . رقم ISBN 978-0735648739.
- ↑ "بدائل استخدام نظام الملفات NTFS للمعاملات" . شبكة مطوري مايكروسوفت . مؤرشف من الأصل في 29 سبتمبر 2022. تم الاطلاع عليه في 10 ديسمبر 2015 .
- ↑ هاو تشين؛ فاغنر، ديفيد؛ دين، درو (12-05-2002). "تبسيط فهم السيتويد" (ملف PDF) .
- ↑ "حدث خدمة AWS في منطقة شرق الولايات المتحدة 1" . خدمات أمازون السحابية . 27-10-2025 . تاريخ الاسترجاع: 30-10-2025 .
للمزيد من القراءة
- بيشوب، مات؛ ديلجر، مايكل (1996). "التحقق من حالات التزامن في الوصول إلى الملفات" (ملف PDF) . أنظمة الحوسبة . الصفحات 131-152 .
- تسافرير، دان؛ هيرتز، تومر؛ فاغنر، ديفيد؛ دا سيلفا، ديلما (2008). "حل مشكلات تضارب الملفات TOCTTOU بشكل قابل للنقل باستخدام تضخيم الصلابة" (ملف PDF) . وقائع المؤتمر السادس لـ USENIX حول تقنيات الملفات والتخزين (FAST '08)، سان خوسيه (كاليفورنيا)، 26-29 فبراير 2008. الصفحات 189-206 .
- ثغرات أمنية في الحاسوب
- أخطاء برمجية
